Index: src/mips/macro-assembler-mips.cc |
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
index cb336f3b0b9262b3c2d12628bec9ec9679a43799..cdfbae39c2a27242f7745cc9cd5d039d11060428 100644 |
--- a/src/mips/macro-assembler-mips.cc |
+++ b/src/mips/macro-assembler-mips.cc |
@@ -4526,15 +4526,15 @@ void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { |
// Pre-age the code. |
Code* stub = Code::GetPreAgedCodeAgeStub(isolate()); |
nop(Assembler::CODE_AGE_MARKER_NOP); |
- // Save the function's original return address |
- // (it will be clobbered by Call(t9)). |
- mov(at, ra); |
- // Load the stub address to t9 and call it. |
+ // Load the stub address to t9 and call it, |
+ // GetCodeAgeAndParity() extracts the stub address from this instruction. |
li(t9, |
- Operand(reinterpret_cast<uint32_t>(stub->instruction_start()))); |
- Call(t9); |
- // Record the stub address in the empty space for GetCodeAgeAndParity(). |
- emit_code_stub_address(stub); |
+ Operand(reinterpret_cast<uint32_t>(stub->instruction_start())), |
+ CONSTANT_SIZE); |
+ nop(); // Prevent jalr to jal optimization. |
+ jalr(t9, a0); |
+ nop(); // Branch delay slot nop. |
+ nop(); // Pad the empty space. |
} else { |
Push(ra, fp, cp, a1); |
nop(Assembler::CODE_AGE_SEQUENCE_NOP); |