Index: src/ia32/codegen-ia32.cc |
=================================================================== |
--- src/ia32/codegen-ia32.cc (revision 2770) |
+++ src/ia32/codegen-ia32.cc (working copy) |
@@ -6948,21 +6948,18 @@ |
Register scratch1, |
Register scratch2, |
Register result) { |
- ExternalReference allocation_top = |
- ExternalReference::new_space_allocation_top_address(); |
- ExternalReference allocation_limit = |
- ExternalReference::new_space_allocation_limit_address(); |
- __ mov(Operand(scratch1), Immediate(allocation_top)); |
- __ mov(result, Operand(scratch1, 0)); |
- __ lea(scratch2, Operand(result, HeapNumber::kSize)); // scratch2: new top |
- __ cmp(scratch2, Operand::StaticVariable(allocation_limit)); |
- __ j(above, need_gc, not_taken); |
+ // Allocate heap number in new space. |
+ __ AllocateObjectInNewSpace(HeapNumber::kSize, |
+ result, |
+ scratch1, |
+ scratch2, |
+ need_gc, |
+ false); |
- __ mov(Operand(scratch1, 0), scratch2); // store new top |
+ // Set the map and tag the result. |
__ mov(Operand(result, HeapObject::kMapOffset), |
Immediate(Factory::heap_number_map())); |
- // Tag old top and use as result. |
- __ add(Operand(result), Immediate(kHeapObjectTag)); |
+ __ or_(Operand(result), Immediate(kHeapObjectTag)); |
} |