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) 118bff9cca9ca5817e97dd43962bb11b012cbb97f54Christopher Ferris cfi_remember_state 1198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl STR1(%esp), %edx 1218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl STR2(%esp), %eax 1228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl CNT(%esp), %ebp 124c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 1258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jb L(less16bytes_sncmp) 1268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(more16bytes) 1278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl (%eax), %ecx 1308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, (%edx) 1318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 1(%eax), %ecx 1368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 1(%edx) 1378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 2(%eax), %ecx 1428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 2(%edx) 1438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 3(%eax), %ecx 1488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 3(%edx) 1498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 4(%eax), %ecx 1548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 4(%edx) 1558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 5(%eax), %ecx 1608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 5(%edx) 1618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 6(%eax), %ecx 1668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 6(%edx) 1678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 7(%eax), %ecx 1728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 7(%edx) 1738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 1748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpl $0, %ecx 1758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $8, %edx 1788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $8, %eax 1798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 180c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %ebp 1818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -8(%ebp), %ebp 1828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 1838ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more16bytes): 1848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl %edx, %ecx 1868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %ecx 187c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $0xff0, %ecx 1888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(crosspage) 1898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %eax, %ecx 1908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %ecx 191c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $0xff0, %ecx 1928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(crosspage) 1938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 1948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movlpd (%eax), %xmm1 1958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movlpd (%edx), %xmm2 1968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movhpd 8(%eax), %xmm1 1978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movhpd 8(%edx), %xmm2 1988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 1998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 2008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 2018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %ecx 2028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %ecx 2038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less16bytes) 2048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 205c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 2068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 2078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 2088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %eax 2108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edx 2118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2128ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(crosspage): 2138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare PUSH (%ebx) 2158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare PUSH (%edi) 2168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare PUSH (%esi) 2178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl %edx, %edi 2198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl %eax, %ecx 2208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xf, %ecx 2218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xf, %edi 2228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %ecx, %eax 2238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %edi, %edx 2248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %ebx, %ebx 225c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl %edi, %ecx 2268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_0) 2278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(bigger) 2288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $0x20, %ebx 2298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xchg %edx, %eax 2308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xchg %ecx, %edi 2318ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(bigger): 2328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 15(%edi), %edi 2338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %edi 234c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %edi 2358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jle L(ashr_less_8) 236c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $14, %edi 2378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_15) 238c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $13, %edi 2398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_14) 240c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $12, %edi 2418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_13) 242c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $11, %edi 2438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_12) 244c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $10, %edi 2458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_11) 246c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $9, %edi 2478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_10) 2488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_less_8): 2498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_9) 250c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %edi 2518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_8) 252c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $6, %edi 2538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_7) 254c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $5, %edi 2558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_6) 256c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $4, %edi 2578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_5) 258c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $3, %edi 2598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_4) 260c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $2, %edi 2618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_3) 262c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $1, %edi 2638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_2) 264c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $0, %edi 2658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(ashr_1) 2668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 2688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_0 2698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 2708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(0~15) n(0~15) 15(15+ n-n) ashr_0 2718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 2728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 2738ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_0): 2748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 2758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 2768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 2778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 2788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edx), %xmm1 2798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 2808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %edi 2818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 2828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 2838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 2848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %ecx, %edi 2858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(less32bytes) 2868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 2878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0x10, %ebx 2888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0x10, %ecx 2898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 2908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 2918ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_0): 2928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 2938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 2948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 2968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 2978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 2988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 2998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 3008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 302c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 3038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 3048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 3058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 3068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 3078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_0) 3088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 3108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_1 3118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 3128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(15) n -15 0(15 +(n-15) - n) ashr_1 3138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 3148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 3158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_1): 3168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 3178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 3188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 3198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 3208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 3218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $15, %xmm2 3228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 3238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 3248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 3258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 3268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 3278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 3288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -15(%ecx), %edi 3298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 3308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 3328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 3348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 3358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 3368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $1, %ebx 3378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 1(%edx), %edi 3388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 3398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 3408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 3428ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_1): 3438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 3448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_1) 3458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3468ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_1): 3478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 3488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 3498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 3508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1, %xmm3, %xmm2 3528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 3548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 3558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 3568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 3578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 3588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 360c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 3618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 3628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 3638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 3648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 3668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 3678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 3698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_1) 3708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 3728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 3738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 3748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1, %xmm3, %xmm2 3768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 3788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 3798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 3808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 3818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 3828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 385c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 3868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 3878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 3888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 3898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 3908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 3918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_1) 3928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 3948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_1): 3958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 3968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 3978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfffe, %esi 3988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_1_exittail) 3998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 401c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $15, %ebp 4028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_1_exittail) 4038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 4048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 4058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 4068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_1) 4078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 4098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_1_exittail): 4108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 4118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $1, %xmm0 4128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $1, %xmm3 4138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 4148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 4168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_2 4178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 4188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(14~15) n -14 1(15 +(n-14) - n) ashr_2 4198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 4208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 4218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_2): 4228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 4238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 4248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 4258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 4268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 4278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $14, %xmm2 4288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 4298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 4308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 4318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 4328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 4338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 4348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -14(%ecx), %edi 4358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 4368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 4388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 4408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 4418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 4428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $2, %ebx 4438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 2(%edx), %edi 4448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 4458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 4468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 4488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_2): 4498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 4508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_2) 4518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4528ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_2): 4538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 4548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 4558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 4568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2, %xmm3, %xmm2 4588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 4608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 4618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 4628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 4638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 4648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 4658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 467c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 4688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 4698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 4708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 4718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 4728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 4738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 4758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_2) 4768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 4788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 4798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 4808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2, %xmm3, %xmm2 4828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 4848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 4858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 4868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 4878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 4888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 4898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 491c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 4928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 4938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 4948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 4958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 4968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 4978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_2) 4988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 5008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_2): 5018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 5028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 5038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfffc, %esi 5048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_2_exittail) 5058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 507c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $14, %ebp 5088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_2_exittail) 5098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 5108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 5128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 5138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_2) 5148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 5168ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_2_exittail): 5178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 5188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $2, %xmm0 5198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $2, %xmm3 5208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 5218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 5238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_3 5248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 5258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(13~15) n -13 2(15 +(n-13) - n) ashr_3 5268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 5278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 5288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_3): 5298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 5308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 5318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 5328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 5338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 5348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $13, %xmm2 5358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 5368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 5378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 5388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 5398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 5408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 5418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -13(%ecx), %edi 5428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 5438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 5458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 5478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 5488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 5498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $3, %ebx 5508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 3(%edx), %edi 5518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 5528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 5538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 5558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_3): 5568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 5578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_3) 5588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5598ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_3): 5608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 5618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 5628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 5638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3, %xmm3, %xmm2 5658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 5678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 5688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 5698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 5708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 5718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 5728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 574c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 5758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 5768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 5778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 5788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 5798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 5808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 5828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_3) 5838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 5858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 5868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 5878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3, %xmm3, %xmm2 5898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 5918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 5928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 5938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 5948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 5958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 5968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 598c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 5998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 6008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 6018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 6028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 6038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 6048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_3) 6058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 6078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_3): 6088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 6098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 6108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfff8, %esi 6118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_3_exittail) 6128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 614c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $13, %ebp 6158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_3_exittail) 6168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 6178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 6188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 6198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_3) 6208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 6228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_3_exittail): 6238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 6248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $3, %xmm0 6258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $3, %xmm3 6268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 6278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 6298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_4 6308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 6318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(12~15) n -12 3(15 +(n-12) - n) ashr_4 6328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 6338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 6348ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_4): 6358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 6368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 6378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 6388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 6398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 6408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $12, %xmm2 6418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 6428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 6438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 6448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 6458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 6468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 6478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -12(%ecx), %edi 6488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 6498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 6518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 6538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 6548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 6558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $4, %ebx 6568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 4(%edx), %edi 6578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 6588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 6598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 6618ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_4): 6628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 6638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_4) 6648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6658ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_4): 6668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 6678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 6688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 6698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4, %xmm3, %xmm2 6718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 6738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 6748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 6758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 6768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 6778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 6788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 680c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 6818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 6828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 6838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 6848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 6868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 6878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 6898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_4) 6908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 6928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 6938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 6948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4, %xmm3, %xmm2 6968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 6988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 6998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 7008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 7018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 7028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 7038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 705c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 7068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 7078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 7088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 7098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 7118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 7128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_4) 7138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 7158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_4): 7168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 7178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 7188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfff0, %esi 7198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_4_exittail) 7208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 722c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $12, %ebp 7238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_4_exittail) 7248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 7258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 7278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 7288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_4) 7298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 7318ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_4_exittail): 7328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 7338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $4, %xmm0 7348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $4, %xmm3 7358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 7368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 7388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_5 7398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 7408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(11~15) n -11 4(15 +(n-11) - n) ashr_5 7418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 7428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 7438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_5): 7448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 7458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 7468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 7478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 7488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 7498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $11, %xmm2 7508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 7518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 7528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 7538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 7548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 7558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 7568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -11(%ecx), %edi 7578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 7588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 7608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 7628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 7638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 7648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $5, %ebx 7658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 5(%edx), %edi 7668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 7678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 7688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 7708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_5): 7718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 7728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_5) 7738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7748ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_5): 7758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 7768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 7778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 7788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5, %xmm3, %xmm2 7808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 7828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 7838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 7848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 7858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 7868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 7878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 789c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 7908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 7918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 7928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 7938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 7948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 7958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 7978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_5) 7988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 8008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 8018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 8028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5, %xmm3, %xmm2 8048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 8068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 8078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 8088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 8098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 8108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 813c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 8148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 8158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 8168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 8178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 8188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 8198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_5) 8208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 8228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_5): 8238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 8248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 8258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xffe0, %esi 8268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_5_exittail) 8278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 829c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $11, %ebp 8308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_5_exittail) 8318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 8328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 8338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 8348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_5) 8358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 8378ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_5_exittail): 8388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 8398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $5, %xmm0 8408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $5, %xmm3 8418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 8428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 8448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_6 8458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 8468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(10~15) n -10 5(15 +(n-10) - n) ashr_6 8478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 8488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 8508ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_6): 8518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 8528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 8538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 8548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 8558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 8568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $10, %xmm2 8578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 8588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 8598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 8608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 8618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 8628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 8638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -10(%ecx), %edi 8648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 8658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 8678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 8698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 8708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 8718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $6, %ebx 8728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 6(%edx), %edi 8738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 8748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 8758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 8778ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_6): 8788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 8798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_6) 8808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8818ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_6): 8828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 8838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 8848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 8858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6, %xmm3, %xmm2 8878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 8898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 8908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 8918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 8928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 8938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 896c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 8978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 8988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 8998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 9008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 9028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 9038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 9058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_6) 9068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 9088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 9098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 9108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6, %xmm3, %xmm2 9128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 9148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 9158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 9168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 9178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 9188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 9198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 920c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 9218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 9228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 9238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 9248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 9268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 9278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_6) 9288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 9308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_6): 9318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 9328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 9338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xffc0, %esi 9348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_6_exittail) 9358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 937c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $10, %ebp 9388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_6_exittail) 9398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 9408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 9418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 9428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_6) 9438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 9458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_6_exittail): 9468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 9478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $6, %xmm0 9488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $6, %xmm3 9498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 9508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 9528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_7 9538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 9548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(9~15) n - 9 6(15 +(n-9) - n) ashr_7 9558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 9568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 9588ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_7): 9598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 9608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 9618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 9628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 9638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 9648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $9, %xmm2 9658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 9668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 9678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 9688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 9698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 9708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 9718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -9(%ecx), %edi 9728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 9738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 9758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 9778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 9788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 9798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $7, %ebx 9808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 8(%edx), %edi 9818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 9828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 9838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 9858ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_7): 9868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 9878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_7) 9888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9898ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_7): 9908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 9918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 9928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 9938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7, %xmm3, %xmm2 9958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 9978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 9988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 9998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 10008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 10018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 10028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1004c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 10058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 10068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 10078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 10088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 10108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 10118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 10138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_7) 10148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 10168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 10178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 10188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7, %xmm3, %xmm2 10208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 10228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 10238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 10248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 10258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 10268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 10278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1029c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 10308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 10318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 10328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 10338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 10358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 10368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_7) 10378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 10398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_7): 10408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 10418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 10428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xff80, %esi 10438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_7_exittail) 10448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1046c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $9, %ebp 10478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_7_exittail) 10488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 10498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 10508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 10518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 10528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_7) 10538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 10558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_7_exittail): 10568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 10578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $7, %xmm0 10588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $7, %xmm3 10598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 10608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 10628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_8 10638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 10648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(8~15) n - 8 7(15 +(n-8) - n) ashr_8 10658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 10668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 10678ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_8): 10688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 10698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 10708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 10718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 10728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 10738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $8, %xmm2 10748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 10758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 10768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 10778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 10788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 10798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 10808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -8(%ecx), %edi 10818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 10828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 10848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 10868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 10878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 10888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $8, %ebx 10898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 8(%edx), %edi 10908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 10918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 10928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 10948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_8): 10958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 10968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_8) 10978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10988ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_8): 10998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 11008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 11018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 11028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8, %xmm3, %xmm2 11048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 11068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 11078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 11088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 11098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 11108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 11118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1113c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 11148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 11158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 11168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 11178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 11188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 11198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 11218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_8) 11228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 11248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 11258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 11268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8, %xmm3, %xmm2 11288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 11308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 11318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 11328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 11338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 11348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 11358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1137c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 11388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 11398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 11408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 11418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 11428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 11438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_8) 11448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 11468ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_8): 11478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 11488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 11498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xff00, %esi 11508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_8_exittail) 11518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1153c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %ebp 11548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_8_exittail) 11558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 11568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 11578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 11588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 11598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_8) 11608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 11628ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_8_exittail): 11638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 11648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $8, %xmm0 11658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $8, %xmm3 11668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 11678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 11698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_9 11708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 11718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(7~15) n - 7 8(15 +(n-7) - n) ashr_9 11728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 11738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 11748ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_9): 11758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 11768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 11778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 11788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 11798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 11808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $7, %xmm2 11818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 11828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 11838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 11848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 11858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 11868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 11878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -7(%ecx), %edi 11888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 11898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 11918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 11938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 11948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 11958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $9, %ebx 11968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 9(%edx), %edi 11978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 11988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 11998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 12018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_9): 12028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 12038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_9) 12048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12058ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_9): 12068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 12078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 12088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 12098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9, %xmm3, %xmm2 12118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 12138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 12148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 12158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 12168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 12178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 12188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1220c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 12218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 12228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 12238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 12248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 12258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 12268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 12288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_9) 12298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 12318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 12328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 12338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9, %xmm3, %xmm2 12358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 12378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 12388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 12398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 12408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 12418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 12428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1244c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 12458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 12468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 12478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 12488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 12498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 12508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_9) 12518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 12538ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_9): 12548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 12558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 12568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfe00, %esi 12578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_9_exittail) 12588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1260c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %ebp 12618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_9_exittail) 12628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 12638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 12648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 12658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_9) 12668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 12688ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_9_exittail): 12698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 12708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $9, %xmm0 12718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $9, %xmm3 12728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 12738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 12758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_10 12768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 12778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(6~15) n - 6 9(15 +(n-6) - n) ashr_10 12788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 12798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 12808ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_10): 12818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 12828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 12838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 12848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 12858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 12868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $6, %xmm2 12878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 12888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 12898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 12908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 12918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 12928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 12938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -6(%ecx), %edi 12948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 12958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 12978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 12998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 13008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 13018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $10, %ebx 13028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 10(%edx), %edi 13038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 13048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 13058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 13078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_10): 13088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 13098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_10) 13108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13118ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_10): 13128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 13138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 13148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 13158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10, %xmm3, %xmm2 13178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 13198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 13208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 13218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 13228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 13238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 13248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1326c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 13278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 13288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 13298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 13308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 13318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 13328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 13348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_10) 13358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 13378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 13388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 13398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10, %xmm3, %xmm2 13418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 13438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 13448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 13458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 13468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 13478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 13488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1350c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 13518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 13528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 13538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 13548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 13558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 13568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_10) 13578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 13598ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_10): 13608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 13618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 13628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xfc00, %esi 13638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_10_exittail) 13648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1366c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $6, %ebp 13678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_10_exittail) 13688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 13698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 13708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 13718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_10) 13728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 13748ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_10_exittail): 13758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 13768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $10, %xmm0 13778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $10, %xmm3 13788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 13798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 13818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_11 13828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 13838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(5~15) n - 5 10(15 +(n-5) - n) ashr_11 13848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 13858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 13868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_11): 13878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 13888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 13898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 13908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 13918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 13928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $5, %xmm2 13938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 13948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 13958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 13968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 13978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 13988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 13998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -5(%ecx), %edi 14008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 14018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 14038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 14058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 14068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 14078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $11, %ebx 14088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 11(%edx), %edi 14098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 14108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 14118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 14138ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_11): 14148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 14158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_11) 14168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_11): 14188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 14198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 14208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 14218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11, %xmm3, %xmm2 14238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 14258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 14268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 14278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 14288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 14298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 14308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1432c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 14338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 14348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 14358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 14368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 14378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 14388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 14408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_11) 14418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 14438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 14448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 14458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11, %xmm3, %xmm2 14478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 14498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 14508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 14518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 14528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 14538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 14548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1456c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 14578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 14588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 14598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 14608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 14618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 14628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_11) 14638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 14658ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_11): 14668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 14678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 14688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xf800, %esi 14698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_11_exittail) 14708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1472c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $5, %ebp 14738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_11_exittail) 14748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 14758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 14768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 14778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_11) 14788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 14808ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_11_exittail): 14818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 14828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $11, %xmm0 14838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $11, %xmm3 14848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 14858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 14878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_12 14888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 14898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(4~15) n - 4 11(15 +(n-4) - n) ashr_12 14908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 14918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 14928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_12): 14938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 14948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 14958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 14968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 14978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 14988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $4, %xmm2 14998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 15008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 15018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 15028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 15038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 15048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 15058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -4(%ecx), %edi 15068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 15078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 15098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 15118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 15128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 15138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $12, %ebx 15148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 12(%edx), %edi 15158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 15168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 15178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 15198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_12): 15208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 15218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_12) 15228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_12): 15248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 15258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 15268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 15278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12, %xmm3, %xmm2 15298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 15318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 15328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 15338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 15348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 15358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 15368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1537124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifdef USE_AS_STRNCMP 1538c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 1539124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea -16(%ebp), %ebp 1540124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jbe L(more8byteseq) 1541124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif 1542124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 15438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 15448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 15458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 15478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_12) 15488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 15508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 15518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 15528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12, %xmm3, %xmm2 15548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 15568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 15578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 15588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 15598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 15608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 15618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1563c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 15648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 15658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 15668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 15678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 15688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 15698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_12) 15708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 15728ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_12): 15738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 15748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 15758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xf000, %esi 15768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_12_exittail) 15778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1579c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $4, %ebp 15808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_12_exittail) 15818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 15828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 15838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 15848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_12) 15858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 15878ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_12_exittail): 15888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 15898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $12, %xmm0 15908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $12, %xmm3 15918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 15928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 15948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_13 15958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 15968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(3~15) n - 3 12(15 +(n-3) - n) ashr_13 15978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 15988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 15998ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_13): 16008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 16018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 16028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 16038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 16048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 16058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $3, %xmm2 16068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 16078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 16088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 16098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 16108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 16118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 16128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -3(%ecx), %edi 16138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 16148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 16168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 16188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 16198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 16208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $13, %ebx 16218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 13(%edx), %edi 16228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 16238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 16248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 16268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_13): 16278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 16288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_13) 16298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_13): 16318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 16328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 16338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 16348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13, %xmm3, %xmm2 16368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 16388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 16398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 16408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 16418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 16428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 16438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1645c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 16468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 16478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 16488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 16498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 16508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 16518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 16538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_13) 16548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 16568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 16578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 16588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13, %xmm3, %xmm2 16608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 16628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 16638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 16648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 16658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 16668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 16678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1669c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 16708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 16718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 16728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 16738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 16748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 16758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_13) 16768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 16788ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_13): 16798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 16808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 16818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xe000, %esi 16828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_13_exittail) 16838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1685c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $3, %ebp 16868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_13_exittail) 16878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 16888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 16898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 16908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_13) 16918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 16938ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_13_exittail): 16948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 16958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $13, %xmm0 16968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $13, %xmm3 16978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 16988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 17008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_14 17018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 17028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(2~15) n - 2 13(15 +(n-2) - n) ashr_14 17038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 17048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 17058ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_14): 17068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 17078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 17088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 17098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 17108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 17118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $2, %xmm2 17128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 17138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 17148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 17158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 17168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 17178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 17188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -2(%ecx), %edi 17198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 17208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 17228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 17248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 17258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 17268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $14, %ebx 17278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 14(%edx), %edi 17288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 17298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 17308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 17328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_14): 17338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 17348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_14) 17358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17368ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_14): 17378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 17388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 17398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 17408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14, %xmm3, %xmm2 17428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 17448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 17458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 17468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 17478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 17488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 17498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1751c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 17528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 17538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 17548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 17558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 17568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 17578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 17598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_14) 17608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 17628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 17638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 17648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14, %xmm3, %xmm2 17668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 17688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 17698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 17708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 17718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 17728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 17738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1775c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 17768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 17778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 17788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 17798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 17808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 17818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_14) 17828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 17848ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_14): 17858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 17868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 17878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0xc000, %esi 17888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_14_exittail) 17898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1791c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $2, %ebp 17928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_14_exittail) 17938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 17948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 17958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 17968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_14) 17978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 17998ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_14_exittail): 18008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 18018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $14, %xmm0 18028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $14, %xmm3 18038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 18048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 18068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_14 18078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi) eax(offset of edi) relative offset corresponding case 18088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * n(1~15) n - 1 14(15 +(n-1) - n) ashr_15 18098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */ 18108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 18128ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_15): 18138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0xffff, %esi 18148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 18158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm2 18168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax), %xmm1 18178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 18188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pslldq $1, %xmm2 18198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm2 18208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm2 18218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edi 18228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %esi 18238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr %cl, %edi 18248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edi, %esi 18258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -1(%ecx), %edi 18268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(less32bytes) 18278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare UPDATE_STRNCMP_COUNTER 18298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx), %xmm3 18318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 18328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $16, %ecx 18338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare or $15, %ebx 18348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 15(%edx), %edi 18358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xfff, %edi 18368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 18378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 18398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_15): 18408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 18418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_15) 18428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_15): 18448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 18458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 18468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 18478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15, %xmm3, %xmm2 18498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 18518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 18528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 18538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 18548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 18558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 18568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1858c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 18598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 18608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 18618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 18628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 18638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 18648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %edi 18668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jg L(nibble_ashr_15) 18678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 18698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%edx, %ecx), %xmm2 18708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm2, %xmm4 18718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15, %xmm3, %xmm2 18738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm1, %xmm0 18758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm2, %xmm1 18768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 18778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 18788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %esi 18798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 18808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1882c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $16, %ebp 18838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%ebp), %ebp 18848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(more8byteseq) 18858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 18868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $16, %ecx 18878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm4, %xmm3 18888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(loop_ashr_15) 18898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 18918ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_15): 18928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm0 18938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm0, %esi 18948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x8000, %esi 18958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(ashr_15_exittail) 18968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1898c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $1, %ebp 18998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(ashr_15_exittail) 19008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 19018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pxor %xmm0, %xmm0 19028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0x1000, %edi 19038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(gobble_ashr_15) 19048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19068ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_15_exittail): 19078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%eax, %ecx), %xmm1 19088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $15, %xmm0 19098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psrldq $15, %xmm3 19108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(aftertail) 19118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19138ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(aftertail): 19148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb %xmm3, %xmm1 19158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare psubb %xmm0, %xmm1 19168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %esi 19178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare not %esi 19188ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(exit): 19198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %ebx, %edi 19208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0x1f, %edi 19218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%edi, %ecx), %edi 19228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less32bytes): 19238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add %edi, %edx 19248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add %ecx, %eax 19258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x20, %ebx 19268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(ret2) 19278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xchg %eax, %edx 19288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ret2): 19318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %esi, %ecx 19328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%esi) 19338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%edi) 19348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%ebx) 19358ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes): 19368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 19378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(2next_8_bytes) 19388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x01, %cl 19408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte0) 19418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x02, %cl 19438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte1) 19448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x04, %cl 19468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte2) 19478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x08, %cl 19498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte3) 19508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x10, %cl 19528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte4) 19538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x20, %cl 19558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte5) 19568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x40, %cl 19588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte6) 19598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1960c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %ebp 19618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 19628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 19638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1964c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 7(%eax), %ecx 1965c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 7(%edx), %eax 19668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 19688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 19698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19718ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte0): 19728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1973c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $0, %ebp 19748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 19758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1976c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl (%eax), %ecx 1977c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl (%edx), %eax 19788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 19808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 19818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19838ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte1): 19848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1985c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $1, %ebp 19868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 19878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 1988c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 1(%eax), %ecx 1989c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 1(%edx), %eax 19908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 19928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 19938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 19958ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte2): 19968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 1997c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $2, %ebp 19988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 19998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2000c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 2(%eax), %ecx 2001c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 2(%edx), %eax 20028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte3): 20088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2009c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $3, %ebp 20108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2012c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 3(%eax), %ecx 2013c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 3(%edx), %eax 20148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte4): 20208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2021c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $4, %ebp 20228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2024c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 4(%eax), %ecx 2025c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 4(%edx), %eax 20268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20318ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte5): 20328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2033c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $5, %ebp 20348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2036c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 5(%eax), %ecx 2037c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 5(%edx), %eax 20388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte6): 20448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2045c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $6, %ebp 20468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2048c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 6(%eax), %ecx 2049c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 6(%edx), %eax 20508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(2next_8_bytes): 20568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $8, %eax 20578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $8, %edx 20588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2059c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %ebp 20608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -8(%ebp), %ebp 20618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 20638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x01, %ch 20658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte0) 20668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x02, %ch 20688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte1) 20698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x04, %ch 20718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte2) 20728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x08, %ch 20748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte3) 20758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x10, %ch 20778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte4) 20788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x20, %ch 20808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte5) 20818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x40, %ch 20838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte6) 20848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2086c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %ebp 20878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(eq) 20888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 2089c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 7(%eax), %ecx 2090c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel movzbl 7(%edx), %eax 20918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %ecx, %eax 20938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 20948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 20958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 20968ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(neq): 20978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $1, %eax 20988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(neq_bigger) 20998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare neg %eax 21008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(neq_bigger): 21018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 21028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 21048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 21058ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more8byteseq): 21068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%esi) 21078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%edi) 21088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%ebx) 21098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 21108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21118ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(eq): 21128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 21148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%ebp) 21158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 21168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xorl %eax, %eax 21178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 21188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP 2120bff9cca9ca5817e97dd43962bb11b012cbb97f54Christopher Ferris cfi_restore_state 21218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .p2align 4 21238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes_sncmp): 21248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %ebp, %ebp 21258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(eq) 21268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl (%eax), %ecx 21288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, (%edx) 21298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2133c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $1, %ebp 21348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 1(%eax), %ecx 21378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 1(%edx) 21388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2142c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $2, %ebp 21438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 2(%eax), %ecx 21468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 2(%edx) 21478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2151c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $3, %ebp 21528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 3(%eax), %ecx 21558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 3(%edx) 21568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2160c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $4, %ebp 21618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 4(%eax), %ecx 21648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 4(%edx) 21658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2169c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $5, %ebp 21708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 5(%eax), %ecx 21738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 5(%edx) 21748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2178c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $6, %ebp 21798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 6(%eax), %ecx 21828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 6(%edx) 21838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2187c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $7, %ebp 21888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 7(%eax), %ecx 21918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 7(%edx) 21928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 21938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 21948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 21968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2197c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $8, %ebp 21988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 21998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 8(%eax), %ecx 22018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 8(%edx) 22028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2206c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $9, %ebp 22078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 9(%eax), %ecx 22108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 9(%edx) 22118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2215c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $10, %ebp 22168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 10(%eax), %ecx 22198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 10(%edx) 22208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2224c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $11, %ebp 22258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 11(%eax), %ecx 22288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 11(%edx) 22298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2234c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $12, %ebp 22358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 12(%eax), %ecx 22388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 12(%edx) 22398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2243c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $13, %ebp 22448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 13(%eax), %ecx 22478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 13(%edx) 22488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2252c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $14, %ebp 22538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 14(%eax), %ecx 22568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 14(%edx) 22578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2261c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel cmpl $15, %ebp 22628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl 15(%eax), %ecx 22658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %cl, 15(%edx) 22668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(neq) 22678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %cl, %cl 22688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(eq) 22698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare POP (%ebp) 22718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %eax, %eax 22728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 22738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 22748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 22750a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (STRCMP) 2276