Index: src/arm/codegen-arm.cc |
=================================================================== |
--- src/arm/codegen-arm.cc (revision 2784) |
+++ src/arm/codegen-arm.cc (working copy) |
@@ -4945,36 +4945,21 @@ |
static void AllocateHeapNumber( |
MacroAssembler* masm, |
Label* need_gc, // Jump here if young space is full. |
- Register result_reg, // The tagged address of the new heap number. |
- Register allocation_top_addr_reg, // A scratch register. |
+ Register result, // The tagged address of the new heap number. |
+ Register scratch1, // A scratch register. |
Register scratch2) { // Another scratch register. |
- ExternalReference allocation_top = |
- ExternalReference::new_space_allocation_top_address(); |
- ExternalReference allocation_limit = |
- ExternalReference::new_space_allocation_limit_address(); |
+ // Allocate an object in the heap for the heap number and tag it as a heap |
+ // object. |
+ __ AllocateObjectInNewSpace(HeapNumber::kSize, |
+ result, |
+ scratch1, |
+ scratch2, |
+ need_gc, |
+ true); |
- // allocat := the address of the allocation top variable. |
- __ mov(allocation_top_addr_reg, Operand(allocation_top)); |
- // result_reg := the old allocation top. |
- __ ldr(result_reg, MemOperand(allocation_top_addr_reg)); |
- // scratch2 := the address of the allocation limit. |
- __ mov(scratch2, Operand(allocation_limit)); |
- // scratch2 := the allocation limit. |
- __ ldr(scratch2, MemOperand(scratch2)); |
- // result_reg := the new allocation top. |
- __ add(result_reg, result_reg, Operand(HeapNumber::kSize)); |
- // Compare new new allocation top and limit. |
- __ cmp(result_reg, Operand(scratch2)); |
- // Branch if out of space in young generation. |
- __ b(hi, need_gc); |
- // Store new allocation top. |
- __ str(result_reg, MemOperand(allocation_top_addr_reg)); // store new top |
- // Tag and adjust back to start of new object. |
- __ sub(result_reg, result_reg, Operand(HeapNumber::kSize - kHeapObjectTag)); |
- // Get heap number map into scratch2. |
- __ LoadRoot(scratch2, Heap::kHeapNumberMapRootIndex); |
- // Store heap number map in new object. |
- __ str(scratch2, FieldMemOperand(result_reg, HeapObject::kMapOffset)); |
+ // Get heap number map and store it in the allocated object. |
+ __ LoadRoot(scratch1, Heap::kHeapNumberMapRootIndex); |
+ __ str(scratch1, FieldMemOperand(result, HeapObject::kMapOffset)); |
} |