Author: [email protected]
Date: Fri Dec 19 04:08:29 2008
New Revision: 1007
Modified:
branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc
branches/bleeding_edge/src/regexp-macro-assembler-ia32.h
Log:
Instead of jumping over a conditional backtrack, jump to a single instance
somewhere else.
Modified: branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc Fri Dec 19
04:08:29 2008
@@ -93,6 +93,7 @@
entry_label_(),
start_label_(),
success_label_(),
+ backtrack_label_(),
exit_label_(),
self_(Heap::undefined_value()) {
__ jmp(&entry_label_); // We'll write the entry code later.
@@ -106,6 +107,7 @@
entry_label_.Unuse();
start_label_.Unuse();
success_label_.Unuse();
+ backtrack_label_.Unuse();
exit_label_.Unuse();
check_preempt_label_.Unuse();
}
@@ -564,6 +566,12 @@
__ pop(esi);
__ ret(0);
+ // Backtrack code (branch target for conditional backtracks).
+ if (backtrack_label_.is_linked()) {
+ __ bind(&backtrack_label_);
+ Backtrack();
+ }
+
// Preempt-code
if (check_preempt_label_.is_linked()) {
__ bind(&check_preempt_label_);
@@ -818,10 +826,7 @@
return;
}
if (to == NULL) {
- Label skip;
- __ j(NegateCondition(condition), &skip);
- Backtrack();
- __ bind(&skip);
+ __ j(condition, &backtrack_label_);
return;
}
__ j(condition, to);
Modified: branches/bleeding_edge/src/regexp-macro-assembler-ia32.h
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-ia32.h (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-ia32.h Fri Dec 19
04:08:29 2008
@@ -201,6 +201,7 @@
Label entry_label_;
Label start_label_;
Label success_label_;
+ Label backtrack_label_;
Label exit_label_;
Label check_preempt_label_;
// Handle used to represent the generated code object itself.
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---