| Index: src/arm/macro-assembler-arm.cc
|
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc
|
| index 81a2d37643d2b018ae16d817559e0e9a0063214d..83b3458781411c3fe3c19d2e62ce626593c6a0fd 100644
|
| --- a/src/arm/macro-assembler-arm.cc
|
| +++ b/src/arm/macro-assembler-arm.cc
|
| @@ -1692,12 +1692,16 @@ 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), SetCC);
|
| Label aligned;
|
| b(eq, &aligned);
|
| + if ((flags & PRETENURE_OLD_DATA_SPACE) != 0) {
|
| + cmp(result, Operand(ip));
|
| + b(hs, gc_required);
|
| + }
|
| mov(scratch2, Operand(isolate()->factory()->one_pointer_filler_map()));
|
| str(scratch2, MemOperand(result, kDoubleSize / 2, PostIndex));
|
| bind(&aligned);
|
| @@ -1790,12 +1794,16 @@ 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), SetCC);
|
| Label aligned;
|
| b(eq, &aligned);
|
| + if ((flags & PRETENURE_OLD_DATA_SPACE) != 0) {
|
| + cmp(result, Operand(ip));
|
| + b(hs, gc_required);
|
| + }
|
| mov(scratch2, Operand(isolate()->factory()->one_pointer_filler_map()));
|
| str(scratch2, MemOperand(result, kDoubleSize / 2, PostIndex));
|
| bind(&aligned);
|
|
|