| Index: src/ia32/deoptimizer-ia32.cc
|
| diff --git a/src/ia32/deoptimizer-ia32.cc b/src/ia32/deoptimizer-ia32.cc
|
| index d1d9254094863430d4c4678989211de5fd2702f5..21c7ff5dc1e824edfba466c29aba66e3ec079174 100644
|
| --- a/src/ia32/deoptimizer-ia32.cc
|
| +++ b/src/ia32/deoptimizer-ia32.cc
|
| @@ -659,9 +659,14 @@ void Deoptimizer::DoComputeJSFrame(TranslationIterator* iterator,
|
| // Set the continuation for the topmost frame.
|
| if (is_topmost && bailout_type_ != DEBUGGER) {
|
| Builtins* builtins = isolate_->builtins();
|
| - Code* continuation = (bailout_type_ == EAGER)
|
| - ? builtins->builtin(Builtins::kNotifyDeoptimized)
|
| - : builtins->builtin(Builtins::kNotifyLazyDeoptimized);
|
| + Code* continuation = builtins->builtin(Builtins::kNotifyDeoptimized);
|
| + if (bailout_type_ == LAZY) {
|
| + continuation = builtins->builtin(Builtins::kNotifyLazyDeoptimized);
|
| + } else if (bailout_type_ == SOFT) {
|
| + continuation = builtins->builtin(Builtins::kNotifySoftDeoptimized);
|
| + } else {
|
| + ASSERT(bailout_type_ == EAGER);
|
| + }
|
| output_frame->SetContinuation(
|
| reinterpret_cast<uint32_t>(continuation->entry()));
|
| }
|
| @@ -740,7 +745,7 @@ void Deoptimizer::EntryGenerator::Generate() {
|
|
|
| // Get the address of the location in the code object if possible
|
| // and compute the fp-to-sp delta in register edx.
|
| - if (type() == EAGER) {
|
| + if (type() == EAGER || type() == SOFT) {
|
| __ Set(ecx, Immediate(0));
|
| __ lea(edx, Operand(esp, kSavedRegistersAreaSize + 1 * kPointerSize));
|
| } else {
|
| @@ -793,7 +798,7 @@ void Deoptimizer::EntryGenerator::Generate() {
|
| __ fnclex();
|
|
|
| // Remove the bailout id and the double registers from the stack.
|
| - if (type() == EAGER) {
|
| + if (type() == EAGER || type() == SOFT) {
|
| __ add(esp, Immediate(kDoubleRegsSize + kPointerSize));
|
| } else {
|
| __ add(esp, Immediate(kDoubleRegsSize + 2 * kPointerSize));
|
|
|