Fix handling LC_CTYPE nonascii-case fallback in i686 SSE4.2 and SSSE3 strcasecmp/strncasecmp

This commit is contained in:
Andreas Schwab 2013-07-29 14:58:41 +02:00
parent 53234cc3a3
commit 5d228a436a
3 changed files with 32 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2013-08-27 Andreas Schwab <schwab@suse.de>
* sysdeps/i386/i686/multiarch/strcmp-sse4.S (__strcasecmp_sse4_2)
(__strncasecmp_sse4_2) [PIC]: Restore %ebx before falling through
to __strcasecmp_nonascii and __strncasecmp_nonascii.
* sysdeps/i386/i686/multiarch/strcmp-ssse3.S (__strcasecmp_ssse3)
(__strncasecmp_ssse3) [PIC]: Likewise.
2013-08-26 Roland McGrath <roland@hack.frob.com>
* io/lxstat64.c: Just call __xstat64, for parity with stub __lxstat.

View File

@ -121,8 +121,14 @@ ENTRY (__strcasecmp_sse4_2)
movl (%eax), %eax
# endif
testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax)
# ifdef PIC
je L(ascii)
POP (%ebx)
jmp __strcasecmp_nonascii
# else
jne __strcasecmp_nonascii
jmp L(ascii)
# endif
END (__strcasecmp_sse4_2)
#endif
@ -152,8 +158,14 @@ ENTRY (__strncasecmp_sse4_2)
movl (%eax), %eax
# endif
testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax)
# ifdef PIC
je L(ascii)
POP (%ebx)
jmp __strncasecmp_nonascii
# else
jne __strncasecmp_nonascii
jmp L(ascii)
# endif
END (__strncasecmp_sse4_2)
#endif

View File

@ -138,8 +138,14 @@ ENTRY (__strcasecmp_ssse3)
movl (%eax), %eax
# endif
testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax)
# ifdef PIC
je L(ascii)
POP (%ebx)
jmp __strcasecmp_nonascii
# else
jne __strcasecmp_nonascii
jmp L(ascii)
# endif
END (__strcasecmp_ssse3)
#endif
@ -169,8 +175,14 @@ ENTRY (__strncasecmp_ssse3)
movl (%eax), %eax
# endif
testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax)
# ifdef PIC
je L(ascii)
POP (%ebx)
jmp __strncasecmp_nonascii
# else
jne __strncasecmp_nonascii
jmp L(ascii)
# endif
END (__strncasecmp_ssse3)
#endif