| Index: src/mips/regexp-macro-assembler-mips.cc
 | 
| diff --git a/src/mips/regexp-macro-assembler-mips.cc b/src/mips/regexp-macro-assembler-mips.cc
 | 
| index 2a45293270eee8e9d17512fcb5b1715618378b38..f393b3493a25fd65c86ac36a260157db6d5276ba 100644
 | 
| --- a/src/mips/regexp-macro-assembler-mips.cc
 | 
| +++ b/src/mips/regexp-macro-assembler-mips.cc
 | 
| @@ -781,7 +781,7 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) {
 | 
|          for (int i = 0; i < num_saved_registers_; i += 2) {
 | 
|            __ lw(a2, register_location(i));
 | 
|            __ lw(a3, register_location(i + 1));
 | 
| -          if (global()) {
 | 
| +          if (i == 0 && global_with_zero_length_check()) {
 | 
|              // Keep capture start in a4 for the zero-length check later.
 | 
|              __ mov(t7, a2);
 | 
|            }
 | 
| @@ -823,17 +823,21 @@ Handle<HeapObject> RegExpMacroAssemblerMIPS::GetCode(Handle<String> source) {
 | 
|  
 | 
|          // Prepare a0 to initialize registers with its value in the next run.
 | 
|          __ lw(a0, MemOperand(frame_pointer(), kInputStartMinusOne));
 | 
| -        // Special case for zero-length matches.
 | 
| -        // t7: capture start index
 | 
| -        // Not a zero-length match, restart.
 | 
| -        __ Branch(
 | 
| -            &load_char_start_regexp, ne, current_input_offset(), Operand(t7));
 | 
| -        // Offset from the end is zero if we already reached the end.
 | 
| -        __ Branch(&exit_label_, eq, current_input_offset(), Operand(zero_reg));
 | 
| -        // Advance current position after a zero-length match.
 | 
| -        __ Addu(current_input_offset(),
 | 
| -                current_input_offset(),
 | 
| -                Operand((mode_ == UC16) ? 2 : 1));
 | 
| +
 | 
| +        if (global_with_zero_length_check()) {
 | 
| +          // Special case for zero-length matches.
 | 
| +          // t7: capture start index
 | 
| +          // Not a zero-length match, restart.
 | 
| +          __ Branch(
 | 
| +              &load_char_start_regexp, ne, current_input_offset(), Operand(t7));
 | 
| +          // Offset from the end is zero if we already reached the end.
 | 
| +          __ Branch(&exit_label_, eq, current_input_offset(), Operand(zero_reg));
 | 
| +          // Advance current position after a zero-length match.
 | 
| +          __ Addu(current_input_offset(),
 | 
| +                  current_input_offset(),
 | 
| +                  Operand((mode_ == UC16) ? 2 : 1));
 | 
| +        }
 | 
| +
 | 
|          __ Branch(&load_char_start_regexp);
 | 
|        } else {
 | 
|          __ li(v0, Operand(SUCCESS));
 | 
| 
 |