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)
118bff9cca9ca5817e97dd43962bb11b012cbb97f54Christopher Ferris	cfi_remember_state
1198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	STR1(%esp), %edx
1218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	STR2(%esp), %eax
1228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	CNT(%esp), %ebp
124c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
1258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jb	L(less16bytes_sncmp)
1268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(more16bytes)
1278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	(%eax), %ecx
1308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, (%edx)
1318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	1(%eax), %ecx
1368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 1(%edx)
1378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	2(%eax), %ecx
1428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 2(%edx)
1438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	3(%eax), %ecx
1488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 3(%edx)
1498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	4(%eax), %ecx
1548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 4(%edx)
1558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	5(%eax), %ecx
1608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 5(%edx)
1618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	6(%eax), %ecx
1668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 6(%edx)
1678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	7(%eax), %ecx
1728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 7(%edx)
1738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
1748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpl	$0, %ecx
1758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$8, %edx
1788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$8, %eax
1798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
180c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %ebp
1818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-8(%ebp), %ebp
1828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
1838ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more16bytes):
1848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	%edx, %ecx
1868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %ecx
187c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$0xff0, %ecx
1888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(crosspage)
1898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%eax, %ecx
1908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %ecx
191c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$0xff0, %ecx
1928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(crosspage)
1938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
1948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movlpd	(%eax), %xmm1
1958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movlpd	(%edx), %xmm2
1968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movhpd	8(%eax), %xmm1
1978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movhpd	8(%edx), %xmm2
1988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
1998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
2008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
2018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %ecx
2028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %ecx
2038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less16bytes)
2048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
205c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
2068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
2078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
2088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %eax
2108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edx
2118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2128ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(crosspage):
2138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	PUSH	(%ebx)
2158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	PUSH	(%edi)
2168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	PUSH	(%esi)
2178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	%edx, %edi
2198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	%eax, %ecx
2208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xf, %ecx
2218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xf, %edi
2228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%ecx, %eax
2238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%edi, %edx
2248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%ebx, %ebx
225c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	%edi, %ecx
2268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_0)
2278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(bigger)
2288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$0x20, %ebx
2298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xchg	%edx, %eax
2308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xchg	%ecx, %edi
2318ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(bigger):
2328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	15(%edi), %edi
2338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %edi
234c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %edi
2358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jle	L(ashr_less_8)
236c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$14, %edi
2378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_15)
238c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$13, %edi
2398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_14)
240c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$12, %edi
2418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_13)
242c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$11, %edi
2438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_12)
244c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$10, %edi
2458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_11)
246c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$9, %edi
2478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_10)
2488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_less_8):
2498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_9)
250c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %edi
2518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_8)
252c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$6, %edi
2538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_7)
254c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$5, %edi
2558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_6)
256c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$4, %edi
2578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_5)
258c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$3, %edi
2598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_4)
260c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$2, %edi
2618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_3)
262c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$1, %edi
2638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_2)
264c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$0, %edi
2658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(ashr_1)
2668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
2688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_0
2698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *  ecx(offset of esi)  eax(offset of edi)  relative offset  corresponding case
2708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(0~15)            n(0~15)           15(15+ n-n)         ashr_0
2718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
2728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
2738ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_0):
2748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
2758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
2768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
2778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
2788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edx), %xmm1
2798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
2808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %edi
2818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
2828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
2838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
2848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%ecx, %edi
2858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(less32bytes)
2868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
2878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0x10, %ebx
2888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0x10, %ecx
2898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
2908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
2918ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_0):
2928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
2938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
2948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
2968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
2978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
2988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
2998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
3008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
302c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
3038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
3048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
3058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
3068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
3078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_0)
3088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
3108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_1
3118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
3128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(15)            n -15            0(15 +(n-15) - n)         ashr_1
3138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
3148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
3158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_1):
3168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
3178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
3188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
3198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
3208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
3218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$15, %xmm2
3228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
3238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
3248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
3258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
3268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
3278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
3288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-15(%ecx), %edi
3298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
3308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
3328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
3348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
3358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
3368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$1, %ebx
3378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	1(%edx), %edi
3388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
3398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
3408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
3428ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_1):
3438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
3448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_1)
3458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3468ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_1):
3478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
3488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
3498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
3508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1, %xmm3, %xmm2
3528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
3548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
3558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
3568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
3578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
3588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
360c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
3618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
3628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
3638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
3648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
3668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
3678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
3698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_1)
3708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
3728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
3738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
3748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1, %xmm3, %xmm2
3768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
3788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
3798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
3808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
3818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
3828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
385c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
3868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
3878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
3888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
3898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
3908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
3918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_1)
3928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
3948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_1):
3958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
3968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
3978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfffe, %esi
3988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_1_exittail)
3998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
401c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$15, %ebp
4028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_1_exittail)
4038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
4048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
4058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
4068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_1)
4078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
4098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_1_exittail):
4108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
4118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$1, %xmm0
4128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$1, %xmm3
4138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
4148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
4168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_2
4178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
4188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(14~15)            n -14            1(15 +(n-14) - n)         ashr_2
4198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
4208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
4218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_2):
4228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
4238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
4248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
4258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
4268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
4278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$14, %xmm2
4288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
4298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
4308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
4318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
4328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
4338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
4348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-14(%ecx), %edi
4358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
4368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
4388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
4408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
4418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
4428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$2, %ebx
4438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	2(%edx), %edi
4448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
4458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
4468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
4488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_2):
4498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
4508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_2)
4518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4528ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_2):
4538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
4548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
4558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
4568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2, %xmm3, %xmm2
4588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
4608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
4618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
4628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
4638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
4648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
4658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
467c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
4688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
4698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
4708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
4718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
4728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
4738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
4758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_2)
4768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
4788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
4798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
4808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2, %xmm3, %xmm2
4828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
4848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
4858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
4868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
4878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
4888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
4898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
491c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
4928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
4938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
4948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
4958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
4968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
4978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_2)
4988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
5008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_2):
5018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
5028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
5038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfffc, %esi
5048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_2_exittail)
5058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
507c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$14, %ebp
5088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_2_exittail)
5098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
5108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
5128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
5138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_2)
5148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
5168ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_2_exittail):
5178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
5188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$2, %xmm0
5198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$2, %xmm3
5208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
5218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
5238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_3
5248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
5258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(13~15)            n -13            2(15 +(n-13) - n)         ashr_3
5268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
5278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
5288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_3):
5298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
5308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
5318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
5328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
5338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
5348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$13, %xmm2
5358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
5368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
5378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
5388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
5398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
5408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
5418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-13(%ecx), %edi
5428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
5438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
5458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
5478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
5488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
5498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$3, %ebx
5508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	3(%edx), %edi
5518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
5528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
5538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
5558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_3):
5568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
5578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_3)
5588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5598ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_3):
5608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
5618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
5628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
5638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3, %xmm3, %xmm2
5658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
5678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
5688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
5698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
5708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
5718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
5728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
574c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
5758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
5768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
5778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
5788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
5798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
5808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
5828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_3)
5838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
5858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
5868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
5878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3, %xmm3, %xmm2
5898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
5918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
5928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
5938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
5948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
5958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
5968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
598c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
5998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
6008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
6018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
6028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
6038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
6048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_3)
6058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
6078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_3):
6088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
6098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
6108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfff8, %esi
6118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_3_exittail)
6128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
614c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$13, %ebp
6158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_3_exittail)
6168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
6178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
6188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
6198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_3)
6208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
6228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_3_exittail):
6238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
6248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$3, %xmm0
6258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$3, %xmm3
6268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
6278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
6298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_4
6308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
6318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(12~15)            n -12            3(15 +(n-12) - n)         ashr_4
6328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
6338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
6348ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_4):
6358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
6368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
6378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
6388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
6398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
6408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$12, %xmm2
6418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
6428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
6438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
6448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
6458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
6468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
6478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-12(%ecx), %edi
6488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
6498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
6518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
6538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
6548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
6558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$4, %ebx
6568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	4(%edx), %edi
6578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
6588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
6598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
6618ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_4):
6628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
6638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_4)
6648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6658ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_4):
6668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
6678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
6688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
6698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4, %xmm3, %xmm2
6718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
6738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
6748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
6758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
6768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
6778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
6788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
680c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
6818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
6828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
6838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
6848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
6868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
6878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
6898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_4)
6908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
6928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
6938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
6948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4, %xmm3, %xmm2
6968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
6988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
6998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
7008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
7018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
7028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
7038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
705c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
7068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
7078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
7088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
7098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
7118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
7128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_4)
7138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
7158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_4):
7168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
7178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
7188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfff0, %esi
7198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_4_exittail)
7208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
722c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$12, %ebp
7238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_4_exittail)
7248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
7258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
7278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
7288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_4)
7298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
7318ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_4_exittail):
7328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
7338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$4, %xmm0
7348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$4, %xmm3
7358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
7368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
7388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_5
7398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
7408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(11~15)            n -11            4(15 +(n-11) - n)         ashr_5
7418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
7428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
7438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_5):
7448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
7458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
7468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
7478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
7488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
7498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$11, %xmm2
7508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
7518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
7528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
7538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
7548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
7558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
7568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-11(%ecx), %edi
7578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
7588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
7608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
7628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
7638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
7648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$5, %ebx
7658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	5(%edx), %edi
7668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
7678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
7688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
7708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_5):
7718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
7728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_5)
7738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7748ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_5):
7758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
7768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
7778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
7788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5, %xmm3, %xmm2
7808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
7828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
7838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
7848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
7858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
7868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
7878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
789c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
7908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
7918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
7928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
7938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
7948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
7958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
7978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_5)
7988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
8008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
8018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
8028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5, %xmm3, %xmm2
8048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
8068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
8078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
8088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
8098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
8108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
813c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
8148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
8158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
8168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
8178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
8188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
8198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_5)
8208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
8228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_5):
8238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
8248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
8258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xffe0, %esi
8268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_5_exittail)
8278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
829c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$11, %ebp
8308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_5_exittail)
8318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
8328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
8338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
8348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_5)
8358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
8378ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_5_exittail):
8388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
8398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$5, %xmm0
8408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$5, %xmm3
8418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
8428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
8448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_6
8458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
8468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(10~15)            n -10            5(15 +(n-10) - n)         ashr_6
8478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
8488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
8508ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_6):
8518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
8528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
8538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
8548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
8558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
8568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$10, %xmm2
8578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
8588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
8598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
8608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
8618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
8628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
8638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-10(%ecx), %edi
8648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
8658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
8678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
8698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
8708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
8718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$6, %ebx
8728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	6(%edx), %edi
8738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
8748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
8758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
8778ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_6):
8788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
8798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_6)
8808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8818ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_6):
8828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
8838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
8848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
8858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6, %xmm3, %xmm2
8878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
8898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
8908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
8918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
8928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
8938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
896c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
8978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
8988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
8998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
9008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
9028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
9038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
9058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_6)
9068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
9088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
9098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
9108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6, %xmm3, %xmm2
9128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
9148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
9158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
9168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
9178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
9188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
9198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
920c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
9218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
9228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
9238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
9248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
9268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
9278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_6)
9288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
9308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_6):
9318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
9328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
9338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xffc0, %esi
9348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_6_exittail)
9358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
937c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$10, %ebp
9388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_6_exittail)
9398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
9408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
9418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
9428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_6)
9438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
9458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_6_exittail):
9468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
9478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$6, %xmm0
9488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$6, %xmm3
9498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
9508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
9528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_7
9538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
9548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(9~15)            n - 9            6(15 +(n-9) - n)         ashr_7
9558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
9568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
9588ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_7):
9598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
9608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
9618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
9628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
9638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
9648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$9, %xmm2
9658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
9668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
9678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
9688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
9698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
9708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
9718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-9(%ecx), %edi
9728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
9738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
9758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
9778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
9788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
9798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$7, %ebx
9808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	8(%edx), %edi
9818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
9828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
9838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
9858ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_7):
9868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
9878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_7)
9888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9898ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_7):
9908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
9918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
9928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
9938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7, %xmm3, %xmm2
9958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
9978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
9988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
9998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
10008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
10018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
10028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1004c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
10058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
10068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
10078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
10088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
10108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
10118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
10138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_7)
10148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
10168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
10178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
10188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7, %xmm3, %xmm2
10208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
10228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
10238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
10248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
10258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
10268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
10278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1029c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
10308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
10318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
10328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
10338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
10358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
10368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_7)
10378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
10398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_7):
10408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
10418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
10428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xff80, %esi
10438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_7_exittail)
10448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1046c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$9, %ebp
10478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_7_exittail)
10488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
10498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
10508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
10518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
10528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_7)
10538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
10558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_7_exittail):
10568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
10578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$7, %xmm0
10588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$7, %xmm3
10598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
10608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
10628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_8
10638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
10648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(8~15)            n - 8            7(15 +(n-8) - n)         ashr_8
10658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
10668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
10678ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_8):
10688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
10698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
10708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
10718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
10728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
10738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$8, %xmm2
10748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
10758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
10768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
10778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
10788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
10798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
10808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-8(%ecx), %edi
10818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
10828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
10848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
10868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
10878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
10888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$8, %ebx
10898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	8(%edx), %edi
10908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
10918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
10928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
10948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_8):
10958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
10968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_8)
10978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10988ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_8):
10998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
11008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
11018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
11028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8, %xmm3, %xmm2
11048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
11068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
11078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
11088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
11098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
11108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
11118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1113c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
11148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
11158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
11168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
11178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
11188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
11198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
11218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_8)
11228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
11248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
11258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
11268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8, %xmm3, %xmm2
11288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
11308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
11318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
11328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
11338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
11348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
11358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1137c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
11388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
11398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
11408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
11418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
11428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
11438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_8)
11448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
11468ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_8):
11478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
11488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
11498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xff00, %esi
11508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_8_exittail)
11518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1153c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %ebp
11548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_8_exittail)
11558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
11568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
11578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
11588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
11598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_8)
11608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
11628ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_8_exittail):
11638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
11648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$8, %xmm0
11658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$8, %xmm3
11668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
11678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
11698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_9
11708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
11718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(7~15)            n - 7            8(15 +(n-7) - n)         ashr_9
11728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
11738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
11748ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_9):
11758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
11768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
11778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
11788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
11798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
11808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$7, %xmm2
11818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
11828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
11838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
11848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
11858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
11868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
11878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-7(%ecx), %edi
11888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
11898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
11918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
11938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
11948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
11958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$9, %ebx
11968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	9(%edx), %edi
11978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
11988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
11998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
12018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_9):
12028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
12038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_9)
12048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12058ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_9):
12068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
12078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
12088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
12098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9, %xmm3, %xmm2
12118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
12138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
12148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
12158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
12168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
12178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
12188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1220c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
12218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
12228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
12238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
12248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
12258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
12268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
12288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_9)
12298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
12318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
12328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
12338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9, %xmm3, %xmm2
12358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
12378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
12388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
12398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
12408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
12418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
12428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1244c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
12458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
12468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
12478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
12488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
12498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
12508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_9)
12518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
12538ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_9):
12548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
12558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
12568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfe00, %esi
12578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_9_exittail)
12588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1260c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %ebp
12618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_9_exittail)
12628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
12638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
12648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
12658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_9)
12668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
12688ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_9_exittail):
12698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
12708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$9, %xmm0
12718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$9, %xmm3
12728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
12738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
12758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_10
12768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
12778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(6~15)            n - 6            9(15 +(n-6) - n)         ashr_10
12788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
12798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
12808ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_10):
12818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
12828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
12838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
12848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
12858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
12868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$6, %xmm2
12878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
12888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
12898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
12908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
12918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
12928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
12938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-6(%ecx), %edi
12948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
12958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
12978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
12998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
13008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
13018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$10, %ebx
13028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	10(%edx), %edi
13038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
13048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
13058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
13078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_10):
13088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
13098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_10)
13108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13118ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_10):
13128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
13138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
13148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
13158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10, %xmm3, %xmm2
13178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
13198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
13208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
13218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
13228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
13238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
13248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1326c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
13278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
13288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
13298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
13308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
13318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
13328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
13348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_10)
13358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
13378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
13388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
13398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10, %xmm3, %xmm2
13418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
13438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
13448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
13458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
13468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
13478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
13488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1350c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
13518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
13528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
13538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
13548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
13558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
13568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_10)
13578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
13598ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_10):
13608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
13618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
13628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xfc00, %esi
13638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_10_exittail)
13648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1366c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$6, %ebp
13678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_10_exittail)
13688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
13698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
13708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
13718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_10)
13728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
13748ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_10_exittail):
13758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
13768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$10, %xmm0
13778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$10, %xmm3
13788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
13798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
13818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_11
13828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
13838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(5~15)            n - 5            10(15 +(n-5) - n)         ashr_11
13848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
13858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
13868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_11):
13878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
13888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
13898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
13908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
13918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
13928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$5, %xmm2
13938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
13948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
13958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
13968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
13978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
13988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
13998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-5(%ecx), %edi
14008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
14018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
14038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
14058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
14068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
14078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$11, %ebx
14088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	11(%edx), %edi
14098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
14108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
14118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
14138ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_11):
14148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
14158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_11)
14168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_11):
14188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
14198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
14208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
14218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11, %xmm3, %xmm2
14238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
14258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
14268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
14278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
14288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
14298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
14308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1432c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
14338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
14348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
14358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
14368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
14378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
14388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
14408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_11)
14418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
14438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
14448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
14458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11, %xmm3, %xmm2
14478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
14498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
14508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
14518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
14528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
14538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
14548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1456c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
14578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
14588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
14598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
14608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
14618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
14628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_11)
14638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
14658ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_11):
14668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
14678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
14688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xf800, %esi
14698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_11_exittail)
14708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1472c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$5, %ebp
14738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_11_exittail)
14748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
14758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
14768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
14778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_11)
14788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
14808ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_11_exittail):
14818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
14828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$11, %xmm0
14838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$11, %xmm3
14848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
14858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
14878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_12
14888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
14898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(4~15)            n - 4            11(15 +(n-4) - n)         ashr_12
14908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
14918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
14928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_12):
14938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
14948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
14958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
14968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
14978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
14988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$4, %xmm2
14998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
15008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
15018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
15028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
15038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
15048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
15058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-4(%ecx), %edi
15068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
15078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
15098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
15118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
15128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
15138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$12, %ebx
15148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	12(%edx), %edi
15158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
15168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
15178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
15198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_12):
15208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
15218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_12)
15228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_12):
15248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
15258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
15268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
15278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12, %xmm3, %xmm2
15298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
15318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
15328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
15338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
15348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
15358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
15368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1537124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifdef USE_AS_STRNCMP
1538c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
1539124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	lea	-16(%ebp), %ebp
1540124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	jbe	L(more8byteseq)
1541124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif
1542124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare
15438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
15448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
15458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
15478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_12)
15488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
15508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
15518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
15528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12, %xmm3, %xmm2
15548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
15568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
15578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
15588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
15598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
15608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
15618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1563c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
15648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
15658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
15668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
15678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
15688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
15698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_12)
15708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
15728ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_12):
15738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
15748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
15758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xf000, %esi
15768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_12_exittail)
15778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1579c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$4, %ebp
15808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_12_exittail)
15818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
15828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
15838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
15848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_12)
15858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
15878ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_12_exittail):
15888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
15898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$12, %xmm0
15908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$12, %xmm3
15918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
15928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
15948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_13
15958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
15968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(3~15)            n - 3            12(15 +(n-3) - n)         ashr_13
15978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
15988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
15998ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_13):
16008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
16018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
16028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
16038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
16048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
16058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$3, %xmm2
16068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
16078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
16088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
16098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
16108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
16118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
16128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-3(%ecx), %edi
16138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
16148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
16168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
16188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
16198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
16208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$13, %ebx
16218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	13(%edx), %edi
16228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
16238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
16248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
16268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_13):
16278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
16288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_13)
16298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_13):
16318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
16328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
16338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
16348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13, %xmm3, %xmm2
16368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
16388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
16398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
16408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
16418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
16428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
16438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1645c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
16468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
16478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
16488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
16498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
16508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
16518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
16538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_13)
16548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
16568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
16578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
16588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13, %xmm3, %xmm2
16608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
16628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
16638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
16648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
16658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
16668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
16678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1669c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
16708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
16718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
16728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
16738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
16748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
16758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_13)
16768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
16788ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_13):
16798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
16808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
16818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xe000, %esi
16828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_13_exittail)
16838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1685c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$3, %ebp
16868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_13_exittail)
16878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
16888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
16898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
16908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_13)
16918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
16938ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_13_exittail):
16948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
16958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$13, %xmm0
16968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$13, %xmm3
16978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
16988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
17008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_14
17018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
17028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(2~15)            n - 2            13(15 +(n-2) - n)         ashr_14
17038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
17048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
17058ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_14):
17068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
17078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
17088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
17098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
17108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
17118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$2, %xmm2
17128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
17138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
17148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
17158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
17168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
17178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
17188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-2(%ecx), %edi
17198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
17208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
17228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
17248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
17258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
17268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$14, %ebx
17278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	14(%edx), %edi
17288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
17298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
17308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
17328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_14):
17338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
17348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_14)
17358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17368ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_14):
17378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
17388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
17398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
17408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14, %xmm3, %xmm2
17428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
17448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
17458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
17468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
17478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
17488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
17498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1751c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
17528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
17538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
17548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
17558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
17568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
17578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
17598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_14)
17608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
17628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
17638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
17648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14, %xmm3, %xmm2
17668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
17688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
17698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
17708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
17718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
17728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
17738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1775c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
17768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
17778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
17788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
17798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
17808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
17818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_14)
17828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
17848ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_14):
17858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
17868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
17878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0xc000, %esi
17888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_14_exittail)
17898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1791c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$2, %ebp
17928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_14_exittail)
17938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
17948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
17958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
17968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_14)
17978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
17998ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_14_exittail):
18008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
18018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$14, %xmm0
18028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$14, %xmm3
18038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
18048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
18068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * The following cases will be handled by ashr_14
18078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
18088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare *        n(1~15)            n - 1            14(15 +(n-1) - n)         ashr_15
18098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare */
18108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
18128ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_15):
18138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0xffff, %esi
18148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
18158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm2
18168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax), %xmm1
18178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
18188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pslldq	$1, %xmm2
18198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm2
18208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm2
18218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edi
18228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %esi
18238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	%cl, %edi
18248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edi, %esi
18258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-1(%ecx), %edi
18268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(less32bytes)
18278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	UPDATE_STRNCMP_COUNTER
18298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx), %xmm3
18318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
18328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$16, %ecx
18338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	or	$15, %ebx
18348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	15(%edx), %edi
18358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xfff, %edi
18368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
18378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
18398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(loop_ashr_15):
18408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
18418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_15)
18428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(gobble_ashr_15):
18448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
18458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
18468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
18478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15, %xmm3, %xmm2
18498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
18518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
18528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
18538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
18548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
18558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
18568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1858c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
18598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
18608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
18618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
18628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
18638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
18648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %edi
18668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jg	L(nibble_ashr_15)
18678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
18698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%edx, %ecx), %xmm2
18708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm2, %xmm4
18718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15, %xmm3, %xmm2
18738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm1, %xmm0
18758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm2, %xmm1
18768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
18778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
18788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %esi
18798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
18808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1882c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$16, %ebp
18838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%ebp), %ebp
18848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(more8byteseq)
18858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
18868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$16, %ecx
18878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm4, %xmm3
18888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(loop_ashr_15)
18898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
18918ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(nibble_ashr_15):
18928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm0
18938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm0, %esi
18948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x8000, %esi
18958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(ashr_15_exittail)
18968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1898c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$1, %ebp
18998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(ashr_15_exittail)
19008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
19018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pxor	%xmm0, %xmm0
19028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0x1000, %edi
19038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(gobble_ashr_15)
19048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19068ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ashr_15_exittail):
19078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%eax, %ecx), %xmm1
19088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$15, %xmm0
19098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psrldq	$15, %xmm3
19108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(aftertail)
19118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19138ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(aftertail):
19148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	%xmm3, %xmm1
19158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	psubb	%xmm0, %xmm1
19168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %esi
19178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	not	%esi
19188ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(exit):
19198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%ebx, %edi
19208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0x1f, %edi
19218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%edi, %ecx), %edi
19228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less32bytes):
19238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	%edi, %edx
19248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	%ecx, %eax
19258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x20, %ebx
19268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(ret2)
19278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xchg	%eax, %edx
19288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(ret2):
19318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%esi, %ecx
19328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%esi)
19338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%edi)
19348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%ebx)
19358ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes):
19368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
19378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(2next_8_bytes)
19388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x01, %cl
19408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte0)
19418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x02, %cl
19438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte1)
19448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x04, %cl
19468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte2)
19478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x08, %cl
19498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte3)
19508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x10, %cl
19528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte4)
19538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x20, %cl
19558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte5)
19568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x40, %cl
19588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte6)
19598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1960c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %ebp
19618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
19628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
19638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1964c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	7(%eax), %ecx
1965c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	7(%edx), %eax
19668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
19688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
19698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19718ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte0):
19728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1973c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$0, %ebp
19748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
19758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1976c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	(%eax), %ecx
1977c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	(%edx), %eax
19788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
19808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
19818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19838ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte1):
19848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1985c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$1, %ebp
19868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
19878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
1988c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	1(%eax), %ecx
1989c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	1(%edx), %eax
19908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
19928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
19938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
19958ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte2):
19968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
1997c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$2, %ebp
19988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
19998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2000c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	2(%eax), %ecx
2001c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	2(%edx), %eax
20028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte3):
20088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2009c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$3, %ebp
20108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2012c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	3(%eax), %ecx
2013c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	3(%edx), %eax
20148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte4):
20208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2021c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$4, %ebp
20228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2024c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	4(%eax), %ecx
2025c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	4(%edx), %eax
20268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20318ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte5):
20328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2033c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$5, %ebp
20348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2036c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	5(%eax), %ecx
2037c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	5(%edx), %eax
20388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte6):
20448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2045c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$6, %ebp
20468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2048c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	6(%eax), %ecx
2049c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	6(%edx), %eax
20508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(2next_8_bytes):
20568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$8, %eax
20578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$8, %edx
20588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2059c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %ebp
20608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-8(%ebp), %ebp
20618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
20638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x01, %ch
20658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte0)
20668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x02, %ch
20688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte1)
20698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x04, %ch
20718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte2)
20728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x08, %ch
20748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte3)
20758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x10, %ch
20778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte4)
20788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x20, %ch
20808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte5)
20818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x40, %ch
20838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte6)
20848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2086c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %ebp
20878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(eq)
20888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
2089c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	7(%eax), %ecx
2090c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	movzbl	7(%edx), %eax
20918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%ecx, %eax
20938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
20948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
20958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
20968ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(neq):
20978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$1, %eax
20988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(neq_bigger)
20998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	neg	%eax
21008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(neq_bigger):
21018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
21028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
21048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
21058ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more8byteseq):
21068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%esi)
21078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%edi)
21088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%ebx)
21098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
21108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21118ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(eq):
21128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
21148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%ebp)
21158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
21168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xorl	%eax, %eax
21178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
21188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifdef USE_AS_STRNCMP
2120bff9cca9ca5817e97dd43962bb11b012cbb97f54Christopher Ferris	cfi_restore_state
21218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.p2align 4
21238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes_sncmp):
21248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%ebp, %ebp
21258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(eq)
21268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	(%eax), %ecx
21288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, (%edx)
21298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2133c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$1, %ebp
21348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	1(%eax), %ecx
21378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 1(%edx)
21388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2142c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$2, %ebp
21438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	2(%eax), %ecx
21468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 2(%edx)
21478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2151c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$3, %ebp
21528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	3(%eax), %ecx
21558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 3(%edx)
21568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2160c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$4, %ebp
21618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	4(%eax), %ecx
21648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 4(%edx)
21658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2169c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$5, %ebp
21708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	5(%eax), %ecx
21738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 5(%edx)
21748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2178c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$6, %ebp
21798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	6(%eax), %ecx
21828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 6(%edx)
21838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2187c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$7, %ebp
21888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	7(%eax), %ecx
21918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 7(%edx)
21928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
21938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
21948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
21968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2197c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$8, %ebp
21988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
21998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	8(%eax), %ecx
22018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 8(%edx)
22028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2206c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$9, %ebp
22078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	9(%eax), %ecx
22108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 9(%edx)
22118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2215c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$10, %ebp
22168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	10(%eax), %ecx
22198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 10(%edx)
22208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2224c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$11, %ebp
22258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	11(%eax), %ecx
22288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 11(%edx)
22298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2234c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$12, %ebp
22358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	12(%eax), %ecx
22388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 12(%edx)
22398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2243c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$13, %ebp
22448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	13(%eax), %ecx
22478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 13(%edx)
22488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2252c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$14, %ebp
22538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	14(%eax), %ecx
22568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 14(%edx)
22578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2261c0b4d18d7d23981c1afa6a98ded011849a3c2fe2Kevin Schoedel	cmpl	$15, %ebp
22628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	15(%eax), %ecx
22658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%cl, 15(%edx)
22668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(neq)
22678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%cl, %cl
22688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(eq)
22698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	POP	(%ebp)
22718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%eax, %eax
22728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
22738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
22748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
22750a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (STRCMP)
2276