xref: /aosp_15_r20/bionic/libc/arch-x86/string/sse4-memcmp-slm.S (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker/*
2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2014, 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_sse4
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	POP (%ebx); ret; CFI_PUSH (%ebx)
98*8d67ca89SAndroid Build Coastguard Worker
99*8d67ca89SAndroid Build Coastguard Worker
100*8d67ca89SAndroid Build Coastguard Worker#if (defined SHARED || defined __PIC__)
101*8d67ca89SAndroid Build Coastguard Worker# define JMPTBL(I, B)	I - B
102*8d67ca89SAndroid Build Coastguard Worker
103*8d67ca89SAndroid Build Coastguard Worker/* Load an entry in a jump table into EBX and branch to it.  TABLE is a
104*8d67ca89SAndroid Build Coastguard Worker	jump	table with relative offsets.  INDEX is a register contains the
105*8d67ca89SAndroid Build Coastguard Worker	index	into the jump table.   SCALE is the scale of INDEX. */
106*8d67ca89SAndroid Build Coastguard Worker
107*8d67ca89SAndroid Build Coastguard Worker# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE)	\
108*8d67ca89SAndroid Build Coastguard Worker/* We first load PC into EBX.  */	\
109*8d67ca89SAndroid Build Coastguard Worker	call	__x86.get_pc_thunk.bx;	\
110*8d67ca89SAndroid Build Coastguard Worker/* Get the address of the jump table.  */	\
111*8d67ca89SAndroid Build Coastguard Worker	addl	$(TABLE - .), %ebx;	\
112*8d67ca89SAndroid Build Coastguard Worker/* Get the entry and convert the relative offset to the	\
113*8d67ca89SAndroid Build Coastguard Worker	absolute	address.  */	\
114*8d67ca89SAndroid Build Coastguard Worker	addl	(%ebx,INDEX,SCALE), %ebx;	\
115*8d67ca89SAndroid Build Coastguard Worker/* We loaded the jump table and adjuested EDX/ESI. Go.  */	\
116*8d67ca89SAndroid Build Coastguard Worker	jmp	*%ebx
117*8d67ca89SAndroid Build Coastguard Worker#else
118*8d67ca89SAndroid Build Coastguard Worker# define JMPTBL(I, B)	I
119*8d67ca89SAndroid Build Coastguard Worker
120*8d67ca89SAndroid Build Coastguard Worker/* Load an entry in a jump table into EBX and branch to it.  TABLE is a
121*8d67ca89SAndroid Build Coastguard Worker	jump	table with relative offsets.  INDEX is a register contains the
122*8d67ca89SAndroid Build Coastguard Worker	index	into the jump table.   SCALE is the scale of INDEX. */
123*8d67ca89SAndroid Build Coastguard Worker# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE)	\
124*8d67ca89SAndroid Build Coastguard Worker	jmp	*TABLE(,INDEX,SCALE)
125*8d67ca89SAndroid Build Coastguard Worker#endif
126*8d67ca89SAndroid Build Coastguard Worker
127*8d67ca89SAndroid Build Coastguard Worker
128*8d67ca89SAndroid Build Coastguard Worker/* Warning!
129*8d67ca89SAndroid Build Coastguard Worker           wmemcmp has to use SIGNED comparison for elements.
130*8d67ca89SAndroid Build Coastguard Worker           memcmp has to use UNSIGNED comparison for elemnts.
131*8d67ca89SAndroid Build Coastguard Worker*/
132*8d67ca89SAndroid Build Coastguard Worker
133*8d67ca89SAndroid Build Coastguard Worker	.section .text.sse4.2,"ax",@progbits
134*8d67ca89SAndroid Build Coastguard WorkerENTRY (MEMCMP)
135*8d67ca89SAndroid Build Coastguard Worker	movl	BLK1(%esp), %eax
136*8d67ca89SAndroid Build Coastguard Worker	movl	BLK2(%esp), %edx
137*8d67ca89SAndroid Build Coastguard Worker	movl	LEN(%esp), %ecx
138*8d67ca89SAndroid Build Coastguard Worker
139*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_WMEMCMP
140*8d67ca89SAndroid Build Coastguard Worker	shl	$2, %ecx
141*8d67ca89SAndroid Build Coastguard Worker	test	%ecx, %ecx
142*8d67ca89SAndroid Build Coastguard Worker	jz	L(return0)
143*8d67ca89SAndroid Build Coastguard Worker#else
144*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %ecx
145*8d67ca89SAndroid Build Coastguard Worker	jbe	L(less1bytes)
146*8d67ca89SAndroid Build Coastguard Worker#endif
147*8d67ca89SAndroid Build Coastguard Worker
148*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
149*8d67ca89SAndroid Build Coastguard Worker	cmp	$64, %ecx
150*8d67ca89SAndroid Build Coastguard Worker	ja	L(64bytesormore)
151*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ecx
152*8d67ca89SAndroid Build Coastguard Worker
153*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
154*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%ebx)
155*8d67ca89SAndroid Build Coastguard Worker	jb	L(less8bytes)
156*8d67ca89SAndroid Build Coastguard Worker#else
157*8d67ca89SAndroid Build Coastguard Worker	jb	L(less8bytes)
158*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%ebx)
159*8d67ca89SAndroid Build Coastguard Worker#endif
160*8d67ca89SAndroid Build Coastguard Worker
161*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %edx
162*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %eax
163*8d67ca89SAndroid Build Coastguard Worker	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %ecx, 4)
164*8d67ca89SAndroid Build Coastguard Worker
165*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
166*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
167*8d67ca89SAndroid Build Coastguard WorkerL(less8bytes):
168*8d67ca89SAndroid Build Coastguard Worker	mov	(%eax), %bl
169*8d67ca89SAndroid Build Coastguard Worker	cmpb	(%edx), %bl
170*8d67ca89SAndroid Build Coastguard Worker	jne	L(nonzero)
171*8d67ca89SAndroid Build Coastguard Worker
172*8d67ca89SAndroid Build Coastguard Worker	mov	1(%eax), %bl
173*8d67ca89SAndroid Build Coastguard Worker	cmpb	1(%edx), %bl
174*8d67ca89SAndroid Build Coastguard Worker	jne	L(nonzero)
175*8d67ca89SAndroid Build Coastguard Worker
176*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ecx
177*8d67ca89SAndroid Build Coastguard Worker	jz	L(0bytes)
178*8d67ca89SAndroid Build Coastguard Worker
179*8d67ca89SAndroid Build Coastguard Worker	mov	2(%eax), %bl
180*8d67ca89SAndroid Build Coastguard Worker	cmpb	2(%edx), %bl
181*8d67ca89SAndroid Build Coastguard Worker	jne	L(nonzero)
182*8d67ca89SAndroid Build Coastguard Worker
183*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %ecx
184*8d67ca89SAndroid Build Coastguard Worker	jz	L(0bytes)
185*8d67ca89SAndroid Build Coastguard Worker
186*8d67ca89SAndroid Build Coastguard Worker	mov	3(%eax), %bl
187*8d67ca89SAndroid Build Coastguard Worker	cmpb	3(%edx), %bl
188*8d67ca89SAndroid Build Coastguard Worker	jne	L(nonzero)
189*8d67ca89SAndroid Build Coastguard Worker
190*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ecx
191*8d67ca89SAndroid Build Coastguard Worker	jz	L(0bytes)
192*8d67ca89SAndroid Build Coastguard Worker
193*8d67ca89SAndroid Build Coastguard Worker	mov	4(%eax), %bl
194*8d67ca89SAndroid Build Coastguard Worker	cmpb	4(%edx), %bl
195*8d67ca89SAndroid Build Coastguard Worker	jne	L(nonzero)
196*8d67ca89SAndroid Build Coastguard Worker
197*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %ecx
198*8d67ca89SAndroid Build Coastguard Worker	jz	L(0bytes)
199*8d67ca89SAndroid Build Coastguard Worker
200*8d67ca89SAndroid Build Coastguard Worker	mov	5(%eax), %bl
201*8d67ca89SAndroid Build Coastguard Worker	cmpb	5(%edx), %bl
202*8d67ca89SAndroid Build Coastguard Worker	jne	L(nonzero)
203*8d67ca89SAndroid Build Coastguard Worker
204*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ecx
205*8d67ca89SAndroid Build Coastguard Worker	jz	L(0bytes)
206*8d67ca89SAndroid Build Coastguard Worker
207*8d67ca89SAndroid Build Coastguard Worker	mov	6(%eax), %bl
208*8d67ca89SAndroid Build Coastguard Worker	cmpb	6(%edx), %bl
209*8d67ca89SAndroid Build Coastguard Worker	je	L(0bytes)
210*8d67ca89SAndroid Build Coastguard Worker
211*8d67ca89SAndroid Build Coastguard WorkerL(nonzero):
212*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
213*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
214*8d67ca89SAndroid Build Coastguard Worker	ja	L(above)
215*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
216*8d67ca89SAndroid Build Coastguard WorkerL(above):
217*8d67ca89SAndroid Build Coastguard Worker	ret
218*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx)
219*8d67ca89SAndroid Build Coastguard Worker#endif
220*8d67ca89SAndroid Build Coastguard Worker
221*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
222*8d67ca89SAndroid Build Coastguard WorkerL(0bytes):
223*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
224*8d67ca89SAndroid Build Coastguard Worker	xor	%eax, %eax
225*8d67ca89SAndroid Build Coastguard Worker	ret
226*8d67ca89SAndroid Build Coastguard Worker
227*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_WMEMCMP
228*8d67ca89SAndroid Build Coastguard Worker
229*8d67ca89SAndroid Build Coastguard Worker/* for wmemcmp, case N == 1 */
230*8d67ca89SAndroid Build Coastguard Worker
231*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
232*8d67ca89SAndroid Build Coastguard WorkerL(less8bytes):
233*8d67ca89SAndroid Build Coastguard Worker	mov	(%eax), %ecx
234*8d67ca89SAndroid Build Coastguard Worker	cmp	(%edx), %ecx
235*8d67ca89SAndroid Build Coastguard Worker	je	L(return0)
236*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
237*8d67ca89SAndroid Build Coastguard Worker	jg	L(find_diff_bigger)
238*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
239*8d67ca89SAndroid Build Coastguard Worker	ret
240*8d67ca89SAndroid Build Coastguard Worker
241*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
242*8d67ca89SAndroid Build Coastguard WorkerL(find_diff_bigger):
243*8d67ca89SAndroid Build Coastguard Worker	ret
244*8d67ca89SAndroid Build Coastguard Worker
245*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
246*8d67ca89SAndroid Build Coastguard WorkerL(return0):
247*8d67ca89SAndroid Build Coastguard Worker	xor	%eax, %eax
248*8d67ca89SAndroid Build Coastguard Worker	ret
249*8d67ca89SAndroid Build Coastguard Worker#endif
250*8d67ca89SAndroid Build Coastguard Worker
251*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
252*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
253*8d67ca89SAndroid Build Coastguard WorkerL(less1bytes):
254*8d67ca89SAndroid Build Coastguard Worker	jb	L(0bytesend)
255*8d67ca89SAndroid Build Coastguard Worker	movzbl	(%eax), %eax
256*8d67ca89SAndroid Build Coastguard Worker	movzbl	(%edx), %edx
257*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
258*8d67ca89SAndroid Build Coastguard Worker	ret
259*8d67ca89SAndroid Build Coastguard Worker
260*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
261*8d67ca89SAndroid Build Coastguard WorkerL(0bytesend):
262*8d67ca89SAndroid Build Coastguard Worker	xor	%eax, %eax
263*8d67ca89SAndroid Build Coastguard Worker	ret
264*8d67ca89SAndroid Build Coastguard Worker#endif
265*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
266*8d67ca89SAndroid Build Coastguard WorkerL(64bytesormore):
267*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%ebx)
268*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %ebx
269*8d67ca89SAndroid Build Coastguard Worker	mov	$64, %ecx
270*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
271*8d67ca89SAndroid Build Coastguard WorkerL(64bytesormore_loop):
272*8d67ca89SAndroid Build Coastguard Worker	movdqu	(%eax), %xmm1
273*8d67ca89SAndroid Build Coastguard Worker	movdqu	(%edx), %xmm2
274*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
275*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
276*8d67ca89SAndroid Build Coastguard Worker	jnc	L(find_16diff)
277*8d67ca89SAndroid Build Coastguard Worker
278*8d67ca89SAndroid Build Coastguard Worker	movdqu	16(%eax), %xmm1
279*8d67ca89SAndroid Build Coastguard Worker	movdqu	16(%edx), %xmm2
280*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
281*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
282*8d67ca89SAndroid Build Coastguard Worker	jnc	L(find_32diff)
283*8d67ca89SAndroid Build Coastguard Worker
284*8d67ca89SAndroid Build Coastguard Worker	movdqu	32(%eax), %xmm1
285*8d67ca89SAndroid Build Coastguard Worker	movdqu	32(%edx), %xmm2
286*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
287*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
288*8d67ca89SAndroid Build Coastguard Worker	jnc	L(find_48diff)
289*8d67ca89SAndroid Build Coastguard Worker
290*8d67ca89SAndroid Build Coastguard Worker	movdqu	48(%eax), %xmm1
291*8d67ca89SAndroid Build Coastguard Worker	movdqu	48(%edx), %xmm2
292*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
293*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
294*8d67ca89SAndroid Build Coastguard Worker	jnc	L(find_64diff)
295*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %eax
296*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %edx
297*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %ebx
298*8d67ca89SAndroid Build Coastguard Worker	jae	L(64bytesormore_loop)
299*8d67ca89SAndroid Build Coastguard Worker	add	%ebx, %ecx
300*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %edx
301*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %eax
302*8d67ca89SAndroid Build Coastguard Worker	BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %ecx, 4)
303*8d67ca89SAndroid Build Coastguard Worker
304*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_WMEMCMP
305*8d67ca89SAndroid Build Coastguard Worker
306*8d67ca89SAndroid Build Coastguard Worker/* Label needs only for table_64bytes filling */
307*8d67ca89SAndroid Build Coastguard WorkerL(unreal_case):
308*8d67ca89SAndroid Build Coastguard Worker/* no code here */
309*8d67ca89SAndroid Build Coastguard Worker
310*8d67ca89SAndroid Build Coastguard Worker#endif
311*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
312*8d67ca89SAndroid Build Coastguard WorkerL(find_16diff):
313*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ecx
314*8d67ca89SAndroid Build Coastguard WorkerL(find_32diff):
315*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ecx
316*8d67ca89SAndroid Build Coastguard WorkerL(find_48diff):
317*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ecx
318*8d67ca89SAndroid Build Coastguard WorkerL(find_64diff):
319*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %edx
320*8d67ca89SAndroid Build Coastguard Worker	add	%ecx, %eax
321*8d67ca89SAndroid Build Coastguard Worker
322*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
323*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
324*8d67ca89SAndroid Build Coastguard WorkerL(16bytes):
325*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%eax), %ecx
326*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%edx), %ebx
327*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
328*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
329*8d67ca89SAndroid Build Coastguard WorkerL(12bytes):
330*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%eax), %ecx
331*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%edx), %ebx
332*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
333*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
334*8d67ca89SAndroid Build Coastguard WorkerL(8bytes):
335*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%eax), %ecx
336*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%edx), %ebx
337*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
338*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
339*8d67ca89SAndroid Build Coastguard WorkerL(4bytes):
340*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%eax), %ecx
341*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%edx), %ebx
342*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
343*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
344*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
345*8d67ca89SAndroid Build Coastguard Worker	RETURN
346*8d67ca89SAndroid Build Coastguard Worker#else
347*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
348*8d67ca89SAndroid Build Coastguard WorkerL(16bytes):
349*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%eax), %ecx
350*8d67ca89SAndroid Build Coastguard Worker	cmp	-16(%edx), %ecx
351*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
352*8d67ca89SAndroid Build Coastguard WorkerL(12bytes):
353*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%eax), %ecx
354*8d67ca89SAndroid Build Coastguard Worker	cmp	-12(%edx), %ecx
355*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
356*8d67ca89SAndroid Build Coastguard WorkerL(8bytes):
357*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%eax), %ecx
358*8d67ca89SAndroid Build Coastguard Worker	cmp	-8(%edx), %ecx
359*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
360*8d67ca89SAndroid Build Coastguard WorkerL(4bytes):
361*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%eax), %ecx
362*8d67ca89SAndroid Build Coastguard Worker	cmp	-4(%edx), %ecx
363*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
364*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
365*8d67ca89SAndroid Build Coastguard Worker	RETURN
366*8d67ca89SAndroid Build Coastguard Worker#endif
367*8d67ca89SAndroid Build Coastguard Worker
368*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
369*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
370*8d67ca89SAndroid Build Coastguard WorkerL(49bytes):
371*8d67ca89SAndroid Build Coastguard Worker	movdqu	-49(%eax), %xmm1
372*8d67ca89SAndroid Build Coastguard Worker	movdqu	-49(%edx), %xmm2
373*8d67ca89SAndroid Build Coastguard Worker	mov	$-49, %ebx
374*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
375*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
376*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
377*8d67ca89SAndroid Build Coastguard WorkerL(33bytes):
378*8d67ca89SAndroid Build Coastguard Worker	movdqu	-33(%eax), %xmm1
379*8d67ca89SAndroid Build Coastguard Worker	movdqu	-33(%edx), %xmm2
380*8d67ca89SAndroid Build Coastguard Worker	mov	$-33, %ebx
381*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
382*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
383*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
384*8d67ca89SAndroid Build Coastguard WorkerL(17bytes):
385*8d67ca89SAndroid Build Coastguard Worker	mov	-17(%eax), %ecx
386*8d67ca89SAndroid Build Coastguard Worker	mov	-17(%edx), %ebx
387*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
388*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
389*8d67ca89SAndroid Build Coastguard WorkerL(13bytes):
390*8d67ca89SAndroid Build Coastguard Worker	mov	-13(%eax), %ecx
391*8d67ca89SAndroid Build Coastguard Worker	mov	-13(%edx), %ebx
392*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
393*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
394*8d67ca89SAndroid Build Coastguard WorkerL(9bytes):
395*8d67ca89SAndroid Build Coastguard Worker	mov	-9(%eax), %ecx
396*8d67ca89SAndroid Build Coastguard Worker	mov	-9(%edx), %ebx
397*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
398*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
399*8d67ca89SAndroid Build Coastguard WorkerL(5bytes):
400*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%eax), %ecx
401*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%edx), %ebx
402*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
403*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
404*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %ecx
405*8d67ca89SAndroid Build Coastguard Worker	cmp	-1(%edx), %cl
406*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
407*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
408*8d67ca89SAndroid Build Coastguard Worker	RETURN
409*8d67ca89SAndroid Build Coastguard Worker
410*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
411*8d67ca89SAndroid Build Coastguard WorkerL(50bytes):
412*8d67ca89SAndroid Build Coastguard Worker	mov	$-50, %ebx
413*8d67ca89SAndroid Build Coastguard Worker	movdqu	-50(%eax), %xmm1
414*8d67ca89SAndroid Build Coastguard Worker	movdqu	-50(%edx), %xmm2
415*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
416*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
417*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
418*8d67ca89SAndroid Build Coastguard WorkerL(34bytes):
419*8d67ca89SAndroid Build Coastguard Worker	mov	$-34, %ebx
420*8d67ca89SAndroid Build Coastguard Worker	movdqu	-34(%eax), %xmm1
421*8d67ca89SAndroid Build Coastguard Worker	movdqu	-34(%edx), %xmm2
422*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
423*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
424*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
425*8d67ca89SAndroid Build Coastguard WorkerL(18bytes):
426*8d67ca89SAndroid Build Coastguard Worker	mov	-18(%eax), %ecx
427*8d67ca89SAndroid Build Coastguard Worker	mov	-18(%edx), %ebx
428*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
429*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
430*8d67ca89SAndroid Build Coastguard WorkerL(14bytes):
431*8d67ca89SAndroid Build Coastguard Worker	mov	-14(%eax), %ecx
432*8d67ca89SAndroid Build Coastguard Worker	mov	-14(%edx), %ebx
433*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
434*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
435*8d67ca89SAndroid Build Coastguard WorkerL(10bytes):
436*8d67ca89SAndroid Build Coastguard Worker	mov	-10(%eax), %ecx
437*8d67ca89SAndroid Build Coastguard Worker	mov	-10(%edx), %ebx
438*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
439*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
440*8d67ca89SAndroid Build Coastguard WorkerL(6bytes):
441*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%eax), %ecx
442*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%edx), %ebx
443*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
444*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
445*8d67ca89SAndroid Build Coastguard WorkerL(2bytes):
446*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%eax), %ecx
447*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%edx), %ebx
448*8d67ca89SAndroid Build Coastguard Worker	cmp	%bl, %cl
449*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
450*8d67ca89SAndroid Build Coastguard Worker	cmp	%bh, %ch
451*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
452*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
453*8d67ca89SAndroid Build Coastguard Worker	RETURN
454*8d67ca89SAndroid Build Coastguard Worker
455*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
456*8d67ca89SAndroid Build Coastguard WorkerL(51bytes):
457*8d67ca89SAndroid Build Coastguard Worker	mov	$-51, %ebx
458*8d67ca89SAndroid Build Coastguard Worker	movdqu	-51(%eax), %xmm1
459*8d67ca89SAndroid Build Coastguard Worker	movdqu	-51(%edx), %xmm2
460*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
461*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
462*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
463*8d67ca89SAndroid Build Coastguard WorkerL(35bytes):
464*8d67ca89SAndroid Build Coastguard Worker	mov	$-35, %ebx
465*8d67ca89SAndroid Build Coastguard Worker	movdqu	-35(%eax), %xmm1
466*8d67ca89SAndroid Build Coastguard Worker	movdqu	-35(%edx), %xmm2
467*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
468*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
469*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
470*8d67ca89SAndroid Build Coastguard WorkerL(19bytes):
471*8d67ca89SAndroid Build Coastguard Worker	movl	-19(%eax), %ecx
472*8d67ca89SAndroid Build Coastguard Worker	movl	-19(%edx), %ebx
473*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
474*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
475*8d67ca89SAndroid Build Coastguard WorkerL(15bytes):
476*8d67ca89SAndroid Build Coastguard Worker	movl	-15(%eax), %ecx
477*8d67ca89SAndroid Build Coastguard Worker	movl	-15(%edx), %ebx
478*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
479*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
480*8d67ca89SAndroid Build Coastguard WorkerL(11bytes):
481*8d67ca89SAndroid Build Coastguard Worker	movl	-11(%eax), %ecx
482*8d67ca89SAndroid Build Coastguard Worker	movl	-11(%edx), %ebx
483*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
484*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
485*8d67ca89SAndroid Build Coastguard WorkerL(7bytes):
486*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%eax), %ecx
487*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%edx), %ebx
488*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
489*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
490*8d67ca89SAndroid Build Coastguard WorkerL(3bytes):
491*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%eax), %ecx
492*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%edx), %ebx
493*8d67ca89SAndroid Build Coastguard Worker	cmpb	%bl, %cl
494*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
495*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
496*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
497*8d67ca89SAndroid Build Coastguard WorkerL(1bytes):
498*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %eax
499*8d67ca89SAndroid Build Coastguard Worker	cmpb	-1(%edx), %al
500*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
501*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
502*8d67ca89SAndroid Build Coastguard Worker	RETURN
503*8d67ca89SAndroid Build Coastguard Worker#endif
504*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
505*8d67ca89SAndroid Build Coastguard WorkerL(52bytes):
506*8d67ca89SAndroid Build Coastguard Worker	movdqu	-52(%eax), %xmm1
507*8d67ca89SAndroid Build Coastguard Worker	movdqu	-52(%edx), %xmm2
508*8d67ca89SAndroid Build Coastguard Worker	mov	$-52, %ebx
509*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
510*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
511*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
512*8d67ca89SAndroid Build Coastguard WorkerL(36bytes):
513*8d67ca89SAndroid Build Coastguard Worker	movdqu	-36(%eax), %xmm1
514*8d67ca89SAndroid Build Coastguard Worker	movdqu	-36(%edx), %xmm2
515*8d67ca89SAndroid Build Coastguard Worker	mov	$-36, %ebx
516*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
517*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
518*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
519*8d67ca89SAndroid Build Coastguard WorkerL(20bytes):
520*8d67ca89SAndroid Build Coastguard Worker	movdqu	-20(%eax), %xmm1
521*8d67ca89SAndroid Build Coastguard Worker	movdqu	-20(%edx), %xmm2
522*8d67ca89SAndroid Build Coastguard Worker	mov	$-20, %ebx
523*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
524*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
525*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
526*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%eax), %ecx
527*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
528*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%edx), %ebx
529*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
530*8d67ca89SAndroid Build Coastguard Worker#else
531*8d67ca89SAndroid Build Coastguard Worker	cmp	-4(%edx), %ecx
532*8d67ca89SAndroid Build Coastguard Worker#endif
533*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
534*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
535*8d67ca89SAndroid Build Coastguard Worker	RETURN
536*8d67ca89SAndroid Build Coastguard Worker
537*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
538*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
539*8d67ca89SAndroid Build Coastguard WorkerL(53bytes):
540*8d67ca89SAndroid Build Coastguard Worker	movdqu	-53(%eax), %xmm1
541*8d67ca89SAndroid Build Coastguard Worker	movdqu	-53(%edx), %xmm2
542*8d67ca89SAndroid Build Coastguard Worker	mov	$-53, %ebx
543*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
544*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
545*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
546*8d67ca89SAndroid Build Coastguard WorkerL(37bytes):
547*8d67ca89SAndroid Build Coastguard Worker	mov	$-37, %ebx
548*8d67ca89SAndroid Build Coastguard Worker	movdqu	-37(%eax), %xmm1
549*8d67ca89SAndroid Build Coastguard Worker	movdqu	-37(%edx), %xmm2
550*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
551*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
552*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
553*8d67ca89SAndroid Build Coastguard WorkerL(21bytes):
554*8d67ca89SAndroid Build Coastguard Worker	mov	$-21, %ebx
555*8d67ca89SAndroid Build Coastguard Worker	movdqu	-21(%eax), %xmm1
556*8d67ca89SAndroid Build Coastguard Worker	movdqu	-21(%edx), %xmm2
557*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
558*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
559*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
560*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%eax), %ecx
561*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%edx), %ebx
562*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
563*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
564*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %ecx
565*8d67ca89SAndroid Build Coastguard Worker	cmp	-1(%edx), %cl
566*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
567*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
568*8d67ca89SAndroid Build Coastguard Worker	RETURN
569*8d67ca89SAndroid Build Coastguard Worker
570*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
571*8d67ca89SAndroid Build Coastguard WorkerL(54bytes):
572*8d67ca89SAndroid Build Coastguard Worker	movdqu	-54(%eax), %xmm1
573*8d67ca89SAndroid Build Coastguard Worker	movdqu	-54(%edx), %xmm2
574*8d67ca89SAndroid Build Coastguard Worker	mov	$-54, %ebx
575*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
576*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
577*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
578*8d67ca89SAndroid Build Coastguard WorkerL(38bytes):
579*8d67ca89SAndroid Build Coastguard Worker	mov	$-38, %ebx
580*8d67ca89SAndroid Build Coastguard Worker	movdqu	-38(%eax), %xmm1
581*8d67ca89SAndroid Build Coastguard Worker	movdqu	-38(%edx), %xmm2
582*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
583*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
584*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
585*8d67ca89SAndroid Build Coastguard WorkerL(22bytes):
586*8d67ca89SAndroid Build Coastguard Worker	mov	$-22, %ebx
587*8d67ca89SAndroid Build Coastguard Worker	movdqu	-22(%eax), %xmm1
588*8d67ca89SAndroid Build Coastguard Worker	movdqu	-22(%edx), %xmm2
589*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
590*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
591*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
592*8d67ca89SAndroid Build Coastguard Worker
593*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%eax), %ecx
594*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%edx), %ebx
595*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
596*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
597*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%eax), %ecx
598*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%edx), %ebx
599*8d67ca89SAndroid Build Coastguard Worker	cmp	%bl, %cl
600*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
601*8d67ca89SAndroid Build Coastguard Worker	cmp	%bh, %ch
602*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
603*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
604*8d67ca89SAndroid Build Coastguard Worker	RETURN
605*8d67ca89SAndroid Build Coastguard Worker
606*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
607*8d67ca89SAndroid Build Coastguard WorkerL(55bytes):
608*8d67ca89SAndroid Build Coastguard Worker	movdqu	-55(%eax), %xmm1
609*8d67ca89SAndroid Build Coastguard Worker	movdqu	-55(%edx), %xmm2
610*8d67ca89SAndroid Build Coastguard Worker	mov	$-55, %ebx
611*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
612*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
613*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
614*8d67ca89SAndroid Build Coastguard WorkerL(39bytes):
615*8d67ca89SAndroid Build Coastguard Worker	mov	$-39, %ebx
616*8d67ca89SAndroid Build Coastguard Worker	movdqu	-39(%eax), %xmm1
617*8d67ca89SAndroid Build Coastguard Worker	movdqu	-39(%edx), %xmm2
618*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
619*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
620*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
621*8d67ca89SAndroid Build Coastguard WorkerL(23bytes):
622*8d67ca89SAndroid Build Coastguard Worker	mov	$-23, %ebx
623*8d67ca89SAndroid Build Coastguard Worker	movdqu	-23(%eax), %xmm1
624*8d67ca89SAndroid Build Coastguard Worker	movdqu	-23(%edx), %xmm2
625*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
626*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
627*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
628*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%eax), %ecx
629*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%edx), %ebx
630*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
631*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
632*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%eax), %ecx
633*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%edx), %ebx
634*8d67ca89SAndroid Build Coastguard Worker	cmpb	%bl, %cl
635*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
636*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
637*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
638*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %eax
639*8d67ca89SAndroid Build Coastguard Worker	cmpb	-1(%edx), %al
640*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
641*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
642*8d67ca89SAndroid Build Coastguard Worker	RETURN
643*8d67ca89SAndroid Build Coastguard Worker#endif
644*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
645*8d67ca89SAndroid Build Coastguard WorkerL(56bytes):
646*8d67ca89SAndroid Build Coastguard Worker	movdqu	-56(%eax), %xmm1
647*8d67ca89SAndroid Build Coastguard Worker	movdqu	-56(%edx), %xmm2
648*8d67ca89SAndroid Build Coastguard Worker	mov	$-56, %ebx
649*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
650*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
651*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
652*8d67ca89SAndroid Build Coastguard WorkerL(40bytes):
653*8d67ca89SAndroid Build Coastguard Worker	mov	$-40, %ebx
654*8d67ca89SAndroid Build Coastguard Worker	movdqu	-40(%eax), %xmm1
655*8d67ca89SAndroid Build Coastguard Worker	movdqu	-40(%edx), %xmm2
656*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
657*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
658*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
659*8d67ca89SAndroid Build Coastguard WorkerL(24bytes):
660*8d67ca89SAndroid Build Coastguard Worker	mov	$-24, %ebx
661*8d67ca89SAndroid Build Coastguard Worker	movdqu	-24(%eax), %xmm1
662*8d67ca89SAndroid Build Coastguard Worker	movdqu	-24(%edx), %xmm2
663*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
664*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
665*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
666*8d67ca89SAndroid Build Coastguard Worker
667*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%eax), %ecx
668*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
669*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%edx), %ebx
670*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
671*8d67ca89SAndroid Build Coastguard Worker#else
672*8d67ca89SAndroid Build Coastguard Worker	cmp	-8(%edx), %ecx
673*8d67ca89SAndroid Build Coastguard Worker#endif
674*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
675*8d67ca89SAndroid Build Coastguard Worker
676*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%eax), %ecx
677*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
678*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%edx), %ebx
679*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
680*8d67ca89SAndroid Build Coastguard Worker#else
681*8d67ca89SAndroid Build Coastguard Worker	cmp	-4(%edx), %ecx
682*8d67ca89SAndroid Build Coastguard Worker#endif
683*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
684*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
685*8d67ca89SAndroid Build Coastguard Worker	RETURN
686*8d67ca89SAndroid Build Coastguard Worker
687*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
688*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
689*8d67ca89SAndroid Build Coastguard WorkerL(57bytes):
690*8d67ca89SAndroid Build Coastguard Worker	movdqu	-57(%eax), %xmm1
691*8d67ca89SAndroid Build Coastguard Worker	movdqu	-57(%edx), %xmm2
692*8d67ca89SAndroid Build Coastguard Worker	mov	$-57, %ebx
693*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
694*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
695*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
696*8d67ca89SAndroid Build Coastguard WorkerL(41bytes):
697*8d67ca89SAndroid Build Coastguard Worker	mov	$-41, %ebx
698*8d67ca89SAndroid Build Coastguard Worker	movdqu	-41(%eax), %xmm1
699*8d67ca89SAndroid Build Coastguard Worker	movdqu	-41(%edx), %xmm2
700*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
701*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
702*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
703*8d67ca89SAndroid Build Coastguard WorkerL(25bytes):
704*8d67ca89SAndroid Build Coastguard Worker	mov	$-25, %ebx
705*8d67ca89SAndroid Build Coastguard Worker	movdqu	-25(%eax), %xmm1
706*8d67ca89SAndroid Build Coastguard Worker	movdqu	-25(%edx), %xmm2
707*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
708*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
709*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
710*8d67ca89SAndroid Build Coastguard Worker	mov	-9(%eax), %ecx
711*8d67ca89SAndroid Build Coastguard Worker	mov	-9(%edx), %ebx
712*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
713*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
714*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%eax), %ecx
715*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%edx), %ebx
716*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
717*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
718*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %ecx
719*8d67ca89SAndroid Build Coastguard Worker	cmp	-1(%edx), %cl
720*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
721*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
722*8d67ca89SAndroid Build Coastguard Worker	RETURN
723*8d67ca89SAndroid Build Coastguard Worker
724*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
725*8d67ca89SAndroid Build Coastguard WorkerL(58bytes):
726*8d67ca89SAndroid Build Coastguard Worker	movdqu	-58(%eax), %xmm1
727*8d67ca89SAndroid Build Coastguard Worker	movdqu	-58(%edx), %xmm2
728*8d67ca89SAndroid Build Coastguard Worker	mov	$-58, %ebx
729*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
730*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
731*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
732*8d67ca89SAndroid Build Coastguard WorkerL(42bytes):
733*8d67ca89SAndroid Build Coastguard Worker	mov	$-42, %ebx
734*8d67ca89SAndroid Build Coastguard Worker	movdqu	-42(%eax), %xmm1
735*8d67ca89SAndroid Build Coastguard Worker	movdqu	-42(%edx), %xmm2
736*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
737*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
738*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
739*8d67ca89SAndroid Build Coastguard WorkerL(26bytes):
740*8d67ca89SAndroid Build Coastguard Worker	mov	$-26, %ebx
741*8d67ca89SAndroid Build Coastguard Worker	movdqu	-26(%eax), %xmm1
742*8d67ca89SAndroid Build Coastguard Worker	movdqu	-26(%edx), %xmm2
743*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
744*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
745*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
746*8d67ca89SAndroid Build Coastguard Worker
747*8d67ca89SAndroid Build Coastguard Worker	mov	-10(%eax), %ecx
748*8d67ca89SAndroid Build Coastguard Worker	mov	-10(%edx), %ebx
749*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
750*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
751*8d67ca89SAndroid Build Coastguard Worker
752*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%eax), %ecx
753*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%edx), %ebx
754*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
755*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
756*8d67ca89SAndroid Build Coastguard Worker
757*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%eax), %ecx
758*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%edx), %ebx
759*8d67ca89SAndroid Build Coastguard Worker	cmp	%bl, %cl
760*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
761*8d67ca89SAndroid Build Coastguard Worker	cmp	%bh, %ch
762*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
763*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
764*8d67ca89SAndroid Build Coastguard Worker	RETURN
765*8d67ca89SAndroid Build Coastguard Worker
766*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
767*8d67ca89SAndroid Build Coastguard WorkerL(59bytes):
768*8d67ca89SAndroid Build Coastguard Worker	movdqu	-59(%eax), %xmm1
769*8d67ca89SAndroid Build Coastguard Worker	movdqu	-59(%edx), %xmm2
770*8d67ca89SAndroid Build Coastguard Worker	mov	$-59, %ebx
771*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
772*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
773*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
774*8d67ca89SAndroid Build Coastguard WorkerL(43bytes):
775*8d67ca89SAndroid Build Coastguard Worker	mov	$-43, %ebx
776*8d67ca89SAndroid Build Coastguard Worker	movdqu	-43(%eax), %xmm1
777*8d67ca89SAndroid Build Coastguard Worker	movdqu	-43(%edx), %xmm2
778*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
779*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
780*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
781*8d67ca89SAndroid Build Coastguard WorkerL(27bytes):
782*8d67ca89SAndroid Build Coastguard Worker	mov	$-27, %ebx
783*8d67ca89SAndroid Build Coastguard Worker	movdqu	-27(%eax), %xmm1
784*8d67ca89SAndroid Build Coastguard Worker	movdqu	-27(%edx), %xmm2
785*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
786*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
787*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
788*8d67ca89SAndroid Build Coastguard Worker	movl	-11(%eax), %ecx
789*8d67ca89SAndroid Build Coastguard Worker	movl	-11(%edx), %ebx
790*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
791*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
792*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%eax), %ecx
793*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%edx), %ebx
794*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
795*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
796*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%eax), %ecx
797*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%edx), %ebx
798*8d67ca89SAndroid Build Coastguard Worker	cmpb	%bl, %cl
799*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
800*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
801*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
802*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %eax
803*8d67ca89SAndroid Build Coastguard Worker	cmpb	-1(%edx), %al
804*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
805*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
806*8d67ca89SAndroid Build Coastguard Worker	RETURN
807*8d67ca89SAndroid Build Coastguard Worker#endif
808*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
809*8d67ca89SAndroid Build Coastguard WorkerL(60bytes):
810*8d67ca89SAndroid Build Coastguard Worker	movdqu	-60(%eax), %xmm1
811*8d67ca89SAndroid Build Coastguard Worker	movdqu	-60(%edx), %xmm2
812*8d67ca89SAndroid Build Coastguard Worker	mov	$-60, %ebx
813*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
814*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
815*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
816*8d67ca89SAndroid Build Coastguard WorkerL(44bytes):
817*8d67ca89SAndroid Build Coastguard Worker	mov	$-44, %ebx
818*8d67ca89SAndroid Build Coastguard Worker	movdqu	-44(%eax), %xmm1
819*8d67ca89SAndroid Build Coastguard Worker	movdqu	-44(%edx), %xmm2
820*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
821*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
822*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
823*8d67ca89SAndroid Build Coastguard WorkerL(28bytes):
824*8d67ca89SAndroid Build Coastguard Worker	mov	$-28, %ebx
825*8d67ca89SAndroid Build Coastguard Worker	movdqu	-28(%eax), %xmm1
826*8d67ca89SAndroid Build Coastguard Worker	movdqu	-28(%edx), %xmm2
827*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
828*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
829*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
830*8d67ca89SAndroid Build Coastguard Worker
831*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%eax), %ecx
832*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
833*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%edx), %ebx
834*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
835*8d67ca89SAndroid Build Coastguard Worker#else
836*8d67ca89SAndroid Build Coastguard Worker	cmp	-12(%edx), %ecx
837*8d67ca89SAndroid Build Coastguard Worker#endif
838*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
839*8d67ca89SAndroid Build Coastguard Worker
840*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%eax), %ecx
841*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
842*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%edx), %ebx
843*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
844*8d67ca89SAndroid Build Coastguard Worker#else
845*8d67ca89SAndroid Build Coastguard Worker	cmp	-8(%edx), %ecx
846*8d67ca89SAndroid Build Coastguard Worker#endif
847*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
848*8d67ca89SAndroid Build Coastguard Worker
849*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%eax), %ecx
850*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
851*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%edx), %ebx
852*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
853*8d67ca89SAndroid Build Coastguard Worker#else
854*8d67ca89SAndroid Build Coastguard Worker	cmp	-4(%edx), %ecx
855*8d67ca89SAndroid Build Coastguard Worker#endif
856*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
857*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
858*8d67ca89SAndroid Build Coastguard Worker	RETURN
859*8d67ca89SAndroid Build Coastguard Worker
860*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
861*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
862*8d67ca89SAndroid Build Coastguard WorkerL(61bytes):
863*8d67ca89SAndroid Build Coastguard Worker	movdqu	-61(%eax), %xmm1
864*8d67ca89SAndroid Build Coastguard Worker	movdqu	-61(%edx), %xmm2
865*8d67ca89SAndroid Build Coastguard Worker	mov	$-61, %ebx
866*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
867*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
868*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
869*8d67ca89SAndroid Build Coastguard WorkerL(45bytes):
870*8d67ca89SAndroid Build Coastguard Worker	mov	$-45, %ebx
871*8d67ca89SAndroid Build Coastguard Worker	movdqu	-45(%eax), %xmm1
872*8d67ca89SAndroid Build Coastguard Worker	movdqu	-45(%edx), %xmm2
873*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
874*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
875*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
876*8d67ca89SAndroid Build Coastguard WorkerL(29bytes):
877*8d67ca89SAndroid Build Coastguard Worker	mov	$-29, %ebx
878*8d67ca89SAndroid Build Coastguard Worker	movdqu	-29(%eax), %xmm1
879*8d67ca89SAndroid Build Coastguard Worker	movdqu	-29(%edx), %xmm2
880*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
881*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
882*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
883*8d67ca89SAndroid Build Coastguard Worker
884*8d67ca89SAndroid Build Coastguard Worker	mov	-13(%eax), %ecx
885*8d67ca89SAndroid Build Coastguard Worker	mov	-13(%edx), %ebx
886*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
887*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
888*8d67ca89SAndroid Build Coastguard Worker
889*8d67ca89SAndroid Build Coastguard Worker	mov	-9(%eax), %ecx
890*8d67ca89SAndroid Build Coastguard Worker	mov	-9(%edx), %ebx
891*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
892*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
893*8d67ca89SAndroid Build Coastguard Worker
894*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%eax), %ecx
895*8d67ca89SAndroid Build Coastguard Worker	mov	-5(%edx), %ebx
896*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
897*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
898*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %ecx
899*8d67ca89SAndroid Build Coastguard Worker	cmp	-1(%edx), %cl
900*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
901*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
902*8d67ca89SAndroid Build Coastguard Worker	RETURN
903*8d67ca89SAndroid Build Coastguard Worker
904*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
905*8d67ca89SAndroid Build Coastguard WorkerL(62bytes):
906*8d67ca89SAndroid Build Coastguard Worker	movdqu	-62(%eax), %xmm1
907*8d67ca89SAndroid Build Coastguard Worker	movdqu	-62(%edx), %xmm2
908*8d67ca89SAndroid Build Coastguard Worker	mov	$-62, %ebx
909*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
910*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
911*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
912*8d67ca89SAndroid Build Coastguard WorkerL(46bytes):
913*8d67ca89SAndroid Build Coastguard Worker	mov	$-46, %ebx
914*8d67ca89SAndroid Build Coastguard Worker	movdqu	-46(%eax), %xmm1
915*8d67ca89SAndroid Build Coastguard Worker	movdqu	-46(%edx), %xmm2
916*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
917*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
918*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
919*8d67ca89SAndroid Build Coastguard WorkerL(30bytes):
920*8d67ca89SAndroid Build Coastguard Worker	mov	$-30, %ebx
921*8d67ca89SAndroid Build Coastguard Worker	movdqu	-30(%eax), %xmm1
922*8d67ca89SAndroid Build Coastguard Worker	movdqu	-30(%edx), %xmm2
923*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
924*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
925*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
926*8d67ca89SAndroid Build Coastguard Worker	mov	-14(%eax), %ecx
927*8d67ca89SAndroid Build Coastguard Worker	mov	-14(%edx), %ebx
928*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
929*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
930*8d67ca89SAndroid Build Coastguard Worker	mov	-10(%eax), %ecx
931*8d67ca89SAndroid Build Coastguard Worker	mov	-10(%edx), %ebx
932*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
933*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
934*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%eax), %ecx
935*8d67ca89SAndroid Build Coastguard Worker	mov	-6(%edx), %ebx
936*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
937*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
938*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%eax), %ecx
939*8d67ca89SAndroid Build Coastguard Worker	movzwl	-2(%edx), %ebx
940*8d67ca89SAndroid Build Coastguard Worker	cmp	%bl, %cl
941*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
942*8d67ca89SAndroid Build Coastguard Worker	cmp	%bh, %ch
943*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
944*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
945*8d67ca89SAndroid Build Coastguard Worker	RETURN
946*8d67ca89SAndroid Build Coastguard Worker
947*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
948*8d67ca89SAndroid Build Coastguard WorkerL(63bytes):
949*8d67ca89SAndroid Build Coastguard Worker	movdqu	-63(%eax), %xmm1
950*8d67ca89SAndroid Build Coastguard Worker	movdqu	-63(%edx), %xmm2
951*8d67ca89SAndroid Build Coastguard Worker	mov	$-63, %ebx
952*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
953*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
954*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
955*8d67ca89SAndroid Build Coastguard WorkerL(47bytes):
956*8d67ca89SAndroid Build Coastguard Worker	mov	$-47, %ebx
957*8d67ca89SAndroid Build Coastguard Worker	movdqu	-47(%eax), %xmm1
958*8d67ca89SAndroid Build Coastguard Worker	movdqu	-47(%edx), %xmm2
959*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
960*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
961*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
962*8d67ca89SAndroid Build Coastguard WorkerL(31bytes):
963*8d67ca89SAndroid Build Coastguard Worker	mov	$-31, %ebx
964*8d67ca89SAndroid Build Coastguard Worker	movdqu	-31(%eax), %xmm1
965*8d67ca89SAndroid Build Coastguard Worker	movdqu	-31(%edx), %xmm2
966*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
967*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
968*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
969*8d67ca89SAndroid Build Coastguard Worker
970*8d67ca89SAndroid Build Coastguard Worker	movl	-15(%eax), %ecx
971*8d67ca89SAndroid Build Coastguard Worker	movl	-15(%edx), %ebx
972*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
973*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
974*8d67ca89SAndroid Build Coastguard Worker	movl	-11(%eax), %ecx
975*8d67ca89SAndroid Build Coastguard Worker	movl	-11(%edx), %ebx
976*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
977*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
978*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%eax), %ecx
979*8d67ca89SAndroid Build Coastguard Worker	movl	-7(%edx), %ebx
980*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
981*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
982*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%eax), %ecx
983*8d67ca89SAndroid Build Coastguard Worker	movzwl	-3(%edx), %ebx
984*8d67ca89SAndroid Build Coastguard Worker	cmpb	%bl, %cl
985*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
986*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
987*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
988*8d67ca89SAndroid Build Coastguard Worker	movzbl	-1(%eax), %eax
989*8d67ca89SAndroid Build Coastguard Worker	cmpb	-1(%edx), %al
990*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
991*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
992*8d67ca89SAndroid Build Coastguard Worker	RETURN
993*8d67ca89SAndroid Build Coastguard Worker#endif
994*8d67ca89SAndroid Build Coastguard Worker
995*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
996*8d67ca89SAndroid Build Coastguard WorkerL(64bytes):
997*8d67ca89SAndroid Build Coastguard Worker	movdqu	-64(%eax), %xmm1
998*8d67ca89SAndroid Build Coastguard Worker	movdqu	-64(%edx), %xmm2
999*8d67ca89SAndroid Build Coastguard Worker	mov	$-64, %ebx
1000*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
1001*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
1002*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
1003*8d67ca89SAndroid Build Coastguard WorkerL(48bytes):
1004*8d67ca89SAndroid Build Coastguard Worker	movdqu	-48(%eax), %xmm1
1005*8d67ca89SAndroid Build Coastguard Worker	movdqu	-48(%edx), %xmm2
1006*8d67ca89SAndroid Build Coastguard Worker	mov	$-48, %ebx
1007*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
1008*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
1009*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
1010*8d67ca89SAndroid Build Coastguard WorkerL(32bytes):
1011*8d67ca89SAndroid Build Coastguard Worker	movdqu	-32(%eax), %xmm1
1012*8d67ca89SAndroid Build Coastguard Worker	movdqu	-32(%edx), %xmm2
1013*8d67ca89SAndroid Build Coastguard Worker	mov	$-32, %ebx
1014*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm2
1015*8d67ca89SAndroid Build Coastguard Worker	ptest	%xmm2, %xmm0
1016*8d67ca89SAndroid Build Coastguard Worker	jnc	L(less16bytes)
1017*8d67ca89SAndroid Build Coastguard Worker
1018*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%eax), %ecx
1019*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
1020*8d67ca89SAndroid Build Coastguard Worker	mov	-16(%edx), %ebx
1021*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
1022*8d67ca89SAndroid Build Coastguard Worker#else
1023*8d67ca89SAndroid Build Coastguard Worker	cmp	-16(%edx), %ecx
1024*8d67ca89SAndroid Build Coastguard Worker#endif
1025*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1026*8d67ca89SAndroid Build Coastguard Worker
1027*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%eax), %ecx
1028*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
1029*8d67ca89SAndroid Build Coastguard Worker	mov	-12(%edx), %ebx
1030*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
1031*8d67ca89SAndroid Build Coastguard Worker#else
1032*8d67ca89SAndroid Build Coastguard Worker	cmp	-12(%edx), %ecx
1033*8d67ca89SAndroid Build Coastguard Worker#endif
1034*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1035*8d67ca89SAndroid Build Coastguard Worker
1036*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%eax), %ecx
1037*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
1038*8d67ca89SAndroid Build Coastguard Worker	mov	-8(%edx), %ebx
1039*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
1040*8d67ca89SAndroid Build Coastguard Worker#else
1041*8d67ca89SAndroid Build Coastguard Worker	cmp	-8(%edx), %ecx
1042*8d67ca89SAndroid Build Coastguard Worker#endif
1043*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1044*8d67ca89SAndroid Build Coastguard Worker
1045*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%eax), %ecx
1046*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
1047*8d67ca89SAndroid Build Coastguard Worker	mov	-4(%edx), %ebx
1048*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
1049*8d67ca89SAndroid Build Coastguard Worker#else
1050*8d67ca89SAndroid Build Coastguard Worker	cmp	-4(%edx), %ecx
1051*8d67ca89SAndroid Build Coastguard Worker#endif
1052*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
1053*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1054*8d67ca89SAndroid Build Coastguard Worker	RETURN
1055*8d67ca89SAndroid Build Coastguard Worker
1056*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
1057*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1058*8d67ca89SAndroid Build Coastguard WorkerL(less16bytes):
1059*8d67ca89SAndroid Build Coastguard Worker	add	%ebx, %eax
1060*8d67ca89SAndroid Build Coastguard Worker	add	%ebx, %edx
1061*8d67ca89SAndroid Build Coastguard Worker
1062*8d67ca89SAndroid Build Coastguard Worker	mov	(%eax), %ecx
1063*8d67ca89SAndroid Build Coastguard Worker	mov	(%edx), %ebx
1064*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
1065*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1066*8d67ca89SAndroid Build Coastguard Worker
1067*8d67ca89SAndroid Build Coastguard Worker	mov	4(%eax), %ecx
1068*8d67ca89SAndroid Build Coastguard Worker	mov	4(%edx), %ebx
1069*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
1070*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1071*8d67ca89SAndroid Build Coastguard Worker
1072*8d67ca89SAndroid Build Coastguard Worker	mov	8(%eax), %ecx
1073*8d67ca89SAndroid Build Coastguard Worker	mov	8(%edx), %ebx
1074*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
1075*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1076*8d67ca89SAndroid Build Coastguard Worker
1077*8d67ca89SAndroid Build Coastguard Worker	mov	12(%eax), %ecx
1078*8d67ca89SAndroid Build Coastguard Worker	mov	12(%edx), %ebx
1079*8d67ca89SAndroid Build Coastguard Worker	cmp	%ebx, %ecx
1080*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
1081*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1082*8d67ca89SAndroid Build Coastguard Worker	RETURN
1083*8d67ca89SAndroid Build Coastguard Worker#else
1084*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1085*8d67ca89SAndroid Build Coastguard WorkerL(less16bytes):
1086*8d67ca89SAndroid Build Coastguard Worker	add	%ebx, %eax
1087*8d67ca89SAndroid Build Coastguard Worker	add	%ebx, %edx
1088*8d67ca89SAndroid Build Coastguard Worker
1089*8d67ca89SAndroid Build Coastguard Worker	mov	(%eax), %ecx
1090*8d67ca89SAndroid Build Coastguard Worker	cmp	(%edx), %ecx
1091*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1092*8d67ca89SAndroid Build Coastguard Worker
1093*8d67ca89SAndroid Build Coastguard Worker	mov	4(%eax), %ecx
1094*8d67ca89SAndroid Build Coastguard Worker	cmp	4(%edx), %ecx
1095*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1096*8d67ca89SAndroid Build Coastguard Worker
1097*8d67ca89SAndroid Build Coastguard Worker	mov	8(%eax), %ecx
1098*8d67ca89SAndroid Build Coastguard Worker	cmp	8(%edx), %ecx
1099*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1100*8d67ca89SAndroid Build Coastguard Worker
1101*8d67ca89SAndroid Build Coastguard Worker	mov	12(%eax), %ecx
1102*8d67ca89SAndroid Build Coastguard Worker	cmp	12(%edx), %ecx
1103*8d67ca89SAndroid Build Coastguard Worker
1104*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %eax
1105*8d67ca89SAndroid Build Coastguard Worker	jne	L(find_diff)
1106*8d67ca89SAndroid Build Coastguard Worker	RETURN
1107*8d67ca89SAndroid Build Coastguard Worker#endif
1108*8d67ca89SAndroid Build Coastguard Worker
1109*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1110*8d67ca89SAndroid Build Coastguard WorkerL(find_diff):
1111*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
1112*8d67ca89SAndroid Build Coastguard Worker	cmpb	%bl, %cl
1113*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
1114*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
1115*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
1116*8d67ca89SAndroid Build Coastguard Worker	shr	$16,%ecx
1117*8d67ca89SAndroid Build Coastguard Worker	shr	$16,%ebx
1118*8d67ca89SAndroid Build Coastguard Worker	cmp	%bl, %cl
1119*8d67ca89SAndroid Build Coastguard Worker	jne	L(end)
1120*8d67ca89SAndroid Build Coastguard Worker	cmp	%bx, %cx
1121*8d67ca89SAndroid Build Coastguard WorkerL(end):
1122*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
1123*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
1124*8d67ca89SAndroid Build Coastguard Worker	ja	L(bigger)
1125*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
1126*8d67ca89SAndroid Build Coastguard WorkerL(bigger):
1127*8d67ca89SAndroid Build Coastguard Worker	ret
1128*8d67ca89SAndroid Build Coastguard Worker#else
1129*8d67ca89SAndroid Build Coastguard Worker	POP	(%ebx)
1130*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %eax
1131*8d67ca89SAndroid Build Coastguard Worker	jg	L(bigger)
1132*8d67ca89SAndroid Build Coastguard Worker	neg	%eax
1133*8d67ca89SAndroid Build Coastguard Worker	ret
1134*8d67ca89SAndroid Build Coastguard Worker
1135*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1136*8d67ca89SAndroid Build Coastguard WorkerL(bigger):
1137*8d67ca89SAndroid Build Coastguard Worker	ret
1138*8d67ca89SAndroid Build Coastguard Worker#endif
1139*8d67ca89SAndroid Build Coastguard WorkerEND (MEMCMP)
1140*8d67ca89SAndroid Build Coastguard Worker
1141*8d67ca89SAndroid Build Coastguard Worker	.section .rodata.sse4.2,"a",@progbits
1142*8d67ca89SAndroid Build Coastguard Worker	.p2align 2
1143*8d67ca89SAndroid Build Coastguard Worker	.type	L(table_64bytes), @object
1144*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_WMEMCMP
1145*8d67ca89SAndroid Build Coastguard WorkerL(table_64bytes):
1146*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(0bytes), L(table_64bytes))
1147*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(1bytes), L(table_64bytes))
1148*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(2bytes), L(table_64bytes))
1149*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(3bytes), L(table_64bytes))
1150*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(4bytes), L(table_64bytes))
1151*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(5bytes), L(table_64bytes))
1152*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(6bytes), L(table_64bytes))
1153*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(7bytes), L(table_64bytes))
1154*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(8bytes), L(table_64bytes))
1155*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(9bytes), L(table_64bytes))
1156*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(10bytes), L(table_64bytes))
1157*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(11bytes), L(table_64bytes))
1158*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(12bytes), L(table_64bytes))
1159*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(13bytes), L(table_64bytes))
1160*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(14bytes), L(table_64bytes))
1161*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(15bytes), L(table_64bytes))
1162*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(16bytes), L(table_64bytes))
1163*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(17bytes), L(table_64bytes))
1164*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(18bytes), L(table_64bytes))
1165*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(19bytes), L(table_64bytes))
1166*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(20bytes), L(table_64bytes))
1167*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(21bytes), L(table_64bytes))
1168*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(22bytes), L(table_64bytes))
1169*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(23bytes), L(table_64bytes))
1170*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(24bytes), L(table_64bytes))
1171*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(25bytes), L(table_64bytes))
1172*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(26bytes), L(table_64bytes))
1173*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(27bytes), L(table_64bytes))
1174*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(28bytes), L(table_64bytes))
1175*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(29bytes), L(table_64bytes))
1176*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(30bytes), L(table_64bytes))
1177*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(31bytes), L(table_64bytes))
1178*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(32bytes), L(table_64bytes))
1179*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(33bytes), L(table_64bytes))
1180*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(34bytes), L(table_64bytes))
1181*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(35bytes), L(table_64bytes))
1182*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(36bytes), L(table_64bytes))
1183*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(37bytes), L(table_64bytes))
1184*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(38bytes), L(table_64bytes))
1185*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(39bytes), L(table_64bytes))
1186*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(40bytes), L(table_64bytes))
1187*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(41bytes), L(table_64bytes))
1188*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(42bytes), L(table_64bytes))
1189*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(43bytes), L(table_64bytes))
1190*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(44bytes), L(table_64bytes))
1191*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(45bytes), L(table_64bytes))
1192*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(46bytes), L(table_64bytes))
1193*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(47bytes), L(table_64bytes))
1194*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(48bytes), L(table_64bytes))
1195*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(49bytes), L(table_64bytes))
1196*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(50bytes), L(table_64bytes))
1197*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(51bytes), L(table_64bytes))
1198*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(52bytes), L(table_64bytes))
1199*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(53bytes), L(table_64bytes))
1200*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(54bytes), L(table_64bytes))
1201*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(55bytes), L(table_64bytes))
1202*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(56bytes), L(table_64bytes))
1203*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(57bytes), L(table_64bytes))
1204*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(58bytes), L(table_64bytes))
1205*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(59bytes), L(table_64bytes))
1206*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(60bytes), L(table_64bytes))
1207*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(61bytes), L(table_64bytes))
1208*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(62bytes), L(table_64bytes))
1209*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(63bytes), L(table_64bytes))
1210*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(64bytes), L(table_64bytes))
1211*8d67ca89SAndroid Build Coastguard Worker#else
1212*8d67ca89SAndroid Build Coastguard WorkerL(table_64bytes):
1213*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(0bytes), L(table_64bytes))
1214*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1215*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1216*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1217*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(4bytes), L(table_64bytes))
1218*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1219*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1220*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1221*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(8bytes), L(table_64bytes))
1222*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1223*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1224*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1225*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(12bytes), L(table_64bytes))
1226*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1227*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1228*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1229*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(16bytes), L(table_64bytes))
1230*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1231*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1232*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1233*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(20bytes), L(table_64bytes))
1234*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1235*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1236*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1237*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(24bytes), L(table_64bytes))
1238*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1239*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1240*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1241*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(28bytes), L(table_64bytes))
1242*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1243*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1244*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1245*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(32bytes), L(table_64bytes))
1246*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1247*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1248*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1249*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(36bytes), L(table_64bytes))
1250*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1251*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1252*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1253*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(40bytes), L(table_64bytes))
1254*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1255*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1256*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1257*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(44bytes), L(table_64bytes))
1258*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1259*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1260*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1261*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(48bytes), L(table_64bytes))
1262*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1263*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1264*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1265*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(52bytes), L(table_64bytes))
1266*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1267*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1268*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1269*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(56bytes), L(table_64bytes))
1270*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1271*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1272*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1273*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(60bytes), L(table_64bytes))
1274*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1275*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1276*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(unreal_case), L(table_64bytes))
1277*8d67ca89SAndroid Build Coastguard Worker	.int	JMPTBL (L(64bytes), L(table_64bytes))
1278*8d67ca89SAndroid Build Coastguard Worker#endif
1279