18ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/* 2baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoCopyright (c) 2010, 2011, 2012, 2013 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 360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_startproc .cfi_startproc 378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_endproc 400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# 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 480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# 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 560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_remember_state .cfi_remember_state 57124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif 58124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 59124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifndef cfi_restore_state 600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_restore_state .cfi_restore_state 61124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif 62124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef ENTRY 640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define ENTRY(name) \ 650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .type name, @function; \ 660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .globl name; \ 670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4; \ 680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievaname: \ 698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cfi_startproc 708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef END 730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define END(name) \ 740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_endproc; \ 758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare .size name, .-name 768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif 778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef MEMCMP 790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define MEMCMP memcmp 800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define CFI_PUSH(REG) \ 830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_adjust_cfa_offset (4); \ 840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_rel_offset (REG, 0) 850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define CFI_POP(REG) \ 870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_adjust_cfa_offset (-4); \ 880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_restore (REG) 898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define PUSH(REG) pushl REG; CFI_PUSH (REG) 918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define POP(REG) popl REG; CFI_POP (REG) 928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define PARMS 4 948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define BLK1 PARMS 958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define BLK2 BLK1+4 968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define LEN BLK2+4 978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define RETURN_END POP (%edi); POP (%esi); POP (%ebx); ret 98124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#define RETURN RETURN_END; cfi_restore_state; cfi_remember_state 998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* Warning! 1010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva wmemcmp has to use SIGNED comparison for elements. 1020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva memcmp has to use UNSIGNED comparison for elemnts. 1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva*/ 1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .text 1068ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareENTRY (MEMCMP) 1078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl LEN(%esp), %ecx 1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 109baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#ifdef USE_WCHAR 1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva shl $2, %ecx 1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(zero) 112baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined USE_UTF16 113baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko shl $1, %ecx 114baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jz L(zero) 1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl BLK1(%esp), %eax 1188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $48, %ecx 1198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl BLK2(%esp), %edx 1208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(48bytesormore) 1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 122baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $1, %ecx 1248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jbe L(less1bytes) 1250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva PUSH (%ebx) 1288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add %ecx, %edx 1298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add %ecx, %eax 1308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 1318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva CFI_POP (%ebx) 1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 134baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1368ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less1bytes): 1378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jb L(zero) 1388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movb (%eax), %cl 1398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp (%edx), %cl 1408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(zero) 1418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $1, %eax 1428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(1bytesend) 1438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare neg %eax 1448ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(1bytesend): 1458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 1460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1498ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(zero): 1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 1518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 1528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(48bytesormore): 1550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva PUSH (%ebx) 1560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva PUSH (%esi) 1570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva PUSH (%edi) 158124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 1590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqu (%eax), %xmm3 1600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqu (%edx), %xmm0 1618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl %eax, %edi 1628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl %edx, %esi 1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm0, %xmm3 1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 1658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 16(%edi), %edi 1668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $0xffff, %edx 1688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 16(%esi), %esi 1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(less16bytes) 1708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edi, %edx 1718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xf, %edx 1728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %edx, %edi 1738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %esi 1748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add %edx, %ecx 1758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %esi, %edx 1768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare and $0xf, %edx 1778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_0) 1788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %edx, %esi 1798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 180baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $8, %edx 1828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(next_unaligned_table) 1838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %edx 1848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_0) 1858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $1, %edx 1868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_1) 1878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $2, %edx 1888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_2) 1898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $3, %edx 1908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_3) 1918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $4, %edx 1928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_4) 1938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $5, %edx 1948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_5) 1958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $6, %edx 1968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_6) 1978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(shr_7) 1988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 2 2008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(next_unaligned_table): 2018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $8, %edx 2028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_8) 2038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $9, %edx 2048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_9) 2058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $10, %edx 2068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_10) 2078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $11, %edx 2088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_11) 2098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $12, %edx 2108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_12) 2118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $13, %edx 2128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_13) 2138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $14, %edx 2148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(shr_14) 2158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(shr_15) 216baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) 2170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, %edx 2180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(shr_0) 2190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $4, %edx 2200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(shr_4) 2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $8, %edx 2220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(shr_8) 2230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(shr_12) 224baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) 225baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $0, %edx 226baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(shr_0) 227baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $2, %edx 228baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(shr_2) 229baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $4, %edx 230baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(shr_4) 231baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $6, %edx 232baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(shr_6) 233baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $8, %edx 234baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(shr_8) 235baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $10, %edx 236baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(shr_10) 237baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $12, %edx 238baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(shr_12) 239baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jmp L(shr_14) 2400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 2418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_0): 2448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 2458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_0_gobble) 2468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 2478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %eax, %eax 2488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movaps (%esi), %xmm1 2498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 2508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movaps 16(%esi), %xmm2 2518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm2 2528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm2 2538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edx 2548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %edi 2558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %esi 2568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 2578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 2588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 2608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %esi,1), %edx 2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 2638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 2648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 265124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 266124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2688ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_0_gobble): 2698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 2708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa (%esi), %xmm0 2718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare xor %eax, %eax 2728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 2738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 2748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm2 2758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm2 2768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_0_gobble_loop): 2778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm2 2788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 2798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edx 2808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 2818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm0 2828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm2 2838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 2848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 2858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm2 2868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 2878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 2888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_0_gobble_loop) 2898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm2 2918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 2928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_0_gobble_loop_next) 2938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 2948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 2958ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_0_gobble_loop_next): 2968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 2978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 2988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm2, %edx 3008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 3018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 3028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 3038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 3048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 3068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %esi,1), %edx 3070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 3080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 3098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 3108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 311baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 312124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 313124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 3140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_1): 3168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 3178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 3188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 3198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_1_gobble) 3208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 3228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 3238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1,(%esi), %xmm1 3248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 3258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 3278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1,%xmm2, %xmm3 3288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 3298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 3318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 3328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 3338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 3348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 3358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 3378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 1(%ecx, %esi,1), %edx 3380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 3390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 3408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 3418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 342124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 343124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 3440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_1_gobble): 3468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 3478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 3488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1,(%esi), %xmm0 3498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 3508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 3528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1,16(%esi), %xmm3 3538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 3548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_1_gobble_loop): 3568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 3578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 3588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 3598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 3608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 3628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1,48(%esi), %xmm3 3638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 3648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 3658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $1,32(%esi), %xmm0 3668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 3678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 3688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 3698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 3718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_1_gobble_loop) 3728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 3738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 3758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_1_gobble_next) 3768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 3778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 3788ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_1_gobble_next): 3798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 3808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 3838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 3848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 3858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 3868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 3878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 3888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 3908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 1(%ecx, %esi,1), %edx 3910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 3920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 3938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 394baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 3958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 3960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 397baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) 398124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 399124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 4000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_2): 4028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 4038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 4048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 4058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_2_gobble) 4068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 4088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 4098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2,(%esi), %xmm1 4108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 4118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 4138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2,%xmm2, %xmm3 4148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 4158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 4178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 4188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 4198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 4208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 4218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 4228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 4238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 2(%ecx, %esi,1), %edx 4240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 4250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 4268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 4278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 428124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 429124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 4300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4318ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_2_gobble): 4328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 4338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 4348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2,(%esi), %xmm0 4358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 4368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 4388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2,16(%esi), %xmm3 4398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 4408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4418ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_2_gobble_loop): 4428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 4438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 4448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 4458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 4468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 4488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2,48(%esi), %xmm3 4498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 4508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 4518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $2,32(%esi), %xmm0 4528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 4538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 4548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 4558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 4578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_2_gobble_loop) 4588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 4598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 4618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_2_gobble_next) 4628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 4638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 4648ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_2_gobble_next): 4658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 4668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 4678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 4698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 4708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 4718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 4728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 4738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 4748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 4768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 2(%ecx, %esi,1), %edx 4770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 4780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 4798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 480baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 4818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 482baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 483124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 484124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 4850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_3): 4878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 4888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 4898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 4908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_3_gobble) 4918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 4938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 4948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3,(%esi), %xmm1 4958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 4968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 4978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 4988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3,%xmm2, %xmm3 4998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 5008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 5028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 5038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 5048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 5058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 5068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 5078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 5088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 3(%ecx, %esi,1), %edx 5090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 5100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 5118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 5128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 513124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 514124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 5150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5168ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_3_gobble): 5178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 5188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 5198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3,(%esi), %xmm0 5208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 5218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 5238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3,16(%esi), %xmm3 5248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 5258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_3_gobble_loop): 5278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 5288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 5298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 5308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 5318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 5338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3,48(%esi), %xmm3 5348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 5358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 5368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $3,32(%esi), %xmm0 5378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 5388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 5398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 5408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 5428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_3_gobble_loop) 5438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 5448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 5468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_3_gobble_next) 5478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 5488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 5498ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_3_gobble_next): 5508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 5518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 5528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 5548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 5558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 5568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 5578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 5588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 5598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 5618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 3(%ecx, %esi,1), %edx 5620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 5630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 5648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 5650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 5668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 567124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 568124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 5690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_4): 5718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 5728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 5738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 5748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_4_gobble) 5758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 5778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 5788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4,(%esi), %xmm1 5798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 5808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 5828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4,%xmm2, %xmm3 5838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 5848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 5858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 5868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 5878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 5888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 5898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 5908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 5918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 5928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 4(%ecx, %esi,1), %edx 5930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 5940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 5958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 5968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 597124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 598124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 5990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_4_gobble): 6018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 6028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 6038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4,(%esi), %xmm0 6048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 6058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 6078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4,16(%esi), %xmm3 6088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 6098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6108ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_4_gobble_loop): 6118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 6128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 6138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 6148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 6158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 6178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4,48(%esi), %xmm3 6188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 6198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 6208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $4,32(%esi), %xmm0 6218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 6228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 6238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 6248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 6268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_4_gobble_loop) 6278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 6288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 6308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_4_gobble_next) 6318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 6328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 6338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_4_gobble_next): 6348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 6358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 6368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 6388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 6398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 6408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 6418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 6428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 6438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 6458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 4(%ecx, %esi,1), %edx 6460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 6470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 6488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 6498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 650baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 651124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 652124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 6530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_5): 6558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 6568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 6578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 6588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_5_gobble) 6598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 6618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 6628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5,(%esi), %xmm1 6638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 6648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 6668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5,%xmm2, %xmm3 6678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 6688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 6708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 6718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 6728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 6738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 6748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 6758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 6768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 5(%ecx, %esi,1), %edx 6770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 6780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 6798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 6808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 681124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 682124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 6830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6848ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_5_gobble): 6858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 6868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 6878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5,(%esi), %xmm0 6888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 6898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 6918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5,16(%esi), %xmm3 6928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 6938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 6948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_5_gobble_loop): 6958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 6968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 6978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 6988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 6998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 7018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5,48(%esi), %xmm3 7028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 7038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 7048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $5,32(%esi), %xmm0 7058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 7068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 7078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 7088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 7108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_5_gobble_loop) 7118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 7128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 7148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_5_gobble_next) 7158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 7168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 7178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_5_gobble_next): 7188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 7198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 7208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 7228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 7238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 7248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 7258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 7268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 7278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 7298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 5(%ecx, %esi,1), %edx 7300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 7310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 7328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 733baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 7348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 735baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) 736124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 737124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 7380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 7398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_6): 7408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 7418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 7428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 7438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_6_gobble) 7448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 7468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 7478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6,(%esi), %xmm1 7488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 7498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 7518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6,%xmm2, %xmm3 7528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 7538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 7558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 7568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 7578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 7588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 7598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 7608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 7618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 6(%ecx, %esi,1), %edx 7620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 7630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 7648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 7658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 766124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 767124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 7680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 7698ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_6_gobble): 7708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 7718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 7728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6,(%esi), %xmm0 7738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 7748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 7768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6,16(%esi), %xmm3 7778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 7788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7798ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_6_gobble_loop): 7808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 7818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 7828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 7838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 7848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 7868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6,48(%esi), %xmm3 7878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 7888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 7898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $6,32(%esi), %xmm0 7908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 7918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 7928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 7938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 7958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_6_gobble_loop) 7968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 7978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 7988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 7998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_6_gobble_next) 8008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 8018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 8028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_6_gobble_next): 8038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 8048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 8078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 8088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 8098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 8108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 8118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 8148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 6(%ecx, %esi,1), %edx 8150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 8160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 8178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 818baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 8198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 820baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 821124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 822124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 8230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 8248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_7): 8258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 8268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 8278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 8288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_7_gobble) 8298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 8318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 8328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7,(%esi), %xmm1 8338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 8348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 8368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7,%xmm2, %xmm3 8378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 8388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 8408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 8418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 8428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 8438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 8448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 8468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 7(%ecx, %esi,1), %edx 8470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 8480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 8498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 8508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 851124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 852124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 8530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 8548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_7_gobble): 8558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 8568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 8578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7,(%esi), %xmm0 8588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 8598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 8618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7,16(%esi), %xmm3 8628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 8638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8648ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_7_gobble_loop): 8658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 8668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 8678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 8688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 8698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 8718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7,48(%esi), %xmm3 8728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 8738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 8748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $7,32(%esi), %xmm0 8758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 8768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 8778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 8788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 8808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_7_gobble_loop) 8818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 8828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 8848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_7_gobble_next) 8858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 8868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 8878ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_7_gobble_next): 8888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 8898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 8928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 8938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 8948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 8958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 8968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 8978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 8988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 8998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 7(%ecx, %esi,1), %edx 9000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 9010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 9028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 9030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 9048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 905124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 906124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 9070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 9088ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_8): 9098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 9108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 9118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 9128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_8_gobble) 9138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 9158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 9168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8,(%esi), %xmm1 9178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 9188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 9208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8,%xmm2, %xmm3 9218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 9228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 9248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 9258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 9268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 9278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 9288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 9298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 9308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 8(%ecx, %esi,1), %edx 9310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 9320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 9338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 9348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 935124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 936124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 9370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 9388ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_8_gobble): 9398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 9408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 9418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8,(%esi), %xmm0 9428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 9438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 9458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8,16(%esi), %xmm3 9468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 9478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_8_gobble_loop): 9498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 9508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 9518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 9528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 9538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 9558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8,48(%esi), %xmm3 9568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 9578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 9588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $8,32(%esi), %xmm0 9598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 9608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 9618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 9628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 9648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_8_gobble_loop) 9658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 9668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 9688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_8_gobble_next) 9698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 9708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 9718ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_8_gobble_next): 9728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 9738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 9748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 9768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 9778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 9788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 9798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 9808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 9818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 9838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 8(%ecx, %esi,1), %edx 9840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 9850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 9868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 9878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 988baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 989124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 990124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 9910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 9928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_9): 9938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 9948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 9958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 9968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_9_gobble) 9978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 9988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 9998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 10008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9,(%esi), %xmm1 10018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 10028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 10048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9,%xmm2, %xmm3 10058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 10068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 10088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 10098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 10108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 10118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 10128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 10138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 10148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 9(%ecx, %esi,1), %edx 10150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 10160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 10178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 10188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1019124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1020124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 10210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 10228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_9_gobble): 10238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 10248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 10258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9,(%esi), %xmm0 10268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 10278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 10298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9,16(%esi), %xmm3 10308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 10318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_9_gobble_loop): 10338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 10348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 10358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 10368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 10378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 10398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9,48(%esi), %xmm3 10408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 10418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 10428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $9,32(%esi), %xmm0 10438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 10448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 10458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 10468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 10488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_9_gobble_loop) 10498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 10508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 10528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_9_gobble_next) 10538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 10548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 10558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_9_gobble_next): 10568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 10578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 10588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 10608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 10618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 10628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 10638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 10648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 10658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 10678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 9(%ecx, %esi,1), %edx 10680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 10690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 10708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 1071baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 10728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1073baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) 1074124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1075124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 10760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 10778ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_10): 10788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 10798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 10808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 10818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_10_gobble) 10828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 10848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 10858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10, (%esi), %xmm1 10868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 10878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 10898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10,%xmm2, %xmm3 10908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 10918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 10928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 10938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 10948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 10958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 10968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 10978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 10988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 10998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 10(%ecx, %esi,1), %edx 11000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 11010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 11028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 11038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1104124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1105124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 11060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 11078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_10_gobble): 11088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 11098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 11108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10, (%esi), %xmm0 11118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 11128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 11148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10, 16(%esi), %xmm3 11158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 11168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_10_gobble_loop): 11188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 11198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 11208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 11218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 11228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 11248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10,48(%esi), %xmm3 11258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 11268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 11278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $10,32(%esi), %xmm0 11288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 11298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 11308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 11318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 11338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_10_gobble_loop) 11348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 11358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 11378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_10_gobble_next) 11388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 11398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 11408ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_10_gobble_next): 11418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 11428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 11438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 11458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 11468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 11478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 11488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 11498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 11508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 11528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 10(%ecx, %esi,1), %edx 11530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 11540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 11558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 1156baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 11578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1158baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1159124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1160124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 11610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 11628ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_11): 11638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 11648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 11658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 11668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_11_gobble) 11678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 11698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 11708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11, (%esi), %xmm1 11718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 11728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 11748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11, %xmm2, %xmm3 11758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 11768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 11788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 11798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 11808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 11818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 11828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 11838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 11848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 11(%ecx, %esi,1), %edx 11850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 11860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 11878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 11888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1189124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1190124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 11910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 11928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_11_gobble): 11938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 11948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 11958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11, (%esi), %xmm0 11968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 11978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 11988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 11998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11, 16(%esi), %xmm3 12008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 12018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_11_gobble_loop): 12038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 12048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 12058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 12068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 12078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 12098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11,48(%esi), %xmm3 12108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 12118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 12128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $11,32(%esi), %xmm0 12138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 12148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 12158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 12168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 12188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_11_gobble_loop) 12198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 12208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 12228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_11_gobble_next) 12238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 12248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 12258ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_11_gobble_next): 12268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 12278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 12288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 12308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 12318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 12328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 12338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 12348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 12358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 12378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 11(%ecx, %esi,1), %edx 12380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 12390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 12408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 12410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 12428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1243124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1244124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 12450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 12468ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_12): 12478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 12488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 12498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 12508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_12_gobble) 12518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 12538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 12548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12, (%esi), %xmm1 12558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 12568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 12588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12, %xmm2, %xmm3 12598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 12608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 12628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 12638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 12648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 12658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 12668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 12678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 12688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 12(%ecx, %esi,1), %edx 12690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 12700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 12718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 12728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1273124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1274124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 12750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 12768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_12_gobble): 12778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 12788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 12798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12, (%esi), %xmm0 12808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 12818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 12838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12, 16(%esi), %xmm3 12848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 12858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_12_gobble_loop): 12878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 12888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 12898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 12908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 12918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 12928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 12938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12,48(%esi), %xmm3 12948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 12958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 12968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $12,32(%esi), %xmm0 12978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 12988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 12998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 13008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 13028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_12_gobble_loop) 13038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 13048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 13068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_12_gobble_next) 13078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 13088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 13098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_12_gobble_next): 13108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 13118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 13128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 13148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 13158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 13168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 13178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 13188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 13198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 13218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 12(%ecx, %esi,1), %edx 13220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 13230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 13248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 13258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1326baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1327124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1328124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 13290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 13308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_13): 13318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 13328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 13338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 13348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_13_gobble) 13358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 13378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 13388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13, (%esi), %xmm1 13398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 13408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 13428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13, %xmm2, %xmm3 13438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 13448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 13468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 13478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 13488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 13498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 13508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 13518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 13528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 13(%ecx, %esi,1), %edx 13530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 13540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 13558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 13568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1357124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1358124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 13590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 13608ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_13_gobble): 13618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 13628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 13638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13, (%esi), %xmm0 13648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 13658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 13678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13, 16(%esi), %xmm3 13688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 13698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_13_gobble_loop): 13718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 13728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 13738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 13748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 13758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 13778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13,48(%esi), %xmm3 13788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 13798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 13808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $13,32(%esi), %xmm0 13818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 13828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 13838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 13848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 13868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_13_gobble_loop) 13878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 13888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 13908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_13_gobble_next) 13918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 13928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 13938ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_13_gobble_next): 13948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 13958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 13968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 13978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 13988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 13998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 14008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 14018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 14028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 14038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 14058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 13(%ecx, %esi,1), %edx 14060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 14070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 14088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 1409baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 14108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1411baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) 1412124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1413124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 14140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 14158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_14): 14168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 14178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 14188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 14198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_14_gobble) 14208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 14228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 14238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14, (%esi), %xmm1 14248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 14258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 14278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14, %xmm2, %xmm3 14288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 14298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 14318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 14328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 14338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 14348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 14358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 14368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 14378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 14(%ecx, %esi,1), %edx 14380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 14390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 14408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 14418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1442124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1443124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 14440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 14458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_14_gobble): 14468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 14478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 14488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14, (%esi), %xmm0 14498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 14508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 14528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14, 16(%esi), %xmm3 14538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 14548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_14_gobble_loop): 14568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 14578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 14588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 14598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 14608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 14628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14,48(%esi), %xmm3 14638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 14648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 14658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $14,32(%esi), %xmm0 14668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 14678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 14688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 14698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 14718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_14_gobble_loop) 14728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 14738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 14758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_14_gobble_next) 14768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 14778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 14788ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_14_gobble_next): 14798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 14808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 14818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 14838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 14848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 14858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 14868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 14878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 14888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 14898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 14908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 14(%ecx, %esi,1), %edx 14910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 14920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 14938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 1494baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 14958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1496baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1497124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1498124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 14990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 15008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_15): 15018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $80, %ecx 15028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -48(%ecx), %ecx 15038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %edx, %eax 15048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(shr_15_gobble) 15058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm1 15078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm1, %xmm2 15088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15, (%esi), %xmm1 15098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm1 15108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 15128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15, %xmm2, %xmm3 15138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 15148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm1, %xmm3 15168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 15178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 15188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 15198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 15208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 15218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 15228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 15(%ecx, %esi,1), %edx 15230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 15240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 15258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 15268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1527124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1528124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 15290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 15308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_15_gobble): 15318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 15328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 16(%esi), %xmm0 15338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15, (%esi), %xmm0 15348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb (%edi), %xmm0 15358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 32(%esi), %xmm3 15378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15, 16(%esi), %xmm3 15388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 16(%edi), %xmm3 15398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15408ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_15_gobble_loop): 15418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 15428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $32, %ecx 15438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 15448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 15458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 64(%esi), %xmm3 15478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15,48(%esi), %xmm3 15488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sbb $0xffff, %edx 15498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa 48(%esi), %xmm0 15508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare palignr $15,32(%esi), %xmm0 15518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 32(%edi), %xmm0 15528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 15538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pcmpeqb 48(%edi), %xmm3 15548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 15568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(shr_15_gobble_loop) 15578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pand %xmm0, %xmm3 15588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $0, %ecx 15608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jge L(shr_15_gobble_next) 15618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare inc %edx 15628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add $32, %ecx 15638ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_15_gobble_next): 15648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %edx, %edx 15658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 15668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm3, %edx 15688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movdqa %xmm0, %xmm1 15698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%edi), %edi 15708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 32(%esi), %esi 15718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %edx 15728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(exit) 15738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 15748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea (%ecx, %edi,1), %eax 15758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 15(%ecx, %esi,1), %edx 15760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 15770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 15788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(less48bytes) 15790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 15808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 1581124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_restore_state 1582124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_remember_state 15830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 15848ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(exit): 15858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare pmovmskb %xmm1, %ebx 15868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub $0xffff, %ebx 15878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(first16bytes) 15888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%esi), %esi 15898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea -16(%edi), %edi 15908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov %ebx, %edx 15910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 15928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(first16bytes): 15938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare add %eax, %esi 15948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes): 15950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1596baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 15978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test %dl, %dl 15988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jz L(next_24_bytes) 15998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x01, %dl 16018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte16) 16028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x02, %dl 16048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte17) 16058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x04, %dl 16078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte18) 16088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x08, %dl 16108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte19) 16118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x10, %dl 16138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte20) 16148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x20, %dl 16168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte21) 16178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x40, %dl 16198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte22) 16208ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte23): 16210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -9(%edi), %eax 16220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -9(%esi), %edx 16238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 16248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 16258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 16278ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte16): 16280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -16(%edi), %eax 16290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -16(%esi), %edx 16308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 16318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 16328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 16348ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte17): 16350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -15(%edi), %eax 16360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -15(%esi), %edx 16378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 16388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 16398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 16418ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte18): 16420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -14(%edi), %eax 16430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -14(%esi), %edx 16448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 16458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 16468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 16488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte19): 16490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -13(%edi), %eax 16500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -13(%esi), %edx 16518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 16528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 16538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 16558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte20): 16560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -12(%edi), %eax 16570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -12(%esi), %edx 16588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 16598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 16608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 16628ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte21): 16630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -11(%edi), %eax 16640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -11(%esi), %edx 16658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 16668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 16678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 16698ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte22): 16700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -10(%edi), %eax 16710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -10(%esi), %edx 16728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 16738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN 16748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 16768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(next_24_bytes): 16778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 8(%edi), %edi 16788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare lea 8(%esi), %esi 16798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x01, %dh 16808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte16) 16818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x02, %dh 16838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte17) 16848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x04, %dh 16868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte18) 16878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x08, %dh 16898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte19) 16908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x10, %dh 16928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte20) 16938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x20, %dh 16958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte21) 16968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 16978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare test $0x40, %dh 16988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jnz L(Byte22) 16998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 17000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 17018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte31): 17020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -9(%edi), %eax 17030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movzbl -9(%esi), %edx 17048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare sub %edx, %eax 17058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare RETURN_END 1706baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_WMEMCMP) 17070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 17080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* special for wmemcmp */ 17090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %dl, %dl 17100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(next_two_double_words) 17110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %dl 17120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(second_double_word) 17130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -16(%edi), %ecx 17140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -16(%esi), %ecx 17150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %eax 17160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jg L(nequal_bigger) 17170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva neg %eax 17180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 17190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 17200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 17210a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(second_double_word): 17220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -12(%edi), %ecx 17230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -12(%esi), %ecx 17240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %eax 17250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jg L(nequal_bigger) 17260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva neg %eax 17270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 1728baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 17290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 17300a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(next_two_double_words): 17310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %dh 17320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(fourth_double_word) 17330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -8(%edi), %ecx 17340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -8(%esi), %ecx 17350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %eax 17360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jg L(nequal_bigger) 17370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva neg %eax 17380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 17390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 17400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 17410a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(fourth_double_word): 17420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -4(%edi), %ecx 17430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -4(%esi), %ecx 17440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %eax 17450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jg L(nequal_bigger) 17460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva neg %eax 17470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 17480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 17490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 17500a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(nequal_bigger): 17510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN_END 1752baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1753baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_MEMCMP16) 1754baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1755baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko/* special for __memcmp16 */ 1756baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko test %dl, %dl 1757baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jz L(next_four_words) 1758baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko test $15, %dl 1759baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jz L(second_two_words) 1760baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko test $3, %dl 1761baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jz L(second_word) 1762baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -16(%edi), %eax 1763baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -16(%esi), %ebx 1764baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 1765baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko RETURN 1766baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1767baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 1768baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(second_word): 1769baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -14(%edi), %eax 1770baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -14(%esi), %ebx 1771baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 1772baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko RETURN 1773baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1774baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 1775baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(second_two_words): 1776baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko test $63, %dl 1777baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jz L(fourth_word) 1778baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -12(%edi), %eax 1779baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -12(%esi), %ebx 1780baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 1781baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko RETURN 1782baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1783baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 1784baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(fourth_word): 1785baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -10(%edi), %eax 1786baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -10(%esi), %ebx 1787baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 1788baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko RETURN 1789baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1790baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 1791baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(next_four_words): 1792baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko test $15, %dh 1793baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jz L(fourth_two_words) 1794baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko test $3, %dh 1795baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jz L(sixth_word) 1796baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -8(%edi), %eax 1797baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -8(%esi), %ebx 1798baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 1799baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko RETURN 1800baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1801baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 1802baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(sixth_word): 1803baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -6(%edi), %eax 1804baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -6(%esi), %ebx 1805baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 1806baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko RETURN 1807baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1808baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 1809baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(fourth_two_words): 1810baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko test $63, %dh 1811baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jz L(eighth_word) 1812baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -4(%edi), %eax 1813baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -4(%esi), %ebx 1814baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 1815baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko RETURN 1816baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 1817baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 1818baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(eighth_word): 1819baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -2(%edi), %eax 1820baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -2(%esi), %ebx 1821baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 1822baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko RETURN 1823baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else 1824baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case 18250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 18260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 18278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare CFI_PUSH (%ebx) 18288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 18308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more8bytes): 18318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $16, %ecx 18328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(more16bytes) 18338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $8, %ecx 18348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(8bytes) 1835baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 18368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $9, %ecx 18378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(9bytes) 18388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $10, %ecx 18398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(10bytes) 18408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $11, %ecx 18418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(11bytes) 18428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $12, %ecx 18438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(12bytes) 18448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $13, %ecx 18458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(13bytes) 18468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $14, %ecx 18478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(14bytes) 18488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(15bytes) 1849baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16) 18500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(12bytes) 1851baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1852baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $10, %ecx 1853baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(10bytes) 1854baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $12, %ecx 1855baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(12bytes) 1856baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jmp L(14bytes) 1857baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else 1858baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case 18590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 18608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 18628ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more16bytes): 18638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $24, %ecx 18648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(more24bytes) 18658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $16, %ecx 18668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(16bytes) 1867baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 18688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $17, %ecx 18698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(17bytes) 18708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $18, %ecx 18718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(18bytes) 18728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $19, %ecx 18738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(19bytes) 18748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $20, %ecx 18758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(20bytes) 18768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $21, %ecx 18778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(21bytes) 18788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $22, %ecx 18798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(22bytes) 18808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(23bytes) 1881baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16) 18820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(20bytes) 1883baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1884baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $18, %ecx 1885baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(18bytes) 1886baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $20, %ecx 1887baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(20bytes) 1888baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jmp L(22bytes) 1889baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else 1890baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case 18910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 18928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 18930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 18948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more24bytes): 18958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $32, %ecx 18968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(more32bytes) 18978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $24, %ecx 18988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(24bytes) 1899baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 19008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $25, %ecx 19018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(25bytes) 19028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $26, %ecx 19038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(26bytes) 19048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $27, %ecx 19058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(27bytes) 19068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $28, %ecx 19078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(28bytes) 19088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $29, %ecx 19098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(29bytes) 19108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $30, %ecx 19118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(30bytes) 19128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(31bytes) 1913baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16) 19140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(28bytes) 1915baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1916baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $26, %ecx 1917baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(26bytes) 1918baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $28, %ecx 1919baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(28bytes) 1920baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jmp L(30bytes) 1921baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else 1922baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case 19230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 19248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 19268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more32bytes): 19278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $40, %ecx 19288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jae L(more40bytes) 19298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $32, %ecx 19308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(32bytes) 1931baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 19328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $33, %ecx 19338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(33bytes) 19348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $34, %ecx 19358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(34bytes) 19368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $35, %ecx 19378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(35bytes) 19388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $36, %ecx 19398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(36bytes) 19408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $37, %ecx 19418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(37bytes) 19428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $38, %ecx 19438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(38bytes) 19448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(39bytes) 1945baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16) 19460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(36bytes) 1947baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1948baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $34, %ecx 1949baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(34bytes) 1950baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $36, %ecx 1951baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(36bytes) 1952baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jmp L(38bytes) 1953baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else 1954baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case 19550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 19560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 19570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 19580a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(less48bytes): 19590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $8, %ecx 19600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jae L(more8bytes) 1961baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 19620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $2, %ecx 19630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(2bytes) 19640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $3, %ecx 19650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(3bytes) 19660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $4, %ecx 19670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(4bytes) 19680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $5, %ecx 19690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(5bytes) 19700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $6, %ecx 19710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(6bytes) 19720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(7bytes) 1973baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16) 19740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(4bytes) 1975baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1976baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $2, %ecx 1977baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(2bytes) 1978baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $4, %ecx 1979baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(4bytes) 1980baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jmp L(6bytes) 1981baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else 1982baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case 19830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 19848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 19850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 19868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more40bytes): 19878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $40, %ecx 19888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(40bytes) 1989baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16) 19908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $41, %ecx 19918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(41bytes) 19928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $42, %ecx 19938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(42bytes) 19948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $43, %ecx 19958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(43bytes) 19968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $44, %ecx 19978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(44bytes) 19988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $45, %ecx 19998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(45bytes) 20008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp $46, %ecx 20018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare je L(46bytes) 20028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jmp L(47bytes) 2003baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR) 2004baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $42, %ecx 2005baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(42bytes) 2006baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko cmp $44, %ecx 2007baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko je L(44bytes) 2008baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jmp L(46bytes) 2009baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif 20108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2011baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_AS_WMEMCMP) && !defined(USE_AS_MEMCMP16) 20120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 20138ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(44bytes): 20148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -44(%eax), %ecx 20158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -44(%edx), %ebx 20168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20188ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(40bytes): 20198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -40(%eax), %ecx 20208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -40(%edx), %ebx 20218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(36bytes): 20248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -36(%eax), %ecx 20258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -36(%edx), %ebx 20268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(32bytes): 20298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -32(%eax), %ecx 20308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -32(%edx), %ebx 20318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(28bytes): 20348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -28(%eax), %ecx 20358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -28(%edx), %ebx 20368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20388ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(24bytes): 20398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -24(%eax), %ecx 20408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -24(%edx), %ebx 20418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(20bytes): 20448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -20(%eax), %ecx 20458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -20(%edx), %ebx 20468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(16bytes): 20498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -16(%eax), %ecx 20508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -16(%edx), %ebx 20518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20538ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(12bytes): 20548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -12(%eax), %ecx 20558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -12(%edx), %ebx 20568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20588ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(8bytes): 20598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -8(%eax), %ecx 20608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -8(%edx), %ebx 20618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20638ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(4bytes): 20648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -4(%eax), %ecx 20658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -4(%edx), %ebx 20668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 20678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0, %eax 20688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 20690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%ebx) 20700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 20710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva CFI_PUSH (%ebx) 2072baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_WMEMCMP) 2073baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 20740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 20750a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(44bytes): 20760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -44(%eax), %ecx 20770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -44(%edx), %ecx 20780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 20790a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(40bytes): 20800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -40(%eax), %ecx 20810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -40(%edx), %ecx 20820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 20830a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(36bytes): 20840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -36(%eax), %ecx 20850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -36(%edx), %ecx 20860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 20870a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(32bytes): 20880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -32(%eax), %ecx 20890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -32(%edx), %ecx 20900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 20910a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(28bytes): 20920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -28(%eax), %ecx 20930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -28(%edx), %ecx 20940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 20950a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(24bytes): 20960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -24(%eax), %ecx 20970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -24(%edx), %ecx 20980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 20990a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(20bytes): 21000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -20(%eax), %ecx 21010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -20(%edx), %ecx 21020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 21030a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(16bytes): 21040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -16(%eax), %ecx 21050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -16(%edx), %ecx 21060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 21070a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(12bytes): 21080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -12(%eax), %ecx 21090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -12(%edx), %ecx 21100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 21110a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(8bytes): 21120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -8(%eax), %ecx 21130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -8(%edx), %ecx 21140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 21150a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(4bytes): 21160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov -4(%eax), %ecx 21170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 21180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp -4(%edx), %ecx 21190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jne L(find_diff) 21200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%ebx) 21218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 21228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare CFI_PUSH (%ebx) 2123baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined USE_AS_MEMCMP16 2124baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 2125baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 2126baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(46bytes): 2127baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -46(%eax), %ecx 2128baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -46(%edx), %ebx 2129baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2130baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2131baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(44bytes): 2132baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -44(%eax), %ecx 2133baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -44(%edx), %ebx 2134baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2135baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2136baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(42bytes): 2137baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -42(%eax), %ecx 2138baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -42(%edx), %ebx 2139baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2140baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2141baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(40bytes): 2142baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -40(%eax), %ecx 2143baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -40(%edx), %ebx 2144baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2145baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2146baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(38bytes): 2147baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -38(%eax), %ecx 2148baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -38(%edx), %ebx 2149baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2150baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2151baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(36bytes): 2152baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -36(%eax), %ecx 2153baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -36(%edx), %ebx 2154baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2155baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2156baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(34bytes): 2157baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -34(%eax), %ecx 2158baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -34(%edx), %ebx 2159baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2160baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2161baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(32bytes): 2162baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -32(%eax), %ecx 2163baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -32(%edx), %ebx 2164baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2165baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2166baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(30bytes): 2167baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -30(%eax), %ecx 2168baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -30(%edx), %ebx 2169baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2170baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2171baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(28bytes): 2172baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -28(%eax), %ecx 2173baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -28(%edx), %ebx 2174baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2175baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2176baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(26bytes): 2177baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -26(%eax), %ecx 2178baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -26(%edx), %ebx 2179baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2180baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2181baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(24bytes): 2182baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -24(%eax), %ecx 2183baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -24(%edx), %ebx 2184baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2185baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2186baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(22bytes): 2187baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -22(%eax), %ecx 2188baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -22(%edx), %ebx 2189baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2190baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2191baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(20bytes): 2192baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -20(%eax), %ecx 2193baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -20(%edx), %ebx 2194baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2195baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2196baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(18bytes): 2197baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -18(%eax), %ecx 2198baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -18(%edx), %ebx 2199baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2200baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2201baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(16bytes): 2202baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -16(%eax), %ecx 2203baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -16(%edx), %ebx 2204baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2205baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2206baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(14bytes): 2207baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -14(%eax), %ecx 2208baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -14(%edx), %ebx 2209baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2210baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2211baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(12bytes): 2212baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -12(%eax), %ecx 2213baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -12(%edx), %ebx 2214baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2215baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2216baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(10bytes): 2217baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -10(%eax), %ecx 2218baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -10(%edx), %ebx 2219baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2220baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2221baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(8bytes): 2222baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -8(%eax), %ecx 2223baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -8(%edx), %ebx 2224baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2225baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2226baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(6bytes): 2227baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -6(%eax), %ecx 2228baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -6(%edx), %ebx 2229baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2230baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2231baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(4bytes): 2232baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -4(%eax), %ecx 2233baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -4(%edx), %ebx 2234baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %ecx 2235baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko jne L(memcmp16_exit) 2236baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(2bytes): 2237baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -2(%eax), %eax 2238baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko movzwl -2(%edx), %ebx 2239baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko subl %ebx, %eax 2240baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko POP (%ebx) 2241baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko ret 2242baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko CFI_PUSH (%ebx) 2243baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else 2244baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case 22450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 22468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 2247baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_AS_WMEMCMP) && !defined(USE_AS_MEMCMP16) 22480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 22490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 22508ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(45bytes): 22518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -45(%eax), %ecx 22528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -45(%edx), %ebx 22538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(41bytes): 22568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -41(%eax), %ecx 22578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -41(%edx), %ebx 22588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22608ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(37bytes): 22618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -37(%eax), %ecx 22628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -37(%edx), %ebx 22638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22658ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(33bytes): 22668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -33(%eax), %ecx 22678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -33(%edx), %ebx 22688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(29bytes): 22718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -29(%eax), %ecx 22728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -29(%edx), %ebx 22738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22758ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(25bytes): 22768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -25(%eax), %ecx 22778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -25(%edx), %ebx 22788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22808ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(21bytes): 22818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -21(%eax), %ecx 22828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -21(%edx), %ebx 22838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22858ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(17bytes): 22868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -17(%eax), %ecx 22878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -17(%edx), %ebx 22888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22908ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(13bytes): 22918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -13(%eax), %ecx 22928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -13(%edx), %ebx 22938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 22958ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(9bytes): 22968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -9(%eax), %ecx 22978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -9(%edx), %ebx 22988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 22998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(5bytes): 23018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -5(%eax), %ecx 23028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -5(%edx), %ebx 23038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl -1(%eax), %ecx 23068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp -1(%edx), %cl 23078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0, %eax 23088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 23090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%ebx) 23108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 23118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare CFI_PUSH (%ebx) 23128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 23130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 23148ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(46bytes): 23158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -46(%eax), %ecx 23168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -46(%edx), %ebx 23178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(42bytes): 23208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -42(%eax), %ecx 23218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -42(%edx), %ebx 23228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(38bytes): 23258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -38(%eax), %ecx 23268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -38(%edx), %ebx 23278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23298ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(34bytes): 23308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -34(%eax), %ecx 23318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -34(%edx), %ebx 23328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23348ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(30bytes): 23358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -30(%eax), %ecx 23368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -30(%edx), %ebx 23378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(26bytes): 23408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -26(%eax), %ecx 23418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -26(%edx), %ebx 23428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23448ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(22bytes): 23458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -22(%eax), %ecx 23468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -22(%edx), %ebx 23478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23498ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(18bytes): 23508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -18(%eax), %ecx 23518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -18(%edx), %ebx 23528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(14bytes): 23558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -14(%eax), %ecx 23568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -14(%edx), %ebx 23578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23598ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(10bytes): 23608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -10(%eax), %ecx 23618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -10(%edx), %ebx 23628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23648ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(6bytes): 23658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -6(%eax), %ecx 23668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov -6(%edx), %ebx 23678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23698ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(2bytes): 23708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzwl -2(%eax), %ecx 23718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzwl -2(%edx), %ebx 23728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %bl, %cl 23738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 23748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %bh, %ch 23758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0, %eax 23768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 23770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%ebx) 23788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 23798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare CFI_PUSH (%ebx) 23808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 23810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 23828ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(47bytes): 23838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -47(%eax), %ecx 23848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -47(%edx), %ebx 23858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23878ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(43bytes): 23888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -43(%eax), %ecx 23898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -43(%edx), %ebx 23908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(39bytes): 23938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -39(%eax), %ecx 23948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -39(%edx), %ebx 23958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 23968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 23978ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(35bytes): 23988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -35(%eax), %ecx 23998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -35(%edx), %ebx 24008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 24018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 24028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(31bytes): 24038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -31(%eax), %ecx 24048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -31(%edx), %ebx 24058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 24068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 24078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(27bytes): 24088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -27(%eax), %ecx 24098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -27(%edx), %ebx 24108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 24118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 24128ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(23bytes): 24138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -23(%eax), %ecx 24148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -23(%edx), %ebx 24158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 24168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 24178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(19bytes): 24188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -19(%eax), %ecx 24198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -19(%edx), %ebx 24208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 24218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 24228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(15bytes): 24238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -15(%eax), %ecx 24248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -15(%edx), %ebx 24258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 24268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 24278ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(11bytes): 24288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -11(%eax), %ecx 24298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -11(%edx), %ebx 24308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 24318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 24328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(7bytes): 24338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -7(%eax), %ecx 24348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movl -7(%edx), %ebx 24358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %ebx, %ecx 24368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(find_diff) 24378ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(3bytes): 24388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzwl -3(%eax), %ecx 24398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzwl -3(%edx), %ebx 24408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %bl, %cl 24418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 24428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %bx, %cx 24438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 24448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare movzbl -1(%eax), %eax 24458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb -1(%edx), %al 24468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $0, %eax 24478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 24480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%ebx) 24498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 24508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare CFI_PUSH (%ebx) 24518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 24520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 24538ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(find_diff): 24548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmpb %bl, %cl 24558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 24568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %bx, %cx 24578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 24588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr $16,%ecx 24598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare shr $16,%ebx 24608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %bl, %cl 24618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare jne L(end) 24628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare cmp %bx, %cx 24630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 24640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 24658ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(end): 24660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%ebx) 24678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare mov $1, %eax 24688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ja L(bigger) 24698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare neg %eax 24708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(bigger): 24718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare ret 2472baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_WMEMCMP) 24738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare 24740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 24750a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(find_diff): 24760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%ebx) 24770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %eax 24780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jg L(find_diff_bigger) 24790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva neg %eax 24800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 24810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 24820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 24830a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(find_diff_bigger): 24840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 24850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2486baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_MEMCMP16) 2487baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko 2488baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko .p2align 4 2489baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(memcmp16_exit): 2490baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko POP (%ebx) 2491baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko mov %ecx, %eax 2492baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko ret 2493baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else 2494baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case 24950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 24968ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareEND (MEMCMP) 2497