18ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
28ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareCopyright (c) 2010, Intel Corporation
38ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareAll rights reserved.
48ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
58ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareRedistribution and use in source and binary forms, with or without
68ff1a2759a6389bed30d7862d0beb76077032c99Bruce Bearemodification, are permitted provided that the following conditions are met:
78ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
88ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * Redistributions of source code must retain the above copyright notice,
98ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * this list of conditions and the following disclaimer.
108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * Redistributions in binary form must reproduce the above copyright notice,
128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * this list of conditions and the following disclaimer in the documentation
138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * and/or other materials provided with the distribution.
148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * Neither the name of Intel Corporation nor the names of its contributors
168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * may be used to endorse or promote products derived from this software
178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * without specific prior written permission.
188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
208ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
258ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare*/
308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef L
328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define L(label)	.L##label
338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_startproc
368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_startproc			.cfi_startproc
378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_endproc
408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_endproc			.cfi_endproc
418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_rel_offset
448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_rel_offset(reg, off)	.cfi_rel_offset reg, off
458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_restore
48124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare# define cfi_restore(reg)		.cfi_restore reg
498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_adjust_cfa_offset
528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_adjust_cfa_offset(off)	.cfi_adjust_cfa_offset off
538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
55124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifndef cfi_remember_state
56124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare# define cfi_remember_state		.cfi_remember_state
57124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif
58124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare
59124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifndef cfi_restore_state
60124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare# define cfi_restore_state		.cfi_restore_state
61124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif
62124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare
638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef ENTRY
648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define ENTRY(name)			\
658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.type name,  @function; 	\
668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.globl name;			\
678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4;			\
688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Bearename:					\
698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cfi_startproc
708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef END
738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define END(name)			\
748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cfi_endproc;			\
758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.size name, .-name
768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define CFI_PUSH(REG)						\
798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare  cfi_adjust_cfa_offset (4);					\
808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare  cfi_rel_offset (REG, 0)
818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define CFI_POP(REG)						\
838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare  cfi_adjust_cfa_offset (-4);					\
848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare  cfi_restore (REG)
858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define PUSH(REG)	pushl REG; CFI_PUSH (REG)
878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define POP(REG)	popl REG; CFI_POP (REG)
888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef USE_AS_STRNCMP
908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define STR1		4
918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define STR2		STR1+4
928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define RETURN		ret
938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define UPDATE_STRNCMP_COUNTER
958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#else
968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define STR1		8
978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define STR2		STR1+4
988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define CNT		STR2+4
998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define RETURN		POP (%ebp); ret; CFI_PUSH (%ebp)
1008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define UPDATE_STRNCMP_COUNTER				\
1028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	/* calculate left number to compare */		\
1038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %esi;				\
1048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %esi;				\
105c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	%esi, %ebp;				\
1068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq);			\
1078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%esi, %ebp
1088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef STRCMP
1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define STRCMP strcmp
1120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
1130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.section .text.ssse3,"ax",@progbits
1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaENTRY (STRCMP)
1168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	PUSH	(%ebp)
1188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	STR1(%esp), %edx
1208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	STR2(%esp), %eax
1218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	CNT(%esp), %ebp
123c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
1248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jb	L(less16bytes_sncmp)
1258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(more16bytes)
1268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	(%eax), %ecx
1298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, (%edx)
1308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	1(%eax), %ecx
1358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 1(%edx)
1368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	2(%eax), %ecx
1418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 2(%edx)
1428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	3(%eax), %ecx
1478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 3(%edx)
1488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	4(%eax), %ecx
1538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 4(%edx)
1548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	5(%eax), %ecx
1598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 5(%edx)
1608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	6(%eax), %ecx
1658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 6(%edx)
1668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	7(%eax), %ecx
1718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 7(%edx)
1728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$8, %edx
1778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$8, %eax
1788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
179c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %ebp
1808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-8(%ebp), %ebp
1818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1828ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more16bytes):
1838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	%edx, %ecx
1858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %ecx
186c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$0xff0, %ecx
1878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(crosspage)
1888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%eax, %ecx
1898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %ecx
190c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$0xff0, %ecx
1918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(crosspage)
1928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
1938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movlpd	(%eax), %xmm1
1948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movlpd	(%edx), %xmm2
1958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movhpd	8(%eax), %xmm1
1968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movhpd	8(%edx), %xmm2
1978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
1988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
1998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
2008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %ecx
2018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %ecx
2028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less16bytes)
2038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
204c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
2058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
2068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
2078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %eax
2098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edx
2108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2118ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(crosspage):
2128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	PUSH	(%ebx)
2148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	PUSH	(%edi)
2158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	PUSH	(%esi)
216124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifdef USE_AS_STRNCMP
217124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
218124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif
2198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	%edx, %edi
2218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	%eax, %ecx
2228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xf, %ecx
2238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xf, %edi
2248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%ecx, %eax
2258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%edi, %edx
2268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%ebx, %ebx
227c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	%edi, %ecx
2288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_0)
2298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(bigger)
2308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$0x20, %ebx
2318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xchg	%edx, %eax
2328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xchg	%ecx, %edi
2338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(bigger):
2348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	15(%edi), %edi
2358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %edi
236c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %edi
2378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jle	L(ashr_less_8)
238c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$14, %edi
2398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_15)
240c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$13, %edi
2418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_14)
242c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$12, %edi
2438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_13)
244c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$11, %edi
2458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_12)
246c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$10, %edi
2478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_11)
248c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$9, %edi
2498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_10)
2508ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_less_8):
2518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_9)
252c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %edi
2538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_8)
254c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$6, %edi
2558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_7)
256c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$5, %edi
2578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_6)
258c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$4, %edi
2598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_5)
260c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$3, %edi
2618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_4)
262c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$2, %edi
2638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_3)
264c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$1, %edi
2658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_2)
266c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$0, %edi
2678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_1)
2688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
2708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_0
2718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *  ecx(offset of esi)  eax(offset of edi)  relative offset  corresponding case
2728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(0~15)            n(0~15)           15(15+ n-n)         ashr_0
2738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
2748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
2758ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_0):
2768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
2778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
2788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
2798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
2808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edx), %xmm1
2818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
2828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %edi
2838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
2848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
2858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
2868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%ecx, %edi
2878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(less32bytes)
2888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
2898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0x10, %ebx
2908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0x10, %ecx
2918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
2928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
2938ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_0):
2948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
2958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
2968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
2988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
2998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
3008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
3018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
3028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
304c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
3058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
3068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
3078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
3088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
3098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_0)
3108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
3128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_1
3138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
3148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(15)            n -15            0(15 +(n-15) - n)         ashr_1
3158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
3168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
3178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_1):
3188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
3198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
3208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
3218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
3228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
3238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$15, %xmm2
3248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
3258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
3268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
3278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
3288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
3298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
3308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-15(%ecx), %edi
3318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
3328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
3348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
3368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
3378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
3388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$1, %ebx
3398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	1(%edx), %edi
3408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
3418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
3428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
3448ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_1):
3458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
3468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_1)
3478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_1):
3498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
3508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
3518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
3528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1, %xmm3, %xmm2
3548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
3568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
3578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
3588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
3598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
3608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
362c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
3638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
3648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
3658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
3668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
3688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
3698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
3718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_1)
3728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
3748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
3758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
3768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1, %xmm3, %xmm2
3788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
3808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
3818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
3828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
3838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
3848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
387c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
3888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
3898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
3908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
3918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
3928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
3938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_1)
3948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
3968ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_1):
3978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
3988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
3998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfffe, %esi
4008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_1_exittail)
4018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
403c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$15, %ebp
4048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_1_exittail)
4058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
4068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
4078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
4088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_1)
4098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
4118ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_1_exittail):
4128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
4138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$1, %xmm0
4148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$1, %xmm3
4158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
4168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
4188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_2
4198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
4208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(14~15)            n -14            1(15 +(n-14) - n)         ashr_2
4218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
4228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
4238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_2):
4248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
4258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
4268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
4278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
4288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
4298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$14, %xmm2
4308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
4318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
4328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
4338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
4348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
4358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
4368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-14(%ecx), %edi
4378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
4388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
4408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
4428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
4438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
4448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$2, %ebx
4458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	2(%edx), %edi
4468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
4478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
4488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
4508ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_2):
4518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
4528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_2)
4538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_2):
4558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
4568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
4578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
4588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2, %xmm3, %xmm2
4608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
4628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
4638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
4648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
4658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
4668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
4678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
469c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
4708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
4718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
4728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
4738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
4748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
4758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
4778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_2)
4788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
4808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
4818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
4828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2, %xmm3, %xmm2
4848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
4868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
4878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
4888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
4898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
4908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
4918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
493c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
4948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
4958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
4968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
4978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
4988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
4998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_2)
5008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
5028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_2):
5038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
5048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
5058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfffc, %esi
5068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_2_exittail)
5078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
509c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$14, %ebp
5108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_2_exittail)
5118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
5128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
5148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
5158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_2)
5168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
5188ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_2_exittail):
5198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
5208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$2, %xmm0
5218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$2, %xmm3
5228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
5238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
5258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_3
5268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
5278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(13~15)            n -13            2(15 +(n-13) - n)         ashr_3
5288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
5298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
5308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_3):
5318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
5328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
5338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
5348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
5358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
5368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$13, %xmm2
5378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
5388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
5398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
5408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
5418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
5428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
5438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-13(%ecx), %edi
5448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
5458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
5478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
5498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
5508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
5518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$3, %ebx
5528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	3(%edx), %edi
5538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
5548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
5558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
5578ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_3):
5588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
5598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_3)
5608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5618ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_3):
5628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
5638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
5648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
5658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3, %xmm3, %xmm2
5678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
5698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
5708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
5718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
5728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
5738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
5748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
576c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
5778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
5788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
5798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
5808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
5818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
5828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
5848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_3)
5858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
5878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
5888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
5898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3, %xmm3, %xmm2
5918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
5938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
5948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
5958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
5968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
5978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
5988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
600c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
6018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
6028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
6038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
6048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
6058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
6068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_3)
6078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
6098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_3):
6108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
6118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
6128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfff8, %esi
6138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_3_exittail)
6148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
616c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$13, %ebp
6178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_3_exittail)
6188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
6198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
6208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
6218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_3)
6228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
6248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_3_exittail):
6258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
6268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$3, %xmm0
6278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$3, %xmm3
6288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
6298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
6318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_4
6328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
6338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(12~15)            n -12            3(15 +(n-12) - n)         ashr_4
6348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
6358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
6368ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_4):
6378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
6388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
6398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
6408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
6418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
6428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$12, %xmm2
6438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
6448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
6458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
6468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
6478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
6488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
6498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-12(%ecx), %edi
6508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
6518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
6538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
6558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
6568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
6578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$4, %ebx
6588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	4(%edx), %edi
6598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
6608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
6618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
6638ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_4):
6648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
6658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_4)
6668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6678ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_4):
6688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
6698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
6708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
6718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4, %xmm3, %xmm2
6738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
6758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
6768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
6778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
6788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
6798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
6808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
682c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
6838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
6848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
6858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
6868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
6888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
6898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
6918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_4)
6928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
6948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
6958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
6968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4, %xmm3, %xmm2
6988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
7008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
7018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
7028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
7038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
7048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
7058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
707c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
7088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
7098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
7108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
7118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
7138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
7148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_4)
7158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
7178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_4):
7188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
7198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
7208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfff0, %esi
7218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_4_exittail)
7228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
724c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$12, %ebp
7258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_4_exittail)
7268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
7278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
7298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
7308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_4)
7318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
7338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_4_exittail):
7348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
7358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$4, %xmm0
7368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$4, %xmm3
7378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
7388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
7408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_5
7418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
7428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(11~15)            n -11            4(15 +(n-11) - n)         ashr_5
7438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
7448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
7458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_5):
7468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
7478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
7488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
7498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
7508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
7518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$11, %xmm2
7528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
7538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
7548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
7558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
7568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
7578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
7588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-11(%ecx), %edi
7598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
7608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
7628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
7648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
7658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
7668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$5, %ebx
7678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	5(%edx), %edi
7688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
7698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
7708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
7728ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_5):
7738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
7748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_5)
7758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_5):
7778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
7788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
7798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
7808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5, %xmm3, %xmm2
7828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
7848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
7858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
7868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
7878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
7888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
7898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
791c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
7928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
7938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
7948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
7958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
7968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
7978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
7998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_5)
8008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
8028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
8038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
8048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5, %xmm3, %xmm2
8068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
8088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
8098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
8108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
8118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
8128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
815c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
8168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
8178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
8188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
8198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
8208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
8218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_5)
8228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
8248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_5):
8258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
8268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
8278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xffe0, %esi
8288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_5_exittail)
8298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
831c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$11, %ebp
8328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_5_exittail)
8338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
8348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
8358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
8368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_5)
8378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
8398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_5_exittail):
8408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
8418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$5, %xmm0
8428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$5, %xmm3
8438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
8448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
8468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_6
8478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
8488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(10~15)            n -10            5(15 +(n-10) - n)         ashr_6
8498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
8508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
8528ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_6):
8538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
8548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
8558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
8568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
8578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
8588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$10, %xmm2
8598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
8608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
8618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
8628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
8638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
8648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
8658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-10(%ecx), %edi
8668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
8678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
8698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
8718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
8728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
8738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$6, %ebx
8748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	6(%edx), %edi
8758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
8768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
8778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
8798ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_6):
8808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
8818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_6)
8828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8838ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_6):
8848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
8858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
8868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
8878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6, %xmm3, %xmm2
8898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
8918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
8928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
8938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
8948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
8958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
898c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
8998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
9008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
9018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
9028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
9048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
9058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
9078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_6)
9088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
9108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
9118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
9128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6, %xmm3, %xmm2
9148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
9168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
9178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
9188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
9198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
9208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
9218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
922c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
9238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
9248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
9258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
9268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
9288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
9298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_6)
9308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
9328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_6):
9338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
9348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
9358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xffc0, %esi
9368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_6_exittail)
9378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
939c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$10, %ebp
9408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_6_exittail)
9418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
9428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
9438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
9448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_6)
9458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
9478ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_6_exittail):
9488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
9498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$6, %xmm0
9508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$6, %xmm3
9518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
9528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
9548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_7
9558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
9568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(9~15)            n - 9            6(15 +(n-9) - n)         ashr_7
9578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
9588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
9608ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_7):
9618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
9628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
9638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
9648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
9658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
9668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$9, %xmm2
9678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
9688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
9698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
9708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
9718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
9728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
9738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-9(%ecx), %edi
9748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
9758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
9778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
9798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
9808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
9818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$7, %ebx
9828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	8(%edx), %edi
9838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
9848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
9858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
9878ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_7):
9888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
9898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_7)
9908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9918ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_7):
9928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
9938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
9948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
9958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7, %xmm3, %xmm2
9978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
9998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
10008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
10018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
10028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
10038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
10048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1006c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
10078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
10088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
10098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
10108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
10128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
10138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
10158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_7)
10168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
10188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
10198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
10208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7, %xmm3, %xmm2
10228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
10248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
10258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
10268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
10278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
10288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
10298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1031c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
10328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
10338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
10348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
10358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
10378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
10388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_7)
10398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
10418ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_7):
10428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
10438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
10448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xff80, %esi
10458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_7_exittail)
10468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1048c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$9, %ebp
10498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_7_exittail)
10508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
10518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
10528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
10538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
10548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_7)
10558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
10578ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_7_exittail):
10588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
10598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$7, %xmm0
10608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$7, %xmm3
10618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
10628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
10648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_8
10658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
10668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(8~15)            n - 8            7(15 +(n-8) - n)         ashr_8
10678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
10688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
10698ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_8):
10708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
10718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
10728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
10738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
10748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
10758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$8, %xmm2
10768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
10778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
10788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
10798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
10808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
10818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
10828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-8(%ecx), %edi
10838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
10848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
10868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
10888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
10898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
10908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$8, %ebx
10918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	8(%edx), %edi
10928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
10938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
10948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
10968ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_8):
10978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
10988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_8)
10998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_8):
11018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
11028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
11038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
11048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8, %xmm3, %xmm2
11068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
11088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
11098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
11108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
11118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
11128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
11138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1115c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
11168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
11178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
11188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
11198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
11208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
11218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
11238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_8)
11248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
11268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
11278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
11288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8, %xmm3, %xmm2
11308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
11328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
11338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
11348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
11358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
11368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
11378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1139c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
11408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
11418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
11428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
11438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
11448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
11458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_8)
11468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
11488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_8):
11498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
11508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
11518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xff00, %esi
11528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_8_exittail)
11538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1155c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %ebp
11568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_8_exittail)
11578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
11588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
11598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
11608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
11618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_8)
11628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
11648ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_8_exittail):
11658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
11668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$8, %xmm0
11678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$8, %xmm3
11688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
11698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
11718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_9
11728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
11738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(7~15)            n - 7            8(15 +(n-7) - n)         ashr_9
11748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
11758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
11768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_9):
11778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
11788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
11798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
11808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
11818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
11828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$7, %xmm2
11838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
11848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
11858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
11868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
11878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
11888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
11898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-7(%ecx), %edi
11908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
11918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
11938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
11958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
11968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
11978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$9, %ebx
11988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	9(%edx), %edi
11998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
12008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
12018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
12038ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_9):
12048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
12058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_9)
12068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_9):
12088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
12098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
12108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
12118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9, %xmm3, %xmm2
12138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
12158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
12168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
12178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
12188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
12198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
12208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1222c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
12238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
12248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
12258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
12268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
12278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
12288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
12308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_9)
12318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
12338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
12348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
12358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9, %xmm3, %xmm2
12378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
12398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
12408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
12418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
12428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
12438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
12448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1246c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
12478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
12488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
12498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
12508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
12518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
12528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_9)
12538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
12558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_9):
12568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
12578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
12588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfe00, %esi
12598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_9_exittail)
12608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1262c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %ebp
12638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_9_exittail)
12648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
12658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
12668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
12678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_9)
12688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
12708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_9_exittail):
12718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
12728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$9, %xmm0
12738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$9, %xmm3
12748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
12758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
12778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_10
12788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
12798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(6~15)            n - 6            9(15 +(n-6) - n)         ashr_10
12808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
12818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
12828ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_10):
12838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
12848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
12858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
12868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
12878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
12888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$6, %xmm2
12898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
12908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
12918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
12928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
12938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
12948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
12958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-6(%ecx), %edi
12968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
12978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
12998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
13018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
13028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
13038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$10, %ebx
13048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	10(%edx), %edi
13058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
13068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
13078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
13098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_10):
13108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
13118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_10)
13128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13138ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_10):
13148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
13158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
13168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
13178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10, %xmm3, %xmm2
13198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
13218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
13228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
13238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
13248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
13258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
13268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1328c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
13298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
13308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
13318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
13328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
13338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
13348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
13368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_10)
13378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
13398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
13408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
13418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10, %xmm3, %xmm2
13438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
13458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
13468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
13478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
13488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
13498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
13508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1352c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
13538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
13548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
13558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
13568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
13578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
13588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_10)
13598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
13618ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_10):
13628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
13638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
13648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfc00, %esi
13658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_10_exittail)
13668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1368c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$6, %ebp
13698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_10_exittail)
13708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
13718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
13728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
13738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_10)
13748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
13768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_10_exittail):
13778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
13788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$10, %xmm0
13798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$10, %xmm3
13808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
13818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
13838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_11
13848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
13858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(5~15)            n - 5            10(15 +(n-5) - n)         ashr_11
13868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
13878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
13888ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_11):
13898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
13908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
13918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
13928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
13938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
13948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$5, %xmm2
13958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
13968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
13978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
13988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
13998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
14008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
14018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-5(%ecx), %edi
14028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
14038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
14058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
14078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
14088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
14098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$11, %ebx
14108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	11(%edx), %edi
14118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
14128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
14138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
14158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_11):
14168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
14178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_11)
14188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_11):
14208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
14218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
14228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
14238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11, %xmm3, %xmm2
14258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
14278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
14288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
14298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
14308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
14318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
14328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1434c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
14358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
14368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
14378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
14388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
14398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
14408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
14428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_11)
14438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
14458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
14468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
14478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11, %xmm3, %xmm2
14498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
14518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
14528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
14538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
14548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
14558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
14568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1458c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
14598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
14608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
14618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
14628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
14638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
14648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_11)
14658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
14678ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_11):
14688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
14698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
14708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xf800, %esi
14718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_11_exittail)
14728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1474c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$5, %ebp
14758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_11_exittail)
14768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
14778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
14788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
14798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_11)
14808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
14828ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_11_exittail):
14838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
14848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$11, %xmm0
14858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$11, %xmm3
14868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
14878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
14898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_12
14908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
14918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(4~15)            n - 4            11(15 +(n-4) - n)         ashr_12
14928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
14938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
14948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_12):
14958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
14968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
14978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
14988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
14998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
15008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$4, %xmm2
15018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
15028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
15038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
15048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
15058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
15068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
15078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-4(%ecx), %edi
15088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
15098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
15118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
15138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
15148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
15158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$12, %ebx
15168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	12(%edx), %edi
15178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
15188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
15198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
15218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_12):
15228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
15238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_12)
15248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15258ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_12):
15268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
15278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
15288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
15298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12, %xmm3, %xmm2
15318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
15338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
15348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
15358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
15368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
15378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
15388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1539124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifdef USE_AS_STRNCMP
1540c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
1541124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	lea	-16(%ebp), %ebp
1542124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	jbe	L(more8byteseq)
1543124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif
1544124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare
15458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
15468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
15478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
15498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_12)
15508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
15528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
15538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
15548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12, %xmm3, %xmm2
15568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
15588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
15598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
15608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
15618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
15628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
15638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1565c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
15668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
15678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
15688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
15698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
15708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
15718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_12)
15728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
15748ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_12):
15758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
15768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
15778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xf000, %esi
15788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_12_exittail)
15798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1581c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$4, %ebp
15828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_12_exittail)
15838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
15848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
15858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
15868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_12)
15878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
15898ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_12_exittail):
15908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
15918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$12, %xmm0
15928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$12, %xmm3
15938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
15948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
15968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_13
15978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
15988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(3~15)            n - 3            12(15 +(n-3) - n)         ashr_13
15998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
16008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
16018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_13):
16028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
16038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
16048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
16058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
16068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
16078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$3, %xmm2
16088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
16098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
16108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
16118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
16128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
16138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
16148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-3(%ecx), %edi
16158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
16168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
16188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
16208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
16218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
16228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$13, %ebx
16238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	13(%edx), %edi
16248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
16258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
16268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
16288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_13):
16298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
16308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_13)
16318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_13):
16338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
16348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
16358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
16368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13, %xmm3, %xmm2
16388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
16408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
16418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
16428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
16438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
16448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
16458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1647c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
16488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
16498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
16508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
16518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
16528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
16538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
16558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_13)
16568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
16588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
16598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
16608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13, %xmm3, %xmm2
16628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
16648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
16658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
16668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
16678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
16688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
16698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1671c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
16728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
16738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
16748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
16758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
16768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
16778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_13)
16788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
16808ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_13):
16818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
16828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
16838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xe000, %esi
16848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_13_exittail)
16858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1687c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$3, %ebp
16888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_13_exittail)
16898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
16908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
16918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
16928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_13)
16938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
16958ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_13_exittail):
16968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
16978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$13, %xmm0
16988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$13, %xmm3
16998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
17008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
17028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_14
17038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
17048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(2~15)            n - 2            13(15 +(n-2) - n)         ashr_14
17058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
17068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
17078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_14):
17088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
17098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
17108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
17118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
17128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
17138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$2, %xmm2
17148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
17158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
17168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
17178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
17188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
17198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
17208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-2(%ecx), %edi
17218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
17228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
17248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
17268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
17278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
17288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$14, %ebx
17298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	14(%edx), %edi
17308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
17318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
17328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
17348ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_14):
17358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
17368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_14)
17378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17388ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_14):
17398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
17408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
17418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
17428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14, %xmm3, %xmm2
17448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
17468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
17478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
17488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
17498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
17508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
17518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1753c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
17548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
17558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
17568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
17578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
17588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
17598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
17618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_14)
17628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
17648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
17658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
17668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14, %xmm3, %xmm2
17688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
17708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
17718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
17728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
17738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
17748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
17758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1777c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
17788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
17798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
17808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
17818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
17828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
17838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_14)
17848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
17868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_14):
17878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
17888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
17898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xc000, %esi
17908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_14_exittail)
17918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1793c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$2, %ebp
17948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_14_exittail)
17958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
17968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
17978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
17988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_14)
17998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
18018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_14_exittail):
18028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
18038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$14, %xmm0
18048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$14, %xmm3
18058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
18068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
18088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_14
18098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
18108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(1~15)            n - 1            14(15 +(n-1) - n)         ashr_15
18118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
18128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
18148ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_15):
18158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
18168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
18178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
18188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
18198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
18208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$1, %xmm2
18218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
18228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
18238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
18248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
18258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
18268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
18278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-1(%ecx), %edi
18288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
18298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
18318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
18338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
18348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
18358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$15, %ebx
18368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	15(%edx), %edi
18378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
18388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
18398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
18418ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_15):
18428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
18438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_15)
18448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_15):
18468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
18478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
18488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
18498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15, %xmm3, %xmm2
18518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
18538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
18548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
18558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
18568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
18578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
18588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1860c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
18618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
18628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
18638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
18648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
18658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
18668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
18688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_15)
18698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
18718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
18728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
18738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15, %xmm3, %xmm2
18758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
18778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
18788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
18798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
18808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
18818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
18828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1884c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
18858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
18868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
18878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
18888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
18898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
18908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_15)
18918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
18938ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_15):
18948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
18958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
18968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x8000, %esi
18978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_15_exittail)
18988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1900c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$1, %ebp
19018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_15_exittail)
19028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
19038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
19048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
19058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_15)
19068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19088ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_15_exittail):
19098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
19108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$15, %xmm0
19118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$15, %xmm3
19128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
19138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(aftertail):
19168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm1
19178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
19188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
19198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	not	%esi
19208ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(exit):
19218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%ebx, %edi
19228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0x1f, %edi
19238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%edi, %ecx), %edi
19248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less32bytes):
19258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	%edi, %edx
19268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	%ecx, %eax
19278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x20, %ebx
19288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(ret2)
19298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xchg	%eax, %edx
19308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ret2):
19338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%esi, %ecx
19348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%esi)
19358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%edi)
19368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%ebx)
19378ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes):
19388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
19398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(2next_8_bytes)
19408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x01, %cl
19428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte0)
19438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x02, %cl
19458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte1)
19468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x04, %cl
19488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte2)
19498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x08, %cl
19518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte3)
19528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x10, %cl
19548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte4)
19558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x20, %cl
19578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte5)
19588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x40, %cl
19608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte6)
19618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1962c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %ebp
19638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
19648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
19658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1966c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	7(%eax), %ecx
1967c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	7(%edx), %eax
19688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
19708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
19718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19738ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte0):
19748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1975c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$0, %ebp
19768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
19778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1978c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	(%eax), %ecx
1979c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	(%edx), %eax
19808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
19828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
19838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19858ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte1):
19868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1987c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$1, %ebp
19888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
19898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1990c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	1(%eax), %ecx
1991c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	1(%edx), %eax
19928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
19948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
19958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19978ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte2):
19988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1999c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$2, %ebp
20008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2002c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	2(%eax), %ecx
2003c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	2(%edx), %eax
20048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte3):
20108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2011c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$3, %ebp
20128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2014c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	3(%eax), %ecx
2015c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	3(%edx), %eax
20168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte4):
20228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2023c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$4, %ebp
20248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2026c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	4(%eax), %ecx
2027c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	4(%edx), %eax
20288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte5):
20348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2035c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$5, %ebp
20368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2038c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	5(%eax), %ecx
2039c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	5(%edx), %eax
20408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte6):
20468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2047c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$6, %ebp
20488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2050c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	6(%eax), %ecx
2051c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	6(%edx), %eax
20528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20578ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(2next_8_bytes):
20588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$8, %eax
20598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$8, %edx
20608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2061c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %ebp
20628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-8(%ebp), %ebp
20638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
20658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x01, %ch
20678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte0)
20688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x02, %ch
20708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte1)
20718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x04, %ch
20738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte2)
20748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x08, %ch
20768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte3)
20778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x10, %ch
20798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte4)
20808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x20, %ch
20828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte5)
20838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x40, %ch
20858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte6)
20868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2088c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %ebp
20898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2091c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	7(%eax), %ecx
2092c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	7(%edx), %eax
20938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20988ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(neq):
20998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$1, %eax
21008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(neq_bigger)
21018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	neg	%eax
21028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(neq_bigger):
21038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
21048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2106124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
21078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
21088ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more8byteseq):
21098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%esi)
21108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%edi)
21118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%ebx)
21128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
21138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21148ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(eq):
21158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
21178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%ebp)
21188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
21198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xorl	%eax, %eax
21208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
21218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
21238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	CFI_PUSH (%ebp)
21248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
21268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes_sncmp):
21278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%ebp, %ebp
21288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(eq)
21298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	(%eax), %ecx
21318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, (%edx)
21328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2136c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$1, %ebp
21378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	1(%eax), %ecx
21408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 1(%edx)
21418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2145c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$2, %ebp
21468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	2(%eax), %ecx
21498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 2(%edx)
21508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2154c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$3, %ebp
21558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	3(%eax), %ecx
21588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 3(%edx)
21598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2163c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$4, %ebp
21648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	4(%eax), %ecx
21678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 4(%edx)
21688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2172c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$5, %ebp
21738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	5(%eax), %ecx
21768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 5(%edx)
21778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2181c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$6, %ebp
21828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	6(%eax), %ecx
21858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 6(%edx)
21868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2190c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %ebp
21918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	7(%eax), %ecx
21948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 7(%edx)
21958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2200c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %ebp
22018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	8(%eax), %ecx
22048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 8(%edx)
22058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2209c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$9, %ebp
22108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	9(%eax), %ecx
22138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 9(%edx)
22148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2218c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$10, %ebp
22198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	10(%eax), %ecx
22228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 10(%edx)
22238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2227c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$11, %ebp
22288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	11(%eax), %ecx
22318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 11(%edx)
22328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2237c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$12, %ebp
22388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	12(%eax), %ecx
22418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 12(%edx)
22428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2246c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$13, %ebp
22478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	13(%eax), %ecx
22508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 13(%edx)
22518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2255c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$14, %ebp
22568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	14(%eax), %ecx
22598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 14(%edx)
22608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2264c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$15, %ebp
22658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	15(%eax), %ecx
22688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 15(%edx)
22698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%ebp)
22748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%eax, %eax
22758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
22768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
22778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22780a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (STRCMP)
2279