| Index: runtime/vm/stub_code_ia32.cc
|
| diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
|
| index 0af074b644cb7a07043a458992a8cf761619ddcc..cde7e0f22960ffb572cdc5eea1c36366bfdfd50f 100644
|
| --- a/runtime/vm/stub_code_ia32.cc
|
| +++ b/runtime/vm/stub_code_ia32.cc
|
| @@ -394,11 +394,20 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
|
| if (preserve_eax) {
|
| __ pushl(EBX); // Preserve result, it will be GC-d here.
|
| }
|
| - __ CallRuntime(kDeoptimizeMaterializeDoublesRuntimeEntry);
|
| + __ pushl(Immediate(Smi::RawValue(0))); // 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.
|
| + __ popl(EBX);
|
| + __ SmiUntag(EBX);
|
| if (preserve_eax) {
|
| __ popl(EAX); // Restore result.
|
| }
|
| __ LeaveFrame();
|
| +
|
| + __ popl(ECX); // Pop return address.
|
| + __ addl(ESP, EBX); // Remove materialization arguments.
|
| + __ pushl(ECX); // Push return address.
|
| __ ret();
|
| }
|
|
|
|
|