mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 01:13:04 +00:00
Further fix a throw returning to a frame marked for lazy deopt.
Cf. e1a252a017
R=fschneider@google.com
Review URL: https://codereview.chromium.org/2371323006 .
This commit is contained in:
parent
685e4ff9e1
commit
76b2f18dd8
|
@ -522,7 +522,7 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
|
|||
__ CallRuntime(kDeoptimizeMaterializeRuntimeEntry, 0);
|
||||
// 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);
|
||||
__ Pop(R2);
|
||||
if (kind == kLazyDeoptFromReturn) {
|
||||
__ Pop(R0); // Restore result.
|
||||
} else if (kind == kLazyDeoptFromThrow) {
|
||||
|
@ -531,7 +531,7 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
|
|||
}
|
||||
__ LeaveStubFrame();
|
||||
// Remove materialization arguments.
|
||||
__ add(SP, SP, Operand(R1, ASR, kSmiTagSize));
|
||||
__ add(SP, SP, Operand(R2, ASR, kSmiTagSize));
|
||||
__ Ret();
|
||||
}
|
||||
|
||||
|
|
|
@ -542,8 +542,8 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
|
|||
__ CallRuntime(kDeoptimizeMaterializeRuntimeEntry, 0);
|
||||
// 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);
|
||||
__ SmiUntag(R1);
|
||||
__ Pop(R2);
|
||||
__ SmiUntag(R2);
|
||||
if (kind == kLazyDeoptFromReturn) {
|
||||
__ Pop(R0); // Restore result.
|
||||
} else if (kind == kLazyDeoptFromThrow) {
|
||||
|
@ -552,7 +552,7 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
|
|||
}
|
||||
__ LeaveStubFrame();
|
||||
// Remove materialization arguments.
|
||||
__ add(SP, SP, Operand(R1));
|
||||
__ add(SP, SP, Operand(R2));
|
||||
__ ret();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue