Index: src/arm/regexp-macro-assembler-arm.cc |
diff --git a/src/arm/regexp-macro-assembler-arm.cc b/src/arm/regexp-macro-assembler-arm.cc |
index 8f45886d92f404a5da28126181a8aaec276c7aa8..5fd6c5370a70e642a2af2547f3b62ec933afca3f 100644 |
--- a/src/arm/regexp-macro-assembler-arm.cc |
+++ b/src/arm/regexp-macro-assembler-arm.cc |
@@ -142,7 +142,6 @@ int RegExpMacroAssemblerARM::stack_limit_slack() { |
void RegExpMacroAssemblerARM::AdvanceCurrentPosition(int by) { |
if (by != 0) { |
- Label inside_string; |
__ add(current_input_offset(), |
current_input_offset(), Operand(by * char_size())); |
} |
@@ -927,6 +926,19 @@ void RegExpMacroAssemblerARM::ReadStackPointerFromRegister(int reg) { |
} |
+void RegExpMacroAssemblerARM::SetCurrentPositionFromEnd(int by) { |
+ NearLabel after_position; |
+ __ cmp(current_input_offset(), Operand(by * char_size())); |
+ __ b(hs, &after_position); |
+ __ mov(current_input_offset(), Operand(by * char_size())); |
+ // On RegExp code entry (where this operation is used), the character before |
+ // the current position is expected to be already loaded. |
+ // We have advenced the position, so it's safe to read backwards. |
+ LoadCurrentCharacterUnchecked(-1, 1); |
+ __ bind(&after_position); |
+} |
+ |
+ |
void RegExpMacroAssemblerARM::SetRegister(int register_index, int to) { |
ASSERT(register_index >= num_saved_registers_); // Reserved for positions! |
__ mov(r0, Operand(to)); |