18ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 28ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareCopyright (c) 2010, Intel Corporation 38ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareAll rights reserved. 48ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 58ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareRedistribution and use in source and binary forms, with or without 68ff1a2759a6389bed30d7862d0beb76077032c99Bruce Bearemodification, are permitted provided that the following conditions are met: 78ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 88ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * Redistributions of source code must retain the above copyright notice, 98ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * this list of conditions and the following disclaimer. 108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * Redistributions in binary form must reproduce the above copyright notice, 128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * this list of conditions and the following disclaimer in the documentation 138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * and/or other materials provided with the distribution. 148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * Neither the name of Intel Corporation nor the names of its contributors 168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * may be used to endorse or promote products derived from this software 178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * without specific prior written permission. 188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 208ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 258ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare*/ 308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef L 328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define L(label) .L##label 338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_startproc 368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_startproc .cfi_startproc 378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_endproc 408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_endproc .cfi_endproc 418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_rel_offset 448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off 458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_restore 48124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare# define cfi_restore(reg) .cfi_restore reg 498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_adjust_cfa_offset 528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off 538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 55124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifndef cfi_remember_state 56124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare# define cfi_remember_state .cfi_remember_state 57124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif 58124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 59124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifndef cfi_restore_state 60124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare# define cfi_restore_state .cfi_restore_state 61124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif 62124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef ENTRY 648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define ENTRY(name) \ 658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .type name, @function; \ 668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .globl name; \ 678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4; \ 688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Bearename: \ 698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cfi_startproc 708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef END 738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define END(name) \ 748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cfi_endproc; \ 758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .size name, .-name 768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define CFI_PUSH(REG) \ 798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cfi_adjust_cfa_offset (4); \ 808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cfi_rel_offset (REG, 0) 818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define CFI_POP(REG) \ 838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cfi_adjust_cfa_offset (-4); \ 848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cfi_restore (REG) 858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define PUSH(REG) pushl REG; CFI_PUSH (REG) 878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define POP(REG) popl REG; CFI_POP (REG) 888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef USE_AS_STRNCMP 908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define STR1 4 918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define STR2 STR1+4 928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define RETURN ret 938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define UPDATE_STRNCMP_COUNTER 958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#else 968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define STR1 8 978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define STR2 STR1+4 988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define CNT STR2+4 998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define RETURN POP (%ebp); ret; CFI_PUSH (%ebp) 1008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define UPDATE_STRNCMP_COUNTER \ 1028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare /* calculate left number to compare */ \ 1038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %esi; \ 1048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %esi; \ 105c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl %esi, %ebp; \ 1068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq); \ 1078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %esi, %ebp 1088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef STRCMP 1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define STRCMP strcmp 1120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .section .text.ssse3,"ax",@progbits 1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaENTRY (STRCMP) 1168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare PUSH (%ebp) 1188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl STR1(%esp), %edx 1208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl STR2(%esp), %eax 1218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl CNT(%esp), %ebp 123c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 1248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jb L(less16bytes_sncmp) 1258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(more16bytes) 1268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl (%eax), %ecx 1298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, (%edx) 1308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 1(%eax), %ecx 1358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 1(%edx) 1368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 2(%eax), %ecx 1418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 2(%edx) 1428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 3(%eax), %ecx 1478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 3(%edx) 1488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 4(%eax), %ecx 1538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 4(%edx) 1548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 5(%eax), %ecx 1598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 5(%edx) 1608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 6(%eax), %ecx 1658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 6(%edx) 1668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 7(%eax), %ecx 1718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 7(%edx) 1728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $8, %edx 1778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $8, %eax 1788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 179c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %ebp 1808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -8(%ebp), %ebp 1818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1828ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more16bytes): 1838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl %edx, %ecx 1858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %ecx 186c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $0xff0, %ecx 1878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(crosspage) 1888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %eax, %ecx 1898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %ecx 190c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $0xff0, %ecx 1918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(crosspage) 1928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 1938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movlpd (%eax), %xmm1 1948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movlpd (%edx), %xmm2 1958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movhpd 8(%eax), %xmm1 1968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movhpd 8(%edx), %xmm2 1978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 1988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 1998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 2008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %ecx 2018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %ecx 2028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less16bytes) 2038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 204c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 2058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 2068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 2078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %eax 2098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edx 2108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2118ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(crosspage): 2128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare PUSH (%ebx) 2148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare PUSH (%edi) 2158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare PUSH (%esi) 216124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifdef USE_AS_STRNCMP 217124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 218124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif 2198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl %edx, %edi 2218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl %eax, %ecx 2228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xf, %ecx 2238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xf, %edi 2248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %ecx, %eax 2258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %edi, %edx 2268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %ebx, %ebx 227c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl %edi, %ecx 2288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_0) 2298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(bigger) 2308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $0x20, %ebx 2318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xchg %edx, %eax 2328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xchg %ecx, %edi 2338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(bigger): 2348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 15(%edi), %edi 2358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %edi 236c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %edi 2378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jle L(ashr_less_8) 238c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $14, %edi 2398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_15) 240c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $13, %edi 2418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_14) 242c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $12, %edi 2438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_13) 244c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $11, %edi 2458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_12) 246c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $10, %edi 2478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_11) 248c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $9, %edi 2498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_10) 2508ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_less_8): 2518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_9) 252c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %edi 2538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_8) 254c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $6, %edi 2558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_7) 256c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $5, %edi 2578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_6) 258c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $4, %edi 2598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_5) 260c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $3, %edi 2618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_4) 262c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $2, %edi 2638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_3) 264c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $1, %edi 2658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_2) 266c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $0, %edi 2678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_1) 2688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 2708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_0 2718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 2728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(0~15) n(0~15) 15(15+ n-n) ashr_0 2738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 2748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 2758ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_0): 2768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 2778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 2788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 2798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 2808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edx), %xmm1 2818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 2828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %edi 2838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 2848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 2858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 2868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %ecx, %edi 2878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(less32bytes) 2888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 2898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0x10, %ebx 2908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0x10, %ecx 2918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 2928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 2938ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_0): 2948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 2958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 2968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 2988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 2998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 3008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 3018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 3028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 304c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 3058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 3068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 3078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 3088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 3098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_0) 3108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 3128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_1 3138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 3148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(15) n -15 0(15 +(n-15) - n) ashr_1 3158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 3168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 3178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_1): 3188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 3198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 3208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 3218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 3228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 3238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $15, %xmm2 3248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 3258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 3268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 3278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 3288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 3298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 3308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -15(%ecx), %edi 3318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 3328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 3348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 3368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 3378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 3388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $1, %ebx 3398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 1(%edx), %edi 3408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 3418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 3428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 3448ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_1): 3458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 3468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_1) 3478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_1): 3498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 3508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 3518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 3528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1, %xmm3, %xmm2 3548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 3568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 3578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 3588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 3598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 3608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 362c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 3638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 3648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 3658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 3668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 3688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 3698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 3718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_1) 3728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 3748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 3758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 3768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1, %xmm3, %xmm2 3788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 3808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 3818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 3828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 3838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 3848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 387c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 3888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 3898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 3908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 3918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 3928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 3938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_1) 3948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 3968ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_1): 3978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 3988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 3998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfffe, %esi 4008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_1_exittail) 4018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 403c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $15, %ebp 4048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_1_exittail) 4058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 4068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 4078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 4088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_1) 4098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 4118ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_1_exittail): 4128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 4138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $1, %xmm0 4148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $1, %xmm3 4158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 4168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 4188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_2 4198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 4208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(14~15) n -14 1(15 +(n-14) - n) ashr_2 4218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 4228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 4238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_2): 4248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 4258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 4268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 4278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 4288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 4298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $14, %xmm2 4308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 4318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 4328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 4338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 4348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 4358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 4368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -14(%ecx), %edi 4378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 4388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 4408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 4428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 4438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 4448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $2, %ebx 4458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 2(%edx), %edi 4468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 4478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 4488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 4508ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_2): 4518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 4528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_2) 4538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_2): 4558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 4568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 4578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 4588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2, %xmm3, %xmm2 4608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 4628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 4638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 4648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 4658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 4668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 4678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 469c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 4708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 4718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 4728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 4738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 4748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 4758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 4778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_2) 4788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 4808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 4818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 4828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2, %xmm3, %xmm2 4848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 4868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 4878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 4888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 4898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 4908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 4918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 493c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 4948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 4958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 4968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 4978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 4988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 4998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_2) 5008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 5028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_2): 5038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 5048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 5058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfffc, %esi 5068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_2_exittail) 5078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 509c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $14, %ebp 5108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_2_exittail) 5118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 5128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 5148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 5158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_2) 5168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 5188ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_2_exittail): 5198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 5208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $2, %xmm0 5218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $2, %xmm3 5228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 5238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 5258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_3 5268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 5278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(13~15) n -13 2(15 +(n-13) - n) ashr_3 5288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 5298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 5308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_3): 5318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 5328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 5338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 5348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 5358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 5368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $13, %xmm2 5378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 5388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 5398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 5408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 5418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 5428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 5438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -13(%ecx), %edi 5448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 5458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 5478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 5498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 5508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 5518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $3, %ebx 5528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 3(%edx), %edi 5538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 5548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 5558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 5578ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_3): 5588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 5598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_3) 5608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5618ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_3): 5628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 5638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 5648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 5658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3, %xmm3, %xmm2 5678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 5698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 5708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 5718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 5728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 5738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 5748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 576c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 5778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 5788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 5798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 5808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 5818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 5828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 5848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_3) 5858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 5878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 5888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 5898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3, %xmm3, %xmm2 5918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 5938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 5948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 5958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 5968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 5978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 5988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 600c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 6018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 6028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 6038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 6048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 6058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 6068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_3) 6078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 6098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_3): 6108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 6118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 6128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfff8, %esi 6138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_3_exittail) 6148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 616c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $13, %ebp 6178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_3_exittail) 6188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 6198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 6208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 6218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_3) 6228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 6248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_3_exittail): 6258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 6268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $3, %xmm0 6278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $3, %xmm3 6288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 6298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 6318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_4 6328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 6338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(12~15) n -12 3(15 +(n-12) - n) ashr_4 6348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 6358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 6368ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_4): 6378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 6388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 6398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 6408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 6418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 6428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $12, %xmm2 6438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 6448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 6458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 6468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 6478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 6488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 6498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -12(%ecx), %edi 6508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 6518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 6538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 6558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 6568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 6578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $4, %ebx 6588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 4(%edx), %edi 6598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 6608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 6618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 6638ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_4): 6648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 6658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_4) 6668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6678ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_4): 6688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 6698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 6708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 6718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4, %xmm3, %xmm2 6738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 6758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 6768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 6778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 6788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 6798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 6808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 682c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 6838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 6848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 6858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 6868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 6888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 6898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 6918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_4) 6928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 6948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 6958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 6968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4, %xmm3, %xmm2 6988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 7008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 7018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 7028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 7038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 7048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 7058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 707c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 7088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 7098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 7108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 7118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 7138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 7148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_4) 7158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 7178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_4): 7188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 7198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 7208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfff0, %esi 7218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_4_exittail) 7228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 724c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $12, %ebp 7258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_4_exittail) 7268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 7278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 7298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 7308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_4) 7318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 7338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_4_exittail): 7348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 7358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $4, %xmm0 7368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $4, %xmm3 7378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 7388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 7408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_5 7418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 7428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(11~15) n -11 4(15 +(n-11) - n) ashr_5 7438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 7448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 7458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_5): 7468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 7478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 7488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 7498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 7508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 7518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $11, %xmm2 7528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 7538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 7548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 7558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 7568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 7578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 7588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -11(%ecx), %edi 7598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 7608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 7628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 7648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 7658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 7668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $5, %ebx 7678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 5(%edx), %edi 7688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 7698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 7708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 7728ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_5): 7738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 7748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_5) 7758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_5): 7778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 7788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 7798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 7808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5, %xmm3, %xmm2 7828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 7848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 7858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 7868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 7878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 7888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 7898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 791c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 7928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 7938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 7948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 7958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 7968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 7978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 7998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_5) 8008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 8028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 8038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 8048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5, %xmm3, %xmm2 8068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 8088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 8098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 8108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 8118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 8128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 815c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 8168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 8178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 8188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 8198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 8208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 8218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_5) 8228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 8248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_5): 8258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 8268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 8278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xffe0, %esi 8288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_5_exittail) 8298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 831c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $11, %ebp 8328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_5_exittail) 8338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 8348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 8358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 8368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_5) 8378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 8398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_5_exittail): 8408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 8418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $5, %xmm0 8428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $5, %xmm3 8438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 8448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 8468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_6 8478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 8488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(10~15) n -10 5(15 +(n-10) - n) ashr_6 8498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 8508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 8528ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_6): 8538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 8548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 8558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 8568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 8578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 8588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $10, %xmm2 8598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 8608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 8618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 8628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 8638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 8648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 8658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -10(%ecx), %edi 8668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 8678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 8698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 8718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 8728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 8738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $6, %ebx 8748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 6(%edx), %edi 8758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 8768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 8778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 8798ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_6): 8808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 8818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_6) 8828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8838ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_6): 8848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 8858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 8868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 8878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6, %xmm3, %xmm2 8898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 8918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 8928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 8938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 8948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 8958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 898c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 8998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 9008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 9018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 9028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 9048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 9058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 9078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_6) 9088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 9108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 9118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 9128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6, %xmm3, %xmm2 9148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 9168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 9178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 9188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 9198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 9208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 9218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 922c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 9238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 9248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 9258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 9268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 9288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 9298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_6) 9308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 9328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_6): 9338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 9348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 9358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xffc0, %esi 9368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_6_exittail) 9378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 939c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $10, %ebp 9408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_6_exittail) 9418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 9428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 9438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 9448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_6) 9458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 9478ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_6_exittail): 9488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 9498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $6, %xmm0 9508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $6, %xmm3 9518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 9528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 9548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_7 9558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 9568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(9~15) n - 9 6(15 +(n-9) - n) ashr_7 9578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 9588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 9608ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_7): 9618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 9628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 9638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 9648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 9658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 9668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $9, %xmm2 9678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 9688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 9698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 9708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 9718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 9728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 9738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -9(%ecx), %edi 9748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 9758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 9778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 9798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 9808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 9818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $7, %ebx 9828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 8(%edx), %edi 9838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 9848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 9858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 9878ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_7): 9888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 9898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_7) 9908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9918ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_7): 9928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 9938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 9948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 9958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7, %xmm3, %xmm2 9978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 9998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 10008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 10018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 10028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 10038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 10048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1006c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 10078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 10088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 10098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 10108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 10128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 10138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 10158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_7) 10168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 10188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 10198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 10208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7, %xmm3, %xmm2 10228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 10248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 10258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 10268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 10278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 10288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 10298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1031c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 10328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 10338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 10348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 10358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 10378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 10388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_7) 10398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 10418ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_7): 10428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 10438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 10448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xff80, %esi 10458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_7_exittail) 10468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1048c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $9, %ebp 10498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_7_exittail) 10508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 10518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 10528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 10538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 10548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_7) 10558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 10578ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_7_exittail): 10588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 10598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $7, %xmm0 10608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $7, %xmm3 10618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 10628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 10648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_8 10658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 10668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(8~15) n - 8 7(15 +(n-8) - n) ashr_8 10678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 10688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 10698ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_8): 10708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 10718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 10728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 10738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 10748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 10758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $8, %xmm2 10768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 10778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 10788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 10798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 10808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 10818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 10828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -8(%ecx), %edi 10838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 10848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 10868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 10888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 10898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 10908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $8, %ebx 10918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 8(%edx), %edi 10928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 10938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 10948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 10968ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_8): 10978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 10988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_8) 10998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_8): 11018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 11028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 11038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 11048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8, %xmm3, %xmm2 11068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 11088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 11098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 11108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 11118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 11128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 11138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1115c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 11168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 11178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 11188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 11198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 11208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 11218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 11238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_8) 11248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 11268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 11278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 11288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8, %xmm3, %xmm2 11308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 11328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 11338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 11348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 11358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 11368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 11378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1139c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 11408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 11418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 11428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 11438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 11448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 11458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_8) 11468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 11488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_8): 11498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 11508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 11518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xff00, %esi 11528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_8_exittail) 11538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1155c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %ebp 11568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_8_exittail) 11578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 11588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 11598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 11608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 11618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_8) 11628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 11648ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_8_exittail): 11658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 11668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $8, %xmm0 11678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $8, %xmm3 11688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 11698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 11718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_9 11728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 11738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(7~15) n - 7 8(15 +(n-7) - n) ashr_9 11748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 11758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 11768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_9): 11778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 11788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 11798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 11808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 11818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 11828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $7, %xmm2 11838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 11848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 11858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 11868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 11878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 11888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 11898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -7(%ecx), %edi 11908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 11918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 11938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 11958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 11968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 11978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $9, %ebx 11988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 9(%edx), %edi 11998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 12008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 12018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 12038ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_9): 12048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 12058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_9) 12068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_9): 12088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 12098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 12108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 12118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9, %xmm3, %xmm2 12138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 12158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 12168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 12178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 12188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 12198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 12208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1222c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 12238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 12248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 12258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 12268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 12278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 12288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 12308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_9) 12318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 12338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 12348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 12358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9, %xmm3, %xmm2 12378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 12398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 12408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 12418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 12428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 12438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 12448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1246c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 12478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 12488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 12498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 12508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 12518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 12528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_9) 12538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 12558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_9): 12568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 12578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 12588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfe00, %esi 12598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_9_exittail) 12608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1262c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %ebp 12638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_9_exittail) 12648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 12658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 12668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 12678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_9) 12688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 12708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_9_exittail): 12718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 12728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $9, %xmm0 12738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $9, %xmm3 12748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 12758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 12778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_10 12788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 12798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(6~15) n - 6 9(15 +(n-6) - n) ashr_10 12808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 12818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 12828ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_10): 12838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 12848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 12858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 12868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 12878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 12888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $6, %xmm2 12898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 12908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 12918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 12928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 12938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 12948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 12958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -6(%ecx), %edi 12968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 12978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 12998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 13018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 13028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 13038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $10, %ebx 13048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 10(%edx), %edi 13058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 13068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 13078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 13098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_10): 13108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 13118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_10) 13128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13138ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_10): 13148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 13158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 13168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 13178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10, %xmm3, %xmm2 13198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 13218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 13228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 13238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 13248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 13258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 13268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1328c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 13298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 13308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 13318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 13328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 13338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 13348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 13368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_10) 13378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 13398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 13408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 13418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10, %xmm3, %xmm2 13438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 13458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 13468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 13478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 13488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 13498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 13508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1352c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 13538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 13548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 13558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 13568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 13578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 13588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_10) 13598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 13618ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_10): 13628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 13638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 13648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfc00, %esi 13658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_10_exittail) 13668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1368c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $6, %ebp 13698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_10_exittail) 13708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 13718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 13728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 13738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_10) 13748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 13768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_10_exittail): 13778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 13788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $10, %xmm0 13798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $10, %xmm3 13808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 13818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 13838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_11 13848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 13858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(5~15) n - 5 10(15 +(n-5) - n) ashr_11 13868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 13878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 13888ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_11): 13898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 13908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 13918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 13928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 13938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 13948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $5, %xmm2 13958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 13968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 13978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 13988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 13998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 14008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 14018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -5(%ecx), %edi 14028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 14038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 14058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 14078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 14088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 14098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $11, %ebx 14108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 11(%edx), %edi 14118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 14128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 14138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 14158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_11): 14168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 14178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_11) 14188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_11): 14208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 14218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 14228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 14238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11, %xmm3, %xmm2 14258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 14278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 14288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 14298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 14308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 14318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 14328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1434c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 14358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 14368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 14378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 14388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 14398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 14408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 14428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_11) 14438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 14458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 14468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 14478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11, %xmm3, %xmm2 14498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 14518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 14528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 14538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 14548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 14558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 14568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1458c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 14598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 14608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 14618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 14628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 14638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 14648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_11) 14658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 14678ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_11): 14688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 14698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 14708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xf800, %esi 14718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_11_exittail) 14728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1474c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $5, %ebp 14758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_11_exittail) 14768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 14778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 14788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 14798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_11) 14808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 14828ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_11_exittail): 14838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 14848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $11, %xmm0 14858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $11, %xmm3 14868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 14878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 14898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_12 14908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 14918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(4~15) n - 4 11(15 +(n-4) - n) ashr_12 14928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 14938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 14948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_12): 14958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 14968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 14978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 14988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 14998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 15008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $4, %xmm2 15018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 15028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 15038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 15048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 15058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 15068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 15078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -4(%ecx), %edi 15088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 15098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 15118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 15138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 15148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 15158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $12, %ebx 15168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 12(%edx), %edi 15178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 15188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 15198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 15218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_12): 15228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 15238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_12) 15248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15258ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_12): 15268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 15278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 15288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 15298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12, %xmm3, %xmm2 15318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 15338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 15348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 15358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 15368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 15378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 15388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1539124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifdef USE_AS_STRNCMP 1540c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 1541124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea -16(%ebp), %ebp 1542124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jbe L(more8byteseq) 1543124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif 1544124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 15458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 15468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 15478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 15498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_12) 15508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 15528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 15538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 15548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12, %xmm3, %xmm2 15568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 15588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 15598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 15608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 15618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 15628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 15638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1565c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 15668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 15678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 15688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 15698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 15708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 15718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_12) 15728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 15748ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_12): 15758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 15768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 15778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xf000, %esi 15788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_12_exittail) 15798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1581c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $4, %ebp 15828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_12_exittail) 15838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 15848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 15858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 15868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_12) 15878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 15898ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_12_exittail): 15908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 15918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $12, %xmm0 15928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $12, %xmm3 15938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 15948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 15968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_13 15978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 15988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(3~15) n - 3 12(15 +(n-3) - n) ashr_13 15998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 16008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 16018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_13): 16028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 16038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 16048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 16058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 16068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 16078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $3, %xmm2 16088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 16098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 16108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 16118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 16128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 16138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 16148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -3(%ecx), %edi 16158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 16168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 16188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 16208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 16218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 16228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $13, %ebx 16238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 13(%edx), %edi 16248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 16258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 16268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 16288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_13): 16298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 16308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_13) 16318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_13): 16338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 16348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 16358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 16368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13, %xmm3, %xmm2 16388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 16408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 16418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 16428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 16438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 16448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 16458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1647c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 16488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 16498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 16508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 16518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 16528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 16538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 16558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_13) 16568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 16588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 16598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 16608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13, %xmm3, %xmm2 16628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 16648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 16658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 16668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 16678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 16688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 16698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1671c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 16728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 16738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 16748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 16758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 16768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 16778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_13) 16788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 16808ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_13): 16818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 16828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 16838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xe000, %esi 16848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_13_exittail) 16858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1687c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $3, %ebp 16888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_13_exittail) 16898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 16908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 16918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 16928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_13) 16938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 16958ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_13_exittail): 16968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 16978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $13, %xmm0 16988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $13, %xmm3 16998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 17008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 17028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_14 17038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 17048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(2~15) n - 2 13(15 +(n-2) - n) ashr_14 17058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 17068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 17078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_14): 17088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 17098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 17108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 17118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 17128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 17138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $2, %xmm2 17148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 17158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 17168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 17178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 17188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 17198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 17208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -2(%ecx), %edi 17218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 17228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 17248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 17268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 17278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 17288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $14, %ebx 17298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 14(%edx), %edi 17308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 17318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 17328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 17348ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_14): 17358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 17368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_14) 17378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17388ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_14): 17398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 17408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 17418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 17428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14, %xmm3, %xmm2 17448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 17468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 17478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 17488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 17498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 17508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 17518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1753c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 17548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 17558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 17568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 17578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 17588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 17598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 17618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_14) 17628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 17648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 17658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 17668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14, %xmm3, %xmm2 17688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 17708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 17718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 17728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 17738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 17748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 17758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1777c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 17788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 17798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 17808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 17818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 17828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 17838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_14) 17848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 17868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_14): 17878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 17888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 17898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xc000, %esi 17908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_14_exittail) 17918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1793c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $2, %ebp 17948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_14_exittail) 17958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 17968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 17978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 17988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_14) 17998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 18018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_14_exittail): 18028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 18038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $14, %xmm0 18048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $14, %xmm3 18058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 18068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 18088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_14 18098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 18108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(1~15) n - 1 14(15 +(n-1) - n) ashr_15 18118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 18128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 18148ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_15): 18158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 18168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 18178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 18188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 18198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 18208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $1, %xmm2 18218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 18228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 18238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 18248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 18258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 18268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 18278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -1(%ecx), %edi 18288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 18298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 18318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 18338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 18348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 18358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $15, %ebx 18368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 15(%edx), %edi 18378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 18388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 18398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 18418ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_15): 18428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 18438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_15) 18448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_15): 18468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 18478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 18488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 18498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15, %xmm3, %xmm2 18518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 18538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 18548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 18558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 18568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 18578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 18588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1860c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 18618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 18628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 18638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 18648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 18658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 18668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 18688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_15) 18698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 18718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 18728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 18738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15, %xmm3, %xmm2 18758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 18778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 18788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 18798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 18808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 18818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 18828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1884c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 18858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 18868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 18878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 18888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 18898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 18908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_15) 18918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 18938ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_15): 18948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 18958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 18968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x8000, %esi 18978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_15_exittail) 18988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1900c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $1, %ebp 19018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_15_exittail) 19028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 19038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 19048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 19058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_15) 19068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19088ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_15_exittail): 19098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 19108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $15, %xmm0 19118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $15, %xmm3 19128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 19138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(aftertail): 19168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm1 19178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 19188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 19198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare not %esi 19208ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(exit): 19218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %ebx, %edi 19228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0x1f, %edi 19238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%edi, %ecx), %edi 19248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less32bytes): 19258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add %edi, %edx 19268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add %ecx, %eax 19278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x20, %ebx 19288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(ret2) 19298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xchg %eax, %edx 19308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ret2): 19338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %esi, %ecx 19348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%esi) 19358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%edi) 19368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%ebx) 19378ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes): 19388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 19398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(2next_8_bytes) 19408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x01, %cl 19428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte0) 19438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x02, %cl 19458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte1) 19468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x04, %cl 19488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte2) 19498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x08, %cl 19518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte3) 19528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x10, %cl 19548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte4) 19558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x20, %cl 19578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte5) 19588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x40, %cl 19608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte6) 19618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1962c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %ebp 19638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 19648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 19658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1966c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 7(%eax), %ecx 1967c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 7(%edx), %eax 19688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 19708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 19718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19738ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte0): 19748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1975c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $0, %ebp 19768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 19778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1978c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl (%eax), %ecx 1979c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl (%edx), %eax 19808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 19828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 19838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19858ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte1): 19868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1987c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $1, %ebp 19888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 19898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1990c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 1(%eax), %ecx 1991c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 1(%edx), %eax 19928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 19948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 19958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19978ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte2): 19988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1999c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $2, %ebp 20008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2002c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 2(%eax), %ecx 2003c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 2(%edx), %eax 20048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte3): 20108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2011c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $3, %ebp 20128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2014c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 3(%eax), %ecx 2015c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 3(%edx), %eax 20168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte4): 20228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2023c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $4, %ebp 20248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2026c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 4(%eax), %ecx 2027c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 4(%edx), %eax 20288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte5): 20348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2035c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $5, %ebp 20368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2038c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 5(%eax), %ecx 2039c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 5(%edx), %eax 20408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte6): 20468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2047c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $6, %ebp 20488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2050c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 6(%eax), %ecx 2051c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 6(%edx), %eax 20528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20578ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(2next_8_bytes): 20588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $8, %eax 20598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $8, %edx 20608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2061c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %ebp 20628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -8(%ebp), %ebp 20638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 20658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x01, %ch 20678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte0) 20688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x02, %ch 20708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte1) 20718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x04, %ch 20738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte2) 20748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x08, %ch 20768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte3) 20778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x10, %ch 20798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte4) 20808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x20, %ch 20828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte5) 20838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x40, %ch 20858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte6) 20868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2088c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %ebp 20898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2091c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 7(%eax), %ecx 2092c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 7(%edx), %eax 20938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20988ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(neq): 20998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $1, %eax 21008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(neq_bigger) 21018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare neg %eax 21028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(neq_bigger): 21038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 21048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2106124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 21078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 21088ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more8byteseq): 21098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%esi) 21108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%edi) 21118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%ebx) 21128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 21138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21148ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(eq): 21158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 21178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%ebp) 21188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 21198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xorl %eax, %eax 21208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 21218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 21238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare CFI_PUSH (%ebp) 21248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 21268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes_sncmp): 21278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %ebp, %ebp 21288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(eq) 21298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl (%eax), %ecx 21318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, (%edx) 21328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2136c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $1, %ebp 21378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 1(%eax), %ecx 21408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 1(%edx) 21418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2145c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $2, %ebp 21468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 2(%eax), %ecx 21498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 2(%edx) 21508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2154c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $3, %ebp 21558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 3(%eax), %ecx 21588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 3(%edx) 21598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2163c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $4, %ebp 21648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 4(%eax), %ecx 21678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 4(%edx) 21688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2172c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $5, %ebp 21738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 5(%eax), %ecx 21768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 5(%edx) 21778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2181c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $6, %ebp 21828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 6(%eax), %ecx 21858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 6(%edx) 21868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2190c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %ebp 21918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 7(%eax), %ecx 21948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 7(%edx) 21958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2200c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %ebp 22018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 8(%eax), %ecx 22048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 8(%edx) 22058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2209c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $9, %ebp 22108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 9(%eax), %ecx 22138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 9(%edx) 22148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2218c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $10, %ebp 22198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 10(%eax), %ecx 22228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 10(%edx) 22238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2227c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $11, %ebp 22288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 11(%eax), %ecx 22318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 11(%edx) 22328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2237c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $12, %ebp 22388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 12(%eax), %ecx 22418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 12(%edx) 22428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2246c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $13, %ebp 22478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 13(%eax), %ecx 22508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 13(%edx) 22518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2255c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $14, %ebp 22568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 14(%eax), %ecx 22598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 14(%edx) 22608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2264c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $15, %ebp 22658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 15(%eax), %ecx 22688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 15(%edx) 22698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%ebp) 22748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %eax, %eax 22758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 22768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 22778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22780a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (STRCMP) 2279