From 4ea4cb9462cd18731b1ee0b04a924504b0795f51 Mon Sep 17 00:00:00 2001 From: "haitao.feng@intel.com" Date: Fri, 25 Oct 2013 02:12:17 +0000 Subject: [PATCH] Introduce MoveDouble to the X64 MacroAssembler R=danno@chromium.org Review URL: https://codereview.chromium.org/26216008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17383 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/x64/code-stubs-x64.cc | 2 +- src/x64/codegen-x64.cc | 2 +- src/x64/lithium-codegen-x64.cc | 4 ++-- src/x64/macro-assembler-x64.h | 2 ++ src/x64/stub-cache-x64.cc | 4 ++-- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc index 7dae6a0..b3ab8c1 100644 --- a/src/x64/code-stubs-x64.cc +++ b/src/x64/code-stubs-x64.cc @@ -594,7 +594,7 @@ void TranscendentalCacheStub::Generate(MacroAssembler* masm) { // Input is a HeapNumber. Push it on the FPU stack and load its // bits into rbx. __ fld_d(FieldOperand(rax, HeapNumber::kValueOffset)); - __ movq(rbx, FieldOperand(rax, HeapNumber::kValueOffset)); + __ MoveDouble(rbx, FieldOperand(rax, HeapNumber::kValueOffset)); __ movq(rdx, rbx); __ bind(&loaded); diff --git a/src/x64/codegen-x64.cc b/src/x64/codegen-x64.cc index 8ef577f..390ec7c 100644 --- a/src/x64/codegen-x64.cc +++ b/src/x64/codegen-x64.cc @@ -466,7 +466,7 @@ void ElementsTransitionGenerator::GenerateDoubleToObject( // Non-hole double, copy value into a heap number. __ AllocateHeapNumber(rax, r15, &gc_required); // rax: new heap number - __ movq(FieldOperand(rax, HeapNumber::kValueOffset), r14); + __ MoveDouble(FieldOperand(rax, HeapNumber::kValueOffset), r14); __ movq(FieldOperand(r11, r9, times_pointer_size, diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc index 6c8e377..508ce5c 100644 --- a/src/x64/lithium-codegen-x64.cc +++ b/src/x64/lithium-codegen-x64.cc @@ -3315,10 +3315,10 @@ void LCodeGen::DoDeferredMathAbsTaggedHeapNumber(LMathAbs* instr) { __ LoadFromSafepointRegisterSlot(input_reg, input_reg); __ bind(&allocated); - __ movq(tmp2, FieldOperand(input_reg, HeapNumber::kValueOffset)); + __ MoveDouble(tmp2, FieldOperand(input_reg, HeapNumber::kValueOffset)); __ shl(tmp2, Immediate(1)); __ shr(tmp2, Immediate(1)); - __ movq(FieldOperand(tmp, HeapNumber::kValueOffset), tmp2); + __ MoveDouble(FieldOperand(tmp, HeapNumber::kValueOffset), tmp2); __ StoreToSafepointRegisterSlot(input_reg, tmp); __ bind(&done); diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h index df0ac5d..2437434 100644 --- a/src/x64/macro-assembler-x64.h +++ b/src/x64/macro-assembler-x64.h @@ -829,6 +829,8 @@ class MacroAssembler: public Assembler { void Pop(Register dst) { pop(dst); } void PushReturnAddressFrom(Register src) { push(src); } void PopReturnAddressTo(Register dst) { pop(dst); } + void MoveDouble(Register dst, const Operand& src) { movq(dst, src); } + void MoveDouble(const Operand& dst, Register src) { movq(dst, src); } // Control Flow void Jump(Address destination, RelocInfo::Mode rmode); diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc index 5c31133..2a0c367 100644 --- a/src/x64/stub-cache-x64.cc +++ b/src/x64/stub-cache-x64.cc @@ -2440,7 +2440,7 @@ Handle CallStubCompiler::CompileMathAbsCall( // Check if the argument is a heap number and load its value. __ bind(¬_smi); __ CheckMap(rax, factory()->heap_number_map(), &slow, DONT_DO_SMI_CHECK); - __ movq(rbx, FieldOperand(rax, HeapNumber::kValueOffset)); + __ MoveDouble(rbx, FieldOperand(rax, HeapNumber::kValueOffset)); // Check the sign of the argument. If the argument is positive, // just return it. @@ -2458,7 +2458,7 @@ Handle CallStubCompiler::CompileMathAbsCall( __ bind(&negative_sign); __ xor_(rbx, rdi); __ AllocateHeapNumber(rax, rdx, &slow); - __ movq(FieldOperand(rax, HeapNumber::kValueOffset), rbx); + __ MoveDouble(FieldOperand(rax, HeapNumber::kValueOffset), rbx); __ ret(2 * kPointerSize); // Tail call the full function. We do not have to patch the receiver -- 2.7.4