xref: /aosp_15_r20/bionic/libc/arch-x86/string/ssse3-memcmp-atom.S (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker/*
2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2010, 2011, 2012, 2013 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#ifndef MEMCMP
79*8d67ca89SAndroid Build Coastguard Worker# define MEMCMP	memcmp_atom
80*8d67ca89SAndroid Build Coastguard Worker#endif
81*8d67ca89SAndroid Build Coastguard Worker
82*8d67ca89SAndroid Build Coastguard Worker#define CFI_PUSH(REG)	\
83*8d67ca89SAndroid Build Coastguard Worker	cfi_adjust_cfa_offset (4);	\
84*8d67ca89SAndroid Build Coastguard Worker	cfi_rel_offset (REG, 0)
85*8d67ca89SAndroid Build Coastguard Worker
86*8d67ca89SAndroid Build Coastguard Worker#define CFI_POP(REG)	\
87*8d67ca89SAndroid Build Coastguard Worker	cfi_adjust_cfa_offset (-4);	\
88*8d67ca89SAndroid Build Coastguard Worker	cfi_restore (REG)
89*8d67ca89SAndroid Build Coastguard Worker
90*8d67ca89SAndroid Build Coastguard Worker#define PUSH(REG)	pushl REG; CFI_PUSH (REG)
91*8d67ca89SAndroid Build Coastguard Worker#define POP(REG)	popl REG; CFI_POP (REG)
92*8d67ca89SAndroid Build Coastguard Worker
93*8d67ca89SAndroid Build Coastguard Worker#define PARMS		4
94*8d67ca89SAndroid Build Coastguard Worker#define BLK1		PARMS
95*8d67ca89SAndroid Build Coastguard Worker#define BLK2		BLK1+4
96*8d67ca89SAndroid Build Coastguard Worker#define LEN		BLK2+4
97*8d67ca89SAndroid Build Coastguard Worker#define RETURN_END	POP (%edi); POP (%esi); POP (%ebx); ret
98*8d67ca89SAndroid Build Coastguard Worker#define RETURN		RETURN_END; cfi_restore_state; cfi_remember_state
99*8d67ca89SAndroid Build Coastguard Worker
100*8d67ca89SAndroid Build Coastguard Worker/* Warning!
101*8d67ca89SAndroid Build Coastguard Worker           wmemcmp has to use SIGNED comparison for elements.
102*8d67ca89SAndroid Build Coastguard Worker           memcmp has to use UNSIGNED comparison for elemnts.
103*8d67ca89SAndroid Build Coastguard Worker*/
104*8d67ca89SAndroid Build Coastguard Worker
105*8d67ca89SAndroid Build Coastguard Worker	.text
106*8d67ca89SAndroid Build Coastguard WorkerENTRY (MEMCMP)
107*8d67ca89SAndroid Build Coastguard Worker	movl	LEN(%esp), %ecx
108*8d67ca89SAndroid Build Coastguard Worker
109*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_WCHAR
110*8d67ca89SAndroid Build Coastguard Worker	shl	$2, %ecx
111*8d67ca89SAndroid Build Coastguard Worker	jz	L(zero)
112*8d67ca89SAndroid Build Coastguard Worker#elif defined USE_UTF16
113*8d67ca89SAndroid Build Coastguard Worker	shl	$1, %ecx
114*8d67ca89SAndroid Build Coastguard Worker	jz	L(zero)
115*8d67ca89SAndroid Build Coastguard Worker#endif
116*8d67ca89SAndroid Build Coastguard Worker
117*8d67ca89SAndroid Build Coastguard Worker	movl	BLK1(%esp), %eax
118*8d67ca89SAndroid Build Coastguard Worker	cmp	$48, %ecx
119*8d67ca89SAndroid Build Coastguard Worker	movl	BLK2(%esp), %edx
120*8d67ca89SAndroid Build Coastguard Worker	jae	L(48bytesormore)
121*8d67ca89SAndroid Build Coastguard Worker
122*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
123*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %ecx
124*8d67ca89SAndroid Build Coastguard Worker	jbe	L(less1bytes)
125*8d67ca89SAndroid Build Coastguard Worker#endif
126*8d67ca89SAndroid Build Coastguard Worker
127*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%ebx)
128*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %edx
129*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %eax
130*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
131*8d67ca89SAndroid Build Coastguard Worker
132*8d67ca89SAndroid Build Coastguard Worker	CFI_POP	(%ebx)
133*8d67ca89SAndroid Build Coastguard Worker
134*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
135*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
136*8d67ca89SAndroid Build Coastguard WorkerL(less1bytes):
137*8d67ca89SAndroid Build Coastguard Worker	jb	L(zero)
138*8d67ca89SAndroid Build Coastguard Worker	movb	(%eax), %cl
139*8d67ca89SAndroid Build Coastguard Worker	cmp	(%edx), %cl
140*8d67ca89SAndroid Build Coastguard Worker	je	L(zero)
141*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
142*8d67ca89SAndroid Build Coastguard Worker	ja	L(1bytesend)
143*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
144*8d67ca89SAndroid Build Coastguard WorkerL(1bytesend):
145*8d67ca89SAndroid Build Coastguard Worker	ret
146*8d67ca89SAndroid Build Coastguard Worker#endif
147*8d67ca89SAndroid Build Coastguard Worker
148*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
149*8d67ca89SAndroid Build Coastguard WorkerL(zero):
150*8d67ca89SAndroid Build Coastguard Worker	xor	%eax, %eax
151*8d67ca89SAndroid Build Coastguard Worker	ret
152*8d67ca89SAndroid Build Coastguard Worker
153*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
154*8d67ca89SAndroid Build Coastguard WorkerL(48bytesormore):
155*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%ebx)
156*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%esi)
157*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%edi)
158*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
159*8d67ca89SAndroid Build Coastguard Worker	movdqu	(%eax), %xmm3
160*8d67ca89SAndroid Build Coastguard Worker	movdqu	(%edx), %xmm0
161*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, %edi
162*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, %esi
163*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm3
164*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
165*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edi), %edi
166*8d67ca89SAndroid Build Coastguard Worker
167*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
168*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
169*8d67ca89SAndroid Build Coastguard Worker	jnz	L(less16bytes)
170*8d67ca89SAndroid Build Coastguard Worker	mov	%edi, %edx
171*8d67ca89SAndroid Build Coastguard Worker	and	$0xf, %edx
172*8d67ca89SAndroid Build Coastguard Worker	xor	%edx, %edi
173*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %esi
174*8d67ca89SAndroid Build Coastguard Worker	add	%edx, %ecx
175*8d67ca89SAndroid Build Coastguard Worker	mov	%esi, %edx
176*8d67ca89SAndroid Build Coastguard Worker	and	$0xf, %edx
177*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_0)
178*8d67ca89SAndroid Build Coastguard Worker	xor	%edx, %esi
179*8d67ca89SAndroid Build Coastguard Worker
180*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
181*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %edx
182*8d67ca89SAndroid Build Coastguard Worker	jae	L(next_unaligned_table)
183*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %edx
184*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_0)
185*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %edx
186*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_1)
187*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %edx
188*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_2)
189*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %edx
190*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_3)
191*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %edx
192*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_4)
193*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %edx
194*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_5)
195*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %edx
196*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_6)
197*8d67ca89SAndroid Build Coastguard Worker	jmp	L(shr_7)
198*8d67ca89SAndroid Build Coastguard Worker
199*8d67ca89SAndroid Build Coastguard Worker	.p2align 2
200*8d67ca89SAndroid Build Coastguard WorkerL(next_unaligned_table):
201*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %edx
202*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_8)
203*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %edx
204*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_9)
205*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %edx
206*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_10)
207*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %edx
208*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_11)
209*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %edx
210*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_12)
211*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %edx
212*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_13)
213*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %edx
214*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_14)
215*8d67ca89SAndroid Build Coastguard Worker	jmp	L(shr_15)
216*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR)
217*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %edx
218*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_0)
219*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %edx
220*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_4)
221*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %edx
222*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_8)
223*8d67ca89SAndroid Build Coastguard Worker	jmp	L(shr_12)
224*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16)
225*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %edx
226*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_0)
227*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %edx
228*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_2)
229*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %edx
230*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_4)
231*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %edx
232*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_6)
233*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %edx
234*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_8)
235*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %edx
236*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_10)
237*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %edx
238*8d67ca89SAndroid Build Coastguard Worker	je	L(shr_12)
239*8d67ca89SAndroid Build Coastguard Worker	jmp	L(shr_14)
240*8d67ca89SAndroid Build Coastguard Worker#endif
241*8d67ca89SAndroid Build Coastguard Worker
242*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
243*8d67ca89SAndroid Build Coastguard WorkerL(shr_0):
244*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
245*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_0_gobble)
246*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
247*8d67ca89SAndroid Build Coastguard Worker	xor	%eax, %eax
248*8d67ca89SAndroid Build Coastguard Worker	movaps	(%esi), %xmm1
249*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
250*8d67ca89SAndroid Build Coastguard Worker	movaps	16(%esi), %xmm2
251*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm2
252*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm2
253*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
254*8d67ca89SAndroid Build Coastguard Worker	add	$32, %edi
255*8d67ca89SAndroid Build Coastguard Worker	add	$32, %esi
256*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
257*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
258*8d67ca89SAndroid Build Coastguard Worker
259*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
260*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %esi,1), %edx
261*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
262*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
263*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
264*8d67ca89SAndroid Build Coastguard Worker
265*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
266*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
267*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
268*8d67ca89SAndroid Build Coastguard WorkerL(shr_0_gobble):
269*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
270*8d67ca89SAndroid Build Coastguard Worker	movdqa	(%esi), %xmm0
271*8d67ca89SAndroid Build Coastguard Worker	xor	%eax, %eax
272*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
273*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
274*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm2
275*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm2
276*8d67ca89SAndroid Build Coastguard WorkerL(shr_0_gobble_loop):
277*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm2
278*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
279*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
280*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
281*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm0
282*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm2
283*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
284*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
285*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm2
286*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
287*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
288*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_0_gobble_loop)
289*8d67ca89SAndroid Build Coastguard Worker
290*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm2
291*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
292*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_0_gobble_loop_next)
293*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
294*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
295*8d67ca89SAndroid Build Coastguard WorkerL(shr_0_gobble_loop_next):
296*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
297*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
298*8d67ca89SAndroid Build Coastguard Worker
299*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
300*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
301*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
302*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
303*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
304*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
305*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
306*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %esi,1), %edx
307*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
308*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
309*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
310*8d67ca89SAndroid Build Coastguard Worker
311*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
312*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
313*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
314*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
315*8d67ca89SAndroid Build Coastguard WorkerL(shr_1):
316*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
317*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
318*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
319*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_1_gobble)
320*8d67ca89SAndroid Build Coastguard Worker
321*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
322*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
323*8d67ca89SAndroid Build Coastguard Worker	palignr	$1,(%esi), %xmm1
324*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
325*8d67ca89SAndroid Build Coastguard Worker
326*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
327*8d67ca89SAndroid Build Coastguard Worker	palignr	$1,%xmm2, %xmm3
328*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
329*8d67ca89SAndroid Build Coastguard Worker
330*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
331*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
332*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
333*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
334*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
335*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
336*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
337*8d67ca89SAndroid Build Coastguard Worker	lea	1(%ecx, %esi,1), %edx
338*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
339*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
340*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
341*8d67ca89SAndroid Build Coastguard Worker
342*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
343*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
344*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
345*8d67ca89SAndroid Build Coastguard WorkerL(shr_1_gobble):
346*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
347*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
348*8d67ca89SAndroid Build Coastguard Worker	palignr	$1,(%esi), %xmm0
349*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
350*8d67ca89SAndroid Build Coastguard Worker
351*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
352*8d67ca89SAndroid Build Coastguard Worker	palignr	$1,16(%esi), %xmm3
353*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
354*8d67ca89SAndroid Build Coastguard Worker
355*8d67ca89SAndroid Build Coastguard WorkerL(shr_1_gobble_loop):
356*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
357*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
358*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
359*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
360*8d67ca89SAndroid Build Coastguard Worker
361*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
362*8d67ca89SAndroid Build Coastguard Worker	palignr	$1,48(%esi), %xmm3
363*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
364*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
365*8d67ca89SAndroid Build Coastguard Worker	palignr	$1,32(%esi), %xmm0
366*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
367*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
368*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
369*8d67ca89SAndroid Build Coastguard Worker
370*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
371*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_1_gobble_loop)
372*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
373*8d67ca89SAndroid Build Coastguard Worker
374*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
375*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_1_gobble_next)
376*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
377*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
378*8d67ca89SAndroid Build Coastguard WorkerL(shr_1_gobble_next):
379*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
380*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
381*8d67ca89SAndroid Build Coastguard Worker
382*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
383*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
384*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
385*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
386*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
387*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
388*8d67ca89SAndroid Build Coastguard Worker
389*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
390*8d67ca89SAndroid Build Coastguard Worker	lea	1(%ecx, %esi,1), %edx
391*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
392*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
393*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
394*8d67ca89SAndroid Build Coastguard Worker#endif
395*8d67ca89SAndroid Build Coastguard Worker
396*8d67ca89SAndroid Build Coastguard Worker
397*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR)
398*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
399*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
400*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
401*8d67ca89SAndroid Build Coastguard WorkerL(shr_2):
402*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
403*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
404*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
405*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_2_gobble)
406*8d67ca89SAndroid Build Coastguard Worker
407*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
408*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
409*8d67ca89SAndroid Build Coastguard Worker	palignr	$2,(%esi), %xmm1
410*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
411*8d67ca89SAndroid Build Coastguard Worker
412*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
413*8d67ca89SAndroid Build Coastguard Worker	palignr	$2,%xmm2, %xmm3
414*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
415*8d67ca89SAndroid Build Coastguard Worker
416*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
417*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
418*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
419*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
420*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
421*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
422*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
423*8d67ca89SAndroid Build Coastguard Worker	lea	2(%ecx, %esi,1), %edx
424*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
425*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
426*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
427*8d67ca89SAndroid Build Coastguard Worker
428*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
429*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
430*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
431*8d67ca89SAndroid Build Coastguard WorkerL(shr_2_gobble):
432*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
433*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
434*8d67ca89SAndroid Build Coastguard Worker	palignr	$2,(%esi), %xmm0
435*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
436*8d67ca89SAndroid Build Coastguard Worker
437*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
438*8d67ca89SAndroid Build Coastguard Worker	palignr	$2,16(%esi), %xmm3
439*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
440*8d67ca89SAndroid Build Coastguard Worker
441*8d67ca89SAndroid Build Coastguard WorkerL(shr_2_gobble_loop):
442*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
443*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
444*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
445*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
446*8d67ca89SAndroid Build Coastguard Worker
447*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
448*8d67ca89SAndroid Build Coastguard Worker	palignr	$2,48(%esi), %xmm3
449*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
450*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
451*8d67ca89SAndroid Build Coastguard Worker	palignr	$2,32(%esi), %xmm0
452*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
453*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
454*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
455*8d67ca89SAndroid Build Coastguard Worker
456*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
457*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_2_gobble_loop)
458*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
459*8d67ca89SAndroid Build Coastguard Worker
460*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
461*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_2_gobble_next)
462*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
463*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
464*8d67ca89SAndroid Build Coastguard WorkerL(shr_2_gobble_next):
465*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
466*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
467*8d67ca89SAndroid Build Coastguard Worker
468*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
469*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
470*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
471*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
472*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
473*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
474*8d67ca89SAndroid Build Coastguard Worker
475*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
476*8d67ca89SAndroid Build Coastguard Worker	lea	2(%ecx, %esi,1), %edx
477*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
478*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
479*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
480*8d67ca89SAndroid Build Coastguard Worker#endif
481*8d67ca89SAndroid Build Coastguard Worker
482*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
483*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
484*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
485*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
486*8d67ca89SAndroid Build Coastguard WorkerL(shr_3):
487*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
488*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
489*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
490*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_3_gobble)
491*8d67ca89SAndroid Build Coastguard Worker
492*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
493*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
494*8d67ca89SAndroid Build Coastguard Worker	palignr	$3,(%esi), %xmm1
495*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
496*8d67ca89SAndroid Build Coastguard Worker
497*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
498*8d67ca89SAndroid Build Coastguard Worker	palignr	$3,%xmm2, %xmm3
499*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
500*8d67ca89SAndroid Build Coastguard Worker
501*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
502*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
503*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
504*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
505*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
506*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
507*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
508*8d67ca89SAndroid Build Coastguard Worker	lea	3(%ecx, %esi,1), %edx
509*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
510*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
511*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
512*8d67ca89SAndroid Build Coastguard Worker
513*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
514*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
515*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
516*8d67ca89SAndroid Build Coastguard WorkerL(shr_3_gobble):
517*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
518*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
519*8d67ca89SAndroid Build Coastguard Worker	palignr	$3,(%esi), %xmm0
520*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
521*8d67ca89SAndroid Build Coastguard Worker
522*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
523*8d67ca89SAndroid Build Coastguard Worker	palignr	$3,16(%esi), %xmm3
524*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
525*8d67ca89SAndroid Build Coastguard Worker
526*8d67ca89SAndroid Build Coastguard WorkerL(shr_3_gobble_loop):
527*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
528*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
529*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
530*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
531*8d67ca89SAndroid Build Coastguard Worker
532*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
533*8d67ca89SAndroid Build Coastguard Worker	palignr	$3,48(%esi), %xmm3
534*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
535*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
536*8d67ca89SAndroid Build Coastguard Worker	palignr	$3,32(%esi), %xmm0
537*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
538*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
539*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
540*8d67ca89SAndroid Build Coastguard Worker
541*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
542*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_3_gobble_loop)
543*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
544*8d67ca89SAndroid Build Coastguard Worker
545*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
546*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_3_gobble_next)
547*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
548*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
549*8d67ca89SAndroid Build Coastguard WorkerL(shr_3_gobble_next):
550*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
551*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
552*8d67ca89SAndroid Build Coastguard Worker
553*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
554*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
555*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
556*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
557*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
558*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
559*8d67ca89SAndroid Build Coastguard Worker
560*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
561*8d67ca89SAndroid Build Coastguard Worker	lea	3(%ecx, %esi,1), %edx
562*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
563*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
564*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
565*8d67ca89SAndroid Build Coastguard Worker#endif
566*8d67ca89SAndroid Build Coastguard Worker
567*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
568*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
569*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
570*8d67ca89SAndroid Build Coastguard WorkerL(shr_4):
571*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
572*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
573*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
574*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_4_gobble)
575*8d67ca89SAndroid Build Coastguard Worker
576*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
577*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
578*8d67ca89SAndroid Build Coastguard Worker	palignr	$4,(%esi), %xmm1
579*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
580*8d67ca89SAndroid Build Coastguard Worker
581*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
582*8d67ca89SAndroid Build Coastguard Worker	palignr	$4,%xmm2, %xmm3
583*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
584*8d67ca89SAndroid Build Coastguard Worker
585*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
586*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
587*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
588*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
589*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
590*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
591*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
592*8d67ca89SAndroid Build Coastguard Worker	lea	4(%ecx, %esi,1), %edx
593*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
594*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
595*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
596*8d67ca89SAndroid Build Coastguard Worker
597*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
598*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
599*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
600*8d67ca89SAndroid Build Coastguard WorkerL(shr_4_gobble):
601*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
602*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
603*8d67ca89SAndroid Build Coastguard Worker	palignr	$4,(%esi), %xmm0
604*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
605*8d67ca89SAndroid Build Coastguard Worker
606*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
607*8d67ca89SAndroid Build Coastguard Worker	palignr	$4,16(%esi), %xmm3
608*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
609*8d67ca89SAndroid Build Coastguard Worker
610*8d67ca89SAndroid Build Coastguard WorkerL(shr_4_gobble_loop):
611*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
612*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
613*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
614*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
615*8d67ca89SAndroid Build Coastguard Worker
616*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
617*8d67ca89SAndroid Build Coastguard Worker	palignr	$4,48(%esi), %xmm3
618*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
619*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
620*8d67ca89SAndroid Build Coastguard Worker	palignr	$4,32(%esi), %xmm0
621*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
622*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
623*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
624*8d67ca89SAndroid Build Coastguard Worker
625*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
626*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_4_gobble_loop)
627*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
628*8d67ca89SAndroid Build Coastguard Worker
629*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
630*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_4_gobble_next)
631*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
632*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
633*8d67ca89SAndroid Build Coastguard WorkerL(shr_4_gobble_next):
634*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
635*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
636*8d67ca89SAndroid Build Coastguard Worker
637*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
638*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
639*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
640*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
641*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
642*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
643*8d67ca89SAndroid Build Coastguard Worker
644*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
645*8d67ca89SAndroid Build Coastguard Worker	lea	4(%ecx, %esi,1), %edx
646*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
647*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
648*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
649*8d67ca89SAndroid Build Coastguard Worker
650*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
651*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
652*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
653*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
654*8d67ca89SAndroid Build Coastguard WorkerL(shr_5):
655*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
656*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
657*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
658*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_5_gobble)
659*8d67ca89SAndroid Build Coastguard Worker
660*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
661*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
662*8d67ca89SAndroid Build Coastguard Worker	palignr	$5,(%esi), %xmm1
663*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
664*8d67ca89SAndroid Build Coastguard Worker
665*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
666*8d67ca89SAndroid Build Coastguard Worker	palignr	$5,%xmm2, %xmm3
667*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
668*8d67ca89SAndroid Build Coastguard Worker
669*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
670*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
671*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
672*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
673*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
674*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
675*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
676*8d67ca89SAndroid Build Coastguard Worker	lea	5(%ecx, %esi,1), %edx
677*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
678*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
679*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
680*8d67ca89SAndroid Build Coastguard Worker
681*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
682*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
683*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
684*8d67ca89SAndroid Build Coastguard WorkerL(shr_5_gobble):
685*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
686*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
687*8d67ca89SAndroid Build Coastguard Worker	palignr	$5,(%esi), %xmm0
688*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
689*8d67ca89SAndroid Build Coastguard Worker
690*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
691*8d67ca89SAndroid Build Coastguard Worker	palignr	$5,16(%esi), %xmm3
692*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
693*8d67ca89SAndroid Build Coastguard Worker
694*8d67ca89SAndroid Build Coastguard WorkerL(shr_5_gobble_loop):
695*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
696*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
697*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
698*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
699*8d67ca89SAndroid Build Coastguard Worker
700*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
701*8d67ca89SAndroid Build Coastguard Worker	palignr	$5,48(%esi), %xmm3
702*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
703*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
704*8d67ca89SAndroid Build Coastguard Worker	palignr	$5,32(%esi), %xmm0
705*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
706*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
707*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
708*8d67ca89SAndroid Build Coastguard Worker
709*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
710*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_5_gobble_loop)
711*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
712*8d67ca89SAndroid Build Coastguard Worker
713*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
714*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_5_gobble_next)
715*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
716*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
717*8d67ca89SAndroid Build Coastguard WorkerL(shr_5_gobble_next):
718*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
719*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
720*8d67ca89SAndroid Build Coastguard Worker
721*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
722*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
723*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
724*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
725*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
726*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
727*8d67ca89SAndroid Build Coastguard Worker
728*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
729*8d67ca89SAndroid Build Coastguard Worker	lea	5(%ecx, %esi,1), %edx
730*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
731*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
732*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
733*8d67ca89SAndroid Build Coastguard Worker#endif
734*8d67ca89SAndroid Build Coastguard Worker
735*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR)
736*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
737*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
738*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
739*8d67ca89SAndroid Build Coastguard WorkerL(shr_6):
740*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
741*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
742*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
743*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_6_gobble)
744*8d67ca89SAndroid Build Coastguard Worker
745*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
746*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
747*8d67ca89SAndroid Build Coastguard Worker	palignr	$6,(%esi), %xmm1
748*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
749*8d67ca89SAndroid Build Coastguard Worker
750*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
751*8d67ca89SAndroid Build Coastguard Worker	palignr	$6,%xmm2, %xmm3
752*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
753*8d67ca89SAndroid Build Coastguard Worker
754*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
755*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
756*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
757*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
758*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
759*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
760*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
761*8d67ca89SAndroid Build Coastguard Worker	lea	6(%ecx, %esi,1), %edx
762*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
763*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
764*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
765*8d67ca89SAndroid Build Coastguard Worker
766*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
767*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
768*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
769*8d67ca89SAndroid Build Coastguard WorkerL(shr_6_gobble):
770*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
771*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
772*8d67ca89SAndroid Build Coastguard Worker	palignr	$6,(%esi), %xmm0
773*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
774*8d67ca89SAndroid Build Coastguard Worker
775*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
776*8d67ca89SAndroid Build Coastguard Worker	palignr	$6,16(%esi), %xmm3
777*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
778*8d67ca89SAndroid Build Coastguard Worker
779*8d67ca89SAndroid Build Coastguard WorkerL(shr_6_gobble_loop):
780*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
781*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
782*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
783*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
784*8d67ca89SAndroid Build Coastguard Worker
785*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
786*8d67ca89SAndroid Build Coastguard Worker	palignr	$6,48(%esi), %xmm3
787*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
788*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
789*8d67ca89SAndroid Build Coastguard Worker	palignr	$6,32(%esi), %xmm0
790*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
791*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
792*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
793*8d67ca89SAndroid Build Coastguard Worker
794*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
795*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_6_gobble_loop)
796*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
797*8d67ca89SAndroid Build Coastguard Worker
798*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
799*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_6_gobble_next)
800*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
801*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
802*8d67ca89SAndroid Build Coastguard WorkerL(shr_6_gobble_next):
803*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
804*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
805*8d67ca89SAndroid Build Coastguard Worker
806*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
807*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
808*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
809*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
810*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
811*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
812*8d67ca89SAndroid Build Coastguard Worker
813*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
814*8d67ca89SAndroid Build Coastguard Worker	lea	6(%ecx, %esi,1), %edx
815*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
816*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
817*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
818*8d67ca89SAndroid Build Coastguard Worker#endif
819*8d67ca89SAndroid Build Coastguard Worker
820*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
821*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
822*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
823*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
824*8d67ca89SAndroid Build Coastguard WorkerL(shr_7):
825*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
826*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
827*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
828*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_7_gobble)
829*8d67ca89SAndroid Build Coastguard Worker
830*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
831*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
832*8d67ca89SAndroid Build Coastguard Worker	palignr	$7,(%esi), %xmm1
833*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
834*8d67ca89SAndroid Build Coastguard Worker
835*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
836*8d67ca89SAndroid Build Coastguard Worker	palignr	$7,%xmm2, %xmm3
837*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
838*8d67ca89SAndroid Build Coastguard Worker
839*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
840*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
841*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
842*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
843*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
844*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
845*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
846*8d67ca89SAndroid Build Coastguard Worker	lea	7(%ecx, %esi,1), %edx
847*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
848*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
849*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
850*8d67ca89SAndroid Build Coastguard Worker
851*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
852*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
853*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
854*8d67ca89SAndroid Build Coastguard WorkerL(shr_7_gobble):
855*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
856*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
857*8d67ca89SAndroid Build Coastguard Worker	palignr	$7,(%esi), %xmm0
858*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
859*8d67ca89SAndroid Build Coastguard Worker
860*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
861*8d67ca89SAndroid Build Coastguard Worker	palignr	$7,16(%esi), %xmm3
862*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
863*8d67ca89SAndroid Build Coastguard Worker
864*8d67ca89SAndroid Build Coastguard WorkerL(shr_7_gobble_loop):
865*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
866*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
867*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
868*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
869*8d67ca89SAndroid Build Coastguard Worker
870*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
871*8d67ca89SAndroid Build Coastguard Worker	palignr	$7,48(%esi), %xmm3
872*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
873*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
874*8d67ca89SAndroid Build Coastguard Worker	palignr	$7,32(%esi), %xmm0
875*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
876*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
877*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
878*8d67ca89SAndroid Build Coastguard Worker
879*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
880*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_7_gobble_loop)
881*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
882*8d67ca89SAndroid Build Coastguard Worker
883*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
884*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_7_gobble_next)
885*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
886*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
887*8d67ca89SAndroid Build Coastguard WorkerL(shr_7_gobble_next):
888*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
889*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
890*8d67ca89SAndroid Build Coastguard Worker
891*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
892*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
893*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
894*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
895*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
896*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
897*8d67ca89SAndroid Build Coastguard Worker
898*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
899*8d67ca89SAndroid Build Coastguard Worker	lea	7(%ecx, %esi,1), %edx
900*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
901*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
902*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
903*8d67ca89SAndroid Build Coastguard Worker#endif
904*8d67ca89SAndroid Build Coastguard Worker
905*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
906*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
907*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
908*8d67ca89SAndroid Build Coastguard WorkerL(shr_8):
909*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
910*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
911*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
912*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_8_gobble)
913*8d67ca89SAndroid Build Coastguard Worker
914*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
915*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
916*8d67ca89SAndroid Build Coastguard Worker	palignr	$8,(%esi), %xmm1
917*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
918*8d67ca89SAndroid Build Coastguard Worker
919*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
920*8d67ca89SAndroid Build Coastguard Worker	palignr	$8,%xmm2, %xmm3
921*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
922*8d67ca89SAndroid Build Coastguard Worker
923*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
924*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
925*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
926*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
927*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
928*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
929*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
930*8d67ca89SAndroid Build Coastguard Worker	lea	8(%ecx, %esi,1), %edx
931*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
932*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
933*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
934*8d67ca89SAndroid Build Coastguard Worker
935*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
936*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
937*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
938*8d67ca89SAndroid Build Coastguard WorkerL(shr_8_gobble):
939*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
940*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
941*8d67ca89SAndroid Build Coastguard Worker	palignr	$8,(%esi), %xmm0
942*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
943*8d67ca89SAndroid Build Coastguard Worker
944*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
945*8d67ca89SAndroid Build Coastguard Worker	palignr	$8,16(%esi), %xmm3
946*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
947*8d67ca89SAndroid Build Coastguard Worker
948*8d67ca89SAndroid Build Coastguard WorkerL(shr_8_gobble_loop):
949*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
950*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
951*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
952*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
953*8d67ca89SAndroid Build Coastguard Worker
954*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
955*8d67ca89SAndroid Build Coastguard Worker	palignr	$8,48(%esi), %xmm3
956*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
957*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
958*8d67ca89SAndroid Build Coastguard Worker	palignr	$8,32(%esi), %xmm0
959*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
960*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
961*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
962*8d67ca89SAndroid Build Coastguard Worker
963*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
964*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_8_gobble_loop)
965*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
966*8d67ca89SAndroid Build Coastguard Worker
967*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
968*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_8_gobble_next)
969*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
970*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
971*8d67ca89SAndroid Build Coastguard WorkerL(shr_8_gobble_next):
972*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
973*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
974*8d67ca89SAndroid Build Coastguard Worker
975*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
976*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
977*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
978*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
979*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
980*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
981*8d67ca89SAndroid Build Coastguard Worker
982*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
983*8d67ca89SAndroid Build Coastguard Worker	lea	8(%ecx, %esi,1), %edx
984*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
985*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
986*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
987*8d67ca89SAndroid Build Coastguard Worker
988*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
989*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
990*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
991*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
992*8d67ca89SAndroid Build Coastguard WorkerL(shr_9):
993*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
994*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
995*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
996*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_9_gobble)
997*8d67ca89SAndroid Build Coastguard Worker
998*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
999*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
1000*8d67ca89SAndroid Build Coastguard Worker	palignr	$9,(%esi), %xmm1
1001*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
1002*8d67ca89SAndroid Build Coastguard Worker
1003*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1004*8d67ca89SAndroid Build Coastguard Worker	palignr	$9,%xmm2, %xmm3
1005*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1006*8d67ca89SAndroid Build Coastguard Worker
1007*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
1008*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1009*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1010*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1011*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1012*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1013*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1014*8d67ca89SAndroid Build Coastguard Worker	lea	9(%ecx, %esi,1), %edx
1015*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1016*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1017*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1018*8d67ca89SAndroid Build Coastguard Worker
1019*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1020*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1021*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1022*8d67ca89SAndroid Build Coastguard WorkerL(shr_9_gobble):
1023*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1024*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
1025*8d67ca89SAndroid Build Coastguard Worker	palignr	$9,(%esi), %xmm0
1026*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
1027*8d67ca89SAndroid Build Coastguard Worker
1028*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1029*8d67ca89SAndroid Build Coastguard Worker	palignr	$9,16(%esi), %xmm3
1030*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1031*8d67ca89SAndroid Build Coastguard Worker
1032*8d67ca89SAndroid Build Coastguard WorkerL(shr_9_gobble_loop):
1033*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1034*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1035*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1036*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1037*8d67ca89SAndroid Build Coastguard Worker
1038*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
1039*8d67ca89SAndroid Build Coastguard Worker	palignr	$9,48(%esi), %xmm3
1040*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
1041*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
1042*8d67ca89SAndroid Build Coastguard Worker	palignr	$9,32(%esi), %xmm0
1043*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
1044*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1045*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
1046*8d67ca89SAndroid Build Coastguard Worker
1047*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1048*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_9_gobble_loop)
1049*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1050*8d67ca89SAndroid Build Coastguard Worker
1051*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
1052*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_9_gobble_next)
1053*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
1054*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
1055*8d67ca89SAndroid Build Coastguard WorkerL(shr_9_gobble_next):
1056*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
1057*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1058*8d67ca89SAndroid Build Coastguard Worker
1059*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1060*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1061*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1062*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1063*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1064*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1065*8d67ca89SAndroid Build Coastguard Worker
1066*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1067*8d67ca89SAndroid Build Coastguard Worker	lea	9(%ecx, %esi,1), %edx
1068*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1069*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1070*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1071*8d67ca89SAndroid Build Coastguard Worker#endif
1072*8d67ca89SAndroid Build Coastguard Worker
1073*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR)
1074*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1075*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1076*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1077*8d67ca89SAndroid Build Coastguard WorkerL(shr_10):
1078*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
1079*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
1080*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
1081*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_10_gobble)
1082*8d67ca89SAndroid Build Coastguard Worker
1083*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
1084*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
1085*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, (%esi), %xmm1
1086*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
1087*8d67ca89SAndroid Build Coastguard Worker
1088*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1089*8d67ca89SAndroid Build Coastguard Worker	palignr	$10,%xmm2, %xmm3
1090*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1091*8d67ca89SAndroid Build Coastguard Worker
1092*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
1093*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1094*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1095*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1096*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1097*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1098*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1099*8d67ca89SAndroid Build Coastguard Worker	lea	10(%ecx, %esi,1), %edx
1100*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1101*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1102*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1103*8d67ca89SAndroid Build Coastguard Worker
1104*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1105*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1106*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1107*8d67ca89SAndroid Build Coastguard WorkerL(shr_10_gobble):
1108*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1109*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
1110*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, (%esi), %xmm0
1111*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
1112*8d67ca89SAndroid Build Coastguard Worker
1113*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1114*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, 16(%esi), %xmm3
1115*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1116*8d67ca89SAndroid Build Coastguard Worker
1117*8d67ca89SAndroid Build Coastguard WorkerL(shr_10_gobble_loop):
1118*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1119*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1120*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1121*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1122*8d67ca89SAndroid Build Coastguard Worker
1123*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
1124*8d67ca89SAndroid Build Coastguard Worker	palignr	$10,48(%esi), %xmm3
1125*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
1126*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
1127*8d67ca89SAndroid Build Coastguard Worker	palignr	$10,32(%esi), %xmm0
1128*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
1129*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1130*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
1131*8d67ca89SAndroid Build Coastguard Worker
1132*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1133*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_10_gobble_loop)
1134*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1135*8d67ca89SAndroid Build Coastguard Worker
1136*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
1137*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_10_gobble_next)
1138*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
1139*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
1140*8d67ca89SAndroid Build Coastguard WorkerL(shr_10_gobble_next):
1141*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
1142*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1143*8d67ca89SAndroid Build Coastguard Worker
1144*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1145*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1146*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1147*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1148*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1149*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1150*8d67ca89SAndroid Build Coastguard Worker
1151*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1152*8d67ca89SAndroid Build Coastguard Worker	lea	10(%ecx, %esi,1), %edx
1153*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1154*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1155*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1156*8d67ca89SAndroid Build Coastguard Worker#endif
1157*8d67ca89SAndroid Build Coastguard Worker
1158*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1159*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1160*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1161*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1162*8d67ca89SAndroid Build Coastguard WorkerL(shr_11):
1163*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
1164*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
1165*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
1166*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_11_gobble)
1167*8d67ca89SAndroid Build Coastguard Worker
1168*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
1169*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
1170*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, (%esi), %xmm1
1171*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
1172*8d67ca89SAndroid Build Coastguard Worker
1173*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1174*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm2, %xmm3
1175*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1176*8d67ca89SAndroid Build Coastguard Worker
1177*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
1178*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1179*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1180*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1181*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1182*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1183*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1184*8d67ca89SAndroid Build Coastguard Worker	lea	11(%ecx, %esi,1), %edx
1185*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1186*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1187*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1188*8d67ca89SAndroid Build Coastguard Worker
1189*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1190*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1191*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1192*8d67ca89SAndroid Build Coastguard WorkerL(shr_11_gobble):
1193*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1194*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
1195*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, (%esi), %xmm0
1196*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
1197*8d67ca89SAndroid Build Coastguard Worker
1198*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1199*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, 16(%esi), %xmm3
1200*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1201*8d67ca89SAndroid Build Coastguard Worker
1202*8d67ca89SAndroid Build Coastguard WorkerL(shr_11_gobble_loop):
1203*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1204*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1205*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1206*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1207*8d67ca89SAndroid Build Coastguard Worker
1208*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
1209*8d67ca89SAndroid Build Coastguard Worker	palignr	$11,48(%esi), %xmm3
1210*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
1211*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
1212*8d67ca89SAndroid Build Coastguard Worker	palignr	$11,32(%esi), %xmm0
1213*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
1214*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1215*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
1216*8d67ca89SAndroid Build Coastguard Worker
1217*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1218*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_11_gobble_loop)
1219*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1220*8d67ca89SAndroid Build Coastguard Worker
1221*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
1222*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_11_gobble_next)
1223*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
1224*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
1225*8d67ca89SAndroid Build Coastguard WorkerL(shr_11_gobble_next):
1226*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
1227*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1228*8d67ca89SAndroid Build Coastguard Worker
1229*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1230*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1231*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1232*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1233*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1234*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1235*8d67ca89SAndroid Build Coastguard Worker
1236*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1237*8d67ca89SAndroid Build Coastguard Worker	lea	11(%ecx, %esi,1), %edx
1238*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1239*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1240*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1241*8d67ca89SAndroid Build Coastguard Worker#endif
1242*8d67ca89SAndroid Build Coastguard Worker
1243*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1244*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1245*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1246*8d67ca89SAndroid Build Coastguard WorkerL(shr_12):
1247*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
1248*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
1249*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
1250*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_12_gobble)
1251*8d67ca89SAndroid Build Coastguard Worker
1252*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
1253*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
1254*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, (%esi), %xmm1
1255*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
1256*8d67ca89SAndroid Build Coastguard Worker
1257*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1258*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm2, %xmm3
1259*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1260*8d67ca89SAndroid Build Coastguard Worker
1261*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
1262*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1263*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1264*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1265*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1266*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1267*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1268*8d67ca89SAndroid Build Coastguard Worker	lea	12(%ecx, %esi,1), %edx
1269*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1270*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1271*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1272*8d67ca89SAndroid Build Coastguard Worker
1273*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1274*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1275*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1276*8d67ca89SAndroid Build Coastguard WorkerL(shr_12_gobble):
1277*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1278*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
1279*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, (%esi), %xmm0
1280*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
1281*8d67ca89SAndroid Build Coastguard Worker
1282*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1283*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, 16(%esi), %xmm3
1284*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1285*8d67ca89SAndroid Build Coastguard Worker
1286*8d67ca89SAndroid Build Coastguard WorkerL(shr_12_gobble_loop):
1287*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1288*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1289*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1290*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1291*8d67ca89SAndroid Build Coastguard Worker
1292*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
1293*8d67ca89SAndroid Build Coastguard Worker	palignr	$12,48(%esi), %xmm3
1294*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
1295*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
1296*8d67ca89SAndroid Build Coastguard Worker	palignr	$12,32(%esi), %xmm0
1297*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
1298*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1299*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
1300*8d67ca89SAndroid Build Coastguard Worker
1301*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1302*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_12_gobble_loop)
1303*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1304*8d67ca89SAndroid Build Coastguard Worker
1305*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
1306*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_12_gobble_next)
1307*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
1308*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
1309*8d67ca89SAndroid Build Coastguard WorkerL(shr_12_gobble_next):
1310*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
1311*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1312*8d67ca89SAndroid Build Coastguard Worker
1313*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1314*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1315*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1316*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1317*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1318*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1319*8d67ca89SAndroid Build Coastguard Worker
1320*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1321*8d67ca89SAndroid Build Coastguard Worker	lea	12(%ecx, %esi,1), %edx
1322*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1323*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1324*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1325*8d67ca89SAndroid Build Coastguard Worker
1326*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1327*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1328*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1329*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1330*8d67ca89SAndroid Build Coastguard WorkerL(shr_13):
1331*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
1332*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
1333*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
1334*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_13_gobble)
1335*8d67ca89SAndroid Build Coastguard Worker
1336*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
1337*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
1338*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, (%esi), %xmm1
1339*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
1340*8d67ca89SAndroid Build Coastguard Worker
1341*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1342*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm2, %xmm3
1343*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1344*8d67ca89SAndroid Build Coastguard Worker
1345*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
1346*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1347*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1348*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1349*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1350*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1351*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1352*8d67ca89SAndroid Build Coastguard Worker	lea	13(%ecx, %esi,1), %edx
1353*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1354*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1355*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1356*8d67ca89SAndroid Build Coastguard Worker
1357*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1358*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1359*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1360*8d67ca89SAndroid Build Coastguard WorkerL(shr_13_gobble):
1361*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1362*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
1363*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, (%esi), %xmm0
1364*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
1365*8d67ca89SAndroid Build Coastguard Worker
1366*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1367*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, 16(%esi), %xmm3
1368*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1369*8d67ca89SAndroid Build Coastguard Worker
1370*8d67ca89SAndroid Build Coastguard WorkerL(shr_13_gobble_loop):
1371*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1372*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1373*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1374*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1375*8d67ca89SAndroid Build Coastguard Worker
1376*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
1377*8d67ca89SAndroid Build Coastguard Worker	palignr	$13,48(%esi), %xmm3
1378*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
1379*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
1380*8d67ca89SAndroid Build Coastguard Worker	palignr	$13,32(%esi), %xmm0
1381*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
1382*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1383*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
1384*8d67ca89SAndroid Build Coastguard Worker
1385*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1386*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_13_gobble_loop)
1387*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1388*8d67ca89SAndroid Build Coastguard Worker
1389*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
1390*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_13_gobble_next)
1391*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
1392*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
1393*8d67ca89SAndroid Build Coastguard WorkerL(shr_13_gobble_next):
1394*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
1395*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1396*8d67ca89SAndroid Build Coastguard Worker
1397*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1398*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1399*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1400*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1401*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1402*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1403*8d67ca89SAndroid Build Coastguard Worker
1404*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1405*8d67ca89SAndroid Build Coastguard Worker	lea	13(%ecx, %esi,1), %edx
1406*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1407*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1408*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1409*8d67ca89SAndroid Build Coastguard Worker#endif
1410*8d67ca89SAndroid Build Coastguard Worker
1411*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR)
1412*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1413*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1414*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1415*8d67ca89SAndroid Build Coastguard WorkerL(shr_14):
1416*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
1417*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
1418*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
1419*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_14_gobble)
1420*8d67ca89SAndroid Build Coastguard Worker
1421*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
1422*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
1423*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, (%esi), %xmm1
1424*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
1425*8d67ca89SAndroid Build Coastguard Worker
1426*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1427*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm2, %xmm3
1428*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1429*8d67ca89SAndroid Build Coastguard Worker
1430*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
1431*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1432*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1433*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1434*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1435*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1436*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1437*8d67ca89SAndroid Build Coastguard Worker	lea	14(%ecx, %esi,1), %edx
1438*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1439*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1440*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1441*8d67ca89SAndroid Build Coastguard Worker
1442*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1443*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1444*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1445*8d67ca89SAndroid Build Coastguard WorkerL(shr_14_gobble):
1446*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1447*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
1448*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, (%esi), %xmm0
1449*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
1450*8d67ca89SAndroid Build Coastguard Worker
1451*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1452*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, 16(%esi), %xmm3
1453*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1454*8d67ca89SAndroid Build Coastguard Worker
1455*8d67ca89SAndroid Build Coastguard WorkerL(shr_14_gobble_loop):
1456*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1457*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1458*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1459*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1460*8d67ca89SAndroid Build Coastguard Worker
1461*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
1462*8d67ca89SAndroid Build Coastguard Worker	palignr	$14,48(%esi), %xmm3
1463*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
1464*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
1465*8d67ca89SAndroid Build Coastguard Worker	palignr	$14,32(%esi), %xmm0
1466*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
1467*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1468*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
1469*8d67ca89SAndroid Build Coastguard Worker
1470*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1471*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_14_gobble_loop)
1472*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1473*8d67ca89SAndroid Build Coastguard Worker
1474*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
1475*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_14_gobble_next)
1476*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
1477*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
1478*8d67ca89SAndroid Build Coastguard WorkerL(shr_14_gobble_next):
1479*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
1480*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1481*8d67ca89SAndroid Build Coastguard Worker
1482*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1483*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1484*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1485*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1486*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1487*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1488*8d67ca89SAndroid Build Coastguard Worker
1489*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1490*8d67ca89SAndroid Build Coastguard Worker	lea	14(%ecx, %esi,1), %edx
1491*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1492*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1493*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1494*8d67ca89SAndroid Build Coastguard Worker#endif
1495*8d67ca89SAndroid Build Coastguard Worker
1496*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1497*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1498*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1499*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1500*8d67ca89SAndroid Build Coastguard WorkerL(shr_15):
1501*8d67ca89SAndroid Build Coastguard Worker	cmp	$80, %ecx
1502*8d67ca89SAndroid Build Coastguard Worker	lea	-48(%ecx), %ecx
1503*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
1504*8d67ca89SAndroid Build Coastguard Worker	jae	L(shr_15_gobble)
1505*8d67ca89SAndroid Build Coastguard Worker
1506*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm1
1507*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm1, %xmm2
1508*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, (%esi), %xmm1
1509*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm1
1510*8d67ca89SAndroid Build Coastguard Worker
1511*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1512*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm2, %xmm3
1513*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1514*8d67ca89SAndroid Build Coastguard Worker
1515*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm1, %xmm3
1516*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1517*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1518*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1519*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1520*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1521*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1522*8d67ca89SAndroid Build Coastguard Worker	lea	15(%ecx, %esi,1), %edx
1523*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1524*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1525*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1526*8d67ca89SAndroid Build Coastguard Worker
1527*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1528*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1529*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1530*8d67ca89SAndroid Build Coastguard WorkerL(shr_15_gobble):
1531*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1532*8d67ca89SAndroid Build Coastguard Worker	movdqa	16(%esi), %xmm0
1533*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, (%esi), %xmm0
1534*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%edi), %xmm0
1535*8d67ca89SAndroid Build Coastguard Worker
1536*8d67ca89SAndroid Build Coastguard Worker	movdqa	32(%esi), %xmm3
1537*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, 16(%esi), %xmm3
1538*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%edi), %xmm3
1539*8d67ca89SAndroid Build Coastguard Worker
1540*8d67ca89SAndroid Build Coastguard WorkerL(shr_15_gobble_loop):
1541*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1542*8d67ca89SAndroid Build Coastguard Worker	sub	$32, %ecx
1543*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1544*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1545*8d67ca89SAndroid Build Coastguard Worker
1546*8d67ca89SAndroid Build Coastguard Worker	movdqa	64(%esi), %xmm3
1547*8d67ca89SAndroid Build Coastguard Worker	palignr	$15,48(%esi), %xmm3
1548*8d67ca89SAndroid Build Coastguard Worker	sbb	$0xffff, %edx
1549*8d67ca89SAndroid Build Coastguard Worker	movdqa	48(%esi), %xmm0
1550*8d67ca89SAndroid Build Coastguard Worker	palignr	$15,32(%esi), %xmm0
1551*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%edi), %xmm0
1552*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1553*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%edi), %xmm3
1554*8d67ca89SAndroid Build Coastguard Worker
1555*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1556*8d67ca89SAndroid Build Coastguard Worker	jz	L(shr_15_gobble_loop)
1557*8d67ca89SAndroid Build Coastguard Worker	pand	%xmm0, %xmm3
1558*8d67ca89SAndroid Build Coastguard Worker
1559*8d67ca89SAndroid Build Coastguard Worker	cmp	$0, %ecx
1560*8d67ca89SAndroid Build Coastguard Worker	jge	L(shr_15_gobble_next)
1561*8d67ca89SAndroid Build Coastguard Worker	inc	%edx
1562*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ecx
1563*8d67ca89SAndroid Build Coastguard WorkerL(shr_15_gobble_next):
1564*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
1565*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1566*8d67ca89SAndroid Build Coastguard Worker
1567*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
1568*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, %xmm1
1569*8d67ca89SAndroid Build Coastguard Worker	lea	32(%edi), %edi
1570*8d67ca89SAndroid Build Coastguard Worker	lea	32(%esi), %esi
1571*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %edx
1572*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
1573*8d67ca89SAndroid Build Coastguard Worker
1574*8d67ca89SAndroid Build Coastguard Worker	lea	(%ecx, %edi,1), %eax
1575*8d67ca89SAndroid Build Coastguard Worker	lea	15(%ecx, %esi,1), %edx
1576*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
1577*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
1578*8d67ca89SAndroid Build Coastguard Worker	jmp	L(less48bytes)
1579*8d67ca89SAndroid Build Coastguard Worker#endif
1580*8d67ca89SAndroid Build Coastguard Worker
1581*8d67ca89SAndroid Build Coastguard Worker	cfi_restore_state
1582*8d67ca89SAndroid Build Coastguard Worker	cfi_remember_state
1583*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1584*8d67ca89SAndroid Build Coastguard WorkerL(exit):
1585*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %ebx
1586*8d67ca89SAndroid Build Coastguard Worker	sub	$0xffff, %ebx
1587*8d67ca89SAndroid Build Coastguard Worker	jz	L(first16bytes)
1588*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%esi), %esi
1589*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%edi), %edi
1590*8d67ca89SAndroid Build Coastguard Worker	mov	%ebx, %edx
1591*8d67ca89SAndroid Build Coastguard Worker
1592*8d67ca89SAndroid Build Coastguard WorkerL(first16bytes):
1593*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %esi
1594*8d67ca89SAndroid Build Coastguard WorkerL(less16bytes):
1595*8d67ca89SAndroid Build Coastguard Worker
1596*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1597*8d67ca89SAndroid Build Coastguard Worker	test	%dl, %dl
1598*8d67ca89SAndroid Build Coastguard Worker	jz	L(next_24_bytes)
1599*8d67ca89SAndroid Build Coastguard Worker
1600*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %dl
1601*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte16)
1602*8d67ca89SAndroid Build Coastguard Worker
1603*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %dl
1604*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte17)
1605*8d67ca89SAndroid Build Coastguard Worker
1606*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %dl
1607*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte18)
1608*8d67ca89SAndroid Build Coastguard Worker
1609*8d67ca89SAndroid Build Coastguard Worker	test	$0x08, %dl
1610*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte19)
1611*8d67ca89SAndroid Build Coastguard Worker
1612*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %dl
1613*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte20)
1614*8d67ca89SAndroid Build Coastguard Worker
1615*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %dl
1616*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte21)
1617*8d67ca89SAndroid Build Coastguard Worker
1618*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %dl
1619*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte22)
1620*8d67ca89SAndroid Build Coastguard WorkerL(Byte23):
1621*8d67ca89SAndroid Build Coastguard Worker	movzbl	-9(%edi), %eax
1622*8d67ca89SAndroid Build Coastguard Worker	movzbl	-9(%esi), %edx
1623*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1624*8d67ca89SAndroid Build Coastguard Worker	RETURN
1625*8d67ca89SAndroid Build Coastguard Worker
1626*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1627*8d67ca89SAndroid Build Coastguard WorkerL(Byte16):
1628*8d67ca89SAndroid Build Coastguard Worker	movzbl	-16(%edi), %eax
1629*8d67ca89SAndroid Build Coastguard Worker	movzbl	-16(%esi), %edx
1630*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1631*8d67ca89SAndroid Build Coastguard Worker	RETURN
1632*8d67ca89SAndroid Build Coastguard Worker
1633*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1634*8d67ca89SAndroid Build Coastguard WorkerL(Byte17):
1635*8d67ca89SAndroid Build Coastguard Worker	movzbl	-15(%edi), %eax
1636*8d67ca89SAndroid Build Coastguard Worker	movzbl	-15(%esi), %edx
1637*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1638*8d67ca89SAndroid Build Coastguard Worker	RETURN
1639*8d67ca89SAndroid Build Coastguard Worker
1640*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1641*8d67ca89SAndroid Build Coastguard WorkerL(Byte18):
1642*8d67ca89SAndroid Build Coastguard Worker	movzbl	-14(%edi), %eax
1643*8d67ca89SAndroid Build Coastguard Worker	movzbl	-14(%esi), %edx
1644*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1645*8d67ca89SAndroid Build Coastguard Worker	RETURN
1646*8d67ca89SAndroid Build Coastguard Worker
1647*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1648*8d67ca89SAndroid Build Coastguard WorkerL(Byte19):
1649*8d67ca89SAndroid Build Coastguard Worker	movzbl	-13(%edi), %eax
1650*8d67ca89SAndroid Build Coastguard Worker	movzbl	-13(%esi), %edx
1651*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1652*8d67ca89SAndroid Build Coastguard Worker	RETURN
1653*8d67ca89SAndroid Build Coastguard Worker
1654*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1655*8d67ca89SAndroid Build Coastguard WorkerL(Byte20):
1656*8d67ca89SAndroid Build Coastguard Worker	movzbl	-12(%edi), %eax
1657*8d67ca89SAndroid Build Coastguard Worker	movzbl	-12(%esi), %edx
1658*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1659*8d67ca89SAndroid Build Coastguard Worker	RETURN
1660*8d67ca89SAndroid Build Coastguard Worker
1661*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1662*8d67ca89SAndroid Build Coastguard WorkerL(Byte21):
1663*8d67ca89SAndroid Build Coastguard Worker	movzbl	-11(%edi), %eax
1664*8d67ca89SAndroid Build Coastguard Worker	movzbl	-11(%esi), %edx
1665*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1666*8d67ca89SAndroid Build Coastguard Worker	RETURN
1667*8d67ca89SAndroid Build Coastguard Worker
1668*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1669*8d67ca89SAndroid Build Coastguard WorkerL(Byte22):
1670*8d67ca89SAndroid Build Coastguard Worker	movzbl	-10(%edi), %eax
1671*8d67ca89SAndroid Build Coastguard Worker	movzbl	-10(%esi), %edx
1672*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1673*8d67ca89SAndroid Build Coastguard Worker	RETURN
1674*8d67ca89SAndroid Build Coastguard Worker
1675*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1676*8d67ca89SAndroid Build Coastguard WorkerL(next_24_bytes):
1677*8d67ca89SAndroid Build Coastguard Worker	lea	8(%edi), %edi
1678*8d67ca89SAndroid Build Coastguard Worker	lea	8(%esi), %esi
1679*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %dh
1680*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte16)
1681*8d67ca89SAndroid Build Coastguard Worker
1682*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %dh
1683*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte17)
1684*8d67ca89SAndroid Build Coastguard Worker
1685*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %dh
1686*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte18)
1687*8d67ca89SAndroid Build Coastguard Worker
1688*8d67ca89SAndroid Build Coastguard Worker	test	$0x08, %dh
1689*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte19)
1690*8d67ca89SAndroid Build Coastguard Worker
1691*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %dh
1692*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte20)
1693*8d67ca89SAndroid Build Coastguard Worker
1694*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %dh
1695*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte21)
1696*8d67ca89SAndroid Build Coastguard Worker
1697*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %dh
1698*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Byte22)
1699*8d67ca89SAndroid Build Coastguard Worker
1700*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1701*8d67ca89SAndroid Build Coastguard WorkerL(Byte31):
1702*8d67ca89SAndroid Build Coastguard Worker	movzbl	-9(%edi), %eax
1703*8d67ca89SAndroid Build Coastguard Worker	movzbl	-9(%esi), %edx
1704*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
1705*8d67ca89SAndroid Build Coastguard Worker	RETURN_END
1706*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_WMEMCMP)
1707*8d67ca89SAndroid Build Coastguard Worker
1708*8d67ca89SAndroid Build Coastguard Worker/* special for wmemcmp */
1709*8d67ca89SAndroid Build Coastguard Worker	test	%dl, %dl
1710*8d67ca89SAndroid Build Coastguard Worker	jz	L(next_two_double_words)
1711*8d67ca89SAndroid Build Coastguard Worker	and	$15, %dl
1712*8d67ca89SAndroid Build Coastguard Worker	jz	L(second_double_word)
1713*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%edi), %ecx
1714*8d67ca89SAndroid Build Coastguard Worker	cmp	-16(%esi), %ecx
1715*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
1716*8d67ca89SAndroid Build Coastguard Worker	jg	L(nequal_bigger)
1717*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
1718*8d67ca89SAndroid Build Coastguard Worker	RETURN
1719*8d67ca89SAndroid Build Coastguard Worker
1720*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1721*8d67ca89SAndroid Build Coastguard WorkerL(second_double_word):
1722*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%edi), %ecx
1723*8d67ca89SAndroid Build Coastguard Worker	cmp	-12(%esi), %ecx
1724*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
1725*8d67ca89SAndroid Build Coastguard Worker	jg	L(nequal_bigger)
1726*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
1727*8d67ca89SAndroid Build Coastguard Worker	RETURN
1728*8d67ca89SAndroid Build Coastguard Worker
1729*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1730*8d67ca89SAndroid Build Coastguard WorkerL(next_two_double_words):
1731*8d67ca89SAndroid Build Coastguard Worker	and	$15, %dh
1732*8d67ca89SAndroid Build Coastguard Worker	jz	L(fourth_double_word)
1733*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%edi), %ecx
1734*8d67ca89SAndroid Build Coastguard Worker	cmp	-8(%esi), %ecx
1735*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
1736*8d67ca89SAndroid Build Coastguard Worker	jg	L(nequal_bigger)
1737*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
1738*8d67ca89SAndroid Build Coastguard Worker	RETURN
1739*8d67ca89SAndroid Build Coastguard Worker
1740*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1741*8d67ca89SAndroid Build Coastguard WorkerL(fourth_double_word):
1742*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%edi), %ecx
1743*8d67ca89SAndroid Build Coastguard Worker	cmp	-4(%esi), %ecx
1744*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
1745*8d67ca89SAndroid Build Coastguard Worker	jg	L(nequal_bigger)
1746*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
1747*8d67ca89SAndroid Build Coastguard Worker	RETURN
1748*8d67ca89SAndroid Build Coastguard Worker
1749*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1750*8d67ca89SAndroid Build Coastguard WorkerL(nequal_bigger):
1751*8d67ca89SAndroid Build Coastguard Worker	RETURN_END
1752*8d67ca89SAndroid Build Coastguard Worker
1753*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_MEMCMP16)
1754*8d67ca89SAndroid Build Coastguard Worker
1755*8d67ca89SAndroid Build Coastguard Worker/* special for __memcmp16 */
1756*8d67ca89SAndroid Build Coastguard Worker	test	%dl, %dl
1757*8d67ca89SAndroid Build Coastguard Worker	jz	L(next_four_words)
1758*8d67ca89SAndroid Build Coastguard Worker	test	$15, %dl
1759*8d67ca89SAndroid Build Coastguard Worker	jz	L(second_two_words)
1760*8d67ca89SAndroid Build Coastguard Worker	test	$3, %dl
1761*8d67ca89SAndroid Build Coastguard Worker	jz	L(second_word)
1762*8d67ca89SAndroid Build Coastguard Worker	movzwl	-16(%edi), %eax
1763*8d67ca89SAndroid Build Coastguard Worker	movzwl	-16(%esi), %ebx
1764*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
1765*8d67ca89SAndroid Build Coastguard Worker	RETURN
1766*8d67ca89SAndroid Build Coastguard Worker
1767*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1768*8d67ca89SAndroid Build Coastguard WorkerL(second_word):
1769*8d67ca89SAndroid Build Coastguard Worker	movzwl	-14(%edi), %eax
1770*8d67ca89SAndroid Build Coastguard Worker	movzwl	-14(%esi), %ebx
1771*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
1772*8d67ca89SAndroid Build Coastguard Worker	RETURN
1773*8d67ca89SAndroid Build Coastguard Worker
1774*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1775*8d67ca89SAndroid Build Coastguard WorkerL(second_two_words):
1776*8d67ca89SAndroid Build Coastguard Worker	test	$63, %dl
1777*8d67ca89SAndroid Build Coastguard Worker	jz	L(fourth_word)
1778*8d67ca89SAndroid Build Coastguard Worker	movzwl	-12(%edi), %eax
1779*8d67ca89SAndroid Build Coastguard Worker	movzwl	-12(%esi), %ebx
1780*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
1781*8d67ca89SAndroid Build Coastguard Worker	RETURN
1782*8d67ca89SAndroid Build Coastguard Worker
1783*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1784*8d67ca89SAndroid Build Coastguard WorkerL(fourth_word):
1785*8d67ca89SAndroid Build Coastguard Worker	movzwl	-10(%edi), %eax
1786*8d67ca89SAndroid Build Coastguard Worker	movzwl	-10(%esi), %ebx
1787*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
1788*8d67ca89SAndroid Build Coastguard Worker	RETURN
1789*8d67ca89SAndroid Build Coastguard Worker
1790*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1791*8d67ca89SAndroid Build Coastguard WorkerL(next_four_words):
1792*8d67ca89SAndroid Build Coastguard Worker	test	$15, %dh
1793*8d67ca89SAndroid Build Coastguard Worker	jz	L(fourth_two_words)
1794*8d67ca89SAndroid Build Coastguard Worker	test	$3, %dh
1795*8d67ca89SAndroid Build Coastguard Worker	jz	L(sixth_word)
1796*8d67ca89SAndroid Build Coastguard Worker	movzwl	-8(%edi), %eax
1797*8d67ca89SAndroid Build Coastguard Worker	movzwl	-8(%esi), %ebx
1798*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
1799*8d67ca89SAndroid Build Coastguard Worker	RETURN
1800*8d67ca89SAndroid Build Coastguard Worker
1801*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1802*8d67ca89SAndroid Build Coastguard WorkerL(sixth_word):
1803*8d67ca89SAndroid Build Coastguard Worker	movzwl	-6(%edi), %eax
1804*8d67ca89SAndroid Build Coastguard Worker	movzwl	-6(%esi), %ebx
1805*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
1806*8d67ca89SAndroid Build Coastguard Worker	RETURN
1807*8d67ca89SAndroid Build Coastguard Worker
1808*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1809*8d67ca89SAndroid Build Coastguard WorkerL(fourth_two_words):
1810*8d67ca89SAndroid Build Coastguard Worker	test	$63, %dh
1811*8d67ca89SAndroid Build Coastguard Worker	jz	L(eighth_word)
1812*8d67ca89SAndroid Build Coastguard Worker	movzwl	-4(%edi), %eax
1813*8d67ca89SAndroid Build Coastguard Worker	movzwl	-4(%esi), %ebx
1814*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
1815*8d67ca89SAndroid Build Coastguard Worker	RETURN
1816*8d67ca89SAndroid Build Coastguard Worker
1817*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1818*8d67ca89SAndroid Build Coastguard WorkerL(eighth_word):
1819*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%edi), %eax
1820*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%esi), %ebx
1821*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
1822*8d67ca89SAndroid Build Coastguard Worker	RETURN
1823*8d67ca89SAndroid Build Coastguard Worker#else
1824*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case
1825*8d67ca89SAndroid Build Coastguard Worker#endif
1826*8d67ca89SAndroid Build Coastguard Worker
1827*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx)
1828*8d67ca89SAndroid Build Coastguard Worker
1829*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1830*8d67ca89SAndroid Build Coastguard WorkerL(more8bytes):
1831*8d67ca89SAndroid Build Coastguard Worker	cmp	$16, %ecx
1832*8d67ca89SAndroid Build Coastguard Worker	jae	L(more16bytes)
1833*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ecx
1834*8d67ca89SAndroid Build Coastguard Worker	je	L(8bytes)
1835*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1836*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %ecx
1837*8d67ca89SAndroid Build Coastguard Worker	je	L(9bytes)
1838*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ecx
1839*8d67ca89SAndroid Build Coastguard Worker	je	L(10bytes)
1840*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %ecx
1841*8d67ca89SAndroid Build Coastguard Worker	je	L(11bytes)
1842*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ecx
1843*8d67ca89SAndroid Build Coastguard Worker	je	L(12bytes)
1844*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %ecx
1845*8d67ca89SAndroid Build Coastguard Worker	je	L(13bytes)
1846*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %ecx
1847*8d67ca89SAndroid Build Coastguard Worker	je	L(14bytes)
1848*8d67ca89SAndroid Build Coastguard Worker	jmp	L(15bytes)
1849*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16)
1850*8d67ca89SAndroid Build Coastguard Worker	jmp	L(12bytes)
1851*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1852*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ecx
1853*8d67ca89SAndroid Build Coastguard Worker	je	L(10bytes)
1854*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ecx
1855*8d67ca89SAndroid Build Coastguard Worker	je	L(12bytes)
1856*8d67ca89SAndroid Build Coastguard Worker	jmp	L(14bytes)
1857*8d67ca89SAndroid Build Coastguard Worker#else
1858*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case
1859*8d67ca89SAndroid Build Coastguard Worker#endif
1860*8d67ca89SAndroid Build Coastguard Worker
1861*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1862*8d67ca89SAndroid Build Coastguard WorkerL(more16bytes):
1863*8d67ca89SAndroid Build Coastguard Worker	cmp	$24, %ecx
1864*8d67ca89SAndroid Build Coastguard Worker	jae	L(more24bytes)
1865*8d67ca89SAndroid Build Coastguard Worker	cmp	$16, %ecx
1866*8d67ca89SAndroid Build Coastguard Worker	je	L(16bytes)
1867*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1868*8d67ca89SAndroid Build Coastguard Worker	cmp	$17, %ecx
1869*8d67ca89SAndroid Build Coastguard Worker	je	L(17bytes)
1870*8d67ca89SAndroid Build Coastguard Worker	cmp	$18, %ecx
1871*8d67ca89SAndroid Build Coastguard Worker	je	L(18bytes)
1872*8d67ca89SAndroid Build Coastguard Worker	cmp	$19, %ecx
1873*8d67ca89SAndroid Build Coastguard Worker	je	L(19bytes)
1874*8d67ca89SAndroid Build Coastguard Worker	cmp	$20, %ecx
1875*8d67ca89SAndroid Build Coastguard Worker	je	L(20bytes)
1876*8d67ca89SAndroid Build Coastguard Worker	cmp	$21, %ecx
1877*8d67ca89SAndroid Build Coastguard Worker	je	L(21bytes)
1878*8d67ca89SAndroid Build Coastguard Worker	cmp	$22, %ecx
1879*8d67ca89SAndroid Build Coastguard Worker	je	L(22bytes)
1880*8d67ca89SAndroid Build Coastguard Worker	jmp	L(23bytes)
1881*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16)
1882*8d67ca89SAndroid Build Coastguard Worker	jmp	L(20bytes)
1883*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1884*8d67ca89SAndroid Build Coastguard Worker	cmp	$18, %ecx
1885*8d67ca89SAndroid Build Coastguard Worker	je	L(18bytes)
1886*8d67ca89SAndroid Build Coastguard Worker	cmp	$20, %ecx
1887*8d67ca89SAndroid Build Coastguard Worker	je	L(20bytes)
1888*8d67ca89SAndroid Build Coastguard Worker	jmp	L(22bytes)
1889*8d67ca89SAndroid Build Coastguard Worker#else
1890*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case
1891*8d67ca89SAndroid Build Coastguard Worker#endif
1892*8d67ca89SAndroid Build Coastguard Worker
1893*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1894*8d67ca89SAndroid Build Coastguard WorkerL(more24bytes):
1895*8d67ca89SAndroid Build Coastguard Worker	cmp	$32, %ecx
1896*8d67ca89SAndroid Build Coastguard Worker	jae	L(more32bytes)
1897*8d67ca89SAndroid Build Coastguard Worker	cmp	$24, %ecx
1898*8d67ca89SAndroid Build Coastguard Worker	je	L(24bytes)
1899*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1900*8d67ca89SAndroid Build Coastguard Worker	cmp	$25, %ecx
1901*8d67ca89SAndroid Build Coastguard Worker	je	L(25bytes)
1902*8d67ca89SAndroid Build Coastguard Worker	cmp	$26, %ecx
1903*8d67ca89SAndroid Build Coastguard Worker	je	L(26bytes)
1904*8d67ca89SAndroid Build Coastguard Worker	cmp	$27, %ecx
1905*8d67ca89SAndroid Build Coastguard Worker	je	L(27bytes)
1906*8d67ca89SAndroid Build Coastguard Worker	cmp	$28, %ecx
1907*8d67ca89SAndroid Build Coastguard Worker	je	L(28bytes)
1908*8d67ca89SAndroid Build Coastguard Worker	cmp	$29, %ecx
1909*8d67ca89SAndroid Build Coastguard Worker	je	L(29bytes)
1910*8d67ca89SAndroid Build Coastguard Worker	cmp	$30, %ecx
1911*8d67ca89SAndroid Build Coastguard Worker	je	L(30bytes)
1912*8d67ca89SAndroid Build Coastguard Worker	jmp	L(31bytes)
1913*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16)
1914*8d67ca89SAndroid Build Coastguard Worker	jmp	L(28bytes)
1915*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1916*8d67ca89SAndroid Build Coastguard Worker	cmp	$26, %ecx
1917*8d67ca89SAndroid Build Coastguard Worker	je	L(26bytes)
1918*8d67ca89SAndroid Build Coastguard Worker	cmp	$28, %ecx
1919*8d67ca89SAndroid Build Coastguard Worker	je	L(28bytes)
1920*8d67ca89SAndroid Build Coastguard Worker	jmp	L(30bytes)
1921*8d67ca89SAndroid Build Coastguard Worker#else
1922*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case
1923*8d67ca89SAndroid Build Coastguard Worker#endif
1924*8d67ca89SAndroid Build Coastguard Worker
1925*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1926*8d67ca89SAndroid Build Coastguard WorkerL(more32bytes):
1927*8d67ca89SAndroid Build Coastguard Worker	cmp	$40, %ecx
1928*8d67ca89SAndroid Build Coastguard Worker	jae	L(more40bytes)
1929*8d67ca89SAndroid Build Coastguard Worker	cmp	$32, %ecx
1930*8d67ca89SAndroid Build Coastguard Worker	je	L(32bytes)
1931*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1932*8d67ca89SAndroid Build Coastguard Worker	cmp	$33, %ecx
1933*8d67ca89SAndroid Build Coastguard Worker	je	L(33bytes)
1934*8d67ca89SAndroid Build Coastguard Worker	cmp	$34, %ecx
1935*8d67ca89SAndroid Build Coastguard Worker	je	L(34bytes)
1936*8d67ca89SAndroid Build Coastguard Worker	cmp	$35, %ecx
1937*8d67ca89SAndroid Build Coastguard Worker	je	L(35bytes)
1938*8d67ca89SAndroid Build Coastguard Worker	cmp	$36, %ecx
1939*8d67ca89SAndroid Build Coastguard Worker	je	L(36bytes)
1940*8d67ca89SAndroid Build Coastguard Worker	cmp	$37, %ecx
1941*8d67ca89SAndroid Build Coastguard Worker	je	L(37bytes)
1942*8d67ca89SAndroid Build Coastguard Worker	cmp	$38, %ecx
1943*8d67ca89SAndroid Build Coastguard Worker	je	L(38bytes)
1944*8d67ca89SAndroid Build Coastguard Worker	jmp	L(39bytes)
1945*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16)
1946*8d67ca89SAndroid Build Coastguard Worker	jmp	L(36bytes)
1947*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1948*8d67ca89SAndroid Build Coastguard Worker	cmp	$34, %ecx
1949*8d67ca89SAndroid Build Coastguard Worker	je	L(34bytes)
1950*8d67ca89SAndroid Build Coastguard Worker	cmp	$36, %ecx
1951*8d67ca89SAndroid Build Coastguard Worker	je	L(36bytes)
1952*8d67ca89SAndroid Build Coastguard Worker	jmp	L(38bytes)
1953*8d67ca89SAndroid Build Coastguard Worker#else
1954*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case
1955*8d67ca89SAndroid Build Coastguard Worker#endif
1956*8d67ca89SAndroid Build Coastguard Worker
1957*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1958*8d67ca89SAndroid Build Coastguard WorkerL(less48bytes):
1959*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ecx
1960*8d67ca89SAndroid Build Coastguard Worker	jae	L(more8bytes)
1961*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1962*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ecx
1963*8d67ca89SAndroid Build Coastguard Worker	je	L(2bytes)
1964*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %ecx
1965*8d67ca89SAndroid Build Coastguard Worker	je	L(3bytes)
1966*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ecx
1967*8d67ca89SAndroid Build Coastguard Worker	je	L(4bytes)
1968*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %ecx
1969*8d67ca89SAndroid Build Coastguard Worker	je	L(5bytes)
1970*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ecx
1971*8d67ca89SAndroid Build Coastguard Worker	je	L(6bytes)
1972*8d67ca89SAndroid Build Coastguard Worker	jmp	L(7bytes)
1973*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16)
1974*8d67ca89SAndroid Build Coastguard Worker	jmp	L(4bytes)
1975*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1976*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ecx
1977*8d67ca89SAndroid Build Coastguard Worker	je	L(2bytes)
1978*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ecx
1979*8d67ca89SAndroid Build Coastguard Worker	je	L(4bytes)
1980*8d67ca89SAndroid Build Coastguard Worker	jmp	L(6bytes)
1981*8d67ca89SAndroid Build Coastguard Worker#else
1982*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case
1983*8d67ca89SAndroid Build Coastguard Worker#endif
1984*8d67ca89SAndroid Build Coastguard Worker
1985*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1986*8d67ca89SAndroid Build Coastguard WorkerL(more40bytes):
1987*8d67ca89SAndroid Build Coastguard Worker	cmp	$40, %ecx
1988*8d67ca89SAndroid Build Coastguard Worker	je	L(40bytes)
1989*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1990*8d67ca89SAndroid Build Coastguard Worker	cmp	$41, %ecx
1991*8d67ca89SAndroid Build Coastguard Worker	je	L(41bytes)
1992*8d67ca89SAndroid Build Coastguard Worker	cmp	$42, %ecx
1993*8d67ca89SAndroid Build Coastguard Worker	je	L(42bytes)
1994*8d67ca89SAndroid Build Coastguard Worker	cmp	$43, %ecx
1995*8d67ca89SAndroid Build Coastguard Worker	je	L(43bytes)
1996*8d67ca89SAndroid Build Coastguard Worker	cmp	$44, %ecx
1997*8d67ca89SAndroid Build Coastguard Worker	je	L(44bytes)
1998*8d67ca89SAndroid Build Coastguard Worker	cmp	$45, %ecx
1999*8d67ca89SAndroid Build Coastguard Worker	je	L(45bytes)
2000*8d67ca89SAndroid Build Coastguard Worker	cmp	$46, %ecx
2001*8d67ca89SAndroid Build Coastguard Worker	je	L(46bytes)
2002*8d67ca89SAndroid Build Coastguard Worker	jmp	L(47bytes)
2003*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR)
2004*8d67ca89SAndroid Build Coastguard Worker	cmp	$42, %ecx
2005*8d67ca89SAndroid Build Coastguard Worker	je	L(42bytes)
2006*8d67ca89SAndroid Build Coastguard Worker	cmp	$44, %ecx
2007*8d67ca89SAndroid Build Coastguard Worker	je	L(44bytes)
2008*8d67ca89SAndroid Build Coastguard Worker	jmp	L(46bytes)
2009*8d67ca89SAndroid Build Coastguard Worker#endif
2010*8d67ca89SAndroid Build Coastguard Worker
2011*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_AS_WMEMCMP) && !defined(USE_AS_MEMCMP16)
2012*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2013*8d67ca89SAndroid Build Coastguard WorkerL(44bytes):
2014*8d67ca89SAndroid Build Coastguard Worker	mov	-44(%eax), %ecx
2015*8d67ca89SAndroid Build Coastguard Worker	mov	-44(%edx), %ebx
2016*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2017*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2018*8d67ca89SAndroid Build Coastguard WorkerL(40bytes):
2019*8d67ca89SAndroid Build Coastguard Worker	mov	-40(%eax), %ecx
2020*8d67ca89SAndroid Build Coastguard Worker	mov	-40(%edx), %ebx
2021*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2022*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2023*8d67ca89SAndroid Build Coastguard WorkerL(36bytes):
2024*8d67ca89SAndroid Build Coastguard Worker	mov	-36(%eax), %ecx
2025*8d67ca89SAndroid Build Coastguard Worker	mov	-36(%edx), %ebx
2026*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2027*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2028*8d67ca89SAndroid Build Coastguard WorkerL(32bytes):
2029*8d67ca89SAndroid Build Coastguard Worker	mov	-32(%eax), %ecx
2030*8d67ca89SAndroid Build Coastguard Worker	mov	-32(%edx), %ebx
2031*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2032*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2033*8d67ca89SAndroid Build Coastguard WorkerL(28bytes):
2034*8d67ca89SAndroid Build Coastguard Worker	mov	-28(%eax), %ecx
2035*8d67ca89SAndroid Build Coastguard Worker	mov	-28(%edx), %ebx
2036*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2037*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2038*8d67ca89SAndroid Build Coastguard WorkerL(24bytes):
2039*8d67ca89SAndroid Build Coastguard Worker	mov	-24(%eax), %ecx
2040*8d67ca89SAndroid Build Coastguard Worker	mov	-24(%edx), %ebx
2041*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2042*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2043*8d67ca89SAndroid Build Coastguard WorkerL(20bytes):
2044*8d67ca89SAndroid Build Coastguard Worker	mov	-20(%eax), %ecx
2045*8d67ca89SAndroid Build Coastguard Worker	mov	-20(%edx), %ebx
2046*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2047*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2048*8d67ca89SAndroid Build Coastguard WorkerL(16bytes):
2049*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%eax), %ecx
2050*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%edx), %ebx
2051*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2052*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2053*8d67ca89SAndroid Build Coastguard WorkerL(12bytes):
2054*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%eax), %ecx
2055*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%edx), %ebx
2056*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2057*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2058*8d67ca89SAndroid Build Coastguard WorkerL(8bytes):
2059*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%eax), %ecx
2060*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%edx), %ebx
2061*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2062*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2063*8d67ca89SAndroid Build Coastguard WorkerL(4bytes):
2064*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%eax), %ecx
2065*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%edx), %ebx
2066*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2067*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
2068*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2069*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2070*8d67ca89SAndroid Build Coastguard Worker	ret
2071*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx)
2072*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_WMEMCMP)
2073*8d67ca89SAndroid Build Coastguard Worker
2074*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2075*8d67ca89SAndroid Build Coastguard WorkerL(44bytes):
2076*8d67ca89SAndroid Build Coastguard Worker	mov	-44(%eax), %ecx
2077*8d67ca89SAndroid Build Coastguard Worker	cmp	-44(%edx), %ecx
2078*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2079*8d67ca89SAndroid Build Coastguard WorkerL(40bytes):
2080*8d67ca89SAndroid Build Coastguard Worker	mov	-40(%eax), %ecx
2081*8d67ca89SAndroid Build Coastguard Worker	cmp	-40(%edx), %ecx
2082*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2083*8d67ca89SAndroid Build Coastguard WorkerL(36bytes):
2084*8d67ca89SAndroid Build Coastguard Worker	mov	-36(%eax), %ecx
2085*8d67ca89SAndroid Build Coastguard Worker	cmp	-36(%edx), %ecx
2086*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2087*8d67ca89SAndroid Build Coastguard WorkerL(32bytes):
2088*8d67ca89SAndroid Build Coastguard Worker	mov	-32(%eax), %ecx
2089*8d67ca89SAndroid Build Coastguard Worker	cmp	-32(%edx), %ecx
2090*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2091*8d67ca89SAndroid Build Coastguard WorkerL(28bytes):
2092*8d67ca89SAndroid Build Coastguard Worker	mov	-28(%eax), %ecx
2093*8d67ca89SAndroid Build Coastguard Worker	cmp	-28(%edx), %ecx
2094*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2095*8d67ca89SAndroid Build Coastguard WorkerL(24bytes):
2096*8d67ca89SAndroid Build Coastguard Worker	mov	-24(%eax), %ecx
2097*8d67ca89SAndroid Build Coastguard Worker	cmp	-24(%edx), %ecx
2098*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2099*8d67ca89SAndroid Build Coastguard WorkerL(20bytes):
2100*8d67ca89SAndroid Build Coastguard Worker	mov	-20(%eax), %ecx
2101*8d67ca89SAndroid Build Coastguard Worker	cmp	-20(%edx), %ecx
2102*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2103*8d67ca89SAndroid Build Coastguard WorkerL(16bytes):
2104*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%eax), %ecx
2105*8d67ca89SAndroid Build Coastguard Worker	cmp	-16(%edx), %ecx
2106*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2107*8d67ca89SAndroid Build Coastguard WorkerL(12bytes):
2108*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%eax), %ecx
2109*8d67ca89SAndroid Build Coastguard Worker	cmp	-12(%edx), %ecx
2110*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2111*8d67ca89SAndroid Build Coastguard WorkerL(8bytes):
2112*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%eax), %ecx
2113*8d67ca89SAndroid Build Coastguard Worker	cmp	-8(%edx), %ecx
2114*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2115*8d67ca89SAndroid Build Coastguard WorkerL(4bytes):
2116*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%eax), %ecx
2117*8d67ca89SAndroid Build Coastguard Worker	xor	%eax, %eax
2118*8d67ca89SAndroid Build Coastguard Worker	cmp	-4(%edx), %ecx
2119*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2120*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2121*8d67ca89SAndroid Build Coastguard Worker	ret
2122*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx)
2123*8d67ca89SAndroid Build Coastguard Worker#elif defined USE_AS_MEMCMP16
2124*8d67ca89SAndroid Build Coastguard Worker
2125*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2126*8d67ca89SAndroid Build Coastguard WorkerL(46bytes):
2127*8d67ca89SAndroid Build Coastguard Worker	movzwl	-46(%eax), %ecx
2128*8d67ca89SAndroid Build Coastguard Worker	movzwl	-46(%edx), %ebx
2129*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2130*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2131*8d67ca89SAndroid Build Coastguard WorkerL(44bytes):
2132*8d67ca89SAndroid Build Coastguard Worker	movzwl	-44(%eax), %ecx
2133*8d67ca89SAndroid Build Coastguard Worker	movzwl	-44(%edx), %ebx
2134*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2135*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2136*8d67ca89SAndroid Build Coastguard WorkerL(42bytes):
2137*8d67ca89SAndroid Build Coastguard Worker	movzwl	-42(%eax), %ecx
2138*8d67ca89SAndroid Build Coastguard Worker	movzwl	-42(%edx), %ebx
2139*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2140*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2141*8d67ca89SAndroid Build Coastguard WorkerL(40bytes):
2142*8d67ca89SAndroid Build Coastguard Worker	movzwl	-40(%eax), %ecx
2143*8d67ca89SAndroid Build Coastguard Worker	movzwl	-40(%edx), %ebx
2144*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2145*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2146*8d67ca89SAndroid Build Coastguard WorkerL(38bytes):
2147*8d67ca89SAndroid Build Coastguard Worker	movzwl	-38(%eax), %ecx
2148*8d67ca89SAndroid Build Coastguard Worker	movzwl	-38(%edx), %ebx
2149*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2150*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2151*8d67ca89SAndroid Build Coastguard WorkerL(36bytes):
2152*8d67ca89SAndroid Build Coastguard Worker	movzwl	-36(%eax), %ecx
2153*8d67ca89SAndroid Build Coastguard Worker	movzwl	-36(%edx), %ebx
2154*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2155*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2156*8d67ca89SAndroid Build Coastguard WorkerL(34bytes):
2157*8d67ca89SAndroid Build Coastguard Worker	movzwl	-34(%eax), %ecx
2158*8d67ca89SAndroid Build Coastguard Worker	movzwl	-34(%edx), %ebx
2159*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2160*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2161*8d67ca89SAndroid Build Coastguard WorkerL(32bytes):
2162*8d67ca89SAndroid Build Coastguard Worker	movzwl	-32(%eax), %ecx
2163*8d67ca89SAndroid Build Coastguard Worker	movzwl	-32(%edx), %ebx
2164*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2165*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2166*8d67ca89SAndroid Build Coastguard WorkerL(30bytes):
2167*8d67ca89SAndroid Build Coastguard Worker	movzwl	-30(%eax), %ecx
2168*8d67ca89SAndroid Build Coastguard Worker	movzwl	-30(%edx), %ebx
2169*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2170*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2171*8d67ca89SAndroid Build Coastguard WorkerL(28bytes):
2172*8d67ca89SAndroid Build Coastguard Worker	movzwl	-28(%eax), %ecx
2173*8d67ca89SAndroid Build Coastguard Worker	movzwl	-28(%edx), %ebx
2174*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2175*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2176*8d67ca89SAndroid Build Coastguard WorkerL(26bytes):
2177*8d67ca89SAndroid Build Coastguard Worker	movzwl	-26(%eax), %ecx
2178*8d67ca89SAndroid Build Coastguard Worker	movzwl	-26(%edx), %ebx
2179*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2180*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2181*8d67ca89SAndroid Build Coastguard WorkerL(24bytes):
2182*8d67ca89SAndroid Build Coastguard Worker	movzwl	-24(%eax), %ecx
2183*8d67ca89SAndroid Build Coastguard Worker	movzwl	-24(%edx), %ebx
2184*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2185*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2186*8d67ca89SAndroid Build Coastguard WorkerL(22bytes):
2187*8d67ca89SAndroid Build Coastguard Worker	movzwl	-22(%eax), %ecx
2188*8d67ca89SAndroid Build Coastguard Worker	movzwl	-22(%edx), %ebx
2189*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2190*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2191*8d67ca89SAndroid Build Coastguard WorkerL(20bytes):
2192*8d67ca89SAndroid Build Coastguard Worker	movzwl	-20(%eax), %ecx
2193*8d67ca89SAndroid Build Coastguard Worker	movzwl	-20(%edx), %ebx
2194*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2195*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2196*8d67ca89SAndroid Build Coastguard WorkerL(18bytes):
2197*8d67ca89SAndroid Build Coastguard Worker	movzwl	-18(%eax), %ecx
2198*8d67ca89SAndroid Build Coastguard Worker	movzwl	-18(%edx), %ebx
2199*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2200*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2201*8d67ca89SAndroid Build Coastguard WorkerL(16bytes):
2202*8d67ca89SAndroid Build Coastguard Worker	movzwl	-16(%eax), %ecx
2203*8d67ca89SAndroid Build Coastguard Worker	movzwl	-16(%edx), %ebx
2204*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2205*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2206*8d67ca89SAndroid Build Coastguard WorkerL(14bytes):
2207*8d67ca89SAndroid Build Coastguard Worker	movzwl	-14(%eax), %ecx
2208*8d67ca89SAndroid Build Coastguard Worker	movzwl	-14(%edx), %ebx
2209*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2210*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2211*8d67ca89SAndroid Build Coastguard WorkerL(12bytes):
2212*8d67ca89SAndroid Build Coastguard Worker	movzwl	-12(%eax), %ecx
2213*8d67ca89SAndroid Build Coastguard Worker	movzwl	-12(%edx), %ebx
2214*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2215*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2216*8d67ca89SAndroid Build Coastguard WorkerL(10bytes):
2217*8d67ca89SAndroid Build Coastguard Worker	movzwl	-10(%eax), %ecx
2218*8d67ca89SAndroid Build Coastguard Worker	movzwl	-10(%edx), %ebx
2219*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2220*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2221*8d67ca89SAndroid Build Coastguard WorkerL(8bytes):
2222*8d67ca89SAndroid Build Coastguard Worker	movzwl	-8(%eax), %ecx
2223*8d67ca89SAndroid Build Coastguard Worker	movzwl	-8(%edx), %ebx
2224*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2225*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2226*8d67ca89SAndroid Build Coastguard WorkerL(6bytes):
2227*8d67ca89SAndroid Build Coastguard Worker	movzwl	-6(%eax), %ecx
2228*8d67ca89SAndroid Build Coastguard Worker	movzwl	-6(%edx), %ebx
2229*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2230*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2231*8d67ca89SAndroid Build Coastguard WorkerL(4bytes):
2232*8d67ca89SAndroid Build Coastguard Worker	movzwl	-4(%eax), %ecx
2233*8d67ca89SAndroid Build Coastguard Worker	movzwl	-4(%edx), %ebx
2234*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %ecx
2235*8d67ca89SAndroid Build Coastguard Worker	jne	L(memcmp16_exit)
2236*8d67ca89SAndroid Build Coastguard WorkerL(2bytes):
2237*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%eax), %eax
2238*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%edx), %ebx
2239*8d67ca89SAndroid Build Coastguard Worker	subl	%ebx, %eax
2240*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2241*8d67ca89SAndroid Build Coastguard Worker	ret
2242*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx)
2243*8d67ca89SAndroid Build Coastguard Worker#else
2244*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case
2245*8d67ca89SAndroid Build Coastguard Worker#endif
2246*8d67ca89SAndroid Build Coastguard Worker
2247*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_AS_WMEMCMP) && !defined(USE_AS_MEMCMP16)
2248*8d67ca89SAndroid Build Coastguard Worker
2249*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2250*8d67ca89SAndroid Build Coastguard WorkerL(45bytes):
2251*8d67ca89SAndroid Build Coastguard Worker	mov	-45(%eax), %ecx
2252*8d67ca89SAndroid Build Coastguard Worker	mov	-45(%edx), %ebx
2253*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2254*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2255*8d67ca89SAndroid Build Coastguard WorkerL(41bytes):
2256*8d67ca89SAndroid Build Coastguard Worker	mov	-41(%eax), %ecx
2257*8d67ca89SAndroid Build Coastguard Worker	mov	-41(%edx), %ebx
2258*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2259*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2260*8d67ca89SAndroid Build Coastguard WorkerL(37bytes):
2261*8d67ca89SAndroid Build Coastguard Worker	mov	-37(%eax), %ecx
2262*8d67ca89SAndroid Build Coastguard Worker	mov	-37(%edx), %ebx
2263*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2264*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2265*8d67ca89SAndroid Build Coastguard WorkerL(33bytes):
2266*8d67ca89SAndroid Build Coastguard Worker	mov	-33(%eax), %ecx
2267*8d67ca89SAndroid Build Coastguard Worker	mov	-33(%edx), %ebx
2268*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2269*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2270*8d67ca89SAndroid Build Coastguard WorkerL(29bytes):
2271*8d67ca89SAndroid Build Coastguard Worker	mov	-29(%eax), %ecx
2272*8d67ca89SAndroid Build Coastguard Worker	mov	-29(%edx), %ebx
2273*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2274*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2275*8d67ca89SAndroid Build Coastguard WorkerL(25bytes):
2276*8d67ca89SAndroid Build Coastguard Worker	mov	-25(%eax), %ecx
2277*8d67ca89SAndroid Build Coastguard Worker	mov	-25(%edx), %ebx
2278*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2279*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2280*8d67ca89SAndroid Build Coastguard WorkerL(21bytes):
2281*8d67ca89SAndroid Build Coastguard Worker	mov	-21(%eax), %ecx
2282*8d67ca89SAndroid Build Coastguard Worker	mov	-21(%edx), %ebx
2283*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2284*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2285*8d67ca89SAndroid Build Coastguard WorkerL(17bytes):
2286*8d67ca89SAndroid Build Coastguard Worker	mov	-17(%eax), %ecx
2287*8d67ca89SAndroid Build Coastguard Worker	mov	-17(%edx), %ebx
2288*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2289*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2290*8d67ca89SAndroid Build Coastguard WorkerL(13bytes):
2291*8d67ca89SAndroid Build Coastguard Worker	mov	-13(%eax), %ecx
2292*8d67ca89SAndroid Build Coastguard Worker	mov	-13(%edx), %ebx
2293*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2294*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2295*8d67ca89SAndroid Build Coastguard WorkerL(9bytes):
2296*8d67ca89SAndroid Build Coastguard Worker	mov	-9(%eax), %ecx
2297*8d67ca89SAndroid Build Coastguard Worker	mov	-9(%edx), %ebx
2298*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2299*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2300*8d67ca89SAndroid Build Coastguard WorkerL(5bytes):
2301*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%eax), %ecx
2302*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%edx), %ebx
2303*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2304*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2305*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %ecx
2306*8d67ca89SAndroid Build Coastguard Worker	cmp	-1(%edx), %cl
2307*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
2308*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2309*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2310*8d67ca89SAndroid Build Coastguard Worker	ret
2311*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx)
2312*8d67ca89SAndroid Build Coastguard Worker
2313*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2314*8d67ca89SAndroid Build Coastguard WorkerL(46bytes):
2315*8d67ca89SAndroid Build Coastguard Worker	mov	-46(%eax), %ecx
2316*8d67ca89SAndroid Build Coastguard Worker	mov	-46(%edx), %ebx
2317*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2318*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2319*8d67ca89SAndroid Build Coastguard WorkerL(42bytes):
2320*8d67ca89SAndroid Build Coastguard Worker	mov	-42(%eax), %ecx
2321*8d67ca89SAndroid Build Coastguard Worker	mov	-42(%edx), %ebx
2322*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2323*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2324*8d67ca89SAndroid Build Coastguard WorkerL(38bytes):
2325*8d67ca89SAndroid Build Coastguard Worker	mov	-38(%eax), %ecx
2326*8d67ca89SAndroid Build Coastguard Worker	mov	-38(%edx), %ebx
2327*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2328*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2329*8d67ca89SAndroid Build Coastguard WorkerL(34bytes):
2330*8d67ca89SAndroid Build Coastguard Worker	mov	-34(%eax), %ecx
2331*8d67ca89SAndroid Build Coastguard Worker	mov	-34(%edx), %ebx
2332*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2333*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2334*8d67ca89SAndroid Build Coastguard WorkerL(30bytes):
2335*8d67ca89SAndroid Build Coastguard Worker	mov	-30(%eax), %ecx
2336*8d67ca89SAndroid Build Coastguard Worker	mov	-30(%edx), %ebx
2337*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2338*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2339*8d67ca89SAndroid Build Coastguard WorkerL(26bytes):
2340*8d67ca89SAndroid Build Coastguard Worker	mov	-26(%eax), %ecx
2341*8d67ca89SAndroid Build Coastguard Worker	mov	-26(%edx), %ebx
2342*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2343*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2344*8d67ca89SAndroid Build Coastguard WorkerL(22bytes):
2345*8d67ca89SAndroid Build Coastguard Worker	mov	-22(%eax), %ecx
2346*8d67ca89SAndroid Build Coastguard Worker	mov	-22(%edx), %ebx
2347*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2348*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2349*8d67ca89SAndroid Build Coastguard WorkerL(18bytes):
2350*8d67ca89SAndroid Build Coastguard Worker	mov	-18(%eax), %ecx
2351*8d67ca89SAndroid Build Coastguard Worker	mov	-18(%edx), %ebx
2352*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2353*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2354*8d67ca89SAndroid Build Coastguard WorkerL(14bytes):
2355*8d67ca89SAndroid Build Coastguard Worker	mov	-14(%eax), %ecx
2356*8d67ca89SAndroid Build Coastguard Worker	mov	-14(%edx), %ebx
2357*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2358*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2359*8d67ca89SAndroid Build Coastguard WorkerL(10bytes):
2360*8d67ca89SAndroid Build Coastguard Worker	mov	-10(%eax), %ecx
2361*8d67ca89SAndroid Build Coastguard Worker	mov	-10(%edx), %ebx
2362*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2363*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2364*8d67ca89SAndroid Build Coastguard WorkerL(6bytes):
2365*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%eax), %ecx
2366*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%edx), %ebx
2367*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2368*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2369*8d67ca89SAndroid Build Coastguard WorkerL(2bytes):
2370*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%eax), %ecx
2371*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%edx), %ebx
2372*8d67ca89SAndroid Build Coastguard Worker	cmp	%bl, %cl
2373*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2374*8d67ca89SAndroid Build Coastguard Worker	cmp	%bh, %ch
2375*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
2376*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2377*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2378*8d67ca89SAndroid Build Coastguard Worker	ret
2379*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx)
2380*8d67ca89SAndroid Build Coastguard Worker
2381*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2382*8d67ca89SAndroid Build Coastguard WorkerL(47bytes):
2383*8d67ca89SAndroid Build Coastguard Worker	movl	-47(%eax), %ecx
2384*8d67ca89SAndroid Build Coastguard Worker	movl	-47(%edx), %ebx
2385*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2386*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2387*8d67ca89SAndroid Build Coastguard WorkerL(43bytes):
2388*8d67ca89SAndroid Build Coastguard Worker	movl	-43(%eax), %ecx
2389*8d67ca89SAndroid Build Coastguard Worker	movl	-43(%edx), %ebx
2390*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2391*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2392*8d67ca89SAndroid Build Coastguard WorkerL(39bytes):
2393*8d67ca89SAndroid Build Coastguard Worker	movl	-39(%eax), %ecx
2394*8d67ca89SAndroid Build Coastguard Worker	movl	-39(%edx), %ebx
2395*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2396*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2397*8d67ca89SAndroid Build Coastguard WorkerL(35bytes):
2398*8d67ca89SAndroid Build Coastguard Worker	movl	-35(%eax), %ecx
2399*8d67ca89SAndroid Build Coastguard Worker	movl	-35(%edx), %ebx
2400*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2401*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2402*8d67ca89SAndroid Build Coastguard WorkerL(31bytes):
2403*8d67ca89SAndroid Build Coastguard Worker	movl	-31(%eax), %ecx
2404*8d67ca89SAndroid Build Coastguard Worker	movl	-31(%edx), %ebx
2405*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2406*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2407*8d67ca89SAndroid Build Coastguard WorkerL(27bytes):
2408*8d67ca89SAndroid Build Coastguard Worker	movl	-27(%eax), %ecx
2409*8d67ca89SAndroid Build Coastguard Worker	movl	-27(%edx), %ebx
2410*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2411*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2412*8d67ca89SAndroid Build Coastguard WorkerL(23bytes):
2413*8d67ca89SAndroid Build Coastguard Worker	movl	-23(%eax), %ecx
2414*8d67ca89SAndroid Build Coastguard Worker	movl	-23(%edx), %ebx
2415*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2416*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2417*8d67ca89SAndroid Build Coastguard WorkerL(19bytes):
2418*8d67ca89SAndroid Build Coastguard Worker	movl	-19(%eax), %ecx
2419*8d67ca89SAndroid Build Coastguard Worker	movl	-19(%edx), %ebx
2420*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2421*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2422*8d67ca89SAndroid Build Coastguard WorkerL(15bytes):
2423*8d67ca89SAndroid Build Coastguard Worker	movl	-15(%eax), %ecx
2424*8d67ca89SAndroid Build Coastguard Worker	movl	-15(%edx), %ebx
2425*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2426*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2427*8d67ca89SAndroid Build Coastguard WorkerL(11bytes):
2428*8d67ca89SAndroid Build Coastguard Worker	movl	-11(%eax), %ecx
2429*8d67ca89SAndroid Build Coastguard Worker	movl	-11(%edx), %ebx
2430*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2431*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2432*8d67ca89SAndroid Build Coastguard WorkerL(7bytes):
2433*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%eax), %ecx
2434*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%edx), %ebx
2435*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
2436*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
2437*8d67ca89SAndroid Build Coastguard WorkerL(3bytes):
2438*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%eax), %ecx
2439*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%edx), %ebx
2440*8d67ca89SAndroid Build Coastguard Worker	cmpb	%bl, %cl
2441*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2442*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
2443*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2444*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %eax
2445*8d67ca89SAndroid Build Coastguard Worker	cmpb	-1(%edx), %al
2446*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
2447*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2448*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2449*8d67ca89SAndroid Build Coastguard Worker	ret
2450*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx)
2451*8d67ca89SAndroid Build Coastguard Worker
2452*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2453*8d67ca89SAndroid Build Coastguard WorkerL(find_diff):
2454*8d67ca89SAndroid Build Coastguard Worker	cmpb	%bl, %cl
2455*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2456*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
2457*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2458*8d67ca89SAndroid Build Coastguard Worker	shr	$16,%ecx
2459*8d67ca89SAndroid Build Coastguard Worker	shr	$16,%ebx
2460*8d67ca89SAndroid Build Coastguard Worker	cmp	%bl, %cl
2461*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
2462*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
2463*8d67ca89SAndroid Build Coastguard Worker
2464*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2465*8d67ca89SAndroid Build Coastguard WorkerL(end):
2466*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2467*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
2468*8d67ca89SAndroid Build Coastguard Worker	ja	L(bigger)
2469*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
2470*8d67ca89SAndroid Build Coastguard WorkerL(bigger):
2471*8d67ca89SAndroid Build Coastguard Worker	ret
2472*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_WMEMCMP)
2473*8d67ca89SAndroid Build Coastguard Worker
2474*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2475*8d67ca89SAndroid Build Coastguard WorkerL(find_diff):
2476*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2477*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
2478*8d67ca89SAndroid Build Coastguard Worker	jg	L(find_diff_bigger)
2479*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
2480*8d67ca89SAndroid Build Coastguard Worker	ret
2481*8d67ca89SAndroid Build Coastguard Worker
2482*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2483*8d67ca89SAndroid Build Coastguard WorkerL(find_diff_bigger):
2484*8d67ca89SAndroid Build Coastguard Worker	ret
2485*8d67ca89SAndroid Build Coastguard Worker
2486*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_MEMCMP16)
2487*8d67ca89SAndroid Build Coastguard Worker
2488*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2489*8d67ca89SAndroid Build Coastguard WorkerL(memcmp16_exit):
2490*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
2491*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
2492*8d67ca89SAndroid Build Coastguard Worker	ret
2493*8d67ca89SAndroid Build Coastguard Worker#else
2494*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case
2495*8d67ca89SAndroid Build Coastguard Worker#endif
2496*8d67ca89SAndroid Build Coastguard WorkerEND (MEMCMP)
2497