]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
memcmp: don't use SSE intrinsics if less that 16 bytes are available in SSE_4_2 version.
authorVictor Julien <victor@inliniac.net>
Thu, 14 Nov 2013 11:51:06 +0000 (12:51 +0100)
committerVictor Julien <victor@inliniac.net>
Tue, 19 Nov 2013 09:35:37 +0000 (10:35 +0100)
src/util-memcmp.h

index f6fc3a0c59251193a8a6e207afb9b51f9b01092c..8443526318bf7a6fd0acd85f42f168f1957d7270 100644 (file)
@@ -66,6 +66,12 @@ static inline int SCMemcmp(void *s1, void *s2, size_t n)
     size_t m = 0;
 
     do {
+        /* apparently we can't just read 16 bytes even though
+         * it almost always works fine :) */
+        if (likely(n - m < 16)) {
+            return memcmp(s1, s2, n - m) ? 1 : 0;
+        }
+
         /* load the buffers into the 128bit vars */
         b1 = _mm_loadu_si128((const __m128i *) s1);
         b2 = _mm_loadu_si128((const __m128i *) s2);
@@ -102,6 +108,12 @@ static inline int SCMemcmpLowercase(void *s1, void *s2, size_t n)
     __m128i uplow = _mm_set1_epi8(0x20);
 
     do {
+        /* apparently we can't just read 16 bytes even though
+         * it almost always works fine :) */
+        if (likely(n - m < 16)) {
+            return MemcmpLowercase(s1, s2, n - m);
+        }
+
         b1 = _mm_loadu_si128((const __m128i *) s1);
         b2 = _mm_loadu_si128((const __m128i *) s2);
         size_t len = n - m;