[Pcre-svn] [810] code/trunk/src/pcre2_jit_compile.c: JIT SSE…

Top Page
Delete this message
Author: Subversion repository
Date:  
To: pcre-svn
Subject: [Pcre-svn] [810] code/trunk/src/pcre2_jit_compile.c: JIT SSE2 optimization improvement.
Revision: 810
          http://www.exim.org/viewvc/pcre2?view=rev&revision=810
Author:   zherczeg
Date:     2017-05-28 04:53:09 +0100 (Sun, 28 May 2017)
Log Message:
-----------
JIT SSE2 optimization improvement.


Modified Paths:
--------------
    code/trunk/src/pcre2_jit_compile.c


Modified: code/trunk/src/pcre2_jit_compile.c
===================================================================
--- code/trunk/src/pcre2_jit_compile.c    2017-05-27 17:08:28 UTC (rev 809)
+++ code/trunk/src/pcre2_jit_compile.c    2017-05-28 03:53:09 UTC (rev 810)
@@ -4839,7 +4839,7 @@


static BOOL check_fast_forward_char_pair_sse2(compiler_common *common, fast_forward_char_data *chars, int max)
{
-sljit_s32 i, priority, left, count;
+sljit_s32 i, j, priority, count;
sljit_u32 priorities;
PCRE2_UCHAR a1, a2, b1, b2;

@@ -4865,25 +4865,33 @@
   if ((priorities & (1 << priority)) == 0)
     continue;


-  left = -1;
-
-  for (i = 0; i < max; i++)
+  for (i = max - 1; i >= 1; i--)
     if (chars[i].last_count >= priority)
       {
       SLJIT_ASSERT(chars[i].count <= 2 && chars[i].count >= 1);


-      b1 = chars[i].chars[0];
-      b2 = chars[i].chars[1];
+      a1 = chars[i].chars[0];
+      a2 = chars[i].chars[1];


-      if (left >= 0 && i - left <= max_fast_forward_char_pair_sse2_offset() && a1 != b1 && a1 != b2 && a2 != b1 && a2 != b2)
+      j = i - max_fast_forward_char_pair_sse2_offset();
+      if (j < 0)
+        j = 0;
+
+      while (j < i)
         {
-        fast_forward_char_pair_sse2(common, i, b1, b2, left, a1, a2);
-        return TRUE;
+        if (chars[j].last_count >= priority)
+          {
+          b1 = chars[j].chars[0];
+          b2 = chars[j].chars[1];
+
+          if (a1 != b1 && a1 != b2 && a2 != b1 && a2 != b2)
+            {
+            fast_forward_char_pair_sse2(common, i, a1, a2, j, b1, b2);
+            return TRUE;
+            }
+          }
+        j++;
         }
-
-      left = i;
-      a1 = b1;
-      a2 = b2;
       }
   }