Index: src/arm/macro-assembler-arm.cc |
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
index 2265d03bd907532edbf280da92ba3bd9e2daef60..4a3aa49840502c5168bed06508ee732b5b66a2fd 100644 |
--- a/src/arm/macro-assembler-arm.cc |
+++ b/src/arm/macro-assembler-arm.cc |
@@ -1564,12 +1564,12 @@ void MacroAssembler::LoadFromNumberDictionary(Label* miss, |
} |
-void MacroAssembler::AllocateInNewSpace(int object_size, |
- Register result, |
- Register scratch1, |
- Register scratch2, |
- Label* gc_required, |
- AllocationFlags flags) { |
+void MacroAssembler::Allocate(int object_size, |
+ Register result, |
+ Register scratch1, |
+ Register scratch2, |
+ Label* gc_required, |
+ AllocationFlags flags) { |
if (!FLAG_inline_new) { |
if (emit_debug_code()) { |
// Trash the registers to simulate an allocation failure. |
@@ -1597,21 +1597,25 @@ void MacroAssembler::AllocateInNewSpace(int object_size, |
// The values must be adjacent in memory to allow the use of LDM. |
// Also, assert that the registers are numbered such that the values |
// are loaded in the correct order. |
- ExternalReference new_space_allocation_top = |
+ ExternalReference allocation_top = ((flags & PRETENURE) != 0) ? |
+ ExternalReference::old_pointer_space_allocation_top_address(isolate()) : |
ExternalReference::new_space_allocation_top_address(isolate()); |
- ExternalReference new_space_allocation_limit = |
+ ExternalReference allocation_limit = ((flags & PRETENURE) != 0) ? |
+ ExternalReference::old_pointer_space_allocation_limit_address( |
+ isolate()) : |
ExternalReference::new_space_allocation_limit_address(isolate()); |
+ |
intptr_t top = |
- reinterpret_cast<intptr_t>(new_space_allocation_top.address()); |
+ reinterpret_cast<intptr_t>(allocation_top.address()); |
intptr_t limit = |
- reinterpret_cast<intptr_t>(new_space_allocation_limit.address()); |
+ reinterpret_cast<intptr_t>(allocation_limit.address()); |
ASSERT((limit - top) == kPointerSize); |
ASSERT(result.code() < ip.code()); |
// Set up allocation top address and object size registers. |
Register topaddr = scratch1; |
Register obj_size_reg = scratch2; |
- mov(topaddr, Operand(new_space_allocation_top)); |
+ mov(topaddr, Operand(allocation_top)); |
Operand obj_size_operand = Operand(object_size); |
if (!obj_size_operand.is_single_instruction(this)) { |
// We are about to steal IP, so we need to load this value first |
@@ -1675,6 +1679,7 @@ void MacroAssembler::AllocateInNewSpace(Register object_size, |
Register scratch2, |
Label* gc_required, |
AllocationFlags flags) { |
+ ASSERT((flags & PRETENURE) == 0); |
if (!FLAG_inline_new) { |
if (emit_debug_code()) { |
// Trash the registers to simulate an allocation failure. |
@@ -1858,12 +1863,8 @@ void MacroAssembler::AllocateTwoByteConsString(Register result, |
Register scratch1, |
Register scratch2, |
Label* gc_required) { |
- AllocateInNewSpace(ConsString::kSize, |
- result, |
- scratch1, |
- scratch2, |
- gc_required, |
- TAG_OBJECT); |
+ Allocate(ConsString::kSize, result, scratch1, scratch2, gc_required, |
+ TAG_OBJECT); |
InitializeNewString(result, |
length, |
@@ -1878,12 +1879,8 @@ void MacroAssembler::AllocateAsciiConsString(Register result, |
Register scratch1, |
Register scratch2, |
Label* gc_required) { |
- AllocateInNewSpace(ConsString::kSize, |
- result, |
- scratch1, |
- scratch2, |
- gc_required, |
- TAG_OBJECT); |
+ Allocate(ConsString::kSize, result, scratch1, scratch2, gc_required, |
+ TAG_OBJECT); |
InitializeNewString(result, |
length, |
@@ -1898,12 +1895,8 @@ void MacroAssembler::AllocateTwoByteSlicedString(Register result, |
Register scratch1, |
Register scratch2, |
Label* gc_required) { |
- AllocateInNewSpace(SlicedString::kSize, |
- result, |
- scratch1, |
- scratch2, |
- gc_required, |
- TAG_OBJECT); |
+ Allocate(SlicedString::kSize, result, scratch1, scratch2, gc_required, |
+ TAG_OBJECT); |
InitializeNewString(result, |
length, |
@@ -1918,12 +1911,8 @@ void MacroAssembler::AllocateAsciiSlicedString(Register result, |
Register scratch1, |
Register scratch2, |
Label* gc_required) { |
- AllocateInNewSpace(SlicedString::kSize, |
- result, |
- scratch1, |
- scratch2, |
- gc_required, |
- TAG_OBJECT); |
+ Allocate(SlicedString::kSize, result, scratch1, scratch2, gc_required, |
+ TAG_OBJECT); |
InitializeNewString(result, |
length, |
@@ -3283,13 +3272,8 @@ void MacroAssembler::AllocateHeapNumber(Register result, |
TaggingMode tagging_mode) { |
// Allocate an object in the heap for the heap number and tag it as a heap |
// object. |
- AllocateInNewSpace(HeapNumber::kSize, |
- result, |
- scratch1, |
- scratch2, |
- gc_required, |
- tagging_mode == TAG_RESULT ? TAG_OBJECT : |
- NO_ALLOCATION_FLAGS); |
+ Allocate(HeapNumber::kSize, result, scratch1, scratch2, gc_required, |
+ tagging_mode == TAG_RESULT ? TAG_OBJECT : NO_ALLOCATION_FLAGS); |
// Store heap number map in the allocated object. |
AssertRegisterIsRoot(heap_number_map, Heap::kHeapNumberMapRootIndex); |