08c3a6
commit 9d50e162eef88e1f870a941b0a973060e984e7ca
08c3a6
Author: Noah Goldstein <goldstein.w.n@gmail.com>
08c3a6
Date:   Tue Jun 14 15:37:28 2022 -0700
08c3a6
08c3a6
    x86: Add sse42 implementation to strcmp's ifunc
08c3a6
    
08c3a6
    This has been missing since the the ifuncs where added.
08c3a6
    
08c3a6
    The performance of SSE4.2 is preferable to to SSE2.
08c3a6
    
08c3a6
    Measured on Tigerlake with N = 20 runs.
08c3a6
    Geometric Mean of all benchmarks SSE4.2 / SSE2: 0.906
08c3a6
    
08c3a6
    (cherry picked from commit ff439c47173565fbff4f0f78d07b0f14e4a7db05)
08c3a6
08c3a6
diff --git a/sysdeps/x86_64/multiarch/strcmp.c b/sysdeps/x86_64/multiarch/strcmp.c
08c3a6
index 7c2901bf44456259..b457fb4c150e4407 100644
08c3a6
--- a/sysdeps/x86_64/multiarch/strcmp.c
08c3a6
+++ b/sysdeps/x86_64/multiarch/strcmp.c
08c3a6
@@ -29,6 +29,7 @@
08c3a6
 extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
08c3a6
 extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2_unaligned) attribute_hidden;
08c3a6
 extern __typeof (REDIRECT_NAME) OPTIMIZE (ssse3) attribute_hidden;
08c3a6
+extern __typeof (REDIRECT_NAME) OPTIMIZE (sse42) attribute_hidden;
08c3a6
 extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2) attribute_hidden;
08c3a6
 extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2_rtm) attribute_hidden;
08c3a6
 extern __typeof (REDIRECT_NAME) OPTIMIZE (evex) attribute_hidden;
08c3a6
@@ -53,6 +54,10 @@ IFUNC_SELECTOR (void)
08c3a6
 	return OPTIMIZE (avx2);
08c3a6
     }
08c3a6
 
08c3a6
+  if (CPU_FEATURE_USABLE_P (cpu_features, SSE4_2)
08c3a6
+      && !CPU_FEATURES_ARCH_P (cpu_features, Slow_SSE4_2))
08c3a6
+    return OPTIMIZE (sse42);
08c3a6
+
08c3a6
   if (CPU_FEATURES_ARCH_P (cpu_features, Fast_Unaligned_Load))
08c3a6
     return OPTIMIZE (sse2_unaligned);
08c3a6