xref: /aosp_15_r20/bionic/libc/arch-x86/string/ssse3-strcmp-atom.S (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker/*
2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2010, Intel Corporation
3*8d67ca89SAndroid Build Coastguard WorkerAll rights reserved.
4*8d67ca89SAndroid Build Coastguard Worker
5*8d67ca89SAndroid Build Coastguard WorkerRedistribution and use in source and binary forms, with or without
6*8d67ca89SAndroid Build Coastguard Workermodification, are permitted provided that the following conditions are met:
7*8d67ca89SAndroid Build Coastguard Worker
8*8d67ca89SAndroid Build Coastguard Worker    * Redistributions of source code must retain the above copyright notice,
9*8d67ca89SAndroid Build Coastguard Worker    * this list of conditions and the following disclaimer.
10*8d67ca89SAndroid Build Coastguard Worker
11*8d67ca89SAndroid Build Coastguard Worker    * Redistributions in binary form must reproduce the above copyright notice,
12*8d67ca89SAndroid Build Coastguard Worker    * this list of conditions and the following disclaimer in the documentation
13*8d67ca89SAndroid Build Coastguard Worker    * and/or other materials provided with the distribution.
14*8d67ca89SAndroid Build Coastguard Worker
15*8d67ca89SAndroid Build Coastguard Worker    * Neither the name of Intel Corporation nor the names of its contributors
16*8d67ca89SAndroid Build Coastguard Worker    * may be used to endorse or promote products derived from this software
17*8d67ca89SAndroid Build Coastguard Worker    * without specific prior written permission.
18*8d67ca89SAndroid Build Coastguard Worker
19*8d67ca89SAndroid Build Coastguard WorkerTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20*8d67ca89SAndroid Build Coastguard WorkerANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21*8d67ca89SAndroid Build Coastguard WorkerWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22*8d67ca89SAndroid Build Coastguard WorkerDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23*8d67ca89SAndroid Build Coastguard WorkerANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24*8d67ca89SAndroid Build Coastguard Worker(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25*8d67ca89SAndroid Build Coastguard WorkerLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26*8d67ca89SAndroid Build Coastguard WorkerANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27*8d67ca89SAndroid Build Coastguard Worker(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28*8d67ca89SAndroid Build Coastguard WorkerSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*8d67ca89SAndroid Build Coastguard Worker*/
30*8d67ca89SAndroid Build Coastguard Worker
31*8d67ca89SAndroid Build Coastguard Worker#ifndef L
32*8d67ca89SAndroid Build Coastguard Worker# define L(label)	.L##label
33*8d67ca89SAndroid Build Coastguard Worker#endif
34*8d67ca89SAndroid Build Coastguard Worker
35*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_startproc
36*8d67ca89SAndroid Build Coastguard Worker# define cfi_startproc			.cfi_startproc
37*8d67ca89SAndroid Build Coastguard Worker#endif
38*8d67ca89SAndroid Build Coastguard Worker
39*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_endproc
40*8d67ca89SAndroid Build Coastguard Worker# define cfi_endproc			.cfi_endproc
41*8d67ca89SAndroid Build Coastguard Worker#endif
42*8d67ca89SAndroid Build Coastguard Worker
43*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_rel_offset
44*8d67ca89SAndroid Build Coastguard Worker# define cfi_rel_offset(reg, off)	.cfi_rel_offset reg, off
45*8d67ca89SAndroid Build Coastguard Worker#endif
46*8d67ca89SAndroid Build Coastguard Worker
47*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_restore
48*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore(reg)		.cfi_restore reg
49*8d67ca89SAndroid Build Coastguard Worker#endif
50*8d67ca89SAndroid Build Coastguard Worker
51*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_adjust_cfa_offset
52*8d67ca89SAndroid Build Coastguard Worker# define cfi_adjust_cfa_offset(off)	.cfi_adjust_cfa_offset off
53*8d67ca89SAndroid Build Coastguard Worker#endif
54*8d67ca89SAndroid Build Coastguard Worker
55*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_remember_state
56*8d67ca89SAndroid Build Coastguard Worker# define cfi_remember_state		.cfi_remember_state
57*8d67ca89SAndroid Build Coastguard Worker#endif
58*8d67ca89SAndroid Build Coastguard Worker
59*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_restore_state
60*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore_state		.cfi_restore_state
61*8d67ca89SAndroid Build Coastguard Worker#endif
62*8d67ca89SAndroid Build Coastguard Worker
63*8d67ca89SAndroid Build Coastguard Worker#ifndef ENTRY
64*8d67ca89SAndroid Build Coastguard Worker# define ENTRY(name)			\
65*8d67ca89SAndroid Build Coastguard Worker	.type name,  @function; 	\
66*8d67ca89SAndroid Build Coastguard Worker	.globl name;			\
67*8d67ca89SAndroid Build Coastguard Worker	.p2align 4;			\
68*8d67ca89SAndroid Build Coastguard Workername:					\
69*8d67ca89SAndroid Build Coastguard Worker	cfi_startproc
70*8d67ca89SAndroid Build Coastguard Worker#endif
71*8d67ca89SAndroid Build Coastguard Worker
72*8d67ca89SAndroid Build Coastguard Worker#ifndef END
73*8d67ca89SAndroid Build Coastguard Worker# define END(name)			\
74*8d67ca89SAndroid Build Coastguard Worker	cfi_endproc;			\
75*8d67ca89SAndroid Build Coastguard Worker	.size name, .-name
76*8d67ca89SAndroid Build Coastguard Worker#endif
77*8d67ca89SAndroid Build Coastguard Worker
78*8d67ca89SAndroid Build Coastguard Worker#define CFI_PUSH(REG)						\
79*8d67ca89SAndroid Build Coastguard Worker  cfi_adjust_cfa_offset (4);					\
80*8d67ca89SAndroid Build Coastguard Worker  cfi_rel_offset (REG, 0)
81*8d67ca89SAndroid Build Coastguard Worker
82*8d67ca89SAndroid Build Coastguard Worker#define CFI_POP(REG)						\
83*8d67ca89SAndroid Build Coastguard Worker  cfi_adjust_cfa_offset (-4);					\
84*8d67ca89SAndroid Build Coastguard Worker  cfi_restore (REG)
85*8d67ca89SAndroid Build Coastguard Worker
86*8d67ca89SAndroid Build Coastguard Worker#define PUSH(REG)	pushl REG; CFI_PUSH (REG)
87*8d67ca89SAndroid Build Coastguard Worker#define POP(REG)	popl REG; CFI_POP (REG)
88*8d67ca89SAndroid Build Coastguard Worker
89*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_STRNCMP
90*8d67ca89SAndroid Build Coastguard Worker# define STR1		4
91*8d67ca89SAndroid Build Coastguard Worker# define STR2		STR1+4
92*8d67ca89SAndroid Build Coastguard Worker# define RETURN		ret
93*8d67ca89SAndroid Build Coastguard Worker
94*8d67ca89SAndroid Build Coastguard Worker# define UPDATE_STRNCMP_COUNTER
95*8d67ca89SAndroid Build Coastguard Worker#else
96*8d67ca89SAndroid Build Coastguard Worker# define STR1		8
97*8d67ca89SAndroid Build Coastguard Worker# define STR2		STR1+4
98*8d67ca89SAndroid Build Coastguard Worker# define CNT		STR2+4
99*8d67ca89SAndroid Build Coastguard Worker# define RETURN		POP (%ebp); ret; CFI_PUSH (%ebp)
100*8d67ca89SAndroid Build Coastguard Worker
101*8d67ca89SAndroid Build Coastguard Worker# define UPDATE_STRNCMP_COUNTER				\
102*8d67ca89SAndroid Build Coastguard Worker	/* calculate left number to compare */		\
103*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %esi;				\
104*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %esi;				\
105*8d67ca89SAndroid Build Coastguard Worker	cmpl	%esi, %ebp;				\
106*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq);			\
107*8d67ca89SAndroid Build Coastguard Worker	sub	%esi, %ebp
108*8d67ca89SAndroid Build Coastguard Worker#endif
109*8d67ca89SAndroid Build Coastguard Worker
110*8d67ca89SAndroid Build Coastguard Worker#ifndef STRCMP
111*8d67ca89SAndroid Build Coastguard Worker# define STRCMP strcmp
112*8d67ca89SAndroid Build Coastguard Worker#endif
113*8d67ca89SAndroid Build Coastguard Worker
114*8d67ca89SAndroid Build Coastguard Worker	.section .text.ssse3,"ax",@progbits
115*8d67ca89SAndroid Build Coastguard WorkerENTRY (STRCMP)
116*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
117*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%ebp)
118*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
119*8d67ca89SAndroid Build Coastguard Worker#endif
120*8d67ca89SAndroid Build Coastguard Worker	movl	STR1(%esp), %edx
121*8d67ca89SAndroid Build Coastguard Worker	movl	STR2(%esp), %eax
122*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
123*8d67ca89SAndroid Build Coastguard Worker	movl	CNT(%esp), %ebp
124*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
125*8d67ca89SAndroid Build Coastguard Worker	jb	L(less16bytes_sncmp)
126*8d67ca89SAndroid Build Coastguard Worker	jmp	L(more16bytes)
127*8d67ca89SAndroid Build Coastguard Worker#endif
128*8d67ca89SAndroid Build Coastguard Worker
129*8d67ca89SAndroid Build Coastguard Worker	movzbl	(%eax), %ecx
130*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, (%edx)
131*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
132*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ecx
133*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
134*8d67ca89SAndroid Build Coastguard Worker
135*8d67ca89SAndroid Build Coastguard Worker	movzbl	1(%eax), %ecx
136*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 1(%edx)
137*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
138*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ecx
139*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
140*8d67ca89SAndroid Build Coastguard Worker
141*8d67ca89SAndroid Build Coastguard Worker	movzbl	2(%eax), %ecx
142*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 2(%edx)
143*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
144*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ecx
145*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
146*8d67ca89SAndroid Build Coastguard Worker
147*8d67ca89SAndroid Build Coastguard Worker	movzbl	3(%eax), %ecx
148*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 3(%edx)
149*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
150*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ecx
151*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
152*8d67ca89SAndroid Build Coastguard Worker
153*8d67ca89SAndroid Build Coastguard Worker	movzbl	4(%eax), %ecx
154*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 4(%edx)
155*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
156*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ecx
157*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
158*8d67ca89SAndroid Build Coastguard Worker
159*8d67ca89SAndroid Build Coastguard Worker	movzbl	5(%eax), %ecx
160*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 5(%edx)
161*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
162*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ecx
163*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
164*8d67ca89SAndroid Build Coastguard Worker
165*8d67ca89SAndroid Build Coastguard Worker	movzbl	6(%eax), %ecx
166*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 6(%edx)
167*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
168*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ecx
169*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
170*8d67ca89SAndroid Build Coastguard Worker
171*8d67ca89SAndroid Build Coastguard Worker	movzbl	7(%eax), %ecx
172*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 7(%edx)
173*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
174*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ecx
175*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
176*8d67ca89SAndroid Build Coastguard Worker
177*8d67ca89SAndroid Build Coastguard Worker	add	$8, %edx
178*8d67ca89SAndroid Build Coastguard Worker	add	$8, %eax
179*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
180*8d67ca89SAndroid Build Coastguard Worker	cmpl	$8, %ebp
181*8d67ca89SAndroid Build Coastguard Worker	lea	-8(%ebp), %ebp
182*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
183*8d67ca89SAndroid Build Coastguard WorkerL(more16bytes):
184*8d67ca89SAndroid Build Coastguard Worker#endif
185*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, %ecx
186*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %ecx
187*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0xff0, %ecx
188*8d67ca89SAndroid Build Coastguard Worker	ja	L(crosspage)
189*8d67ca89SAndroid Build Coastguard Worker	mov	%eax, %ecx
190*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %ecx
191*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0xff0, %ecx
192*8d67ca89SAndroid Build Coastguard Worker	ja	L(crosspage)
193*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
194*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%eax), %xmm1
195*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%edx), %xmm2
196*8d67ca89SAndroid Build Coastguard Worker	movhpd	8(%eax), %xmm1
197*8d67ca89SAndroid Build Coastguard Worker	movhpd	8(%edx), %xmm2
198*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
199*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
200*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
201*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %ecx
202*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %ecx
203*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less16bytes)
204*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
205*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
206*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
207*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
208*8d67ca89SAndroid Build Coastguard Worker#endif
209*8d67ca89SAndroid Build Coastguard Worker	add	$16, %eax
210*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edx
211*8d67ca89SAndroid Build Coastguard Worker
212*8d67ca89SAndroid Build Coastguard WorkerL(crosspage):
213*8d67ca89SAndroid Build Coastguard Worker
214*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%ebx)
215*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%edi)
216*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%esi)
217*8d67ca89SAndroid Build Coastguard Worker
218*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, %edi
219*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, %ecx
220*8d67ca89SAndroid Build Coastguard Worker	and	$0xf, %ecx
221*8d67ca89SAndroid Build Coastguard Worker	and	$0xf, %edi
222*8d67ca89SAndroid Build Coastguard Worker	xor	%ecx, %eax
223*8d67ca89SAndroid Build Coastguard Worker	xor	%edi, %edx
224*8d67ca89SAndroid Build Coastguard Worker	xor	%ebx, %ebx
225*8d67ca89SAndroid Build Coastguard Worker	cmpl	%edi, %ecx
226*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_0)
227*8d67ca89SAndroid Build Coastguard Worker	ja	L(bigger)
228*8d67ca89SAndroid Build Coastguard Worker	or	$0x20, %ebx
229*8d67ca89SAndroid Build Coastguard Worker	xchg	%edx, %eax
230*8d67ca89SAndroid Build Coastguard Worker	xchg	%ecx, %edi
231*8d67ca89SAndroid Build Coastguard WorkerL(bigger):
232*8d67ca89SAndroid Build Coastguard Worker	lea	15(%edi), %edi
233*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %edi
234*8d67ca89SAndroid Build Coastguard Worker	cmpl	$8, %edi
235*8d67ca89SAndroid Build Coastguard Worker	jle	L(ashr_less_8)
236*8d67ca89SAndroid Build Coastguard Worker	cmpl	$14, %edi
237*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_15)
238*8d67ca89SAndroid Build Coastguard Worker	cmpl	$13, %edi
239*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_14)
240*8d67ca89SAndroid Build Coastguard Worker	cmpl	$12, %edi
241*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_13)
242*8d67ca89SAndroid Build Coastguard Worker	cmpl	$11, %edi
243*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_12)
244*8d67ca89SAndroid Build Coastguard Worker	cmpl	$10, %edi
245*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_11)
246*8d67ca89SAndroid Build Coastguard Worker	cmpl	$9, %edi
247*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_10)
248*8d67ca89SAndroid Build Coastguard WorkerL(ashr_less_8):
249*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_9)
250*8d67ca89SAndroid Build Coastguard Worker	cmpl	$7, %edi
251*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_8)
252*8d67ca89SAndroid Build Coastguard Worker	cmpl	$6, %edi
253*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_7)
254*8d67ca89SAndroid Build Coastguard Worker	cmpl	$5, %edi
255*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_6)
256*8d67ca89SAndroid Build Coastguard Worker	cmpl	$4, %edi
257*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_5)
258*8d67ca89SAndroid Build Coastguard Worker	cmpl	$3, %edi
259*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_4)
260*8d67ca89SAndroid Build Coastguard Worker	cmpl	$2, %edi
261*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_3)
262*8d67ca89SAndroid Build Coastguard Worker	cmpl	$1, %edi
263*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_2)
264*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %edi
265*8d67ca89SAndroid Build Coastguard Worker	je	L(ashr_1)
266*8d67ca89SAndroid Build Coastguard Worker
267*8d67ca89SAndroid Build Coastguard Worker/*
268*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_0
269*8d67ca89SAndroid Build Coastguard Worker *  ecx(offset of esi)  eax(offset of edi)  relative offset  corresponding case
270*8d67ca89SAndroid Build Coastguard Worker *        n(0~15)            n(0~15)           15(15+ n-n)         ashr_0
271*8d67ca89SAndroid Build Coastguard Worker */
272*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
273*8d67ca89SAndroid Build Coastguard WorkerL(ashr_0):
274*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
275*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
276*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
277*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
278*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edx), %xmm1
279*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
280*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %edi
281*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
282*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
283*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
284*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %edi
285*8d67ca89SAndroid Build Coastguard Worker	jne	L(less32bytes)
286*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
287*8d67ca89SAndroid Build Coastguard Worker	mov	$0x10, %ebx
288*8d67ca89SAndroid Build Coastguard Worker	mov	$0x10, %ecx
289*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
290*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
291*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_0):
292*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
293*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
294*8d67ca89SAndroid Build Coastguard Worker
295*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
296*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
297*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
298*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
299*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
300*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
301*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
302*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
303*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
304*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
305*8d67ca89SAndroid Build Coastguard Worker#endif
306*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
307*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_0)
308*8d67ca89SAndroid Build Coastguard Worker
309*8d67ca89SAndroid Build Coastguard Worker/*
310*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_1
311*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
312*8d67ca89SAndroid Build Coastguard Worker *        n(15)            n -15            0(15 +(n-15) - n)         ashr_1
313*8d67ca89SAndroid Build Coastguard Worker */
314*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
315*8d67ca89SAndroid Build Coastguard WorkerL(ashr_1):
316*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
317*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
318*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
319*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
320*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
321*8d67ca89SAndroid Build Coastguard Worker	pslldq	$15, %xmm2
322*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
323*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
324*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
325*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
326*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
327*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
328*8d67ca89SAndroid Build Coastguard Worker	lea	-15(%ecx), %edi
329*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
330*8d67ca89SAndroid Build Coastguard Worker
331*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
332*8d67ca89SAndroid Build Coastguard Worker
333*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
334*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
335*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
336*8d67ca89SAndroid Build Coastguard Worker	or	$1, %ebx
337*8d67ca89SAndroid Build Coastguard Worker	lea	1(%edx), %edi
338*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
339*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
340*8d67ca89SAndroid Build Coastguard Worker
341*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
342*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_1):
343*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
344*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_1)
345*8d67ca89SAndroid Build Coastguard Worker
346*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_1):
347*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
348*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
349*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
350*8d67ca89SAndroid Build Coastguard Worker
351*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm3, %xmm2
352*8d67ca89SAndroid Build Coastguard Worker
353*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
354*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
355*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
356*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
357*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
358*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
359*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
360*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
361*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
362*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
363*8d67ca89SAndroid Build Coastguard Worker#endif
364*8d67ca89SAndroid Build Coastguard Worker
365*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
366*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
367*8d67ca89SAndroid Build Coastguard Worker
368*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
369*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_1)
370*8d67ca89SAndroid Build Coastguard Worker
371*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
372*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
373*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
374*8d67ca89SAndroid Build Coastguard Worker
375*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm3, %xmm2
376*8d67ca89SAndroid Build Coastguard Worker
377*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
378*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
379*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
380*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
381*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
382*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
383*8d67ca89SAndroid Build Coastguard Worker
384*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
385*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
386*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
387*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
388*8d67ca89SAndroid Build Coastguard Worker#endif
389*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
390*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
391*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_1)
392*8d67ca89SAndroid Build Coastguard Worker
393*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
394*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_1):
395*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
396*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
397*8d67ca89SAndroid Build Coastguard Worker	test	$0xfffe, %esi
398*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_1_exittail)
399*8d67ca89SAndroid Build Coastguard Worker
400*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
401*8d67ca89SAndroid Build Coastguard Worker	cmpl	$15, %ebp
402*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_1_exittail)
403*8d67ca89SAndroid Build Coastguard Worker#endif
404*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
405*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
406*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_1)
407*8d67ca89SAndroid Build Coastguard Worker
408*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
409*8d67ca89SAndroid Build Coastguard WorkerL(ashr_1_exittail):
410*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
411*8d67ca89SAndroid Build Coastguard Worker	psrldq	$1, %xmm0
412*8d67ca89SAndroid Build Coastguard Worker	psrldq	$1, %xmm3
413*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
414*8d67ca89SAndroid Build Coastguard Worker
415*8d67ca89SAndroid Build Coastguard Worker/*
416*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_2
417*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
418*8d67ca89SAndroid Build Coastguard Worker *        n(14~15)            n -14            1(15 +(n-14) - n)         ashr_2
419*8d67ca89SAndroid Build Coastguard Worker */
420*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
421*8d67ca89SAndroid Build Coastguard WorkerL(ashr_2):
422*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
423*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
424*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
425*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
426*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
427*8d67ca89SAndroid Build Coastguard Worker	pslldq	$14, %xmm2
428*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
429*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
430*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
431*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
432*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
433*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
434*8d67ca89SAndroid Build Coastguard Worker	lea	-14(%ecx), %edi
435*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
436*8d67ca89SAndroid Build Coastguard Worker
437*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
438*8d67ca89SAndroid Build Coastguard Worker
439*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
440*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
441*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
442*8d67ca89SAndroid Build Coastguard Worker	or	$2, %ebx
443*8d67ca89SAndroid Build Coastguard Worker	lea	2(%edx), %edi
444*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
445*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
446*8d67ca89SAndroid Build Coastguard Worker
447*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
448*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_2):
449*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
450*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_2)
451*8d67ca89SAndroid Build Coastguard Worker
452*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_2):
453*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
454*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
455*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
456*8d67ca89SAndroid Build Coastguard Worker
457*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm3, %xmm2
458*8d67ca89SAndroid Build Coastguard Worker
459*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
460*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
461*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
462*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
463*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
464*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
465*8d67ca89SAndroid Build Coastguard Worker
466*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
467*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
468*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
469*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
470*8d67ca89SAndroid Build Coastguard Worker#endif
471*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
472*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
473*8d67ca89SAndroid Build Coastguard Worker
474*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
475*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_2)
476*8d67ca89SAndroid Build Coastguard Worker
477*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
478*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
479*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
480*8d67ca89SAndroid Build Coastguard Worker
481*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm3, %xmm2
482*8d67ca89SAndroid Build Coastguard Worker
483*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
484*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
485*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
486*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
487*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
488*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
489*8d67ca89SAndroid Build Coastguard Worker
490*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
491*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
492*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
493*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
494*8d67ca89SAndroid Build Coastguard Worker#endif
495*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
496*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
497*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_2)
498*8d67ca89SAndroid Build Coastguard Worker
499*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
500*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_2):
501*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
502*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
503*8d67ca89SAndroid Build Coastguard Worker	test	$0xfffc, %esi
504*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_2_exittail)
505*8d67ca89SAndroid Build Coastguard Worker
506*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
507*8d67ca89SAndroid Build Coastguard Worker	cmpl	$14, %ebp
508*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_2_exittail)
509*8d67ca89SAndroid Build Coastguard Worker#endif
510*8d67ca89SAndroid Build Coastguard Worker
511*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
512*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
513*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_2)
514*8d67ca89SAndroid Build Coastguard Worker
515*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
516*8d67ca89SAndroid Build Coastguard WorkerL(ashr_2_exittail):
517*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
518*8d67ca89SAndroid Build Coastguard Worker	psrldq	$2, %xmm0
519*8d67ca89SAndroid Build Coastguard Worker	psrldq	$2, %xmm3
520*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
521*8d67ca89SAndroid Build Coastguard Worker
522*8d67ca89SAndroid Build Coastguard Worker/*
523*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_3
524*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
525*8d67ca89SAndroid Build Coastguard Worker *        n(13~15)            n -13            2(15 +(n-13) - n)         ashr_3
526*8d67ca89SAndroid Build Coastguard Worker */
527*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
528*8d67ca89SAndroid Build Coastguard WorkerL(ashr_3):
529*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
530*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
531*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
532*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
533*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
534*8d67ca89SAndroid Build Coastguard Worker	pslldq	$13, %xmm2
535*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
536*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
537*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
538*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
539*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
540*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
541*8d67ca89SAndroid Build Coastguard Worker	lea	-13(%ecx), %edi
542*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
543*8d67ca89SAndroid Build Coastguard Worker
544*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
545*8d67ca89SAndroid Build Coastguard Worker
546*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
547*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
548*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
549*8d67ca89SAndroid Build Coastguard Worker	or	$3, %ebx
550*8d67ca89SAndroid Build Coastguard Worker	lea	3(%edx), %edi
551*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
552*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
553*8d67ca89SAndroid Build Coastguard Worker
554*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
555*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_3):
556*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
557*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_3)
558*8d67ca89SAndroid Build Coastguard Worker
559*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_3):
560*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
561*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
562*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
563*8d67ca89SAndroid Build Coastguard Worker
564*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm3, %xmm2
565*8d67ca89SAndroid Build Coastguard Worker
566*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
567*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
568*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
569*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
570*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
571*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
572*8d67ca89SAndroid Build Coastguard Worker
573*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
574*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
575*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
576*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
577*8d67ca89SAndroid Build Coastguard Worker#endif
578*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
579*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
580*8d67ca89SAndroid Build Coastguard Worker
581*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
582*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_3)
583*8d67ca89SAndroid Build Coastguard Worker
584*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
585*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
586*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
587*8d67ca89SAndroid Build Coastguard Worker
588*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm3, %xmm2
589*8d67ca89SAndroid Build Coastguard Worker
590*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
591*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
592*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
593*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
594*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
595*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
596*8d67ca89SAndroid Build Coastguard Worker
597*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
598*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
599*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
600*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
601*8d67ca89SAndroid Build Coastguard Worker#endif
602*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
603*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
604*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_3)
605*8d67ca89SAndroid Build Coastguard Worker
606*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
607*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_3):
608*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
609*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
610*8d67ca89SAndroid Build Coastguard Worker	test	$0xfff8, %esi
611*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_3_exittail)
612*8d67ca89SAndroid Build Coastguard Worker
613*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
614*8d67ca89SAndroid Build Coastguard Worker	cmpl	$13, %ebp
615*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_3_exittail)
616*8d67ca89SAndroid Build Coastguard Worker#endif
617*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
618*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
619*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_3)
620*8d67ca89SAndroid Build Coastguard Worker
621*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
622*8d67ca89SAndroid Build Coastguard WorkerL(ashr_3_exittail):
623*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
624*8d67ca89SAndroid Build Coastguard Worker	psrldq	$3, %xmm0
625*8d67ca89SAndroid Build Coastguard Worker	psrldq	$3, %xmm3
626*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
627*8d67ca89SAndroid Build Coastguard Worker
628*8d67ca89SAndroid Build Coastguard Worker/*
629*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_4
630*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
631*8d67ca89SAndroid Build Coastguard Worker *        n(12~15)            n -12            3(15 +(n-12) - n)         ashr_4
632*8d67ca89SAndroid Build Coastguard Worker */
633*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
634*8d67ca89SAndroid Build Coastguard WorkerL(ashr_4):
635*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
636*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
637*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
638*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
639*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
640*8d67ca89SAndroid Build Coastguard Worker	pslldq	$12, %xmm2
641*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
642*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
643*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
644*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
645*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
646*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
647*8d67ca89SAndroid Build Coastguard Worker	lea	-12(%ecx), %edi
648*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
649*8d67ca89SAndroid Build Coastguard Worker
650*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
651*8d67ca89SAndroid Build Coastguard Worker
652*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
653*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
654*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
655*8d67ca89SAndroid Build Coastguard Worker	or	$4, %ebx
656*8d67ca89SAndroid Build Coastguard Worker	lea	4(%edx), %edi
657*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
658*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
659*8d67ca89SAndroid Build Coastguard Worker
660*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
661*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_4):
662*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
663*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_4)
664*8d67ca89SAndroid Build Coastguard Worker
665*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_4):
666*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
667*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
668*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
669*8d67ca89SAndroid Build Coastguard Worker
670*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm3, %xmm2
671*8d67ca89SAndroid Build Coastguard Worker
672*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
673*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
674*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
675*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
676*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
677*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
678*8d67ca89SAndroid Build Coastguard Worker
679*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
680*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
681*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
682*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
683*8d67ca89SAndroid Build Coastguard Worker#endif
684*8d67ca89SAndroid Build Coastguard Worker
685*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
686*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
687*8d67ca89SAndroid Build Coastguard Worker
688*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
689*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_4)
690*8d67ca89SAndroid Build Coastguard Worker
691*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
692*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
693*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
694*8d67ca89SAndroid Build Coastguard Worker
695*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm3, %xmm2
696*8d67ca89SAndroid Build Coastguard Worker
697*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
698*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
699*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
700*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
701*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
702*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
703*8d67ca89SAndroid Build Coastguard Worker
704*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
705*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
706*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
707*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
708*8d67ca89SAndroid Build Coastguard Worker#endif
709*8d67ca89SAndroid Build Coastguard Worker
710*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
711*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
712*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_4)
713*8d67ca89SAndroid Build Coastguard Worker
714*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
715*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_4):
716*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
717*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
718*8d67ca89SAndroid Build Coastguard Worker	test	$0xfff0, %esi
719*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_4_exittail)
720*8d67ca89SAndroid Build Coastguard Worker
721*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
722*8d67ca89SAndroid Build Coastguard Worker	cmpl	$12, %ebp
723*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_4_exittail)
724*8d67ca89SAndroid Build Coastguard Worker#endif
725*8d67ca89SAndroid Build Coastguard Worker
726*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
727*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
728*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_4)
729*8d67ca89SAndroid Build Coastguard Worker
730*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
731*8d67ca89SAndroid Build Coastguard WorkerL(ashr_4_exittail):
732*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
733*8d67ca89SAndroid Build Coastguard Worker	psrldq	$4, %xmm0
734*8d67ca89SAndroid Build Coastguard Worker	psrldq	$4, %xmm3
735*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
736*8d67ca89SAndroid Build Coastguard Worker
737*8d67ca89SAndroid Build Coastguard Worker/*
738*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_5
739*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
740*8d67ca89SAndroid Build Coastguard Worker *        n(11~15)            n -11            4(15 +(n-11) - n)         ashr_5
741*8d67ca89SAndroid Build Coastguard Worker */
742*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
743*8d67ca89SAndroid Build Coastguard WorkerL(ashr_5):
744*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
745*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
746*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
747*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
748*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
749*8d67ca89SAndroid Build Coastguard Worker	pslldq	$11, %xmm2
750*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
751*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
752*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
753*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
754*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
755*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
756*8d67ca89SAndroid Build Coastguard Worker	lea	-11(%ecx), %edi
757*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
758*8d67ca89SAndroid Build Coastguard Worker
759*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
760*8d67ca89SAndroid Build Coastguard Worker
761*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
762*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
763*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
764*8d67ca89SAndroid Build Coastguard Worker	or	$5, %ebx
765*8d67ca89SAndroid Build Coastguard Worker	lea	5(%edx), %edi
766*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
767*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
768*8d67ca89SAndroid Build Coastguard Worker
769*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
770*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_5):
771*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
772*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_5)
773*8d67ca89SAndroid Build Coastguard Worker
774*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_5):
775*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
776*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
777*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
778*8d67ca89SAndroid Build Coastguard Worker
779*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm3, %xmm2
780*8d67ca89SAndroid Build Coastguard Worker
781*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
782*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
783*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
784*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
785*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
786*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
787*8d67ca89SAndroid Build Coastguard Worker
788*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
789*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
790*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
791*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
792*8d67ca89SAndroid Build Coastguard Worker#endif
793*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
794*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
795*8d67ca89SAndroid Build Coastguard Worker
796*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
797*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_5)
798*8d67ca89SAndroid Build Coastguard Worker
799*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
800*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
801*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
802*8d67ca89SAndroid Build Coastguard Worker
803*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm3, %xmm2
804*8d67ca89SAndroid Build Coastguard Worker
805*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
806*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
807*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
808*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
809*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
810*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
811*8d67ca89SAndroid Build Coastguard Worker
812*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
813*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
814*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
815*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
816*8d67ca89SAndroid Build Coastguard Worker#endif
817*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
818*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
819*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_5)
820*8d67ca89SAndroid Build Coastguard Worker
821*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
822*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_5):
823*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
824*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
825*8d67ca89SAndroid Build Coastguard Worker	test	$0xffe0, %esi
826*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_5_exittail)
827*8d67ca89SAndroid Build Coastguard Worker
828*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
829*8d67ca89SAndroid Build Coastguard Worker	cmpl	$11, %ebp
830*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_5_exittail)
831*8d67ca89SAndroid Build Coastguard Worker#endif
832*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
833*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
834*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_5)
835*8d67ca89SAndroid Build Coastguard Worker
836*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
837*8d67ca89SAndroid Build Coastguard WorkerL(ashr_5_exittail):
838*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
839*8d67ca89SAndroid Build Coastguard Worker	psrldq	$5, %xmm0
840*8d67ca89SAndroid Build Coastguard Worker	psrldq	$5, %xmm3
841*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
842*8d67ca89SAndroid Build Coastguard Worker
843*8d67ca89SAndroid Build Coastguard Worker/*
844*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_6
845*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
846*8d67ca89SAndroid Build Coastguard Worker *        n(10~15)            n -10            5(15 +(n-10) - n)         ashr_6
847*8d67ca89SAndroid Build Coastguard Worker */
848*8d67ca89SAndroid Build Coastguard Worker
849*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
850*8d67ca89SAndroid Build Coastguard WorkerL(ashr_6):
851*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
852*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
853*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
854*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
855*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
856*8d67ca89SAndroid Build Coastguard Worker	pslldq	$10, %xmm2
857*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
858*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
859*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
860*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
861*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
862*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
863*8d67ca89SAndroid Build Coastguard Worker	lea	-10(%ecx), %edi
864*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
865*8d67ca89SAndroid Build Coastguard Worker
866*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
867*8d67ca89SAndroid Build Coastguard Worker
868*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
869*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
870*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
871*8d67ca89SAndroid Build Coastguard Worker	or	$6, %ebx
872*8d67ca89SAndroid Build Coastguard Worker	lea	6(%edx), %edi
873*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
874*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
875*8d67ca89SAndroid Build Coastguard Worker
876*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
877*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_6):
878*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
879*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_6)
880*8d67ca89SAndroid Build Coastguard Worker
881*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_6):
882*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
883*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
884*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
885*8d67ca89SAndroid Build Coastguard Worker
886*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm3, %xmm2
887*8d67ca89SAndroid Build Coastguard Worker
888*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
889*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
890*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
891*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
892*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
893*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
894*8d67ca89SAndroid Build Coastguard Worker
895*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
896*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
897*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
898*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
899*8d67ca89SAndroid Build Coastguard Worker#endif
900*8d67ca89SAndroid Build Coastguard Worker
901*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
902*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
903*8d67ca89SAndroid Build Coastguard Worker
904*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
905*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_6)
906*8d67ca89SAndroid Build Coastguard Worker
907*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
908*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
909*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
910*8d67ca89SAndroid Build Coastguard Worker
911*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm3, %xmm2
912*8d67ca89SAndroid Build Coastguard Worker
913*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
914*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
915*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
916*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
917*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
918*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
919*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
920*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
921*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
922*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
923*8d67ca89SAndroid Build Coastguard Worker#endif
924*8d67ca89SAndroid Build Coastguard Worker
925*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
926*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
927*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_6)
928*8d67ca89SAndroid Build Coastguard Worker
929*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
930*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_6):
931*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
932*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
933*8d67ca89SAndroid Build Coastguard Worker	test	$0xffc0, %esi
934*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_6_exittail)
935*8d67ca89SAndroid Build Coastguard Worker
936*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
937*8d67ca89SAndroid Build Coastguard Worker	cmpl	$10, %ebp
938*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_6_exittail)
939*8d67ca89SAndroid Build Coastguard Worker#endif
940*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
941*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
942*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_6)
943*8d67ca89SAndroid Build Coastguard Worker
944*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
945*8d67ca89SAndroid Build Coastguard WorkerL(ashr_6_exittail):
946*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
947*8d67ca89SAndroid Build Coastguard Worker	psrldq	$6, %xmm0
948*8d67ca89SAndroid Build Coastguard Worker	psrldq	$6, %xmm3
949*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
950*8d67ca89SAndroid Build Coastguard Worker
951*8d67ca89SAndroid Build Coastguard Worker/*
952*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_7
953*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
954*8d67ca89SAndroid Build Coastguard Worker *        n(9~15)            n - 9            6(15 +(n-9) - n)         ashr_7
955*8d67ca89SAndroid Build Coastguard Worker */
956*8d67ca89SAndroid Build Coastguard Worker
957*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
958*8d67ca89SAndroid Build Coastguard WorkerL(ashr_7):
959*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
960*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
961*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
962*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
963*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
964*8d67ca89SAndroid Build Coastguard Worker	pslldq	$9, %xmm2
965*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
966*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
967*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
968*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
969*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
970*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
971*8d67ca89SAndroid Build Coastguard Worker	lea	-9(%ecx), %edi
972*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
973*8d67ca89SAndroid Build Coastguard Worker
974*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
975*8d67ca89SAndroid Build Coastguard Worker
976*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
977*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
978*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
979*8d67ca89SAndroid Build Coastguard Worker	or	$7, %ebx
980*8d67ca89SAndroid Build Coastguard Worker	lea	8(%edx), %edi
981*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
982*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
983*8d67ca89SAndroid Build Coastguard Worker
984*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
985*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_7):
986*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
987*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_7)
988*8d67ca89SAndroid Build Coastguard Worker
989*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_7):
990*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
991*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
992*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
993*8d67ca89SAndroid Build Coastguard Worker
994*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm3, %xmm2
995*8d67ca89SAndroid Build Coastguard Worker
996*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
997*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
998*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
999*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1000*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1001*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1002*8d67ca89SAndroid Build Coastguard Worker
1003*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1004*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1005*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1006*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1007*8d67ca89SAndroid Build Coastguard Worker#endif
1008*8d67ca89SAndroid Build Coastguard Worker
1009*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1010*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1011*8d67ca89SAndroid Build Coastguard Worker
1012*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1013*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_7)
1014*8d67ca89SAndroid Build Coastguard Worker
1015*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1016*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1017*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1018*8d67ca89SAndroid Build Coastguard Worker
1019*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm3, %xmm2
1020*8d67ca89SAndroid Build Coastguard Worker
1021*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1022*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1023*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1024*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1025*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1026*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1027*8d67ca89SAndroid Build Coastguard Worker
1028*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1029*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1030*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1031*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1032*8d67ca89SAndroid Build Coastguard Worker#endif
1033*8d67ca89SAndroid Build Coastguard Worker
1034*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1035*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1036*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_7)
1037*8d67ca89SAndroid Build Coastguard Worker
1038*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1039*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_7):
1040*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1041*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1042*8d67ca89SAndroid Build Coastguard Worker	test	$0xff80, %esi
1043*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_7_exittail)
1044*8d67ca89SAndroid Build Coastguard Worker
1045*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1046*8d67ca89SAndroid Build Coastguard Worker	cmpl	$9, %ebp
1047*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_7_exittail)
1048*8d67ca89SAndroid Build Coastguard Worker#endif
1049*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1050*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1051*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1052*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_7)
1053*8d67ca89SAndroid Build Coastguard Worker
1054*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1055*8d67ca89SAndroid Build Coastguard WorkerL(ashr_7_exittail):
1056*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1057*8d67ca89SAndroid Build Coastguard Worker	psrldq	$7, %xmm0
1058*8d67ca89SAndroid Build Coastguard Worker	psrldq	$7, %xmm3
1059*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1060*8d67ca89SAndroid Build Coastguard Worker
1061*8d67ca89SAndroid Build Coastguard Worker/*
1062*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_8
1063*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
1064*8d67ca89SAndroid Build Coastguard Worker *        n(8~15)            n - 8            7(15 +(n-8) - n)         ashr_8
1065*8d67ca89SAndroid Build Coastguard Worker */
1066*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1067*8d67ca89SAndroid Build Coastguard WorkerL(ashr_8):
1068*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
1069*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1070*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
1071*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
1072*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1073*8d67ca89SAndroid Build Coastguard Worker	pslldq	$8, %xmm2
1074*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
1075*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
1076*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
1077*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
1078*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
1079*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
1080*8d67ca89SAndroid Build Coastguard Worker	lea	-8(%ecx), %edi
1081*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
1082*8d67ca89SAndroid Build Coastguard Worker
1083*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
1084*8d67ca89SAndroid Build Coastguard Worker
1085*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
1086*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1087*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
1088*8d67ca89SAndroid Build Coastguard Worker	or	$8, %ebx
1089*8d67ca89SAndroid Build Coastguard Worker	lea	8(%edx), %edi
1090*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
1091*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1092*8d67ca89SAndroid Build Coastguard Worker
1093*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1094*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_8):
1095*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1096*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_8)
1097*8d67ca89SAndroid Build Coastguard Worker
1098*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_8):
1099*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1100*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1101*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1102*8d67ca89SAndroid Build Coastguard Worker
1103*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm3, %xmm2
1104*8d67ca89SAndroid Build Coastguard Worker
1105*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1106*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1107*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1108*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1109*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1110*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1111*8d67ca89SAndroid Build Coastguard Worker
1112*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1113*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1114*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1115*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1116*8d67ca89SAndroid Build Coastguard Worker#endif
1117*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1118*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1119*8d67ca89SAndroid Build Coastguard Worker
1120*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1121*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_8)
1122*8d67ca89SAndroid Build Coastguard Worker
1123*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1124*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1125*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1126*8d67ca89SAndroid Build Coastguard Worker
1127*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm3, %xmm2
1128*8d67ca89SAndroid Build Coastguard Worker
1129*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1130*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1131*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1132*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1133*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1134*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1135*8d67ca89SAndroid Build Coastguard Worker
1136*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1137*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1138*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1139*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1140*8d67ca89SAndroid Build Coastguard Worker#endif
1141*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1142*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1143*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_8)
1144*8d67ca89SAndroid Build Coastguard Worker
1145*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1146*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_8):
1147*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1148*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1149*8d67ca89SAndroid Build Coastguard Worker	test	$0xff00, %esi
1150*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_8_exittail)
1151*8d67ca89SAndroid Build Coastguard Worker
1152*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1153*8d67ca89SAndroid Build Coastguard Worker	cmpl	$8, %ebp
1154*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_8_exittail)
1155*8d67ca89SAndroid Build Coastguard Worker#endif
1156*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1157*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1158*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1159*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_8)
1160*8d67ca89SAndroid Build Coastguard Worker
1161*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1162*8d67ca89SAndroid Build Coastguard WorkerL(ashr_8_exittail):
1163*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1164*8d67ca89SAndroid Build Coastguard Worker	psrldq	$8, %xmm0
1165*8d67ca89SAndroid Build Coastguard Worker	psrldq	$8, %xmm3
1166*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1167*8d67ca89SAndroid Build Coastguard Worker
1168*8d67ca89SAndroid Build Coastguard Worker/*
1169*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_9
1170*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
1171*8d67ca89SAndroid Build Coastguard Worker *        n(7~15)            n - 7            8(15 +(n-7) - n)         ashr_9
1172*8d67ca89SAndroid Build Coastguard Worker */
1173*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1174*8d67ca89SAndroid Build Coastguard WorkerL(ashr_9):
1175*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
1176*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1177*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
1178*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
1179*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1180*8d67ca89SAndroid Build Coastguard Worker	pslldq	$7, %xmm2
1181*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
1182*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
1183*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
1184*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
1185*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
1186*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
1187*8d67ca89SAndroid Build Coastguard Worker	lea	-7(%ecx), %edi
1188*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
1189*8d67ca89SAndroid Build Coastguard Worker
1190*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
1191*8d67ca89SAndroid Build Coastguard Worker
1192*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
1193*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1194*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
1195*8d67ca89SAndroid Build Coastguard Worker	or	$9, %ebx
1196*8d67ca89SAndroid Build Coastguard Worker	lea	9(%edx), %edi
1197*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
1198*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1199*8d67ca89SAndroid Build Coastguard Worker
1200*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1201*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_9):
1202*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1203*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_9)
1204*8d67ca89SAndroid Build Coastguard Worker
1205*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_9):
1206*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1207*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1208*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1209*8d67ca89SAndroid Build Coastguard Worker
1210*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm3, %xmm2
1211*8d67ca89SAndroid Build Coastguard Worker
1212*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1213*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1214*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1215*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1216*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1217*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1218*8d67ca89SAndroid Build Coastguard Worker
1219*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1220*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1221*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1222*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1223*8d67ca89SAndroid Build Coastguard Worker#endif
1224*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1225*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1226*8d67ca89SAndroid Build Coastguard Worker
1227*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1228*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_9)
1229*8d67ca89SAndroid Build Coastguard Worker
1230*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1231*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1232*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1233*8d67ca89SAndroid Build Coastguard Worker
1234*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm3, %xmm2
1235*8d67ca89SAndroid Build Coastguard Worker
1236*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1237*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1238*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1239*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1240*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1241*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1242*8d67ca89SAndroid Build Coastguard Worker
1243*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1244*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1245*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1246*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1247*8d67ca89SAndroid Build Coastguard Worker#endif
1248*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1249*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1250*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_9)
1251*8d67ca89SAndroid Build Coastguard Worker
1252*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1253*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_9):
1254*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1255*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1256*8d67ca89SAndroid Build Coastguard Worker	test	$0xfe00, %esi
1257*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_9_exittail)
1258*8d67ca89SAndroid Build Coastguard Worker
1259*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1260*8d67ca89SAndroid Build Coastguard Worker	cmpl	$7, %ebp
1261*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_9_exittail)
1262*8d67ca89SAndroid Build Coastguard Worker#endif
1263*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1264*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1265*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_9)
1266*8d67ca89SAndroid Build Coastguard Worker
1267*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1268*8d67ca89SAndroid Build Coastguard WorkerL(ashr_9_exittail):
1269*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1270*8d67ca89SAndroid Build Coastguard Worker	psrldq	$9, %xmm0
1271*8d67ca89SAndroid Build Coastguard Worker	psrldq	$9, %xmm3
1272*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1273*8d67ca89SAndroid Build Coastguard Worker
1274*8d67ca89SAndroid Build Coastguard Worker/*
1275*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_10
1276*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
1277*8d67ca89SAndroid Build Coastguard Worker *        n(6~15)            n - 6            9(15 +(n-6) - n)         ashr_10
1278*8d67ca89SAndroid Build Coastguard Worker */
1279*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1280*8d67ca89SAndroid Build Coastguard WorkerL(ashr_10):
1281*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
1282*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1283*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
1284*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
1285*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1286*8d67ca89SAndroid Build Coastguard Worker	pslldq	$6, %xmm2
1287*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
1288*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
1289*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
1290*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
1291*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
1292*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
1293*8d67ca89SAndroid Build Coastguard Worker	lea	-6(%ecx), %edi
1294*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
1295*8d67ca89SAndroid Build Coastguard Worker
1296*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
1297*8d67ca89SAndroid Build Coastguard Worker
1298*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
1299*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1300*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
1301*8d67ca89SAndroid Build Coastguard Worker	or	$10, %ebx
1302*8d67ca89SAndroid Build Coastguard Worker	lea	10(%edx), %edi
1303*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
1304*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1305*8d67ca89SAndroid Build Coastguard Worker
1306*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1307*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_10):
1308*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1309*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_10)
1310*8d67ca89SAndroid Build Coastguard Worker
1311*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_10):
1312*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1313*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1314*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1315*8d67ca89SAndroid Build Coastguard Worker
1316*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm3, %xmm2
1317*8d67ca89SAndroid Build Coastguard Worker
1318*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1319*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1320*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1321*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1322*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1323*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1324*8d67ca89SAndroid Build Coastguard Worker
1325*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1326*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1327*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1328*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1329*8d67ca89SAndroid Build Coastguard Worker#endif
1330*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1331*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1332*8d67ca89SAndroid Build Coastguard Worker
1333*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1334*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_10)
1335*8d67ca89SAndroid Build Coastguard Worker
1336*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1337*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1338*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1339*8d67ca89SAndroid Build Coastguard Worker
1340*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm3, %xmm2
1341*8d67ca89SAndroid Build Coastguard Worker
1342*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1343*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1344*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1345*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1346*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1347*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1348*8d67ca89SAndroid Build Coastguard Worker
1349*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1350*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1351*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1352*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1353*8d67ca89SAndroid Build Coastguard Worker#endif
1354*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1355*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1356*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_10)
1357*8d67ca89SAndroid Build Coastguard Worker
1358*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1359*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_10):
1360*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1361*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1362*8d67ca89SAndroid Build Coastguard Worker	test	$0xfc00, %esi
1363*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_10_exittail)
1364*8d67ca89SAndroid Build Coastguard Worker
1365*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1366*8d67ca89SAndroid Build Coastguard Worker	cmpl	$6, %ebp
1367*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_10_exittail)
1368*8d67ca89SAndroid Build Coastguard Worker#endif
1369*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1370*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1371*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_10)
1372*8d67ca89SAndroid Build Coastguard Worker
1373*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1374*8d67ca89SAndroid Build Coastguard WorkerL(ashr_10_exittail):
1375*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1376*8d67ca89SAndroid Build Coastguard Worker	psrldq	$10, %xmm0
1377*8d67ca89SAndroid Build Coastguard Worker	psrldq	$10, %xmm3
1378*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1379*8d67ca89SAndroid Build Coastguard Worker
1380*8d67ca89SAndroid Build Coastguard Worker/*
1381*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_11
1382*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
1383*8d67ca89SAndroid Build Coastguard Worker *        n(5~15)            n - 5            10(15 +(n-5) - n)         ashr_11
1384*8d67ca89SAndroid Build Coastguard Worker */
1385*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1386*8d67ca89SAndroid Build Coastguard WorkerL(ashr_11):
1387*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
1388*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1389*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
1390*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
1391*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1392*8d67ca89SAndroid Build Coastguard Worker	pslldq	$5, %xmm2
1393*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
1394*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
1395*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
1396*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
1397*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
1398*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
1399*8d67ca89SAndroid Build Coastguard Worker	lea	-5(%ecx), %edi
1400*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
1401*8d67ca89SAndroid Build Coastguard Worker
1402*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
1403*8d67ca89SAndroid Build Coastguard Worker
1404*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
1405*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1406*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
1407*8d67ca89SAndroid Build Coastguard Worker	or	$11, %ebx
1408*8d67ca89SAndroid Build Coastguard Worker	lea	11(%edx), %edi
1409*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
1410*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1411*8d67ca89SAndroid Build Coastguard Worker
1412*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1413*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_11):
1414*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1415*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_11)
1416*8d67ca89SAndroid Build Coastguard Worker
1417*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_11):
1418*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1419*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1420*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1421*8d67ca89SAndroid Build Coastguard Worker
1422*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm3, %xmm2
1423*8d67ca89SAndroid Build Coastguard Worker
1424*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1425*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1426*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1427*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1428*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1429*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1430*8d67ca89SAndroid Build Coastguard Worker
1431*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1432*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1433*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1434*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1435*8d67ca89SAndroid Build Coastguard Worker#endif
1436*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1437*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1438*8d67ca89SAndroid Build Coastguard Worker
1439*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1440*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_11)
1441*8d67ca89SAndroid Build Coastguard Worker
1442*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1443*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1444*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1445*8d67ca89SAndroid Build Coastguard Worker
1446*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm3, %xmm2
1447*8d67ca89SAndroid Build Coastguard Worker
1448*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1449*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1450*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1451*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1452*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1453*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1454*8d67ca89SAndroid Build Coastguard Worker
1455*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1456*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1457*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1458*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1459*8d67ca89SAndroid Build Coastguard Worker#endif
1460*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1461*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1462*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_11)
1463*8d67ca89SAndroid Build Coastguard Worker
1464*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1465*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_11):
1466*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1467*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1468*8d67ca89SAndroid Build Coastguard Worker	test	$0xf800, %esi
1469*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_11_exittail)
1470*8d67ca89SAndroid Build Coastguard Worker
1471*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1472*8d67ca89SAndroid Build Coastguard Worker	cmpl	$5, %ebp
1473*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_11_exittail)
1474*8d67ca89SAndroid Build Coastguard Worker#endif
1475*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1476*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1477*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_11)
1478*8d67ca89SAndroid Build Coastguard Worker
1479*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1480*8d67ca89SAndroid Build Coastguard WorkerL(ashr_11_exittail):
1481*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1482*8d67ca89SAndroid Build Coastguard Worker	psrldq	$11, %xmm0
1483*8d67ca89SAndroid Build Coastguard Worker	psrldq	$11, %xmm3
1484*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1485*8d67ca89SAndroid Build Coastguard Worker
1486*8d67ca89SAndroid Build Coastguard Worker/*
1487*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_12
1488*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
1489*8d67ca89SAndroid Build Coastguard Worker *        n(4~15)            n - 4            11(15 +(n-4) - n)         ashr_12
1490*8d67ca89SAndroid Build Coastguard Worker */
1491*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1492*8d67ca89SAndroid Build Coastguard WorkerL(ashr_12):
1493*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
1494*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1495*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
1496*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
1497*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1498*8d67ca89SAndroid Build Coastguard Worker	pslldq	$4, %xmm2
1499*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
1500*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
1501*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
1502*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
1503*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
1504*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
1505*8d67ca89SAndroid Build Coastguard Worker	lea	-4(%ecx), %edi
1506*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
1507*8d67ca89SAndroid Build Coastguard Worker
1508*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
1509*8d67ca89SAndroid Build Coastguard Worker
1510*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
1511*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1512*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
1513*8d67ca89SAndroid Build Coastguard Worker	or	$12, %ebx
1514*8d67ca89SAndroid Build Coastguard Worker	lea	12(%edx), %edi
1515*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
1516*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1517*8d67ca89SAndroid Build Coastguard Worker
1518*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1519*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_12):
1520*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1521*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_12)
1522*8d67ca89SAndroid Build Coastguard Worker
1523*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_12):
1524*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1525*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1526*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1527*8d67ca89SAndroid Build Coastguard Worker
1528*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm3, %xmm2
1529*8d67ca89SAndroid Build Coastguard Worker
1530*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1531*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1532*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1533*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1534*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1535*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1536*8d67ca89SAndroid Build Coastguard Worker
1537*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1538*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1539*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1540*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1541*8d67ca89SAndroid Build Coastguard Worker#endif
1542*8d67ca89SAndroid Build Coastguard Worker
1543*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1544*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1545*8d67ca89SAndroid Build Coastguard Worker
1546*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1547*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_12)
1548*8d67ca89SAndroid Build Coastguard Worker
1549*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1550*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1551*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1552*8d67ca89SAndroid Build Coastguard Worker
1553*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm3, %xmm2
1554*8d67ca89SAndroid Build Coastguard Worker
1555*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1556*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1557*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1558*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1559*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1560*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1561*8d67ca89SAndroid Build Coastguard Worker
1562*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1563*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1564*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1565*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1566*8d67ca89SAndroid Build Coastguard Worker#endif
1567*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1568*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1569*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_12)
1570*8d67ca89SAndroid Build Coastguard Worker
1571*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1572*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_12):
1573*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1574*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1575*8d67ca89SAndroid Build Coastguard Worker	test	$0xf000, %esi
1576*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_12_exittail)
1577*8d67ca89SAndroid Build Coastguard Worker
1578*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1579*8d67ca89SAndroid Build Coastguard Worker	cmpl	$4, %ebp
1580*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_12_exittail)
1581*8d67ca89SAndroid Build Coastguard Worker#endif
1582*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1583*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1584*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_12)
1585*8d67ca89SAndroid Build Coastguard Worker
1586*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1587*8d67ca89SAndroid Build Coastguard WorkerL(ashr_12_exittail):
1588*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1589*8d67ca89SAndroid Build Coastguard Worker	psrldq	$12, %xmm0
1590*8d67ca89SAndroid Build Coastguard Worker	psrldq	$12, %xmm3
1591*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1592*8d67ca89SAndroid Build Coastguard Worker
1593*8d67ca89SAndroid Build Coastguard Worker/*
1594*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_13
1595*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
1596*8d67ca89SAndroid Build Coastguard Worker *        n(3~15)            n - 3            12(15 +(n-3) - n)         ashr_13
1597*8d67ca89SAndroid Build Coastguard Worker */
1598*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1599*8d67ca89SAndroid Build Coastguard WorkerL(ashr_13):
1600*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
1601*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1602*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
1603*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
1604*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1605*8d67ca89SAndroid Build Coastguard Worker	pslldq	$3, %xmm2
1606*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
1607*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
1608*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
1609*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
1610*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
1611*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
1612*8d67ca89SAndroid Build Coastguard Worker	lea	-3(%ecx), %edi
1613*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
1614*8d67ca89SAndroid Build Coastguard Worker
1615*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
1616*8d67ca89SAndroid Build Coastguard Worker
1617*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
1618*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1619*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
1620*8d67ca89SAndroid Build Coastguard Worker	or	$13, %ebx
1621*8d67ca89SAndroid Build Coastguard Worker	lea	13(%edx), %edi
1622*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
1623*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1624*8d67ca89SAndroid Build Coastguard Worker
1625*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1626*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_13):
1627*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1628*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_13)
1629*8d67ca89SAndroid Build Coastguard Worker
1630*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_13):
1631*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1632*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1633*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1634*8d67ca89SAndroid Build Coastguard Worker
1635*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm3, %xmm2
1636*8d67ca89SAndroid Build Coastguard Worker
1637*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1638*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1639*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1640*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1641*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1642*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1643*8d67ca89SAndroid Build Coastguard Worker
1644*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1645*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1646*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1647*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1648*8d67ca89SAndroid Build Coastguard Worker#endif
1649*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1650*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1651*8d67ca89SAndroid Build Coastguard Worker
1652*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1653*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_13)
1654*8d67ca89SAndroid Build Coastguard Worker
1655*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1656*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1657*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1658*8d67ca89SAndroid Build Coastguard Worker
1659*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm3, %xmm2
1660*8d67ca89SAndroid Build Coastguard Worker
1661*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1662*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1663*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1664*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1665*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1666*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1667*8d67ca89SAndroid Build Coastguard Worker
1668*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1669*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1670*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1671*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1672*8d67ca89SAndroid Build Coastguard Worker#endif
1673*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1674*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1675*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_13)
1676*8d67ca89SAndroid Build Coastguard Worker
1677*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1678*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_13):
1679*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1680*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1681*8d67ca89SAndroid Build Coastguard Worker	test	$0xe000, %esi
1682*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_13_exittail)
1683*8d67ca89SAndroid Build Coastguard Worker
1684*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1685*8d67ca89SAndroid Build Coastguard Worker	cmpl	$3, %ebp
1686*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_13_exittail)
1687*8d67ca89SAndroid Build Coastguard Worker#endif
1688*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1689*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1690*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_13)
1691*8d67ca89SAndroid Build Coastguard Worker
1692*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1693*8d67ca89SAndroid Build Coastguard WorkerL(ashr_13_exittail):
1694*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1695*8d67ca89SAndroid Build Coastguard Worker	psrldq	$13, %xmm0
1696*8d67ca89SAndroid Build Coastguard Worker	psrldq	$13, %xmm3
1697*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1698*8d67ca89SAndroid Build Coastguard Worker
1699*8d67ca89SAndroid Build Coastguard Worker/*
1700*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_14
1701*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
1702*8d67ca89SAndroid Build Coastguard Worker *        n(2~15)            n - 2            13(15 +(n-2) - n)         ashr_14
1703*8d67ca89SAndroid Build Coastguard Worker */
1704*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1705*8d67ca89SAndroid Build Coastguard WorkerL(ashr_14):
1706*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
1707*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1708*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
1709*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
1710*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1711*8d67ca89SAndroid Build Coastguard Worker	pslldq	$2, %xmm2
1712*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
1713*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
1714*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
1715*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
1716*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
1717*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
1718*8d67ca89SAndroid Build Coastguard Worker	lea	-2(%ecx), %edi
1719*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
1720*8d67ca89SAndroid Build Coastguard Worker
1721*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
1722*8d67ca89SAndroid Build Coastguard Worker
1723*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
1724*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1725*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
1726*8d67ca89SAndroid Build Coastguard Worker	or	$14, %ebx
1727*8d67ca89SAndroid Build Coastguard Worker	lea	14(%edx), %edi
1728*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
1729*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1730*8d67ca89SAndroid Build Coastguard Worker
1731*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1732*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_14):
1733*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1734*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_14)
1735*8d67ca89SAndroid Build Coastguard Worker
1736*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_14):
1737*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1738*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1739*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1740*8d67ca89SAndroid Build Coastguard Worker
1741*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm3, %xmm2
1742*8d67ca89SAndroid Build Coastguard Worker
1743*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1744*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1745*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1746*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1747*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1748*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1749*8d67ca89SAndroid Build Coastguard Worker
1750*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1751*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1752*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1753*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1754*8d67ca89SAndroid Build Coastguard Worker#endif
1755*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1756*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1757*8d67ca89SAndroid Build Coastguard Worker
1758*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1759*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_14)
1760*8d67ca89SAndroid Build Coastguard Worker
1761*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1762*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1763*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1764*8d67ca89SAndroid Build Coastguard Worker
1765*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm3, %xmm2
1766*8d67ca89SAndroid Build Coastguard Worker
1767*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1768*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1769*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1770*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1771*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1772*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1773*8d67ca89SAndroid Build Coastguard Worker
1774*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1775*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1776*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1777*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1778*8d67ca89SAndroid Build Coastguard Worker#endif
1779*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1780*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1781*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_14)
1782*8d67ca89SAndroid Build Coastguard Worker
1783*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1784*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_14):
1785*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1786*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1787*8d67ca89SAndroid Build Coastguard Worker	test	$0xc000, %esi
1788*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_14_exittail)
1789*8d67ca89SAndroid Build Coastguard Worker
1790*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1791*8d67ca89SAndroid Build Coastguard Worker	cmpl	$2, %ebp
1792*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_14_exittail)
1793*8d67ca89SAndroid Build Coastguard Worker#endif
1794*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1795*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1796*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_14)
1797*8d67ca89SAndroid Build Coastguard Worker
1798*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1799*8d67ca89SAndroid Build Coastguard WorkerL(ashr_14_exittail):
1800*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1801*8d67ca89SAndroid Build Coastguard Worker	psrldq	$14, %xmm0
1802*8d67ca89SAndroid Build Coastguard Worker	psrldq	$14, %xmm3
1803*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1804*8d67ca89SAndroid Build Coastguard Worker
1805*8d67ca89SAndroid Build Coastguard Worker/*
1806*8d67ca89SAndroid Build Coastguard Worker * The following cases will be handled by ashr_14
1807*8d67ca89SAndroid Build Coastguard Worker * ecx(offset of esi)  eax(offset of edi)   relative offset   	corresponding case
1808*8d67ca89SAndroid Build Coastguard Worker *        n(1~15)            n - 1            14(15 +(n-1) - n)         ashr_15
1809*8d67ca89SAndroid Build Coastguard Worker */
1810*8d67ca89SAndroid Build Coastguard Worker
1811*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1812*8d67ca89SAndroid Build Coastguard WorkerL(ashr_15):
1813*8d67ca89SAndroid Build Coastguard Worker	mov	$0xffff, %esi
1814*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1815*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm2
1816*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax), %xmm1
1817*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1818*8d67ca89SAndroid Build Coastguard Worker	pslldq	$1, %xmm2
1819*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm2
1820*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm2
1821*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edi
1822*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %esi
1823*8d67ca89SAndroid Build Coastguard Worker	shr	%cl, %edi
1824*8d67ca89SAndroid Build Coastguard Worker	sub	%edi, %esi
1825*8d67ca89SAndroid Build Coastguard Worker	lea	-1(%ecx), %edi
1826*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less32bytes)
1827*8d67ca89SAndroid Build Coastguard Worker
1828*8d67ca89SAndroid Build Coastguard Worker	UPDATE_STRNCMP_COUNTER
1829*8d67ca89SAndroid Build Coastguard Worker
1830*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx), %xmm3
1831*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1832*8d67ca89SAndroid Build Coastguard Worker	mov	$16, %ecx
1833*8d67ca89SAndroid Build Coastguard Worker	or	$15, %ebx
1834*8d67ca89SAndroid Build Coastguard Worker	lea	15(%edx), %edi
1835*8d67ca89SAndroid Build Coastguard Worker	and	$0xfff, %edi
1836*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1837*8d67ca89SAndroid Build Coastguard Worker
1838*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1839*8d67ca89SAndroid Build Coastguard WorkerL(loop_ashr_15):
1840*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1841*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_15)
1842*8d67ca89SAndroid Build Coastguard Worker
1843*8d67ca89SAndroid Build Coastguard WorkerL(gobble_ashr_15):
1844*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1845*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1846*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1847*8d67ca89SAndroid Build Coastguard Worker
1848*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm3, %xmm2
1849*8d67ca89SAndroid Build Coastguard Worker
1850*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1851*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1852*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1853*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1854*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1855*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1856*8d67ca89SAndroid Build Coastguard Worker
1857*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1858*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1859*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1860*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1861*8d67ca89SAndroid Build Coastguard Worker#endif
1862*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1863*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1864*8d67ca89SAndroid Build Coastguard Worker
1865*8d67ca89SAndroid Build Coastguard Worker	add	$16, %edi
1866*8d67ca89SAndroid Build Coastguard Worker	jg	L(nibble_ashr_15)
1867*8d67ca89SAndroid Build Coastguard Worker
1868*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1869*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%edx, %ecx), %xmm2
1870*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm2, %xmm4
1871*8d67ca89SAndroid Build Coastguard Worker
1872*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm3, %xmm2
1873*8d67ca89SAndroid Build Coastguard Worker
1874*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
1875*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm1
1876*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1877*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1878*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %esi
1879*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1880*8d67ca89SAndroid Build Coastguard Worker
1881*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1882*8d67ca89SAndroid Build Coastguard Worker	cmpl	$16, %ebp
1883*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebp), %ebp
1884*8d67ca89SAndroid Build Coastguard Worker	jbe	L(more8byteseq)
1885*8d67ca89SAndroid Build Coastguard Worker#endif
1886*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ecx
1887*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm4, %xmm3
1888*8d67ca89SAndroid Build Coastguard Worker	jmp	L(loop_ashr_15)
1889*8d67ca89SAndroid Build Coastguard Worker
1890*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1891*8d67ca89SAndroid Build Coastguard WorkerL(nibble_ashr_15):
1892*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
1893*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %esi
1894*8d67ca89SAndroid Build Coastguard Worker	test	$0x8000, %esi
1895*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ashr_15_exittail)
1896*8d67ca89SAndroid Build Coastguard Worker
1897*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1898*8d67ca89SAndroid Build Coastguard Worker	cmpl	$1, %ebp
1899*8d67ca89SAndroid Build Coastguard Worker	jbe	L(ashr_15_exittail)
1900*8d67ca89SAndroid Build Coastguard Worker#endif
1901*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
1902*8d67ca89SAndroid Build Coastguard Worker	sub	$0x1000, %edi
1903*8d67ca89SAndroid Build Coastguard Worker	jmp	L(gobble_ashr_15)
1904*8d67ca89SAndroid Build Coastguard Worker
1905*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1906*8d67ca89SAndroid Build Coastguard WorkerL(ashr_15_exittail):
1907*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%eax, %ecx), %xmm1
1908*8d67ca89SAndroid Build Coastguard Worker	psrldq	$15, %xmm0
1909*8d67ca89SAndroid Build Coastguard Worker	psrldq	$15, %xmm3
1910*8d67ca89SAndroid Build Coastguard Worker	jmp	L(aftertail)
1911*8d67ca89SAndroid Build Coastguard Worker
1912*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1913*8d67ca89SAndroid Build Coastguard WorkerL(aftertail):
1914*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm1
1915*8d67ca89SAndroid Build Coastguard Worker	psubb	%xmm0, %xmm1
1916*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %esi
1917*8d67ca89SAndroid Build Coastguard Worker	not	%esi
1918*8d67ca89SAndroid Build Coastguard WorkerL(exit):
1919*8d67ca89SAndroid Build Coastguard Worker	mov	%ebx, %edi
1920*8d67ca89SAndroid Build Coastguard Worker	and	$0x1f, %edi
1921*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%edi, %ecx), %edi
1922*8d67ca89SAndroid Build Coastguard WorkerL(less32bytes):
1923*8d67ca89SAndroid Build Coastguard Worker	add	%edi, %edx
1924*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %eax
1925*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %ebx
1926*8d67ca89SAndroid Build Coastguard Worker	jz	L(ret2)
1927*8d67ca89SAndroid Build Coastguard Worker	xchg	%eax, %edx
1928*8d67ca89SAndroid Build Coastguard Worker
1929*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1930*8d67ca89SAndroid Build Coastguard WorkerL(ret2):
1931*8d67ca89SAndroid Build Coastguard Worker	mov	%esi, %ecx
1932*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1933*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1934*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
1935*8d67ca89SAndroid Build Coastguard WorkerL(less16bytes):
1936*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
1937*8d67ca89SAndroid Build Coastguard Worker	jz	L(2next_8_bytes)
1938*8d67ca89SAndroid Build Coastguard Worker
1939*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %cl
1940*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte0)
1941*8d67ca89SAndroid Build Coastguard Worker
1942*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %cl
1943*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte1)
1944*8d67ca89SAndroid Build Coastguard Worker
1945*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %cl
1946*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte2)
1947*8d67ca89SAndroid Build Coastguard Worker
1948*8d67ca89SAndroid Build Coastguard Worker	test	$0x08, %cl
1949*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte3)
1950*8d67ca89SAndroid Build Coastguard Worker
1951*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %cl
1952*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte4)
1953*8d67ca89SAndroid Build Coastguard Worker
1954*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %cl
1955*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte5)
1956*8d67ca89SAndroid Build Coastguard Worker
1957*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %cl
1958*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte6)
1959*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1960*8d67ca89SAndroid Build Coastguard Worker	cmpl	$7, %ebp
1961*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
1962*8d67ca89SAndroid Build Coastguard Worker#endif
1963*8d67ca89SAndroid Build Coastguard Worker
1964*8d67ca89SAndroid Build Coastguard Worker	movzbl	7(%eax), %ecx
1965*8d67ca89SAndroid Build Coastguard Worker	movzbl	7(%edx), %eax
1966*8d67ca89SAndroid Build Coastguard Worker
1967*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1968*8d67ca89SAndroid Build Coastguard Worker	RETURN
1969*8d67ca89SAndroid Build Coastguard Worker
1970*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1971*8d67ca89SAndroid Build Coastguard WorkerL(Byte0):
1972*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1973*8d67ca89SAndroid Build Coastguard Worker	cmpl	$0, %ebp
1974*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
1975*8d67ca89SAndroid Build Coastguard Worker#endif
1976*8d67ca89SAndroid Build Coastguard Worker	movzbl	(%eax), %ecx
1977*8d67ca89SAndroid Build Coastguard Worker	movzbl	(%edx), %eax
1978*8d67ca89SAndroid Build Coastguard Worker
1979*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1980*8d67ca89SAndroid Build Coastguard Worker	RETURN
1981*8d67ca89SAndroid Build Coastguard Worker
1982*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1983*8d67ca89SAndroid Build Coastguard WorkerL(Byte1):
1984*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1985*8d67ca89SAndroid Build Coastguard Worker	cmpl	$1, %ebp
1986*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
1987*8d67ca89SAndroid Build Coastguard Worker#endif
1988*8d67ca89SAndroid Build Coastguard Worker	movzbl	1(%eax), %ecx
1989*8d67ca89SAndroid Build Coastguard Worker	movzbl	1(%edx), %eax
1990*8d67ca89SAndroid Build Coastguard Worker
1991*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1992*8d67ca89SAndroid Build Coastguard Worker	RETURN
1993*8d67ca89SAndroid Build Coastguard Worker
1994*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1995*8d67ca89SAndroid Build Coastguard WorkerL(Byte2):
1996*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
1997*8d67ca89SAndroid Build Coastguard Worker	cmpl	$2, %ebp
1998*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
1999*8d67ca89SAndroid Build Coastguard Worker#endif
2000*8d67ca89SAndroid Build Coastguard Worker	movzbl	2(%eax), %ecx
2001*8d67ca89SAndroid Build Coastguard Worker	movzbl	2(%edx), %eax
2002*8d67ca89SAndroid Build Coastguard Worker
2003*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
2004*8d67ca89SAndroid Build Coastguard Worker	RETURN
2005*8d67ca89SAndroid Build Coastguard Worker
2006*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2007*8d67ca89SAndroid Build Coastguard WorkerL(Byte3):
2008*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2009*8d67ca89SAndroid Build Coastguard Worker	cmpl	$3, %ebp
2010*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
2011*8d67ca89SAndroid Build Coastguard Worker#endif
2012*8d67ca89SAndroid Build Coastguard Worker	movzbl	3(%eax), %ecx
2013*8d67ca89SAndroid Build Coastguard Worker	movzbl	3(%edx), %eax
2014*8d67ca89SAndroid Build Coastguard Worker
2015*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
2016*8d67ca89SAndroid Build Coastguard Worker	RETURN
2017*8d67ca89SAndroid Build Coastguard Worker
2018*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2019*8d67ca89SAndroid Build Coastguard WorkerL(Byte4):
2020*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2021*8d67ca89SAndroid Build Coastguard Worker	cmpl	$4, %ebp
2022*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
2023*8d67ca89SAndroid Build Coastguard Worker#endif
2024*8d67ca89SAndroid Build Coastguard Worker	movzbl	4(%eax), %ecx
2025*8d67ca89SAndroid Build Coastguard Worker	movzbl	4(%edx), %eax
2026*8d67ca89SAndroid Build Coastguard Worker
2027*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
2028*8d67ca89SAndroid Build Coastguard Worker	RETURN
2029*8d67ca89SAndroid Build Coastguard Worker
2030*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2031*8d67ca89SAndroid Build Coastguard WorkerL(Byte5):
2032*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2033*8d67ca89SAndroid Build Coastguard Worker	cmpl	$5, %ebp
2034*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
2035*8d67ca89SAndroid Build Coastguard Worker#endif
2036*8d67ca89SAndroid Build Coastguard Worker	movzbl	5(%eax), %ecx
2037*8d67ca89SAndroid Build Coastguard Worker	movzbl	5(%edx), %eax
2038*8d67ca89SAndroid Build Coastguard Worker
2039*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
2040*8d67ca89SAndroid Build Coastguard Worker	RETURN
2041*8d67ca89SAndroid Build Coastguard Worker
2042*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2043*8d67ca89SAndroid Build Coastguard WorkerL(Byte6):
2044*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2045*8d67ca89SAndroid Build Coastguard Worker	cmpl	$6, %ebp
2046*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
2047*8d67ca89SAndroid Build Coastguard Worker#endif
2048*8d67ca89SAndroid Build Coastguard Worker	movzbl	6(%eax), %ecx
2049*8d67ca89SAndroid Build Coastguard Worker	movzbl	6(%edx), %eax
2050*8d67ca89SAndroid Build Coastguard Worker
2051*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
2052*8d67ca89SAndroid Build Coastguard Worker	RETURN
2053*8d67ca89SAndroid Build Coastguard Worker
2054*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2055*8d67ca89SAndroid Build Coastguard WorkerL(2next_8_bytes):
2056*8d67ca89SAndroid Build Coastguard Worker	add	$8, %eax
2057*8d67ca89SAndroid Build Coastguard Worker	add	$8, %edx
2058*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2059*8d67ca89SAndroid Build Coastguard Worker	cmpl	$8, %ebp
2060*8d67ca89SAndroid Build Coastguard Worker	lea	-8(%ebp), %ebp
2061*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
2062*8d67ca89SAndroid Build Coastguard Worker#endif
2063*8d67ca89SAndroid Build Coastguard Worker
2064*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %ch
2065*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte0)
2066*8d67ca89SAndroid Build Coastguard Worker
2067*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %ch
2068*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte1)
2069*8d67ca89SAndroid Build Coastguard Worker
2070*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %ch
2071*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte2)
2072*8d67ca89SAndroid Build Coastguard Worker
2073*8d67ca89SAndroid Build Coastguard Worker	test	$0x08, %ch
2074*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte3)
2075*8d67ca89SAndroid Build Coastguard Worker
2076*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %ch
2077*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte4)
2078*8d67ca89SAndroid Build Coastguard Worker
2079*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %ch
2080*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte5)
2081*8d67ca89SAndroid Build Coastguard Worker
2082*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %ch
2083*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte6)
2084*8d67ca89SAndroid Build Coastguard Worker
2085*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2086*8d67ca89SAndroid Build Coastguard Worker	cmpl	$7, %ebp
2087*8d67ca89SAndroid Build Coastguard Worker	jbe	L(eq)
2088*8d67ca89SAndroid Build Coastguard Worker#endif
2089*8d67ca89SAndroid Build Coastguard Worker	movzbl	7(%eax), %ecx
2090*8d67ca89SAndroid Build Coastguard Worker	movzbl	7(%edx), %eax
2091*8d67ca89SAndroid Build Coastguard Worker
2092*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
2093*8d67ca89SAndroid Build Coastguard Worker	RETURN
2094*8d67ca89SAndroid Build Coastguard Worker
2095*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2096*8d67ca89SAndroid Build Coastguard WorkerL(neq):
2097*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
2098*8d67ca89SAndroid Build Coastguard Worker	ja	L(neq_bigger)
2099*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
2100*8d67ca89SAndroid Build Coastguard WorkerL(neq_bigger):
2101*8d67ca89SAndroid Build Coastguard Worker	RETURN
2102*8d67ca89SAndroid Build Coastguard Worker
2103*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2104*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2105*8d67ca89SAndroid Build Coastguard WorkerL(more8byteseq):
2106*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
2107*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
2108*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2109*8d67ca89SAndroid Build Coastguard Worker#endif
2110*8d67ca89SAndroid Build Coastguard Worker
2111*8d67ca89SAndroid Build Coastguard WorkerL(eq):
2112*8d67ca89SAndroid Build Coastguard Worker
2113*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2114*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebp)
2115*8d67ca89SAndroid Build Coastguard Worker#endif
2116*8d67ca89SAndroid Build Coastguard Worker	xorl	%eax, %eax
2117*8d67ca89SAndroid Build Coastguard Worker	ret
2118*8d67ca89SAndroid Build Coastguard Worker
2119*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCMP
2120*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
2121*8d67ca89SAndroid Build Coastguard Worker
2122*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2123*8d67ca89SAndroid Build Coastguard WorkerL(less16bytes_sncmp):
2124*8d67ca89SAndroid Build Coastguard Worker	test	%ebp, %ebp
2125*8d67ca89SAndroid Build Coastguard Worker	jz	L(eq)
2126*8d67ca89SAndroid Build Coastguard Worker
2127*8d67ca89SAndroid Build Coastguard Worker	movzbl	(%eax), %ecx
2128*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, (%edx)
2129*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2130*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2131*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2132*8d67ca89SAndroid Build Coastguard Worker
2133*8d67ca89SAndroid Build Coastguard Worker	cmpl	$1, %ebp
2134*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2135*8d67ca89SAndroid Build Coastguard Worker
2136*8d67ca89SAndroid Build Coastguard Worker	movzbl	1(%eax), %ecx
2137*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 1(%edx)
2138*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2139*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2140*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2141*8d67ca89SAndroid Build Coastguard Worker
2142*8d67ca89SAndroid Build Coastguard Worker	cmpl	$2, %ebp
2143*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2144*8d67ca89SAndroid Build Coastguard Worker
2145*8d67ca89SAndroid Build Coastguard Worker	movzbl	2(%eax), %ecx
2146*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 2(%edx)
2147*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2148*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2149*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2150*8d67ca89SAndroid Build Coastguard Worker
2151*8d67ca89SAndroid Build Coastguard Worker	cmpl	$3, %ebp
2152*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2153*8d67ca89SAndroid Build Coastguard Worker
2154*8d67ca89SAndroid Build Coastguard Worker	movzbl	3(%eax), %ecx
2155*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 3(%edx)
2156*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2157*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2158*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2159*8d67ca89SAndroid Build Coastguard Worker
2160*8d67ca89SAndroid Build Coastguard Worker	cmpl	$4, %ebp
2161*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2162*8d67ca89SAndroid Build Coastguard Worker
2163*8d67ca89SAndroid Build Coastguard Worker	movzbl	4(%eax), %ecx
2164*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 4(%edx)
2165*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2166*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2167*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2168*8d67ca89SAndroid Build Coastguard Worker
2169*8d67ca89SAndroid Build Coastguard Worker	cmpl	$5, %ebp
2170*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2171*8d67ca89SAndroid Build Coastguard Worker
2172*8d67ca89SAndroid Build Coastguard Worker	movzbl	5(%eax), %ecx
2173*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 5(%edx)
2174*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2175*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2176*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2177*8d67ca89SAndroid Build Coastguard Worker
2178*8d67ca89SAndroid Build Coastguard Worker	cmpl	$6, %ebp
2179*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2180*8d67ca89SAndroid Build Coastguard Worker
2181*8d67ca89SAndroid Build Coastguard Worker	movzbl	6(%eax), %ecx
2182*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 6(%edx)
2183*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2184*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2185*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2186*8d67ca89SAndroid Build Coastguard Worker
2187*8d67ca89SAndroid Build Coastguard Worker	cmpl	$7, %ebp
2188*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2189*8d67ca89SAndroid Build Coastguard Worker
2190*8d67ca89SAndroid Build Coastguard Worker	movzbl	7(%eax), %ecx
2191*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 7(%edx)
2192*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2193*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2194*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2195*8d67ca89SAndroid Build Coastguard Worker
2196*8d67ca89SAndroid Build Coastguard Worker
2197*8d67ca89SAndroid Build Coastguard Worker	cmpl	$8, %ebp
2198*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2199*8d67ca89SAndroid Build Coastguard Worker
2200*8d67ca89SAndroid Build Coastguard Worker	movzbl	8(%eax), %ecx
2201*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 8(%edx)
2202*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2203*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2204*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2205*8d67ca89SAndroid Build Coastguard Worker
2206*8d67ca89SAndroid Build Coastguard Worker	cmpl	$9, %ebp
2207*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2208*8d67ca89SAndroid Build Coastguard Worker
2209*8d67ca89SAndroid Build Coastguard Worker	movzbl	9(%eax), %ecx
2210*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 9(%edx)
2211*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2212*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2213*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2214*8d67ca89SAndroid Build Coastguard Worker
2215*8d67ca89SAndroid Build Coastguard Worker	cmpl	$10, %ebp
2216*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2217*8d67ca89SAndroid Build Coastguard Worker
2218*8d67ca89SAndroid Build Coastguard Worker	movzbl	10(%eax), %ecx
2219*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 10(%edx)
2220*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2221*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2222*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2223*8d67ca89SAndroid Build Coastguard Worker
2224*8d67ca89SAndroid Build Coastguard Worker	cmpl	$11, %ebp
2225*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2226*8d67ca89SAndroid Build Coastguard Worker
2227*8d67ca89SAndroid Build Coastguard Worker	movzbl	11(%eax), %ecx
2228*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 11(%edx)
2229*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2230*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2231*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2232*8d67ca89SAndroid Build Coastguard Worker
2233*8d67ca89SAndroid Build Coastguard Worker
2234*8d67ca89SAndroid Build Coastguard Worker	cmpl	$12, %ebp
2235*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2236*8d67ca89SAndroid Build Coastguard Worker
2237*8d67ca89SAndroid Build Coastguard Worker	movzbl	12(%eax), %ecx
2238*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 12(%edx)
2239*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2240*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2241*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2242*8d67ca89SAndroid Build Coastguard Worker
2243*8d67ca89SAndroid Build Coastguard Worker	cmpl	$13, %ebp
2244*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2245*8d67ca89SAndroid Build Coastguard Worker
2246*8d67ca89SAndroid Build Coastguard Worker	movzbl	13(%eax), %ecx
2247*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 13(%edx)
2248*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2249*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2250*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2251*8d67ca89SAndroid Build Coastguard Worker
2252*8d67ca89SAndroid Build Coastguard Worker	cmpl	$14, %ebp
2253*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2254*8d67ca89SAndroid Build Coastguard Worker
2255*8d67ca89SAndroid Build Coastguard Worker	movzbl	14(%eax), %ecx
2256*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 14(%edx)
2257*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2258*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2259*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2260*8d67ca89SAndroid Build Coastguard Worker
2261*8d67ca89SAndroid Build Coastguard Worker	cmpl	$15, %ebp
2262*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2263*8d67ca89SAndroid Build Coastguard Worker
2264*8d67ca89SAndroid Build Coastguard Worker	movzbl	15(%eax), %ecx
2265*8d67ca89SAndroid Build Coastguard Worker	cmpb	%cl, 15(%edx)
2266*8d67ca89SAndroid Build Coastguard Worker	jne	L(neq)
2267*8d67ca89SAndroid Build Coastguard Worker	test	%cl, %cl
2268*8d67ca89SAndroid Build Coastguard Worker	je	L(eq)
2269*8d67ca89SAndroid Build Coastguard Worker
2270*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebp)
2271*8d67ca89SAndroid Build Coastguard Worker	xor	%eax, %eax
2272*8d67ca89SAndroid Build Coastguard Worker	ret
2273*8d67ca89SAndroid Build Coastguard Worker#endif
2274*8d67ca89SAndroid Build Coastguard Worker
2275*8d67ca89SAndroid Build Coastguard WorkerEND (STRCMP)
2276