| Index: src/arm/deoptimizer-arm.cc
|
| diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc
|
| index c2ae5a01ea860ca635b90cdd2107131f07aca272..5a0a04fcbf70b12b31adb6ff85eba9516590ea32 100644
|
| --- a/src/arm/deoptimizer-arm.cc
|
| +++ b/src/arm/deoptimizer-arm.cc
|
| @@ -544,9 +544,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()));
|
| }
|
| @@ -639,7 +644,7 @@ void Deoptimizer::EntryGenerator::Generate() {
|
| // Get the address of the location in the code object if possible (r3) (return
|
| // address for lazy deoptimization) and compute the fp-to-sp delta in
|
| // register r4.
|
| - if (type() == EAGER) {
|
| + if (type() == EAGER || type() == SOFT) {
|
| __ mov(r3, Operand::Zero());
|
| // Correct one word for bailout id.
|
| __ add(r4, sp, Operand(kSavedRegistersAreaSize + (1 * kPointerSize)));
|
| @@ -694,7 +699,7 @@ void Deoptimizer::EntryGenerator::Generate() {
|
|
|
| // Remove the bailout id, eventually return address, and the saved registers
|
| // from the stack.
|
| - if (type() == EAGER || type() == OSR) {
|
| + if (type() == EAGER || type() == SOFT || type() == OSR) {
|
| __ add(sp, sp, Operand(kSavedRegistersAreaSize + (1 * kPointerSize)));
|
| } else {
|
| __ add(sp, sp, Operand(kSavedRegistersAreaSize + (2 * kPointerSize)));
|
| @@ -813,7 +818,7 @@ void Deoptimizer::TableEntryGenerator::GeneratePrologue() {
|
| for (int i = 0; i < count(); i++) {
|
| int start = masm()->pc_offset();
|
| USE(start);
|
| - if (type() == EAGER) {
|
| + if (type() == EAGER || type() == SOFT) {
|
| __ nop();
|
| } else {
|
| // Emulate ia32 like call by pushing return address to stack.
|
|
|