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