Index: runtime/vm/stub_code_arm.cc |
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc |
index 39f649785a60c5592c8ee9e7fc9fa3d53f263f82..e520dbfc7e4a6ddb6a7b89c3f45cee38c335df8c 100644 |
--- a/runtime/vm/stub_code_arm.cc |
+++ b/runtime/vm/stub_code_arm.cc |
@@ -394,11 +394,17 @@ static void GenerateDeoptimizationSequence(Assembler* assembler, |
if (preserve_result) { |
__ Push(R1); // 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(R1); |
if (preserve_result) { |
__ Pop(R0); // Restore result. |
} |
__ LeaveStubFrame(); |
+ // Remove materialization arguments. |
+ __ add(SP, SP, ShifterOperand(R1, ASR, kSmiTagSize)); |
__ Ret(); |
} |