Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 801c30bbdf606a466758fae3c54d8ec35c003e05..b8037415e67a0ba1a575913b189d6b5e60089c0c 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -143,10 +143,18 @@ bool LCodeGen::GeneratePrologue() { |
masm_, kNoCodeAgeSequenceLength * Assembler::kInstrSize); |
// 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()); |
- __ nop(ip.code()); |
- // Adjust FP to point to saved FP. |
- __ add(fp, sp, Operand(2 * kPointerSize)); |
+ if (FLAG_optimize_for_size && FLAG_age_code) { |
+ // Pre-age the code. |
+ Code* stub = Code::GetPreAgedCodeAgeStub(isolate()); |
+ __ add(r0, pc, Operand(-8)); |
+ __ ldr(pc, MemOperand(pc, -4)); |
+ __ dd(reinterpret_cast<uint32_t>(stub->instruction_start())); |
+ } else { |
+ __ stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit()); |
+ __ nop(ip.code()); |
+ // Adjust FP to point to saved FP. |
+ __ add(fp, sp, Operand(2 * kPointerSize)); |
+ } |
} |
frame_is_built_ = true; |
info_->AddNoFrameRange(0, masm_->pc_offset()); |