Index: runtime/vm/stub_code_mips.cc |
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc |
index 10f55d7af21d91bdbc34216377ae0c04e38f914c..8b8522d988e1cef8f2a5f4028391ad50d7d46830 100644 |
--- a/runtime/vm/stub_code_mips.cc |
+++ b/runtime/vm/stub_code_mips.cc |
@@ -451,12 +451,20 @@ static void GenerateDeoptimizationSequence(Assembler* assembler, |
if (preserve_result) { |
__ Push(T1); // Preserve result, it will be GC-d here. |
} |
- __ CallRuntime(kDeoptimizeMaterializeDoublesRuntimeEntry); |
+ __ PushObject(Smi::ZoneHandle()); // Space for the result. |
+ __ CallRuntime(kDeoptimizeMaterializeRuntimeEntry); |
+ // Result tells stub how many bytes to remove from the expression stack |
+ // of the bottom-most frame. They were used as materialization arguments. |
+ __ Pop(T1); |
+ __ SmiUntag(T1); |
if (preserve_result) { |
__ Pop(V0); // Restore result. |
} |
+ __ LeaveStubFrame(); |
- __ LeaveStubFrameAndReturn(); |
+ // Return. |
+ __ jr(RA); |
+ __ delay_slot()->addu(SP, SP, T1); // Remove materialization arguments. |
} |