10a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* 20a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaCopyright (c) 2011, Intel Corporation 30a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaAll rights reserved. 40a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 50a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaRedistribution and use in source and binary forms, with or without 60a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievamodification, are permitted provided that the following conditions are met: 70a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 80a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * Redistributions of source code must retain the above copyright notice, 90a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * this list of conditions and the following disclaimer. 100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * Redistributions in binary form must reproduce the above copyright notice, 120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * this list of conditions and the following disclaimer in the documentation 130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * and/or other materials provided with the distribution. 140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * Neither the name of Intel Corporation nor the names of its contributors 160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * may be used to endorse or promote products derived from this software 170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * without specific prior written permission. 180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 190a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 200a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 210a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 220a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 230a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 250a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 260a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 280a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva*/ 300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef L 320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define L(label) .L##label 330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_startproc 360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_startproc .cfi_startproc 370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_endproc 400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_endproc .cfi_endproc 410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_rel_offset 440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off 450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_restore 480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_restore(reg) .cfi_restore reg 490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_adjust_cfa_offset 520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off 530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef ENTRY 560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define ENTRY(name) \ 570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .type name, @function; \ 580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .globl name; \ 590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4; \ 600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievaname: \ 610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_startproc 620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef END 650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define END(name) \ 660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_endproc; \ 670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .size name, .-name 680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define CFI_PUSH(REG) \ 710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_adjust_cfa_offset (4); \ 720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_rel_offset (REG, 0) 730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define CFI_POP(REG) \ 750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_adjust_cfa_offset (-4); \ 760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_restore (REG) 770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define PUSH(REG) pushl REG; CFI_PUSH (REG) 790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define POP(REG) popl REG; CFI_POP (REG) 800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define PARMS 4 820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define STR1 PARMS 830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define STR2 STR1+4 840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define LEN STR2+4 850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .text 870a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaENTRY (memrchr) 880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov STR1(%esp), %ecx 890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movd STR2(%esp), %xmm1 900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov LEN(%esp), %edx 910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(return_null) 940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $16, %edx 950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(length_less16) 960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva punpcklbw %xmm1, %xmm1 980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %edx, %ecx 990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva punpcklbw %xmm1, %xmm1 1000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqu (%ecx), %xmm0 1020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pshufd $0, %xmm1, %xmm1 1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 1060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch) 1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %ecx 1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %eax 1120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(loop_prolog) 1130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $16, %ecx 1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $16, %edx 1160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $-16, %ecx 1170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub %eax, %edx 1180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* Loop start on aligned string. */ 1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(loop_prolog): 1220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edx 1230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(exit_loop) 1240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 48(%ecx), %xmm0 1260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 1270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 1280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches48) 1300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%ecx), %xmm2 1320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 1340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches32) 1360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%ecx), %xmm3 1380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 1390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 1400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches16) 1420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa (%ecx), %xmm4 1440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm4 1450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm4, %eax 1460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch) 1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %ecx 1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edx 1510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(exit_loop) 1520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 48(%ecx), %xmm0 1540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 1550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 1560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches48) 1580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%ecx), %xmm2 1600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 1610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 1620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches32) 1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%ecx), %xmm3 1660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 1680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches16) 1700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa (%ecx), %xmm3 1720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 1730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 1740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch) 1760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 1780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $63, %eax 1790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(align64_loop) 1810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $64, %ecx 1830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $64, %edx 1840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $-64, %ecx 1850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub %eax, %edx 1860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1880a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(align64_loop): 1890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %ecx 1900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edx 1910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(exit_loop) 1920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa (%ecx), %xmm0 1940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%ecx), %xmm2 1950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%ecx), %xmm3 1960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 48(%ecx), %xmm4 1970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 1990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 2000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 2010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm4 2020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmaxub %xmm3, %xmm0 2040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmaxub %xmm4, %xmm2 2050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmaxub %xmm0, %xmm2 2060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 2070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(align64_loop) 2100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm4, %eax 2120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches48) 2140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 2160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches32) 2180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%ecx), %xmm2 2200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 2220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%ecx), %xmm1 2230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 2250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches16) 2270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %eax 2290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ah, %ah 2300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_high) 2310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %dl 2320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %dl 2330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_8) 2340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 2350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_4) 2360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 2370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_3) 2380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 2390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_2) 2400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 2410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 2420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2440a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_loop): 2450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $64, %edx 2460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $32, %edx 2470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(exit_loop_32) 2480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 48(%ecx), %xmm0 2500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 2510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 2520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches48) 2540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%ecx), %xmm2 2560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 2570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 2580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches32) 2600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%ecx), %xmm3 2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 2630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 2640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches16_1) 2660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $48, %edx 2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_null) 2680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%ecx), %xmm1 2700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %eax 2710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches0_1) 2730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 2740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 2750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2770a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_loop_32): 2780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 48(%ecx), %xmm0 2790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 2800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 2810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches48_1) 2830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $16, %edx 2840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_null) 2850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb 32(%ecx), %xmm1 2870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %eax 2880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(matches32_1) 2900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 2910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 2920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2940a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(matches16): 2950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 2960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ah, %ah 2970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_high) 2980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %dl 2990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %dl 3000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_8) 3010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 3020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_4) 3030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 3040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_3) 3050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 3060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_2) 3070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 3080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3110a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(matches32): 3120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 32(%ecx), %ecx 3130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ah, %ah 3140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_high) 3150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %dl 3160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %dl 3170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_8) 3180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 3190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_4) 3200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 3210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_3) 3220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 3230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_2) 3240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 3250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3280a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(matches48): 3290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 48(%ecx), %ecx 3300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3320a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_dispatch): 3330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ah, %ah 3340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_high) 3350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %dl 3360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %dl 3370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_8) 3380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 3390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_4) 3400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 3410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_3) 3420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 3430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_2) 3440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 3450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3480a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_dispatch_8): 3490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x80, %al 3500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_8) 3510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %al 3520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_7) 3530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %al 3540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_6) 3550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 4(%ecx), %eax 3560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3590a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_dispatch_high): 3600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ah, %dh 3610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %dh 3620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_high_8) 3630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %ah 3640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_12) 3650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %ah 3660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_11) 3670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %ah 3680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_10) 3690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 8(%ecx), %eax 3700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3730a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_dispatch_high_8): 3740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x80, %ah 3750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_16) 3760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %ah 3770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_15) 3780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %ah 3790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_14) 3800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 12(%ecx), %eax 3810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3840a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_2): 3850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 1(%ecx), %eax 3860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3890a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_3): 3900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 2(%ecx), %eax 3910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3940a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_4): 3950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 3(%ecx), %eax 3960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 3970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3990a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_6): 4000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 5(%ecx), %eax 4010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4040a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_7): 4050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 6(%ecx), %eax 4060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4090a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_8): 4100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 7(%ecx), %eax 4110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4140a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_10): 4150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 9(%ecx), %eax 4160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4190a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_11): 4200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 10(%ecx), %eax 4210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4240a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_12): 4250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 11(%ecx), %eax 4260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4290a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_14): 4300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 13(%ecx), %eax 4310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4340a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_15): 4350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 14(%ecx), %eax 4360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4390a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_16): 4400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 15(%ecx), %eax 4410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4440a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(matches0_1): 4450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -64(%edx), %edx 4460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ah, %ah 4480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_high) 4490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %ah 4500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %ah 4510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_8) 4520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 4530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_4) 4540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 4550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_3) 4560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 4570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_2) 4580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $0, %edx 4600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 4610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 4620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4650a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(matches16_1): 4660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -48(%edx), %edx 4670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 4680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ah, %ah 4700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_high) 4710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %ah 4720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %ah 4730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_8) 4740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 4750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_4) 4760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 4770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_3) 4780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 4790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_2) 4800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $0, %edx 4820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 4830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 4840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 4850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4870a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(matches32_1): 4880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -32(%edx), %edx 4890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 32(%ecx), %ecx 4900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ah, %ah 4920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_high) 4930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %ah 4940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %ah 4950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_8) 4960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 4970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_4) 4980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 4990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_3) 5000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 5010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_2) 5020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $0, %edx 5040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 5050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 5060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 5070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5090a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(matches48_1): 5100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%edx), %edx 5110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 48(%ecx), %ecx 5120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5140a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_dispatch_1): 5150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ah, %ah 5160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_high) 5170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %ah 5180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %ah 5190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_8) 5200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 5210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_4) 5220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 5230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_3) 5240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 5250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_2) 5260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $0, %edx 5280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 5290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 5300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 5310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5330a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_dispatch_1_8): 5340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x80, %al 5350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_8) 5360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %al 5370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_7) 5380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %al 5390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_6) 5400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $4, %edx 5420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 5430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 4(%ecx), %eax 5440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 5450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5470a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_dispatch_1_high): 5480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ah, %al 5490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15 << 4, %al 5500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch_1_high_8) 5510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %ah 5520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_12) 5530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %ah 5540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_11) 5550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %ah 5560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_10) 5570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $8, %edx 5590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 5600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 8(%ecx), %eax 5610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 5620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5640a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_dispatch_1_high_8): 5650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x80, %ah 5660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_16) 5670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %ah 5680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_15) 5690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %ah 5700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_1_14) 5710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $12, %edx 5730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 5740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 12(%ecx), %eax 5750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 5760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5780a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_2): 5790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $1, %edx 5800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 5810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 1(%ecx), %eax 5820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 5830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5850a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_3): 5860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $2, %edx 5870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 5880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 2(%ecx), %eax 5890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 5900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5920a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_4): 5930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $3, %edx 5940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 5950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 3(%ecx), %eax 5960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 5970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5990a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_6): 6000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $5, %edx 6010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 5(%ecx), %eax 6030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6060a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_7): 6070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $6, %edx 6080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 6(%ecx), %eax 6100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6130a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_8): 6140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $7, %edx 6150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 7(%ecx), %eax 6170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6200a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_10): 6210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $9, %edx 6220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 9(%ecx), %eax 6240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6270a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_11): 6280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $10, %edx 6290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 10(%ecx), %eax 6310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6340a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_12): 6350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $11, %edx 6360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 11(%ecx), %eax 6380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6410a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_14): 6420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $13, %edx 6430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 13(%ecx), %eax 6450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6480a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_15): 6490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $14, %edx 6500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 14(%ecx), %eax 6520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6550a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1_16): 6560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $15, %edx 6570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jl L(return_null) 6580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 15(%ecx), %eax 6590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6620a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(return_null): 6630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 6640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6670a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(length_less16_offset0): 6680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dl, %cl 6690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%eax), %xmm1 6700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %edx 6720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sal %cl, %edx 6730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $1, %edx 6740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %eax, %ecx 6760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %eax 6770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and %edx, %eax 6790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 6800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_dispatch) 6810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 6830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 6840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6860a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(length_less16): 6870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva punpcklbw %xmm1, %xmm1 6880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $16, %edx 6890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva punpcklbw %xmm1, %xmm1 6900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %eax 6920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pshufd $0, %xmm1, %xmm1 6930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %ecx 6950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(length_less16_offset0) 6960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva PUSH (%edi) 6980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %cl, %dh 7000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %dl, %dh 7010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $-16, %eax 7020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $16, %dh 7040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ja L(length_less16_part2) 7050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%eax), %xmm1 7070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %edi 7080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sar %cl, %edi 7100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %ecx, %eax 7110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dl, %cl 7120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %edx 7140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sal %cl, %edx 7150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $1, %edx 7160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and %edx, %edi 7180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edi, %edi 7190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(ret_null) 7200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva bsr %edi, %edi 7220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %edi, %eax 7230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 7240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 7250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva CFI_PUSH (%edi) 7270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 7290a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(length_less16_part2): 7300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%eax), %xmm2 7310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 7320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %edi 7330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %cl, %ch 7350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dh, %cl 7370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %edx 7380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sal %cl, %edx 7390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $1, %edx 7400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and %edx, %edi 7420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edi, %edi 7440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(length_less16_part2_return) 7450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%eax), %xmm1 7470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %edi 7480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ch, %cl 7500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sar %cl, %edi 7510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edi, %edi 7520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(ret_null) 7530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva bsr %edi, %edi 7550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %edi, %eax 7560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %ch, %ch 7570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %ecx, %eax 7580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 7590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 7600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva CFI_PUSH (%edi) 7620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 7640a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(length_less16_part2_return): 7650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva bsr %edi, %edi 7660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax, %edi), %eax 7670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 7680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 7690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva CFI_PUSH (%edi) 7710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 7730a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ret_null): 7740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 7750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%edi) 7760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ret 7770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 7780a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (memrchr) 779