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)); |