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	8
820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define ENTRANCE	PUSH(%edi);
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
880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.text
890a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaENTRY (strrchr)
900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ENTRANCE
920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	STR1(%esp), %ecx
930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movd	STR2(%esp), %xmm1
940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pxor	%xmm2, %xmm2
960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ecx, %edi
970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	punpcklbw %xmm1, %xmm1
980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	punpcklbw %xmm1, %xmm1
990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	/* ECX has OFFSET. */
1000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$63, %ecx
1010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pshufd	$0, %xmm1, %xmm1
1020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$48, %ecx
1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ja	L(crosscache)
1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* unaligned string. */
1060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	(%edi), %xmm0
1070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm0, %xmm2
1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm1, %xmm0
1090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	/* Find where NULL is.  */
1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm2, %ecx
1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	/* Check if there is a match.  */
1120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$16, %edi
1140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(unaligned_match1)
1170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%ecx, %ecx
1190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(return_null)
1200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-16, %edi
1220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%esi)
1240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%ebx)
1250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%ebx, %ebx
1270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(loop)
1280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_POP    (%esi)
1300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_POP    (%ebx)
1310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(unaligned_match1):
1340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%ecx, %ecx
1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(prolog_find_zero_1)
1360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%esi)
1380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%ebx)
1390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%eax, %ebx
1410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%edi, %esi
1420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-16, %edi
1430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(loop)
1440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_POP    (%esi)
1460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_POP    (%ebx)
1470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
1490a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(crosscache):
1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* Hancle unaligned string.  */
1510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15, %ecx
1520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-16, %edi
1530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pxor	%xmm3, %xmm3
1540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqa	(%edi), %xmm0
1550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm0, %xmm3
1560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm1, %xmm0
1570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	/* Find where NULL is.  */
1580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm3, %edx
1590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	/* Check if there is a match.  */
1600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	/* Remove the leading bytes.  */
1620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	shr	%cl, %edx
1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	shr	%cl, %eax
1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$16, %edi
1650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(unaligned_match)
1680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%edx, %edx
1700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(return_null)
1710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%esi)
1730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%ebx)
1740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%ebx, %ebx
1760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(loop)
1770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_POP    (%esi)
1790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_POP    (%ebx)
1800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
1820a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(unaligned_match):
1830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%edx, %edx
1840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(prolog_find_zero)
1850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%esi)
1870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%ebx)
1880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%eax, %ebx
1900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	(%edi, %ecx), %esi
1910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* Loop start on aligned string.  */
1930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
1940a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(loop):
1950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqa	(%edi), %xmm0
1960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm0, %xmm2
1970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$16, %edi
1980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm1, %xmm0
1990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm2, %ecx
2000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	or	%eax, %ecx
2020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(matches)
2030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqa	(%edi), %xmm0
2050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm0, %xmm2
2060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$16, %edi
2070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm1, %xmm0
2080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm2, %ecx
2090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	or	%eax, %ecx
2110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(matches)
2120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqa	(%edi), %xmm0
2140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm0, %xmm2
2150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$16, %edi
2160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm1, %xmm0
2170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm2, %ecx
2180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	or	%eax, %ecx
2200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(matches)
2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqa	(%edi), %xmm0
2230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm0, %xmm2
2240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$16, %edi
2250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm1, %xmm0
2260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm2, %ecx
2270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	or	%eax, %ecx
2290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(loop)
2300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2310a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(matches):
2320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match)
2340a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(return_value):
2350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%ebx, %ebx
2360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_null_1)
2370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ebx, %eax
2380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%esi, %edi
2390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
2410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
2420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(match_case1)
2440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH    (%ebx)
2460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH    (%esi)
2470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
2490a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(return_null_1):
2500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
2510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
2520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
2540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
2550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH    (%ebx)
2570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH    (%esi)
2580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
2600a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match):
2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm2, %ecx
2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%ecx, %ecx
2630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(find_zero)
2640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%eax, %ebx
2650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%edi, %esi
2660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(loop)
2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
2690a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(find_zero):
2700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%cl, %cl
2710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(find_zero_high)
2720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%cl, %dl
2730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15, %dl
2740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(find_zero_8)
2750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x01, %cl
2760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit1)
2770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x02, %cl
2780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit2)
2790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x04, %cl
2800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit3)
281592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 4) - 1, %eax
2820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
2830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
2850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
2860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
2870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
2890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
2900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
2920a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(find_zero_8):
2930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x10, %cl
2940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit5)
2950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x20, %cl
2960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit6)
2970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x40, %cl
2980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit7)
299592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 8) - 1, %eax
3000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
3010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
3030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
3050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
3070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
3080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3100a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(find_zero_high):
3110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ch, %dh
3120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15, %dh
3130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(find_zero_high_8)
3140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x01, %ch
3150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit9)
3160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x02, %ch
3170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit10)
3180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x04, %ch
3190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit11)
320592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 12) - 1, %eax
3210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
3220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
3240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
3260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
3280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
3290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3310a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(find_zero_high_8):
3320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x10, %ch
3330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit13)
3340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x20, %ch
3350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit14)
3360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x40, %ch
3370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(FindZeroExit15)
338592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 16) - 1, %eax
3390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
3400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
3420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
3440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
3460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
3470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3490a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit1):
3500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$1, %eax
3510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
3520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
3540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
3560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
3580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
3590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3610a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit2):
362592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 2) - 1, %eax
3630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
3640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
3660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
3680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
3700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
3710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3730a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit3):
374592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 3) - 1, %eax
3750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
3760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
3780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
3800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
3820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
3830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3850a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit5):
386592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 5) - 1, %eax
3870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
3880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
3900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
3920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
3940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
3950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3970a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit6):
398592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 6) - 1, %eax
3990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
4000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
4020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
4040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
4060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
4070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4090a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit7):
410592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 7) - 1, %eax
4110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
4120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
4140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
4160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
4180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
4190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4210a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit9):
422592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 9) - 1, %eax
4230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
4240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
4260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
4280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
4300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
4310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4330a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit10):
434592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 10) - 1, %eax
4350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
4360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
4380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
4400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
4420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
4430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4450a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit11):
446592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 11) - 1, %eax
4470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
4480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
4500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
4520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
4540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
4550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4570a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit13):
458592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 13) - 1, %eax
4590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
4600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
4620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
4640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
4660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
4670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4690a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit14):
470592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 14) - 1, %eax
4710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
4720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
4740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp     L(match_case1)
4760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%ebx)
4780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
4790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4810a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(FindZeroExit15):
482592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 15) - 1, %eax
4830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(return_value)
4840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
4860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4890a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case1):
4900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%ah, %ah
4910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1_high)
4920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%al, %dl
4930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15 << 4, %dl
4940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1_8)
4950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x08, %al
4960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit4)
4970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x04, %al
4980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit3)
4990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x02, %al
5000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit2)
5010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-16(%edi), %eax
5020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5050a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case1_8):
5060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x80, %al
5070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit8)
5080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x40, %al
5090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit7)
5100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x20, %al
5110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit6)
5120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-12(%edi), %eax
5130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5160a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case1_high):
5170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ah, %dh
5180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15 << 4, %dh
5190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1_high_8)
5200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x08, %ah
5210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit12)
5220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x04, %ah
5230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit11)
5240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x02, %ah
5250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit10)
5260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-8(%edi), %eax
5270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5300a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(match_case1_high_8):
5310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x80, %ah
5320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit16)
5330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x40, %ah
5340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit15)
5350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x20, %ah
5360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit14)
5370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-4(%edi), %eax
5380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5410a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit2):
5420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-15(%edi), %eax
5430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5460a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit3):
5470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-14(%edi), %eax
5480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5510a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit4):
5520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-13(%edi), %eax
5530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5560a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit6):
5570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-11(%edi), %eax
5580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5610a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit7):
5620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-10(%edi), %eax
5630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5660a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit8):
5670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-9(%edi), %eax
5680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5710a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit10):
5720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-7(%edi), %eax
5730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5760a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit11):
5770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-6(%edi), %eax
5780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5810a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit12):
5820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-5(%edi), %eax
5830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5860a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit14):
5870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-3(%edi), %eax
5880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5910a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit15):
5920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-2(%edi), %eax
5930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5960a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit16):
5970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-1(%edi), %eax
5980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* Return NULL.  */
6010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6020a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(return_null):
6030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6070a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(prolog_find_zero):
6080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	%ecx, %edi
6090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov     %edx, %ecx
6100a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(prolog_find_zero_1):
6110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%cl, %cl
6120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(prolog_find_zero_high)
6130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%cl, %dl
6140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15, %dl
6150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(prolog_find_zero_8)
6160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x01, %cl
6170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit1)
6180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x02, %cl
6190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit2)
6200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x04, %cl
6210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit3)
622592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 4) - 1, %eax
6230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
6240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6280a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(prolog_find_zero_8):
6290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x10, %cl
6300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit5)
6310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x20, %cl
6320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit6)
6330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x40, %cl
6340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit7)
635592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 8) - 1, %eax
6360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
6370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6410a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(prolog_find_zero_high):
6420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ch, %dh
6430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15, %dh
6440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(prolog_find_zero_high_8)
6450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x01, %ch
6460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit9)
6470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x02, %ch
6480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit10)
6490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x04, %ch
6500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit11)
651592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 12) - 1, %eax
6520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
6530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6570a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(prolog_find_zero_high_8):
6580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x10, %ch
6590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit13)
6600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x20, %ch
6610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit14)
6620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x40, %ch
6630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(PrologFindZeroExit15)
664592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 16) - 1, %eax
6650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
6660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6700a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit1):
6710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$1, %eax
6720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
6730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6770a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit2):
678592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 2) - 1, %eax
6790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
6800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6840a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit3):
685592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 3) - 1, %eax
6860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
6870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6910a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit5):
692592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 5) - 1, %eax
6930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
6940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
6950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6980a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit6):
699592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 6) - 1, %eax
7000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
7010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
7020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
7030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
7040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7050a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit7):
706592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 7) - 1, %eax
7070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
7080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
7090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
7100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
7110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7120a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit9):
713592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 9) - 1, %eax
7140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
7150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
7160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
7170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
7180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7190a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit10):
720592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 10) - 1, %eax
7210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
7220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
7230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
7240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
7250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7260a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit11):
727592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 11) - 1, %eax
7280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
7290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
7300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
7310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
7320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7330a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit13):
734592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 13) - 1, %eax
7350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
7360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
7370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
7380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
7390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7400a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit14):
741592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 14) - 1, %eax
7420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
7430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
7440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
7450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
7460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7470a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(PrologFindZeroExit15):
748592c7b4cd72e18f2f1941df3d63026d7f94ef7ceChih-Hung Hsieh	and	$(1 << 15) - 1, %eax
7490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(match_case1)
7500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
7510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
7520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
7530a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (strrchr)
754