diff options
Diffstat (limited to 'sysdeps/i386/i686/multiarch/strcmp-ssse3.S')
-rw-r--r-- | sysdeps/i386/i686/multiarch/strcmp-ssse3.S | 2810 |
1 files changed, 0 insertions, 2810 deletions
diff --git a/sysdeps/i386/i686/multiarch/strcmp-ssse3.S b/sysdeps/i386/i686/multiarch/strcmp-ssse3.S deleted file mode 100644 index fb21288c7d..0000000000 --- a/sysdeps/i386/i686/multiarch/strcmp-ssse3.S +++ /dev/null @@ -1,2810 +0,0 @@ -/* strcmp with SSSE3 - Copyright (C) 2010-2015 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if IS_IN (libc) - -#include <sysdep.h> -#include "asm-syntax.h" - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) - -#ifdef USE_AS_STRNCMP -# ifndef STRCMP -# define STRCMP __strncmp_ssse3 -# endif -# define STR1 8 -# define STR2 STR1+4 -# define CNT STR2+4 -# define RETURN POP (REM); ret; .p2align 4; CFI_PUSH (REM) -# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - mov $16, %esi; \ - sub %ecx, %esi; \ - cmp %esi, REM; \ - jbe L(more8byteseq); \ - sub %esi, REM -# define FLAGS %ebx -# define REM %ebp -#elif defined USE_AS_STRCASECMP_L -# include "locale-defines.h" -# ifndef STRCMP -# define STRCMP __strcasecmp_l_ssse3 -# endif -# ifdef PIC -# define STR1 8 -# else -# define STR1 4 -# endif -# define STR2 STR1+4 -# define LOCALE 12 /* Loaded before the adjustment. */ -# ifdef PIC -# define RETURN POP (%ebx); ret; .p2align 4; CFI_PUSH (%ebx) -# else -# define RETURN ret; .p2align 4 -# endif -# define UPDATE_STRNCMP_COUNTER -# define FLAGS (%esp) -# define NONASCII __strcasecmp_nonascii -#elif defined USE_AS_STRNCASECMP_L -# include "locale-defines.h" -# ifndef STRCMP -# define STRCMP __strncasecmp_l_ssse3 -# endif -# ifdef PIC -# define STR1 12 -# else -# define STR1 8 -# endif -# define STR2 STR1+4 -# define CNT STR2+4 -# define LOCALE 16 /* Loaded before the adjustment. */ -# ifdef PIC -# define RETURN POP (REM); POP (%ebx); ret; \ - .p2align 4; CFI_PUSH (%ebx); CFI_PUSH (REM) -# else -# define RETURN POP (REM); ret; .p2align 4; CFI_PUSH (REM) -# endif -# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - mov $16, %esi; \ - sub %ecx, %esi; \ - cmp %esi, REM; \ - jbe L(more8byteseq); \ - sub %esi, REM -# define FLAGS (%esp) -# define REM %ebp -# define NONASCII __strncasecmp_nonascii -#else -# ifndef STRCMP -# define STRCMP __strcmp_ssse3 -# endif -# define STR1 4 -# define STR2 STR1+4 -# define RETURN ret; .p2align 4 -# define UPDATE_STRNCMP_COUNTER -# define FLAGS %ebx -#endif - - .section .text.ssse3,"ax",@progbits - -#ifdef USE_AS_STRCASECMP_L -ENTRY (__strcasecmp_ssse3) -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) - movl __libc_tsd_LOCALE@GOTNTPOFF(%ebx), %eax -# ifdef NO_TLS_DIRECT_SEG_REFS - addl %gs:0, %eax - movl (%eax), %eax -# else - movl %gs:(%eax), %eax -# endif -# else -# ifdef NO_TLS_DIRECT_SEG_REFS - movl %gs:0, %eax - movl __libc_tsd_LOCALE@NTPOFF(%eax), %eax -# else - movl %gs:__libc_tsd_LOCALE@NTPOFF, %eax -# endif -# endif -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - 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 - -#ifdef USE_AS_STRNCASECMP_L -ENTRY (__strncasecmp_ssse3) -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) - movl __libc_tsd_LOCALE@GOTNTPOFF(%ebx), %eax -# ifdef NO_TLS_DIRECT_SEG_REFS - addl %gs:0, %eax - movl (%eax), %eax -# else - movl %gs:(%eax), %eax -# endif -# else -# ifdef NO_TLS_DIRECT_SEG_REFS - movl %gs:0, %eax - movl __libc_tsd_LOCALE@NTPOFF(%eax), %eax -# else - movl %gs:__libc_tsd_LOCALE@NTPOFF, %eax -# endif -# endif -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - 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 - -ENTRY (STRCMP) -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movl LOCALE(%esp), %eax -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - movl (%eax), %eax -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) - jne NONASCII - -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) -# endif -L(ascii): - .section .rodata.cst16,"aM",@progbits,16 - .align 16 -.Lbelowupper: - .quad 0x4040404040404040 - .quad 0x4040404040404040 -.Ltopupper: - .quad 0x5b5b5b5b5b5b5b5b - .quad 0x5b5b5b5b5b5b5b5b -.Ltouppermask: - .quad 0x2020202020202020 - .quad 0x2020202020202020 - .previous - -# ifdef PIC -# define UCLOW_reg .Lbelowupper@GOTOFF(%ebx) -# define UCHIGH_reg .Ltopupper@GOTOFF(%ebx) -# define LCQWORD_reg .Ltouppermask@GOTOFF(%ebx) -# else -# define UCLOW_reg .Lbelowupper -# define UCHIGH_reg .Ltopupper -# define LCQWORD_reg .Ltouppermask -# endif -#endif - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - PUSH (REM) -#endif - - movl STR1(%esp), %edx - movl STR2(%esp), %eax -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - movl CNT(%esp), REM - cmp $16, REM - jb L(less16bytes_sncmp) -#elif !defined USE_AS_STRCASECMP_L - movzbl (%eax), %ecx - cmpb %cl, (%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 1(%eax), %ecx - cmpb %cl, 1(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 2(%eax), %ecx - cmpb %cl, 2(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 3(%eax), %ecx - cmpb %cl, 3(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 4(%eax), %ecx - cmpb %cl, 4(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 5(%eax), %ecx - cmpb %cl, 5(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 6(%eax), %ecx - cmpb %cl, 6(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 7(%eax), %ecx - cmpb %cl, 7(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - add $8, %edx - add $8, %eax -#endif - movl %edx, %ecx - and $0xfff, %ecx - cmp $0xff0, %ecx - ja L(crosspage) - mov %eax, %ecx - and $0xfff, %ecx - cmp $0xff0, %ecx - ja L(crosspage) - pxor %xmm0, %xmm0 - movlpd (%eax), %xmm1 - movlpd (%edx), %xmm2 - movhpd 8(%eax), %xmm1 - movhpd 8(%edx), %xmm2 -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# define TOLOWER(reg1, reg2) \ - movdqa reg1, %xmm5; \ - movdqa reg2, %xmm7; \ - movdqa UCHIGH_reg, %xmm6; \ - pcmpgtb UCLOW_reg, %xmm5; \ - pcmpgtb UCLOW_reg, %xmm7; \ - pcmpgtb reg1, %xmm6; \ - pand %xmm6, %xmm5; \ - movdqa UCHIGH_reg, %xmm6; \ - pcmpgtb reg2, %xmm6; \ - pand %xmm6, %xmm7; \ - pand LCQWORD_reg, %xmm5; \ - por %xmm5, reg1; \ - pand LCQWORD_reg, %xmm7; \ - por %xmm7, reg2 - TOLOWER (%xmm1, %xmm2) -#else -# define TOLOWER(reg1, reg2) -#endif - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %ecx - sub $0xffff, %ecx - jnz L(less16bytes) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(eq) -#endif - add $16, %eax - add $16, %edx - -L(crosspage): - -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - PUSH (FLAGS) -#endif - PUSH (%edi) - PUSH (%esi) -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - pushl $0 - cfi_adjust_cfa_offset (4) -#endif -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cfi_remember_state -#endif - - movl %edx, %edi - movl %eax, %ecx - and $0xf, %ecx - and $0xf, %edi - xor %ecx, %eax - xor %edi, %edx -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - xor FLAGS, FLAGS -#endif - cmp %edi, %ecx - je L(ashr_0) - ja L(bigger) - orl $0x20, FLAGS - xchg %edx, %eax - xchg %ecx, %edi -L(bigger): - lea 15(%edi), %edi - sub %ecx, %edi - cmp $8, %edi - jle L(ashr_less_8) - cmp $14, %edi - je L(ashr_15) - cmp $13, %edi - je L(ashr_14) - cmp $12, %edi - je L(ashr_13) - cmp $11, %edi - je L(ashr_12) - cmp $10, %edi - je L(ashr_11) - cmp $9, %edi - je L(ashr_10) -L(ashr_less_8): - je L(ashr_9) - cmp $7, %edi - je L(ashr_8) - cmp $6, %edi - je L(ashr_7) - cmp $5, %edi - je L(ashr_6) - cmp $4, %edi - je L(ashr_5) - cmp $3, %edi - je L(ashr_4) - cmp $2, %edi - je L(ashr_3) - cmp $1, %edi - je L(ashr_2) - cmp $0, %edi - je L(ashr_1) - -/* - * The following cases will be handled by ashr_0 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(0~15) n(0~15) 15(15+ n-n) ashr_0 - */ - .p2align 4 -L(ashr_0): - mov $0xffff, %esi - movdqa (%eax), %xmm1 - pxor %xmm0, %xmm0 - pcmpeqb %xmm1, %xmm0 -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movdqa (%edx), %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm2, %xmm1 -#else - pcmpeqb (%edx), %xmm1 -#endif - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - mov %ecx, %edi - jne L(less32bytes) - UPDATE_STRNCMP_COUNTER - movl $0x10, FLAGS - mov $0x10, %ecx - pxor %xmm0, %xmm0 - .p2align 4 -L(loop_ashr_0): - movdqa (%eax, %ecx), %xmm1 -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movdqa (%edx, %ecx), %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -#else - pcmpeqb %xmm1, %xmm0 - pcmpeqb (%edx, %ecx), %xmm1 -#endif - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - jmp L(loop_ashr_0) - -/* - * The following cases will be handled by ashr_1 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(15) n -15 0(15 +(n-15) - n) ashr_1 - */ - .p2align 4 -L(ashr_1): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $15, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -15(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $1, FLAGS - lea 1(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_1): - add $16, %edi - jg L(nibble_ashr_1) - -L(gobble_ashr_1): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $1, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_1) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $1, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_1) - - .p2align 4 -L(nibble_ashr_1): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfffe, %esi - jnz L(ashr_1_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $15, REM - jbe L(ashr_1_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_1) - - .p2align 4 -L(ashr_1_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $1, %xmm0 - psrldq $1, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_2 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(14~15) n -14 1(15 +(n-14) - n) ashr_2 - */ - .p2align 4 -L(ashr_2): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $14, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -14(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $2, FLAGS - lea 2(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_2): - add $16, %edi - jg L(nibble_ashr_2) - -L(gobble_ashr_2): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $2, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_2) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $2, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_2) - - .p2align 4 -L(nibble_ashr_2): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfffc, %esi - jnz L(ashr_2_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $14, REM - jbe L(ashr_2_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_2) - - .p2align 4 -L(ashr_2_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $2, %xmm0 - psrldq $2, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_3 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(13~15) n -13 2(15 +(n-13) - n) ashr_3 - */ - .p2align 4 -L(ashr_3): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $13, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -13(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $3, FLAGS - lea 3(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_3): - add $16, %edi - jg L(nibble_ashr_3) - -L(gobble_ashr_3): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $3, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_3) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $3, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_3) - - .p2align 4 -L(nibble_ashr_3): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfff8, %esi - jnz L(ashr_3_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $13, REM - jbe L(ashr_3_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_3) - - .p2align 4 -L(ashr_3_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $3, %xmm0 - psrldq $3, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_4 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(12~15) n -12 3(15 +(n-12) - n) ashr_4 - */ - .p2align 4 -L(ashr_4): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $12, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -12(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $4, FLAGS - lea 4(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_4): - add $16, %edi - jg L(nibble_ashr_4) - -L(gobble_ashr_4): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $4, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_4) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $4, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_4) - - .p2align 4 -L(nibble_ashr_4): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfff0, %esi - jnz L(ashr_4_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $12, REM - jbe L(ashr_4_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_4) - - .p2align 4 -L(ashr_4_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $4, %xmm0 - psrldq $4, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_5 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(11~15) n -11 4(15 +(n-11) - n) ashr_5 - */ - .p2align 4 -L(ashr_5): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $11, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -11(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $5, FLAGS - lea 5(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_5): - add $16, %edi - jg L(nibble_ashr_5) - -L(gobble_ashr_5): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $5, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_5) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $5, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_5) - - .p2align 4 -L(nibble_ashr_5): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xffe0, %esi - jnz L(ashr_5_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $11, REM - jbe L(ashr_5_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_5) - - .p2align 4 -L(ashr_5_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $5, %xmm0 - psrldq $5, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_6 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(10~15) n -10 5(15 +(n-10) - n) ashr_6 - */ - - .p2align 4 -L(ashr_6): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $10, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -10(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $6, FLAGS - lea 6(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_6): - add $16, %edi - jg L(nibble_ashr_6) - -L(gobble_ashr_6): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $6, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_6) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $6, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_6) - - .p2align 4 -L(nibble_ashr_6): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xffc0, %esi - jnz L(ashr_6_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $10, REM - jbe L(ashr_6_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_6) - - .p2align 4 -L(ashr_6_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $6, %xmm0 - psrldq $6, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_7 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(9~15) n - 9 6(15 +(n-9) - n) ashr_7 - */ - - .p2align 4 -L(ashr_7): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $9, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -9(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $7, FLAGS - lea 8(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_7): - add $16, %edi - jg L(nibble_ashr_7) - -L(gobble_ashr_7): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $7, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_7) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $7, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_7) - - .p2align 4 -L(nibble_ashr_7): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xff80, %esi - jnz L(ashr_7_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $9, REM - jbe L(ashr_7_exittail) -#endif - pxor %xmm0, %xmm0 - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_7) - - .p2align 4 -L(ashr_7_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $7, %xmm0 - psrldq $7, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_8 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(8~15) n - 8 7(15 +(n-8) - n) ashr_8 - */ - .p2align 4 -L(ashr_8): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $8, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -8(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $8, FLAGS - lea 8(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_8): - add $16, %edi - jg L(nibble_ashr_8) - -L(gobble_ashr_8): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $8, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_8) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $8, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_8) - - .p2align 4 -L(nibble_ashr_8): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xff00, %esi - jnz L(ashr_8_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $8, REM - jbe L(ashr_8_exittail) -#endif - pxor %xmm0, %xmm0 - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_8) - - .p2align 4 -L(ashr_8_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $8, %xmm0 - psrldq $8, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_9 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(7~15) n - 7 8(15 +(n-7) - n) ashr_9 - */ - .p2align 4 -L(ashr_9): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $7, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -7(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $9, FLAGS - lea 9(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_9): - add $16, %edi - jg L(nibble_ashr_9) - -L(gobble_ashr_9): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $9, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_9) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $9, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_9) - - .p2align 4 -L(nibble_ashr_9): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfe00, %esi - jnz L(ashr_9_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, REM - jbe L(ashr_9_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_9) - - .p2align 4 -L(ashr_9_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $9, %xmm0 - psrldq $9, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_10 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(6~15) n - 6 9(15 +(n-6) - n) ashr_10 - */ - .p2align 4 -L(ashr_10): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $6, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -6(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $10, FLAGS - lea 10(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_10): - add $16, %edi - jg L(nibble_ashr_10) - -L(gobble_ashr_10): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $10, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_10) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $10, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_10) - - .p2align 4 -L(nibble_ashr_10): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfc00, %esi - jnz L(ashr_10_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $6, REM - jbe L(ashr_10_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_10) - - .p2align 4 -L(ashr_10_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $10, %xmm0 - psrldq $10, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_11 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(5~15) n - 5 10(15 +(n-5) - n) ashr_11 - */ - .p2align 4 -L(ashr_11): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $5, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -5(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $11, FLAGS - lea 11(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_11): - add $16, %edi - jg L(nibble_ashr_11) - -L(gobble_ashr_11): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $11, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_11) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $11, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_11) - - .p2align 4 -L(nibble_ashr_11): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xf800, %esi - jnz L(ashr_11_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $5, REM - jbe L(ashr_11_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_11) - - .p2align 4 -L(ashr_11_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $11, %xmm0 - psrldq $11, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_12 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(4~15) n - 4 11(15 +(n-4) - n) ashr_12 - */ - .p2align 4 -L(ashr_12): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $4, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -4(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $12, FLAGS - lea 12(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_12): - add $16, %edi - jg L(nibble_ashr_12) - -L(gobble_ashr_12): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $12, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_12) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $12, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_12) - - .p2align 4 -L(nibble_ashr_12): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xf000, %esi - jnz L(ashr_12_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $4, REM - jbe L(ashr_12_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_12) - - .p2align 4 -L(ashr_12_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $12, %xmm0 - psrldq $12, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_13 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(3~15) n - 3 12(15 +(n-3) - n) ashr_13 - */ - .p2align 4 -L(ashr_13): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $3, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -3(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $13, FLAGS - lea 13(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_13): - add $16, %edi - jg L(nibble_ashr_13) - -L(gobble_ashr_13): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $13, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_13) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $13, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_13) - - .p2align 4 -L(nibble_ashr_13): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xe000, %esi - jnz L(ashr_13_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $3, REM - jbe L(ashr_13_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_13) - - .p2align 4 -L(ashr_13_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $13, %xmm0 - psrldq $13, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_14 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(2~15) n - 2 13(15 +(n-2) - n) ashr_14 - */ - .p2align 4 -L(ashr_14): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $2, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -2(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $14, FLAGS - lea 14(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_14): - add $16, %edi - jg L(nibble_ashr_14) - -L(gobble_ashr_14): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $14, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_14) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $14, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_14) - - .p2align 4 -L(nibble_ashr_14): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xc000, %esi - jnz L(ashr_14_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $2, REM - jbe L(ashr_14_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_14) - - .p2align 4 -L(ashr_14_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $14, %xmm0 - psrldq $14, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_14 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(1~15) n - 1 14(15 +(n-1) - n) ashr_15 - */ - - .p2align 4 -L(ashr_15): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $1, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -1(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $15, FLAGS - lea 15(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_15): - add $16, %edi - jg L(nibble_ashr_15) - -L(gobble_ashr_15): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $15, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_15) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $15, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_15) - - .p2align 4 -L(nibble_ashr_15): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0x8000, %esi - jnz L(ashr_15_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $1, REM - jbe L(ashr_15_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_15) - - .p2align 4 -L(ashr_15_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $15, %xmm0 - psrldq $15, %xmm3 - jmp L(aftertail) - - .p2align 4 -L(aftertail): - TOLOWER (%xmm1, %xmm3) - pcmpeqb %xmm3, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - not %esi -L(exit): - mov FLAGS, %edi - and $0x1f, %edi - lea -16(%edi, %ecx), %edi -L(less32bytes): - add %edi, %edx - add %ecx, %eax - testl $0x20, FLAGS - jz L(ret2) - xchg %eax, %edx - - .p2align 4 -L(ret2): - mov %esi, %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - addl $4, %esp - cfi_adjust_cfa_offset (-4) -#endif - POP (%esi) - POP (%edi) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - POP (FLAGS) -#endif -L(less16bytes): - test %cl, %cl - jz L(2next_8_bytes) - - test $0x01, %cl - jnz L(Byte0) - - test $0x02, %cl - jnz L(Byte1) - - test $0x04, %cl - jnz L(Byte2) - - test $0x08, %cl - jnz L(Byte3) - - test $0x10, %cl - jnz L(Byte4) - - test $0x20, %cl - jnz L(Byte5) - - test $0x40, %cl - jnz L(Byte6) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, REM - jbe L(eq) -#endif - - movzx 7(%eax), %ecx - movzx 7(%edx), %eax -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte0): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $0, REM - jbe L(eq) -#endif - movzx (%eax), %ecx - movzx (%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte1): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $1, REM - jbe L(eq) -#endif - movzx 1(%eax), %ecx - movzx 1(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte2): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $2, REM - jbe L(eq) -#endif - movzx 2(%eax), %ecx - movzx 2(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte3): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $3, REM - jbe L(eq) -#endif - movzx 3(%eax), %ecx - movzx 3(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte4): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $4, REM - jbe L(eq) -#endif - movzx 4(%eax), %ecx - movzx 4(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte5): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $5, REM - jbe L(eq) -#endif - movzx 5(%eax), %ecx - movzx 5(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte6): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $6, REM - jbe L(eq) -#endif - movzx 6(%eax), %ecx - movzx 6(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(2next_8_bytes): - add $8, %eax - add $8, %edx -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $8, REM - lea -8(REM), REM - jbe L(eq) -#endif - - test $0x01, %ch - jnz L(Byte0) - - test $0x02, %ch - jnz L(Byte1) - - test $0x04, %ch - jnz L(Byte2) - - test $0x08, %ch - jnz L(Byte3) - - test $0x10, %ch - jnz L(Byte4) - - test $0x20, %ch - jnz L(Byte5) - - test $0x40, %ch - jnz L(Byte6) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, REM - jbe L(eq) -#endif - movzx 7(%eax), %ecx - movzx 7(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -#ifdef USE_AS_STRNCMP -L(neq_sncmp): -#endif -L(neq): - mov $1, %eax - ja L(neq_bigger) - neg %eax -L(neq_bigger): -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - addl $4, %esp - cfi_adjust_cfa_offset (-4) -#endif -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - POP (REM) -#endif -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - POP (%ebx) -# endif -#endif - ret - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - .p2align 4 - cfi_restore_state -L(more8byteseq): - -# ifdef USE_AS_STRNCASECMP_L - addl $4, %esp - cfi_adjust_cfa_offset (-4) -# endif - POP (%esi) - POP (%edi) -# ifdef USE_AS_STRNCMP - POP (FLAGS) -# endif -#endif - -#ifdef USE_AS_STRNCMP -L(eq_sncmp): -#endif -L(eq): - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - POP (REM) -#endif -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - POP (%ebx) -# endif -#endif - xorl %eax, %eax - ret - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - .p2align 4 -# if defined USE_AS_STRNCASECMP_L && defined PIC - CFI_PUSH (%ebx) -# endif - CFI_PUSH (REM) -L(less16bytes_sncmp): -# ifdef USE_AS_STRNCASECMP_L - PUSH (%esi) -# endif - test REM, REM - jz L(eq_sncmp) - - movzbl (%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl (%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, (%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $1, REM - je L(eq_sncmp) - - movzbl 1(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 1(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 1(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $2, REM - je L(eq_sncmp) - - movzbl 2(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 2(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 2(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $3, REM - je L(eq_sncmp) - - movzbl 3(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 3(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 3(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $4, REM - je L(eq_sncmp) - - movzbl 4(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 4(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 4(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $5, REM - je L(eq_sncmp) - - movzbl 5(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 5(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 5(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $6, REM - je L(eq_sncmp) - - movzbl 6(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 6(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 6(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $7, REM - je L(eq_sncmp) - - movzbl 7(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 7(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 7(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - - cmp $8, REM - je L(eq_sncmp) - - movzbl 8(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 8(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 8(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $9, REM - je L(eq_sncmp) - - movzbl 9(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 9(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 9(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $10, REM - je L(eq_sncmp) - - movzbl 10(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 10(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 10(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $11, REM - je L(eq_sncmp) - - movzbl 11(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 11(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 11(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - - cmp $12, REM - je L(eq_sncmp) - - movzbl 12(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 12(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 12(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $13, REM - je L(eq_sncmp) - - movzbl 13(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 13(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 13(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $14, REM - je L(eq_sncmp) - - movzbl 14(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 14(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 14(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $15, REM - je L(eq_sncmp) - - movzbl 15(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 15(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 15(%edx) -# endif - jne L(neq_sncmp) - -# ifdef USE_AS_STRNCASECMP_L -L(eq_sncmp): - POP (%esi) -# endif - POP (REM) -# if defined USE_AS_STRNCASECMP_L && defined PIC - POP (%ebx) -# endif - xor %eax, %eax - ret - -# ifdef USE_AS_STRNCASECMP_L - .p2align 4 -# ifdef PIC - CFI_PUSH (%ebx) -# endif - CFI_PUSH (REM) - CFI_PUSH (%esi) -L(neq_sncmp): - mov $1, %eax - mov $-1, %edx - cmovna %edx, %eax - POP (%esi) - POP (REM) -# ifdef PIC - POP (%ebx) -# endif - ret -# endif -#endif - -END (STRCMP) - -#endif |