| Index: src/x64/full-codegen-x64.cc
|
| ===================================================================
|
| --- src/x64/full-codegen-x64.cc (revision 15486)
|
| +++ src/x64/full-codegen-x64.cc (working copy)
|
| @@ -43,6 +43,8 @@
|
| namespace internal {
|
|
|
| #define __ ACCESS_MASM(masm_)
|
| +#define __k __
|
| +#define __n __
|
|
|
|
|
| class JumpPatchSite BASE_EMBEDDED {
|
| @@ -140,8 +142,13 @@
|
| Label ok;
|
| __ testq(rcx, rcx);
|
| __ j(zero, &ok, Label::kNear);
|
| +#ifndef V8_TARGET_ARCH_X32
|
| // +1 for return address.
|
| int receiver_offset = (info->scope()->num_parameters() + 1) * kPointerSize;
|
| +#else
|
| + int receiver_offset = 1 * kHWRegSize +
|
| + info->scope()->num_parameters() * kPointerSize;
|
| +#endif
|
| __ LoadRoot(kScratchRegister, Heap::kUndefinedValueRootIndex);
|
| __ movq(Operand(rsp, receiver_offset), kScratchRegister);
|
| __ bind(&ok);
|
| @@ -320,9 +327,15 @@
|
| reset_value = Smi::kMaxValue;
|
| }
|
| __ movq(rbx, profiling_counter_, RelocInfo::EMBEDDED_OBJECT);
|
| +#ifndef V8_TARGET_ARCH_X32
|
| __ movq(kScratchRegister,
|
| reinterpret_cast<uint64_t>(Smi::FromInt(reset_value)),
|
| RelocInfo::NONE64);
|
| +#else
|
| + __ movl(kScratchRegister,
|
| + reinterpret_cast<uint32_t>(Smi::FromInt(reset_value)),
|
| + RelocInfo::NONE32);
|
| +#endif
|
| __ movq(FieldOperand(rbx, Cell::kValueOffset), kScratchRegister);
|
| }
|
|
|
| @@ -415,7 +428,11 @@
|
| // Add padding that will be overwritten by a debugger breakpoint. We
|
| // have just generated at least 7 bytes: "movq rsp, rbp; pop rbp; ret k"
|
| // (3 + 1 + 3).
|
| +#ifndef V8_TARGET_ARCH_X32
|
| const int kPadding = Assembler::kJSReturnSequenceLength - 7;
|
| +#else
|
| + const int kPadding = Assembler::kJSReturnSequenceLength - 6;
|
| +#endif
|
| for (int i = 0; i < kPadding; ++i) {
|
| masm_->int3();
|
| }
|
| @@ -680,7 +697,12 @@
|
| int offset = -var->index() * kPointerSize;
|
| // Adjust by a (parameter or local) base offset.
|
| if (var->IsParameter()) {
|
| +#ifndef V8_TARGET_ARCH_X32
|
| offset += (info_->scope()->num_parameters() + 1) * kPointerSize;
|
| +#else
|
| + offset += 2 * kHWRegSize +
|
| + (info_->scope()->num_parameters() - 1) * kPointerSize;
|
| +#endif
|
| } else {
|
| offset += JavaScriptFrameConstants::kLocal0Offset;
|
| }
|
| @@ -2134,9 +2156,16 @@
|
|
|
| // Push holes for arguments to generator function.
|
| __ movq(rdx, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset));
|
| +#ifndef V8_TARGET_ARCH_X32
|
| __ movsxlq(rdx,
|
| FieldOperand(rdx,
|
| SharedFunctionInfo::kFormalParameterCountOffset));
|
| +#else
|
| + __ movl(rdx,
|
| + FieldOperand(rdx,
|
| + SharedFunctionInfo::kFormalParameterCountOffset));
|
| + __ SmiToInteger32(rdx, rdx);
|
| +#endif
|
| __ LoadRoot(rcx, Heap::kTheHoleValueRootIndex);
|
| Label push_argument_holes, push_frame;
|
| __ bind(&push_argument_holes);
|
| @@ -2286,7 +2315,11 @@
|
| __ SmiShiftArithmeticRight(rax, rdx, rcx);
|
| break;
|
| case Token::SHL:
|
| +#ifndef V8_TARGET_ARCH_X32
|
| __ SmiShiftLeft(rax, rdx, rcx);
|
| +#else
|
| + __ SmiShiftLeft(rax, rdx, rcx, &stub_call);
|
| +#endif
|
| break;
|
| case Token::SHR:
|
| __ SmiShiftLogicalRight(rax, rdx, rcx, &stub_call);
|
| @@ -2640,7 +2673,12 @@
|
| }
|
|
|
| // Push the receiver of the enclosing function and do runtime call.
|
| +#ifndef V8_TARGET_ARCH_X32
|
| __ push(Operand(rbp, (2 + info_->scope()->num_parameters()) * kPointerSize));
|
| +#else
|
| + __ Push(Operand(rbp, 2 * kHWRegSize +
|
| + info_->scope()->num_parameters() * kPointerSize));
|
| +#endif
|
|
|
| // Push the language mode.
|
| __ Push(Smi::FromInt(language_mode()));
|
| @@ -3380,8 +3418,8 @@
|
| }
|
| __ bind(&runtime);
|
| __ PrepareCallCFunction(2);
|
| - __ movq(arg_reg_1, object);
|
| - __ movq(arg_reg_2, index, RelocInfo::NONE64);
|
| + __ movq(arg_reg_1, object);
|
| + __n movq(arg_reg_2, index, RelocInfo::NONE64);
|
| __ CallCFunction(ExternalReference::get_date_field_function(isolate()), 2);
|
| __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
|
| __ jmp(&done);
|
| @@ -4136,7 +4174,7 @@
|
| __ movl(index, array_length_operand);
|
| __ lea(elements, FieldOperand(elements, index, times_pointer_size,
|
| FixedArray::kHeaderSize));
|
| - __ neg(index);
|
| + __k neg(index);
|
|
|
| // Replace separator string with pointer to its first character, and
|
| // make scratch be its length.
|
| @@ -4172,7 +4210,7 @@
|
| __ lea(string,
|
| FieldOperand(string, SeqOneByteString::kHeaderSize));
|
| __ CopyBytes(result_pos, string, string_length);
|
| - __ incq(index);
|
| + __k incq(index);
|
| __ j(not_equal, &loop_3); // Loop while (index < 0).
|
|
|
| __ bind(&done);
|
| @@ -4820,7 +4858,7 @@
|
| ASSERT(!result_register().is(rdx));
|
| ASSERT(!result_register().is(rcx));
|
| // Cook return address on top of stack (smi encoded Code* delta)
|
| - __ pop(rdx);
|
| + __k pop(rdx);
|
| __ Move(rcx, masm_->CodeObject());
|
| __ subq(rdx, rcx);
|
| __ Integer32ToSmi(rdx, rdx);
|
| @@ -4908,6 +4946,8 @@
|
| }
|
|
|
|
|
| +#undef __n
|
| +#undef __k
|
| #undef __
|
|
|
| } } // namespace v8::internal
|
|
|