about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-11-01 16:46:23 -0400
committerUlrich Drepper <drepper@gmail.com>2011-11-01 16:46:23 -0400
commit34372fc6d3e7bb8870905a6ac124bb2217e3800a (patch)
treed3c72b43b1edd7a32a137e7c0ae2a0f66074b85e
parentfadb59f8d322e5c7ec3c2dd2cbf5d44baf5eddd9 (diff)
downloadglibc-34372fc6d3e7bb8870905a6ac124bb2217e3800a.tar.gz
glibc-34372fc6d3e7bb8870905a6ac124bb2217e3800a.tar.xz
glibc-34372fc6d3e7bb8870905a6ac124bb2217e3800a.zip
Fix test of non-ASCII locales in x86-64 strcasecmp et.al.
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/x86_64/multiarch/strcmp-sse42.S4
-rw-r--r--sysdeps/x86_64/strcmp.S6
3 files changed, 8 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index b8bfd16c84..f18c5cbf4b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2011-11-01  Ulrich Drepper  <drepper@gmail.com>
 
+	* sysdeps/x86_64/strcmp.S: Fix test for non-ASCII locales.
+	* sysdeps/x86_64/multiarch/strcmp-sse42.S: Likewise.
+
 	* posix/tst-rfc3484.c: Add missing __free_in6ai dummy function.
 	* posix/tst-rfc3484-2.c: Likewise.
 	* posix/tst-rfc3484-3.c: Likewise.
diff --git a/sysdeps/x86_64/multiarch/strcmp-sse42.S b/sysdeps/x86_64/multiarch/strcmp-sse42.S
index b93eda13b4..7a50ff05db 100644
--- a/sysdeps/x86_64/multiarch/strcmp-sse42.S
+++ b/sysdeps/x86_64/multiarch/strcmp-sse42.S
@@ -104,7 +104,7 @@ STRCMP_SSE42:
 # else
 	movq	(%rdx), %rax
 # endif
-	testl	$0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
+	testl	$1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
 	jne	__strcasecmp_l_nonascii
 #endif
 #ifdef USE_AS_STRNCASECMP_L
@@ -115,7 +115,7 @@ STRCMP_SSE42:
 # else
 	movq	(%rcx), %rax
 # endif
-	testl	$0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
+	testl	$1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
 	jne	__strncasecmp_l_nonascii
 #endif
 
diff --git a/sysdeps/x86_64/strcmp.S b/sysdeps/x86_64/strcmp.S
index 165073e907..6e5bdaaf2e 100644
--- a/sysdeps/x86_64/strcmp.S
+++ b/sysdeps/x86_64/strcmp.S
@@ -1,5 +1,5 @@
 /* Highly optimized version for x86-64.
-   Copyright (C) 1999, 2000, 2002, 2003, 2005, 2009, 2010
+   Copyright (C) 1999, 2000, 2002, 2003, 2005, 2009, 2010, 2011
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Based on i686 version contributed by Ulrich Drepper
@@ -157,7 +157,7 @@ END (BP_SYM (STRCMP))
 #  else
 	movq	(%rdx), %rax
 #  endif
-	testl	$0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
+	testl	$1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
 	jne	__strcasecmp_l_nonascii
 # elif defined USE_AS_STRNCASECMP_L
 	/* We have to fall back on the C implementation for locales
@@ -167,7 +167,7 @@ END (BP_SYM (STRCMP))
 #  else
 	movq	(%rcx), %rax
 #  endif
-	testl	$0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
+	testl	$1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
 	jne	__strncasecmp_l_nonascii
 # endif