Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 36aec4544625783653567becf52f1483eb42d1d5..14c34cab2c02e5bc384f2414f3977fd67dda6044 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -5276,33 +5276,25 @@ void LCodeGen::DoAllocate(LAllocate* instr) { |
} |
} else { |
Register size = ToRegister(instr->size()); |
- __ Allocate(size, |
- result, |
- scratch, |
- scratch2, |
- deferred->entry(), |
- flags); |
+ __ Allocate(size, result, scratch, scratch2, deferred->entry(), flags); |
} |
__ bind(deferred->exit()); |
if (instr->hydrogen()->MustPrefillWithFiller()) { |
+ STATIC_ASSERT(kHeapObjectTag == 1); |
if (instr->size()->IsConstantOperand()) { |
int32_t size = ToInteger32(LConstantOperand::cast(instr->size())); |
- __ mov(scratch, Operand(size)); |
+ __ mov(scratch, Operand(size - kHeapObjectTag)); |
} else { |
- scratch = ToRegister(instr->size()); |
+ __ sub(scratch, ToRegister(instr->size()), Operand(kHeapObjectTag)); |
} |
- __ sub(scratch, scratch, Operand(kPointerSize)); |
- __ sub(result, result, Operand(kHeapObjectTag)); |
+ __ mov(scratch2, Operand(isolate()->factory()->one_pointer_filler_map())); |
Label loop; |
__ bind(&loop); |
- __ mov(scratch2, Operand(isolate()->factory()->one_pointer_filler_map())); |
+ __ sub(scratch, scratch, Operand(kPointerSize), SetCC); |
__ str(scratch2, MemOperand(result, scratch)); |
- __ sub(scratch, scratch, Operand(kPointerSize)); |
- __ cmp(scratch, Operand(0)); |
__ b(ge, &loop); |
- __ add(result, result, Operand(kHeapObjectTag)); |
} |
} |