Index: src/mips/macro-assembler-mips.cc |
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
index e53f10afaca7681805d23683151f29a43f255167..5becf7c370270f03bc00de8bb71473a8be809916 100644 |
--- a/src/mips/macro-assembler-mips.cc |
+++ b/src/mips/macro-assembler-mips.cc |
@@ -2944,12 +2944,15 @@ void MacroAssembler::Allocate(int object_size, |
if ((flags & DOUBLE_ALIGNMENT) != 0) { |
// Align the next allocation. Storing the filler map without checking top is |
- // always safe because the limit of the heap is always aligned. |
+ // safe in new-space because the limit of the heap is aligned there. |
ASSERT((flags & PRETENURE_OLD_POINTER_SPACE) == 0); |
ASSERT(kPointerAlignment * 2 == kDoubleAlignment); |
And(scratch2, result, Operand(kDoubleAlignmentMask)); |
Label aligned; |
Branch(&aligned, eq, scratch2, Operand(zero_reg)); |
+ if ((flags & PRETENURE_OLD_DATA_SPACE) != 0) { |
+ Branch(gc_required, Ugreater_equal, result, Operand(t9)); |
+ } |
li(scratch2, Operand(isolate()->factory()->one_pointer_filler_map())); |
sw(scratch2, MemOperand(result)); |
Addu(result, result, Operand(kDoubleSize / 2)); |
@@ -3028,12 +3031,15 @@ void MacroAssembler::Allocate(Register object_size, |
if ((flags & DOUBLE_ALIGNMENT) != 0) { |
// Align the next allocation. Storing the filler map without checking top is |
- // always safe because the limit of the heap is always aligned. |
+ // safe in new-space because the limit of the heap is aligned there. |
ASSERT((flags & PRETENURE_OLD_POINTER_SPACE) == 0); |
ASSERT(kPointerAlignment * 2 == kDoubleAlignment); |
And(scratch2, result, Operand(kDoubleAlignmentMask)); |
Label aligned; |
Branch(&aligned, eq, scratch2, Operand(zero_reg)); |
+ if ((flags & PRETENURE_OLD_DATA_SPACE) != 0) { |
+ Branch(gc_required, Ugreater_equal, result, Operand(t9)); |
+ } |
li(scratch2, Operand(isolate()->factory()->one_pointer_filler_map())); |
sw(scratch2, MemOperand(result)); |
Addu(result, result, Operand(kDoubleSize / 2)); |