| Index: src/x64/code-stubs-x64.cc
|
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
|
| index 779e77edc0dc2120eb2d78bee3cf68481f37a784..b678bed05239f814c02321f13b1a84f167af9c8b 100644
|
| --- a/src/x64/code-stubs-x64.cc
|
| +++ b/src/x64/code-stubs-x64.cc
|
| @@ -490,7 +490,7 @@ void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) {
|
| rax.is(descriptor->register_params_[param_count - 1]));
|
| // Push arguments
|
| for (int i = 0; i < param_count; ++i) {
|
| - __ push(descriptor->register_params_[i]);
|
| + __ Push(descriptor->register_params_[i]);
|
| }
|
| ExternalReference miss = descriptor->miss_handler();
|
| __ CallExternalReference(miss, descriptor->register_param_count_);
|
| @@ -541,7 +541,7 @@ void DoubleToIStub::Generate(MacroAssembler* masm) {
|
| int double_offset = offset();
|
|
|
| // Account for return address and saved regs if input is rsp.
|
| - if (input_reg.is(rsp)) double_offset += 3 * kPointerSize;
|
| + if (input_reg.is(rsp)) double_offset += 3 * kRegisterSize;
|
|
|
| MemOperand mantissa_operand(MemOperand(input_reg, double_offset));
|
| MemOperand exponent_operand(MemOperand(input_reg,
|
| @@ -561,14 +561,14 @@ void DoubleToIStub::Generate(MacroAssembler* masm) {
|
| // is the return register, then save the temp register we use in its stead
|
| // for the result.
|
| Register save_reg = final_result_reg.is(rcx) ? rax : rcx;
|
| - __ push(scratch1);
|
| - __ push(save_reg);
|
| + __ pushq(scratch1);
|
| + __ pushq(save_reg);
|
|
|
| bool stash_exponent_copy = !input_reg.is(rsp);
|
| __ movl(scratch1, mantissa_operand);
|
| __ movsd(xmm0, mantissa_operand);
|
| __ movl(rcx, exponent_operand);
|
| - if (stash_exponent_copy) __ push(rcx);
|
| + if (stash_exponent_copy) __ pushq(rcx);
|
|
|
| __ andl(rcx, Immediate(HeapNumber::kExponentMask));
|
| __ shrl(rcx, Immediate(HeapNumber::kExponentShift));
|
| @@ -609,8 +609,8 @@ void DoubleToIStub::Generate(MacroAssembler* masm) {
|
| ASSERT(final_result_reg.is(rcx));
|
| __ movl(final_result_reg, result_reg);
|
| }
|
| - __ pop(save_reg);
|
| - __ pop(scratch1);
|
| + __ popq(save_reg);
|
| + __ popq(scratch1);
|
| __ ret(0);
|
| }
|
|
|
| @@ -983,7 +983,7 @@ void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
|
| // by calling the runtime system.
|
| __ bind(&slow);
|
| __ PopReturnAddressTo(rbx);
|
| - __ push(rdx);
|
| + __ Push(rdx);
|
| __ PushReturnAddressFrom(rbx);
|
| __ TailCallRuntime(Runtime::kGetArgumentsProperty, 1, 1);
|
| }
|
| @@ -2064,8 +2064,8 @@ void ICCompareStub::GenerateGeneric(MacroAssembler* masm) {
|
|
|
| // Push arguments below the return address to prepare jump to builtin.
|
| __ PopReturnAddressTo(rcx);
|
| - __ push(rdx);
|
| - __ push(rax);
|
| + __ Push(rdx);
|
| + __ Push(rax);
|
|
|
| // Figure out which native to call and setup the arguments.
|
| Builtins::JavaScript builtin;
|
| @@ -2154,19 +2154,19 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
|
|
|
| // Arguments register must be smi-tagged to call out.
|
| __ Integer32ToSmi(rax, rax);
|
| - __ push(rax);
|
| - __ push(rdi);
|
| + __ Push(rax);
|
| + __ Push(rdi);
|
| __ Integer32ToSmi(rdx, rdx);
|
| - __ push(rdx);
|
| - __ push(rbx);
|
| + __ Push(rdx);
|
| + __ Push(rbx);
|
|
|
| CreateAllocationSiteStub create_stub;
|
| __ CallStub(&create_stub);
|
|
|
| - __ pop(rbx);
|
| - __ pop(rdx);
|
| - __ pop(rdi);
|
| - __ pop(rax);
|
| + __ Pop(rbx);
|
| + __ Pop(rdx);
|
| + __ Pop(rdi);
|
| + __ Pop(rax);
|
| __ SmiToInteger32(rax, rax);
|
| }
|
| __ jmp(&done_no_smi_convert);
|
| @@ -2176,14 +2176,14 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
|
| rdi);
|
|
|
| // We won't need rdx or rbx anymore, just save rdi
|
| - __ push(rdi);
|
| - __ push(rbx);
|
| - __ push(rdx);
|
| + __ Push(rdi);
|
| + __ Push(rbx);
|
| + __ Push(rdx);
|
| __ RecordWriteArray(rbx, rdi, rdx, kDontSaveFPRegs,
|
| EMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
|
| - __ pop(rdx);
|
| - __ pop(rbx);
|
| - __ pop(rdi);
|
| + __ Pop(rdx);
|
| + __ Pop(rbx);
|
| + __ Pop(rdi);
|
|
|
| __ bind(&done);
|
| __ Integer32ToSmi(rdx, rdx);
|
| @@ -2266,7 +2266,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
|
| __ CmpInstanceType(rcx, JS_FUNCTION_PROXY_TYPE);
|
| __ j(not_equal, &non_function);
|
| __ PopReturnAddressTo(rcx);
|
| - __ push(rdi); // put proxy as additional argument under return address
|
| + __ Push(rdi); // put proxy as additional argument under return address
|
| __ PushReturnAddressFrom(rcx);
|
| __ Set(rax, argc_ + 1);
|
| __ Set(rbx, 0);
|
| @@ -2293,10 +2293,10 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
|
| __ bind(&wrap);
|
| // Wrap the receiver and patch it back onto the stack.
|
| { FrameScope frame_scope(masm, StackFrame::INTERNAL);
|
| - __ push(rdi);
|
| - __ push(rax);
|
| + __ Push(rdi);
|
| + __ Push(rax);
|
| __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION);
|
| - __ pop(rdi);
|
| + __ Pop(rdi);
|
| }
|
| __ movp(args.GetReceiverOperand(), rax);
|
| __ jmp(&cont);
|
| @@ -2633,7 +2633,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| { // NOLINT. Scope block confuses linter.
|
| MacroAssembler::NoRootArrayScope uninitialized_root_register(masm);
|
| // Set up frame.
|
| - __ push(rbp);
|
| + __ pushq(rbp);
|
| __ movp(rbp, rsp);
|
|
|
| // Push the stack frame type marker twice.
|
| @@ -2642,18 +2642,18 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| // platform. It's free to use at this point.
|
| // Cannot use smi-register for loading yet.
|
| __ Move(kScratchRegister, Smi::FromInt(marker), Assembler::RelocInfoNone());
|
| - __ push(kScratchRegister); // context slot
|
| - __ push(kScratchRegister); // function slot
|
| - // Save callee-saved registers (X64/Win64 calling conventions).
|
| - __ push(r12);
|
| - __ push(r13);
|
| - __ push(r14);
|
| - __ push(r15);
|
| + __ Push(kScratchRegister); // context slot
|
| + __ Push(kScratchRegister); // function slot
|
| + // Save callee-saved registers (X64/X32/Win64 calling conventions).
|
| + __ pushq(r12);
|
| + __ pushq(r13);
|
| + __ pushq(r14);
|
| + __ pushq(r15);
|
| #ifdef _WIN64
|
| - __ push(rdi); // Only callee save in Win64 ABI, argument in AMD64 ABI.
|
| - __ push(rsi); // Only callee save in Win64 ABI, argument in AMD64 ABI.
|
| + __ pushq(rdi); // Only callee save in Win64 ABI, argument in AMD64 ABI.
|
| + __ pushq(rsi); // Only callee save in Win64 ABI, argument in AMD64 ABI.
|
| #endif
|
| - __ push(rbx);
|
| + __ pushq(rbx);
|
|
|
| #ifdef _WIN64
|
| // On Win64 XMM6-XMM15 are callee-save
|
| @@ -2682,7 +2682,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| ExternalReference c_entry_fp(Isolate::kCEntryFPAddress, isolate);
|
| {
|
| Operand c_entry_fp_operand = masm->ExternalOperand(c_entry_fp);
|
| - __ push(c_entry_fp_operand);
|
| + __ Push(c_entry_fp_operand);
|
| }
|
|
|
| // If this is the outermost JS call, set js_entry_sp value.
|
| @@ -2722,7 +2722,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| __ Store(pending_exception, rax);
|
|
|
| // Fake a receiver (NULL).
|
| - __ push(Immediate(0)); // receiver
|
| + __ Push(Immediate(0)); // receiver
|
|
|
| // Invoke the function by calling through JS entry trampoline builtin and
|
| // pop the faked function when we return. We load the address from an
|
| @@ -2745,7 +2745,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
|
|
| __ bind(&exit);
|
| // Check if the current stack frame is marked as the outermost JS frame.
|
| - __ pop(rbx);
|
| + __ Pop(rbx);
|
| __ Cmp(rbx, Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME));
|
| __ j(not_equal, ¬_outermost_js_2);
|
| __ Move(kScratchRegister, js_entry_sp);
|
| @@ -2754,7 +2754,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
|
|
| // Restore the top frame descriptor from the stack.
|
| { Operand c_entry_fp_operand = masm->ExternalOperand(c_entry_fp);
|
| - __ pop(c_entry_fp_operand);
|
| + __ Pop(c_entry_fp_operand);
|
| }
|
|
|
| // Restore callee-saved registers (X64 conventions).
|
| @@ -2773,20 +2773,20 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| __ addq(rsp, Immediate(EntryFrameConstants::kXMMRegistersBlockSize));
|
| #endif
|
|
|
| - __ pop(rbx);
|
| + __ popq(rbx);
|
| #ifdef _WIN64
|
| // Callee save on in Win64 ABI, arguments/volatile in AMD64 ABI.
|
| - __ pop(rsi);
|
| - __ pop(rdi);
|
| + __ popq(rsi);
|
| + __ popq(rdi);
|
| #endif
|
| - __ pop(r15);
|
| - __ pop(r14);
|
| - __ pop(r13);
|
| - __ pop(r12);
|
| + __ popq(r15);
|
| + __ popq(r14);
|
| + __ popq(r13);
|
| + __ popq(r12);
|
| __ addq(rsp, Immediate(2 * kPointerSize)); // remove markers
|
|
|
| // Restore frame pointer and return.
|
| - __ pop(rbp);
|
| + __ popq(rbp);
|
| __ ret(0);
|
| }
|
|
|
| @@ -2951,7 +2951,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
| if (HasCallSiteInlineCheck()) {
|
| // Remove extra value from the stack.
|
| __ PopReturnAddressTo(rcx);
|
| - __ pop(rax);
|
| + __ Pop(rax);
|
| __ PushReturnAddressFrom(rcx);
|
| }
|
| __ InvokeBuiltin(Builtins::INSTANCE_OF, JUMP_FUNCTION);
|
| @@ -3016,8 +3016,8 @@ void StringCharCodeAtGenerator::GenerateSlow(
|
| index_not_number_,
|
| DONT_DO_SMI_CHECK);
|
| call_helper.BeforeCall(masm);
|
| - __ push(object_);
|
| - __ push(index_); // Consumed by runtime conversion function.
|
| + __ Push(object_);
|
| + __ Push(index_); // Consumed by runtime conversion function.
|
| if (index_flags_ == STRING_INDEX_IS_NUMBER) {
|
| __ CallRuntime(Runtime::kNumberToIntegerMapMinusZero, 1);
|
| } else {
|
| @@ -3030,7 +3030,7 @@ void StringCharCodeAtGenerator::GenerateSlow(
|
| // have a chance to overwrite it.
|
| __ movp(index_, rax);
|
| }
|
| - __ pop(object_);
|
| + __ Pop(object_);
|
| // Reload the instance type.
|
| __ movp(result_, FieldOperand(object_, HeapObject::kMapOffset));
|
| __ movzxbl(result_, FieldOperand(result_, Map::kInstanceTypeOffset));
|
| @@ -3045,9 +3045,9 @@ void StringCharCodeAtGenerator::GenerateSlow(
|
| // is too complex (e.g., when the string needs to be flattened).
|
| __ bind(&call_runtime_);
|
| call_helper.BeforeCall(masm);
|
| - __ push(object_);
|
| + __ Push(object_);
|
| __ Integer32ToSmi(index_, index_);
|
| - __ push(index_);
|
| + __ Push(index_);
|
| __ CallRuntime(Runtime::kStringCharCodeAt, 2);
|
| if (!result_.is(rax)) {
|
| __ movp(result_, rax);
|
| @@ -3085,7 +3085,7 @@ void StringCharFromCodeGenerator::GenerateSlow(
|
|
|
| __ bind(&slow_case_);
|
| call_helper.BeforeCall(masm);
|
| - __ push(code_);
|
| + __ Push(code_);
|
| __ CallRuntime(Runtime::kCharFromCode, 1);
|
| if (!result_.is(rax)) {
|
| __ movp(result_, rax);
|
| @@ -4109,8 +4109,8 @@ void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
|
| // Handle more complex cases in runtime.
|
| __ bind(&runtime);
|
| __ PopReturnAddressTo(tmp1);
|
| - __ push(left);
|
| - __ push(right);
|
| + __ Push(left);
|
| + __ Push(right);
|
| __ PushReturnAddressFrom(tmp1);
|
| if (equality) {
|
| __ TailCallRuntime(Runtime::kStringEquals, 2, 1);
|
| @@ -4170,17 +4170,17 @@ void ICCompareStub::GenerateMiss(MacroAssembler* masm) {
|
| ExternalReference(IC_Utility(IC::kCompareIC_Miss), masm->isolate());
|
|
|
| FrameScope scope(masm, StackFrame::INTERNAL);
|
| - __ push(rdx);
|
| - __ push(rax);
|
| - __ push(rdx);
|
| - __ push(rax);
|
| + __ Push(rdx);
|
| + __ Push(rax);
|
| + __ Push(rdx);
|
| + __ Push(rax);
|
| __ Push(Smi::FromInt(op_));
|
| __ CallExternalReference(miss, 3);
|
|
|
| // Compute the entry point of the rewritten stub.
|
| __ lea(rdi, FieldOperand(rax, Code::kHeaderSize));
|
| - __ pop(rax);
|
| - __ pop(rdx);
|
| + __ Pop(rax);
|
| + __ Pop(rdx);
|
| }
|
|
|
| // Do a tail call to the rewritten stub.
|
| @@ -4242,7 +4242,7 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
|
|
|
| NameDictionaryLookupStub stub(properties, r0, r0, NEGATIVE_LOOKUP);
|
| __ Push(Handle<Object>(name));
|
| - __ push(Immediate(name->Hash()));
|
| + __ Push(Immediate(name->Hash()));
|
| __ CallStub(&stub);
|
| __ testq(r0, r0);
|
| __ j(not_zero, miss);
|
| @@ -4291,10 +4291,10 @@ void NameDictionaryLookupStub::GeneratePositiveLookup(MacroAssembler* masm,
|
| }
|
|
|
| NameDictionaryLookupStub stub(elements, r0, r1, POSITIVE_LOOKUP);
|
| - __ push(name);
|
| + __ Push(name);
|
| __ movl(r0, FieldOperand(name, Name::kHashFieldOffset));
|
| __ shrl(r0, Immediate(Name::kHashShift));
|
| - __ push(r0);
|
| + __ Push(r0);
|
| __ CallStub(&stub);
|
|
|
| __ testq(r0, r0);
|
| @@ -4324,7 +4324,7 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
|
|
|
| __ SmiToInteger32(scratch, FieldOperand(dictionary_, kCapacityOffset));
|
| __ decl(scratch);
|
| - __ push(scratch);
|
| + __ Push(scratch);
|
|
|
| // If names of slots in range from 1 to kProbes - 1 for the hash value are
|
| // not equal to the name and kProbes-th slot is not used (its name is the
|
| @@ -4573,13 +4573,13 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
|
|
|
| // We need an extra register for this, so we push the object register
|
| // temporarily.
|
| - __ push(regs_.object());
|
| + __ Push(regs_.object());
|
| __ EnsureNotWhite(regs_.scratch0(), // The value.
|
| regs_.scratch1(), // Scratch.
|
| regs_.object(), // Scratch.
|
| &need_incremental_pop_object,
|
| Label::kNear);
|
| - __ pop(regs_.object());
|
| + __ Pop(regs_.object());
|
|
|
| regs_.Restore(masm);
|
| if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) {
|
| @@ -4593,7 +4593,7 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
|
| }
|
|
|
| __ bind(&need_incremental_pop_object);
|
| - __ pop(regs_.object());
|
| + __ Pop(regs_.object());
|
|
|
| __ bind(&need_incremental);
|
|
|
| @@ -4634,12 +4634,12 @@ void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
|
|
|
| __ bind(&slow_elements);
|
| __ PopReturnAddressTo(rdi);
|
| - __ push(rbx);
|
| - __ push(rcx);
|
| - __ push(rax);
|
| + __ Push(rbx);
|
| + __ Push(rcx);
|
| + __ Push(rax);
|
| __ movp(rbx, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
|
| - __ push(FieldOperand(rbx, JSFunction::kLiteralsOffset));
|
| - __ push(rdx);
|
| + __ Push(FieldOperand(rbx, JSFunction::kLiteralsOffset));
|
| + __ Push(rdx);
|
| __ PushReturnAddressFrom(rdi);
|
| __ TailCallRuntime(Runtime::kStoreArrayLiteralElement, 5, 1);
|
|
|
| @@ -4708,8 +4708,8 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
| // This stub can be called from essentially anywhere, so it needs to save
|
| // all volatile and callee-save registers.
|
| const size_t kNumSavedRegisters = 2;
|
| - __ push(arg_reg_1);
|
| - __ push(arg_reg_2);
|
| + __ pushq(arg_reg_1);
|
| + __ pushq(arg_reg_2);
|
|
|
| // Calculate the original stack pointer and store it in the second arg.
|
| __ lea(arg_reg_2,
|
| @@ -4734,8 +4734,8 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
|
|
| // Restore volatile regs.
|
| masm->PopCallerSaved(kSaveFPRegs, arg_reg_1, arg_reg_2);
|
| - __ pop(arg_reg_2);
|
| - __ pop(arg_reg_1);
|
| + __ popq(arg_reg_2);
|
| + __ popq(arg_reg_1);
|
|
|
| __ Ret();
|
| }
|
| @@ -5116,29 +5116,29 @@ void CallApiFunctionStub::Generate(MacroAssembler* masm) {
|
| __ PopReturnAddressTo(return_address);
|
|
|
| // context save
|
| - __ push(context);
|
| + __ Push(context);
|
| // load context from callee
|
| __ movp(context, FieldOperand(callee, JSFunction::kContextOffset));
|
|
|
| // callee
|
| - __ push(callee);
|
| + __ Push(callee);
|
|
|
| // call data
|
| - __ push(call_data);
|
| + __ Push(call_data);
|
| Register scratch = call_data;
|
| if (!call_data_undefined) {
|
| __ LoadRoot(scratch, Heap::kUndefinedValueRootIndex);
|
| }
|
| // return value
|
| - __ push(scratch);
|
| + __ Push(scratch);
|
| // return value default
|
| - __ push(scratch);
|
| + __ Push(scratch);
|
| // isolate
|
| __ Move(scratch,
|
| ExternalReference::isolate_address(masm->isolate()));
|
| - __ push(scratch);
|
| + __ Push(scratch);
|
| // holder
|
| - __ push(holder);
|
| + __ Push(holder);
|
|
|
| __ movp(scratch, rsp);
|
| // Push return address back on stack.
|
|
|