Index: src/arm/codegen-arm.cc |
=================================================================== |
--- src/arm/codegen-arm.cc (revision 4607) |
+++ src/arm/codegen-arm.cc (working copy) |
@@ -1486,8 +1486,7 @@ |
// Then process it as a normal function call. |
__ ldr(r0, MemOperand(sp, 3 * kPointerSize)); |
__ ldr(r1, MemOperand(sp, 2 * kPointerSize)); |
- __ str(r0, MemOperand(sp, 2 * kPointerSize)); |
- __ str(r1, MemOperand(sp, 3 * kPointerSize)); |
+ __ strd(r0, MemOperand(sp, 2 * kPointerSize)); |
CallFunctionStub call_function(2, NOT_IN_LOOP, NO_CALL_FUNCTION_FLAGS); |
frame_->CallStub(&call_function, 3); |
@@ -2279,8 +2278,8 @@ |
node->break_target()->set_direction(JumpTarget::FORWARD_ONLY); |
node->continue_target()->set_direction(JumpTarget::FORWARD_ONLY); |
- __ ldr(r0, frame_->ElementAt(0)); // load the current count |
- __ ldr(r1, frame_->ElementAt(1)); // load the length |
+ // Load the current count to r0, load the length to r1. |
+ __ ldrd(r0, frame_->ElementAt(0)); |
__ cmp(r0, r1); // compare to the array length |
node->break_target()->Branch(hs); |
@@ -6248,8 +6247,7 @@ |
ConvertToDoubleStub stub1(r3, r2, r7, r6); |
__ Call(stub1.GetCode(), RelocInfo::CODE_TARGET); |
// Load rhs to a double in r0, r1. |
- __ ldr(r1, FieldMemOperand(r0, HeapNumber::kValueOffset + kPointerSize)); |
- __ ldr(r0, FieldMemOperand(r0, HeapNumber::kValueOffset)); |
+ __ ldrd(r0, FieldMemOperand(r0, HeapNumber::kValueOffset)); |
__ pop(lr); |
} |
@@ -6284,8 +6282,7 @@ |
} else { |
__ push(lr); |
// Load lhs to a double in r2, r3. |
- __ ldr(r3, FieldMemOperand(r1, HeapNumber::kValueOffset + kPointerSize)); |
- __ ldr(r2, FieldMemOperand(r1, HeapNumber::kValueOffset)); |
+ __ ldrd(r2, FieldMemOperand(r1, HeapNumber::kValueOffset)); |
// Convert rhs to a double in r0, r1. |
__ mov(r7, Operand(r0)); |
ConvertToDoubleStub stub2(r1, r0, r7, r6); |
@@ -6449,10 +6446,8 @@ |
__ sub(r7, r1, Operand(kHeapObjectTag)); |
__ vldr(d7, r7, HeapNumber::kValueOffset); |
} else { |
- __ ldr(r2, FieldMemOperand(r1, HeapNumber::kValueOffset)); |
- __ ldr(r3, FieldMemOperand(r1, HeapNumber::kValueOffset + kPointerSize)); |
- __ ldr(r1, FieldMemOperand(r0, HeapNumber::kValueOffset + kPointerSize)); |
- __ ldr(r0, FieldMemOperand(r0, HeapNumber::kValueOffset)); |
+ __ ldrd(r2, FieldMemOperand(r1, HeapNumber::kValueOffset)); |
+ __ ldrd(r0, FieldMemOperand(r0, HeapNumber::kValueOffset)); |
} |
__ jmp(both_loaded_as_doubles); |
} |
@@ -6829,8 +6824,7 @@ |
__ vldr(d7, r7, HeapNumber::kValueOffset); |
} else { |
// Calling convention says that second double is in r2 and r3. |
- __ ldr(r2, FieldMemOperand(r0, HeapNumber::kValueOffset)); |
- __ ldr(r3, FieldMemOperand(r0, HeapNumber::kValueOffset + 4)); |
+ __ ldrd(r2, FieldMemOperand(r0, HeapNumber::kValueOffset)); |
} |
__ jmp(&finished_loading_r0); |
__ bind(&r0_is_smi); |
@@ -6882,8 +6876,7 @@ |
__ vldr(d6, r7, HeapNumber::kValueOffset); |
} else { |
// Calling convention says that first double is in r0 and r1. |
- __ ldr(r0, FieldMemOperand(r1, HeapNumber::kValueOffset)); |
- __ ldr(r1, FieldMemOperand(r1, HeapNumber::kValueOffset + 4)); |
+ __ ldrd(r0, FieldMemOperand(r1, HeapNumber::kValueOffset)); |
} |
__ jmp(&finished_loading_r1); |
__ bind(&r1_is_smi); |
@@ -6954,8 +6947,7 @@ |
__ stc(p1, cr8, MemOperand(r4, HeapNumber::kValueOffset)); |
#else |
// Double returned in registers 0 and 1. |
- __ str(r0, FieldMemOperand(r5, HeapNumber::kValueOffset)); |
- __ str(r1, FieldMemOperand(r5, HeapNumber::kValueOffset + 4)); |
+ __ strd(r0, FieldMemOperand(r5, HeapNumber::kValueOffset)); |
#endif |
__ mov(r0, Operand(r5)); |
// And we are done. |