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
This commit is contained in:
parent
c042ef360d
commit
4ea4cb9462
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -2440,7 +2440,7 @@ Handle<Code> 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<Code> 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
|
||||
|
Loading…
Reference in New Issue
Block a user