* string.h (strechr): Replace assembler by
C code. (ascii_strcasematch): Likewise. (ascii_strncasematch): Likwise.
This commit is contained in:
parent
54b302310e
commit
0222a24fe3
|
@ -1,3 +1,10 @@
|
||||||
|
2012-10-26 Kai Tietz <ktietz@redhat.com>
|
||||||
|
|
||||||
|
* string.h (strechr): Replace assembler by
|
||||||
|
C code.
|
||||||
|
(ascii_strcasematch): Likewise.
|
||||||
|
(ascii_strncasematch): Likwise.
|
||||||
|
|
||||||
2012-10-26 Corinna Vinschen <corinna@vinschen.de>
|
2012-10-26 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* dir.cc (closedir): Fix syscall_printf.
|
* dir.cc (closedir): Fix syscall_printf.
|
||||||
|
|
|
@ -22,20 +22,9 @@ extern "C" {
|
||||||
static inline __stdcall char *
|
static inline __stdcall char *
|
||||||
strechr (const char *s, int c)
|
strechr (const char *s, int c)
|
||||||
{
|
{
|
||||||
register char * res;
|
while (*s != (char) c && *s != 0)
|
||||||
__asm__ __volatile__ ("\
|
++s;
|
||||||
movb %%al,%%ah\n\
|
return (char *) s;
|
||||||
1: movb (%1),%%al\n\
|
|
||||||
cmpb %%ah,%%al\n\
|
|
||||||
je 2f\n\
|
|
||||||
incl %1\n\
|
|
||||||
testb %%al,%%al\n\
|
|
||||||
jne 1b\n\
|
|
||||||
decl %1\n\
|
|
||||||
2: movl %1,%0\n\
|
|
||||||
":"=a" (res), "=r" (s)
|
|
||||||
:"0" (c), "1" (s));
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __INSIDE_CYGWIN__
|
#ifdef __INSIDE_CYGWIN__
|
||||||
|
@ -45,57 +34,38 @@ extern const char isalpha_array[];
|
||||||
static inline int
|
static inline int
|
||||||
ascii_strcasematch (const char *cs, const char *ct)
|
ascii_strcasematch (const char *cs, const char *ct)
|
||||||
{
|
{
|
||||||
register int __res;
|
register const unsigned char *us, *ut;
|
||||||
int d0, d1;
|
|
||||||
__asm__ ("\
|
|
||||||
.global _isalpha_array \n\
|
|
||||||
cld \n\
|
|
||||||
andl $0xff,%%eax \n\
|
|
||||||
1: lodsb \n\
|
|
||||||
scasb \n\
|
|
||||||
je 2f \n\
|
|
||||||
xorb _isalpha_array(%%eax),%%al \n\
|
|
||||||
cmpb -1(%%edi),%%al \n\
|
|
||||||
jne 3f \n\
|
|
||||||
2: testb %%al,%%al \n\
|
|
||||||
jnz 1b \n\
|
|
||||||
movl $1,%%eax \n\
|
|
||||||
jmp 4f \n\
|
|
||||||
3: xor %0,%0 \n\
|
|
||||||
4:"
|
|
||||||
:"=a" (__res), "=&S" (d0), "=&D" (d1)
|
|
||||||
: "1" (cs), "2" (ct));
|
|
||||||
|
|
||||||
return __res;
|
us = (const unsigned char *) cs;
|
||||||
|
ut = (const unsigned char *) ct;
|
||||||
|
|
||||||
|
while (us[0] == ut[0] || (us[0] ^ isalpha_array[us[0]]) == ut[0])
|
||||||
|
{
|
||||||
|
if (us[0] == 0)
|
||||||
|
return 1;
|
||||||
|
++us, ++ut;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
ascii_strncasematch (const char *cs, const char *ct, size_t n)
|
ascii_strncasematch (const char *cs, const char *ct, size_t n)
|
||||||
{
|
{
|
||||||
register int __res;
|
register const unsigned char *us, *ut;
|
||||||
int d0, d1, d2;
|
|
||||||
__asm__ ("\
|
|
||||||
.global _isalpha_array; \n\
|
|
||||||
cld \n\
|
|
||||||
andl $0xff,%%eax \n\
|
|
||||||
1: decl %3 \n\
|
|
||||||
js 3f \n\
|
|
||||||
lodsb \n\
|
|
||||||
scasb \n\
|
|
||||||
je 2f \n\
|
|
||||||
xorb _isalpha_array(%%eax),%%al \n\
|
|
||||||
cmpb -1(%%edi),%%al \n\
|
|
||||||
jne 4f \n\
|
|
||||||
2: testb %%al,%%al \n\
|
|
||||||
jnz 1b \n\
|
|
||||||
3: movl $1,%%eax \n\
|
|
||||||
jmp 5f \n\
|
|
||||||
4: xor %0,%0 \n\
|
|
||||||
5:"
|
|
||||||
:"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
|
|
||||||
:"1" (cs), "2" (ct), "3" (n));
|
|
||||||
|
|
||||||
return __res;
|
if (!n)
|
||||||
|
return 1;
|
||||||
|
us = (const unsigned char *) cs;
|
||||||
|
ut = (const unsigned char *) ct;
|
||||||
|
|
||||||
|
while (us[0] == ut[0] || (us[0] ^ isalpha_array[us[0]]) == ut[0])
|
||||||
|
{
|
||||||
|
--n;
|
||||||
|
if (!n || us[0] == 0)
|
||||||
|
return 1;
|
||||||
|
++us, ++ut;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef strcasecmp
|
#undef strcasecmp
|
||||||
|
|
Loading…
Reference in New Issue