Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index bf65375e0c606086f121290e6e1e080ac798b1ef..7615134ec08af7473a2851d7db3b7c9603218d4b 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -138,15 +138,23 @@ bool LCodeGen::GeneratePrologue() { |
// function calls. |
if (!info_->is_classic_mode() || info_->is_native()) { |
Label ok; |
+ Label begin; |
+ __ bind(&begin); |
__ cmp(r5, Operand(0)); |
__ b(eq, &ok); |
int receiver_offset = scope()->num_parameters() * kPointerSize; |
__ LoadRoot(r2, Heap::kUndefinedValueRootIndex); |
__ str(r2, MemOperand(sp, receiver_offset)); |
__ bind(&ok); |
+ ASSERT_EQ(kSizeOfOptimizedStrictModePrologue, ok.pos() - begin.pos()); |
} |
+ // The following three instructions must remain together and unmodified for |
+ // code aging to work properly. |
__ stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit()); |
+ // Add unused load of ip to ensure prologue sequence is identical for |
+ // full-codegen and lithium-codegen. |
+ __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); |
__ add(fp, sp, Operand(2 * kPointerSize)); // Adjust FP to point to saved FP. |
// Reserve space for the stack slots needed by the code. |