From 3574f2fdf3827d4953d19a89063e517263b5df85 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Tue, 21 Oct 2014 11:09:19 +0200 Subject: Fix misdetected Slow_SSE4_2 cpu feature bit (bug 17501) --- ChangeLog | 10 ++++++++++ NEWS | 2 +- sysdeps/i386/i686/multiarch/strcasecmp.S | 4 ++-- sysdeps/i386/i686/multiarch/strcmp.S | 4 ++-- sysdeps/i386/i686/multiarch/strncase.S | 4 ++-- sysdeps/x86_64/multiarch/strcmp.S | 8 ++++---- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 149ecc41ce..f97b361d24 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-10-27 Andreas Schwab + + [BZ #17501] + * sysdeps/i386/i686/multiarch/strcasecmp.S (__strcasecmp): Fix + check for Slow_SSE4_2 feature bit. + * sysdeps/i386/i686/multiarch/strcmp.S (STRCMP): Likewise. + * sysdeps/i386/i686/multiarch/strncase.S (__strncasecmp): Likewise. + * sysdeps/x86_64/multiarch/strcmp.S (STRCMP, __strcascmp): + Likewise. Fix check for Fast_Unaligned_Load feature bit. + 2014-10-24 Roland McGrath * configure.ac: Validate compiler version with a empirical test of diff --git a/NEWS b/NEWS index 13be62e8c7..d08117e8b2 100644 --- a/NEWS +++ b/NEWS @@ -10,7 +10,7 @@ Version 2.21 * The following bugs are resolved with this release: 6652, 12926, 14171, 15884, 17266, 17363, 17370, 17371, 17411, 17460, - 17485, 17508. + 17485, 17501, 17508. Version 2.20 diff --git a/sysdeps/i386/i686/multiarch/strcasecmp.S b/sysdeps/i386/i686/multiarch/strcasecmp.S index 4f2de4f37b..57ccef51a0 100644 --- a/sysdeps/i386/i686/multiarch/strcasecmp.S +++ b/sysdeps/i386/i686/multiarch/strcasecmp.S @@ -37,7 +37,7 @@ ENTRY(__strcasecmp) leal __strcasecmp_ssse3@GOTOFF(%ebx), %eax testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features@GOTOFF(%ebx) jz 2f - testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) + testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) jnz 2f leal __strcasecmp_sse4_2@GOTOFF(%ebx), %eax 2: popl %ebx @@ -58,7 +58,7 @@ ENTRY(__strcasecmp) leal __strcasecmp_ssse3, %eax testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features jz 2f - testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features + testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features jnz 2f leal __strcasecmp_sse4_2, %eax 2: ret diff --git a/sysdeps/i386/i686/multiarch/strcmp.S b/sysdeps/i386/i686/multiarch/strcmp.S index 2ad6bf4212..23cbd6f3c5 100644 --- a/sysdeps/i386/i686/multiarch/strcmp.S +++ b/sysdeps/i386/i686/multiarch/strcmp.S @@ -68,7 +68,7 @@ ENTRY(STRCMP) leal __STRCMP_SSSE3@GOTOFF(%ebx), %eax testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features@GOTOFF(%ebx) jz 2f - testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) + testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) jnz 2f leal __STRCMP_SSE4_2@GOTOFF(%ebx), %eax 2: popl %ebx @@ -89,7 +89,7 @@ ENTRY(STRCMP) leal __STRCMP_SSSE3, %eax testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features jz 2f - testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features + testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features jnz 2f leal __STRCMP_SSE4_2, %eax 2: ret diff --git a/sysdeps/i386/i686/multiarch/strncase.S b/sysdeps/i386/i686/multiarch/strncase.S index 9b4cfa063a..41644a5876 100644 --- a/sysdeps/i386/i686/multiarch/strncase.S +++ b/sysdeps/i386/i686/multiarch/strncase.S @@ -37,7 +37,7 @@ ENTRY(__strncasecmp) leal __strncasecmp_ssse3@GOTOFF(%ebx), %eax testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features@GOTOFF(%ebx) jz 2f - testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) + testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features@GOTOFF(%ebx) jnz 2f leal __strncasecmp_sse4_2@GOTOFF(%ebx), %eax 2: popl %ebx @@ -58,7 +58,7 @@ ENTRY(__strncasecmp) leal __strncasecmp_ssse3, %eax testl $bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features jz 2f - testl $bit_Slow_SSE4_2, CPUID_OFFSET+index_Slow_SSE4_2+__cpu_features + testl $bit_Slow_SSE4_2, FEATURE_OFFSET+index_Slow_SSE4_2+__cpu_features jnz 2f leal __strncasecmp_sse4_2, %eax 2: ret diff --git a/sysdeps/x86_64/multiarch/strcmp.S b/sysdeps/x86_64/multiarch/strcmp.S index f3e0ca1259..bd71714e0b 100644 --- a/sysdeps/x86_64/multiarch/strcmp.S +++ b/sysdeps/x86_64/multiarch/strcmp.S @@ -91,10 +91,10 @@ ENTRY(STRCMP) 1: #ifdef USE_AS_STRCMP leaq __strcmp_sse2_unaligned(%rip), %rax - testl $bit_Fast_Unaligned_Load, __cpu_features+CPUID_OFFSET+index_Fast_Unaligned_Load(%rip) + testl $bit_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_Fast_Unaligned_Load(%rip) jnz 3f #else - testl $bit_Slow_SSE4_2, __cpu_features+CPUID_OFFSET+index_Slow_SSE4_2(%rip) + testl $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip) jnz 2f leaq STRCMP_SSE42(%rip), %rax testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip) @@ -120,7 +120,7 @@ ENTRY(__strcasecmp) testl $bit_AVX_Usable, __cpu_features+FEATURE_OFFSET+index_AVX_Usable(%rip) jnz 3f # endif - testl $bit_Slow_SSE4_2, __cpu_features+CPUID_OFFSET+index_Slow_SSE4_2(%rip) + testl $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip) jnz 2f leaq __strcasecmp_sse42(%rip), %rax testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip) @@ -146,7 +146,7 @@ ENTRY(__strncasecmp) testl $bit_AVX_Usable, __cpu_features+FEATURE_OFFSET+index_AVX_Usable(%rip) jnz 3f # endif - testl $bit_Slow_SSE4_2, __cpu_features+CPUID_OFFSET+index_Slow_SSE4_2(%rip) + testl $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip) jnz 2f leaq __strncasecmp_sse42(%rip), %rax testl $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip) -- cgit 1.4.1