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 ENTRANCE PUSH (%edi); 820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define PARMS 8 830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define RETURN POP (%edi); ret; CFI_PUSH (%edi); 840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define STR1 PARMS 860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define STR2 STR1+4 870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define LEN STR2+4 880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .text 900a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaENTRY (memchr) 910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ENTRANCE 920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov STR1(%esp), %ecx 930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movd STR2(%esp), %xmm1 940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov LEN(%esp), %edx 950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(return_null) 970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva punpcklbw %xmm1, %xmm1 990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ecx, %edi 1000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva punpcklbw %xmm1, %xmm1 1010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $63, %ecx 1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pshufd $0, %xmm1, %xmm1 1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $48, %ecx 1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ja L(crosscache) 1060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqu (%edi), %xmm0 1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 1090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case2_prolog) 1120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $16, %edx 1140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_null) 1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%edi), %edi 1160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %ecx 1170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $-16, %edi 1180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %ecx, %edx 1190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edx 1200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(exit_loop) 1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(loop_prolog) 1220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1240a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(crosscache): 1250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %ecx 1260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $-16, %edi 1270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa (%edi), %xmm0 1280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 1290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 1300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sar %cl, %eax 1310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case2_prolog1) 1340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%edx), %edx 1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %ecx, %edx 1360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jle L(return_null) 1370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%edi), %edi 1380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edx 1390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(exit_loop) 1400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1420a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(loop_prolog): 1430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa (%edi), %xmm0 1440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 1450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %ecx, %ecx 1460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 1470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 1490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%edi), %xmm2 1510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 1520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 1530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 1540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 1560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%edi), %xmm3 1580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 1590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 1600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 1610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 48(%edi), %xmm4 1650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm4 1660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm4, %eax 1680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 1700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 64(%edi), %edi 1720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edx 1730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(exit_loop) 1740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa (%edi), %xmm0 1760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 1770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %ecx, %ecx 1780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 1790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 1810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%edi), %xmm2 1830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 1840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 1850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 1860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 1880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%edi), %xmm3 1900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 1910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 1920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 1930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 1940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 1950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 48(%edi), %xmm4 1970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm4 1980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 1990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm4, %eax 2000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 2020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 64(%edi), %edi 2040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %edi, %ecx 2050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $-64, %edi 2060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $63, %ecx 2070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %ecx, %edx 2080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2100a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(align64_loop): 2110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edx 2120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(exit_loop) 2130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa (%edi), %xmm0 2140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%edi), %xmm2 2150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%edi), %xmm3 2160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 48(%edi), %xmm4 2170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 2180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 2190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 2200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm4 2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmaxub %xmm0, %xmm3 2230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmaxub %xmm2, %xmm4 2240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmaxub %xmm3, %xmm4 2250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $64, %edi 2260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm4, %eax 2270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(align64_loop) 2300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edi 2320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 2340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %ecx, %ecx 2350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 2370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 2390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 2400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 2420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%edi), %xmm3 2440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 2450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 2460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 2470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 2480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case1) 2490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb 48(%edi), %xmm1 2510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %eax 2520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 2530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2550a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case1): 2560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %ecx, %edi 2570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %al, %al 2580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(match_case1_high) 2590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %cl 2600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %cl 2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(match_case1_8) 2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %al 2630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_1) 2640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 2650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_2) 2660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_3) 2680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 3(%edi), %eax 2690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2720a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case1_8): 2730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %al 2740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_5) 2750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %al 2760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_6) 2770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %al 2780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_7) 2790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 7(%edi), %eax 2800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2830a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case1_high): 2840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ah, %ch 2850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %ch 2860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(match_case1_high_8) 2870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %ah 2880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_9) 2890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %ah 2900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_10) 2910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %ah 2920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_11) 2930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 11(%edi), %eax 2940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2970a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case1_high_8): 2980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %ah 2990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_13) 3000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %ah 3010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_14) 3020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %ah 3030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case1_15) 3040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 15(%edi), %eax 3050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3080a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_loop): 3090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $64, %edx 3100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa (%edi), %xmm0 3120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm0 3130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %ecx, %ecx 3140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %eax 3150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 3160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case2) 3170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $16, %edx 3180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_null) 3190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 16(%edi), %xmm2 3210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm2 3220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 3230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %eax 3240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 3250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case2) 3260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $32, %edx 3270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_null) 3280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movdqa 32(%edi), %xmm3 3300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 3310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 3320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %eax 3330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 3340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case2) 3350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $48, %edx 3360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_null) 3370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb 48(%edi), %xmm1 3390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%ecx), %ecx 3400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %eax 3410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 3420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(match_case2) 3430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 3450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3480a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_1): 3490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %edi, %eax 3500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3530a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_2): 3540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 1(%edi), %eax 3550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3580a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_3): 3590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 2(%edi), %eax 3600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3630a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_5): 3640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 4(%edi), %eax 3650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3680a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_6): 3690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 5(%edi), %eax 3700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3730a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_7): 3740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 6(%edi), %eax 3750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3780a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_9): 3790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 8(%edi), %eax 3800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3830a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_10): 3840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 9(%edi), %eax 3850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3880a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_11): 3890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 10(%edi), %eax 3900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3930a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_13): 3940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 12(%edi), %eax 3950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3980a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_14): 3990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 13(%edi), %eax 4000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4030a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case1_15): 4040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 14(%edi), %eax 4050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4080a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case2): 4090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub %ecx, %edx 4100a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case2_prolog1): 4110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %ecx, %edi 4120a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case2_prolog): 4130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %al, %al 4140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(match_case2_high) 4150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %al, %cl 4160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %cl 4170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(match_case2_8) 4180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %al 4190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_1) 4200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 4210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_2) 4220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 4230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_3) 4240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $4, %edx 4250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 4260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 3(%edi), %eax 4270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4300a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case2_8): 4310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %al 4320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_5) 4330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %al 4340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_6) 4350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %al 4360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_7) 4370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $8, %edx 4380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 4390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 7(%edi), %eax 4400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4430a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case2_high): 4440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %ah, %ch 4450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %ch 4460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(match_case2_high_8) 4470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %ah 4480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_9) 4490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %ah 4500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_10) 4510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %ah 4520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_11) 4530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $12, %edx 4540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 4550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 11(%edi), %eax 4560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4590a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case2_high_8): 4600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %ah 4610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_13) 4620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %ah 4630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_14) 4640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %ah 4650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_case2_15) 4660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $16, %edx 4670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 4680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 15(%edi), %eax 4690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4720a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_1): 4730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %edi, %eax 4740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4770a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_2): 4780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $2, %edx 4790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 4800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 1(%edi), %eax 4810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4840a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_3): 4850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $3, %edx 4860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 4870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 2(%edi), %eax 4880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4910a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_5): 4920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $5, %edx 4930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 4940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 4(%edi), %eax 4950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4980a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_6): 4990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $6, %edx 5000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 5010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 5(%edi), %eax 5020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5050a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_7): 5060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $7, %edx 5070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 5080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 6(%edi), %eax 5090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5120a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_9): 5130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $9, %edx 5140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 5150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 8(%edi), %eax 5160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5190a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_10): 5200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $10, %edx 5210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 5220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 9(%edi), %eax 5230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5260a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_11): 5270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $11, %edx 5280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 5290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 10(%edi), %eax 5300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5330a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_13): 5340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $13, %edx 5350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 5360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 12(%edi), %eax 5370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5400a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_14): 5410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $14, %edx 5420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 5430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 13(%edi), %eax 5440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5470a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_case2_15): 5480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $15, %edx 5490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_null) 5500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 14(%edi), %eax 5510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5530a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(return_null): 5540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 5550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5560a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (memchr) 557