| Index: src/mips/deoptimizer-mips.cc | 
| diff --git a/src/mips/deoptimizer-mips.cc b/src/mips/deoptimizer-mips.cc | 
| index 0b0c128d172b99650807dbaf7a6ad59b189ed818..422312f7ce777cfdc99b73c0ac2acc53e2f74b02 100644 | 
| --- a/src/mips/deoptimizer-mips.cc | 
| +++ b/src/mips/deoptimizer-mips.cc | 
| @@ -531,9 +531,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())); | 
| } | 
| @@ -627,7 +632,7 @@ void Deoptimizer::EntryGenerator::Generate() { | 
| // Get the address of the location in the code object if possible (a3) (return | 
| // address for lazy deoptimization) and compute the fp-to-sp delta in | 
| // register t0. | 
| -  if (type() == EAGER) { | 
| +  if (type() == EAGER || type() == SOFT) { | 
| __ mov(a3, zero_reg); | 
| // Correct one word for bailout id. | 
| __ Addu(t0, sp, Operand(kSavedRegistersAreaSize + (1 * kPointerSize))); | 
| @@ -690,7 +695,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) { | 
| __ Addu(sp, sp, Operand(kSavedRegistersAreaSize + (1 * kPointerSize))); | 
| } else { | 
| __ Addu(sp, sp, Operand(kSavedRegistersAreaSize + (2 * kPointerSize))); | 
| @@ -807,7 +812,7 @@ void Deoptimizer::TableEntryGenerator::GeneratePrologue() { | 
| for (int i = 0; i < count(); i++) { | 
| Label start; | 
| __ bind(&start); | 
| -    if (type() != EAGER) { | 
| +    if (type() != EAGER && type() != SOFT) { | 
| // Emulate ia32 like call by pushing return address to stack. | 
| __ addiu(sp, sp, -2 * kPointerSize); | 
| __ sw(ra, MemOperand(sp, 1 * kPointerSize)); | 
|  |