Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 9900a1e9848f0515b093bb423c4b212de5e81fb2..db97966a9aad7aa2fb0855623151a8f8f60bceb5 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -5369,6 +5369,25 @@ void LCodeGen::DoAllocate(LAllocate* instr) { |
} |
__ bind(deferred->exit()); |
+ |
+ if (instr->hydrogen()->MustPrefillWithFiller()) { |
+ if (instr->size()->IsConstantOperand()) { |
+ int32_t size = ToInteger32(LConstantOperand::cast(instr->size())); |
+ __ mov(scratch, Operand(size)); |
+ } else { |
+ scratch = ToRegister(instr->size()); |
+ } |
+ __ sub(scratch, scratch, Operand(kPointerSize)); |
+ __ sub(result, result, Operand(kHeapObjectTag)); |
+ Label loop; |
+ __ bind(&loop); |
+ __ mov(scratch2, Operand(isolate()->factory()->one_pointer_filler_map())); |
+ __ str(scratch2, MemOperand(result, scratch)); |
+ __ sub(scratch, scratch, Operand(kPointerSize)); |
+ __ cmp(scratch, Operand(0)); |
+ __ b(ge, &loop); |
+ __ add(result, result, Operand(kHeapObjectTag)); |
+ } |
} |