Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index d12b229c381323ca0f80f417548b6e29e90e9403..dd3711576f1ef12d7f3a170dcb73cab9f84d0ca2 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -4166,6 +4166,16 @@ void LCodeGen::DoCallRuntime(LCallRuntime* instr) { |
void LCodeGen::DoInnerAllocatedObject(LInnerAllocatedObject* instr) { |
Register result = ToRegister(instr->result()); |
Register base = ToRegister(instr->base_object()); |
+ int offset = instr->offset(); |
+ if (instr->hydrogen()->MustAllocateDoubleAligned()) { |
+ ASSERT(kPointerAlignment * 2 == kDoubleAlignment); |
+ Label aligned; |
+ Register scratch = scratch0(); |
+ __ and_(scratch, result, Operand(kDoubleAlignmentMask), SetCC); |
+ __ b(eq, &aligned); |
+ offset += kDoubleSize / 2; |
+ __ bind(&aligned); |
+ } |
__ add(result, base, Operand(instr->offset())); |
} |