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
-~----------~----~----~----~------~----~------~--~---

Reply via email to