xref: /aosp_15_r20/bionic/libc/arch-x86/string/ssse3-strcpy-atom.S (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker/*
2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2011, 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 USE_AS_STRCAT
32*8d67ca89SAndroid Build Coastguard Worker
33*8d67ca89SAndroid Build Coastguard Worker# ifndef L
34*8d67ca89SAndroid Build Coastguard Worker#  define L(label)	.L##label
35*8d67ca89SAndroid Build Coastguard Worker# endif
36*8d67ca89SAndroid Build Coastguard Worker
37*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_startproc
38*8d67ca89SAndroid Build Coastguard Worker#  define cfi_startproc	.cfi_startproc
39*8d67ca89SAndroid Build Coastguard Worker# endif
40*8d67ca89SAndroid Build Coastguard Worker
41*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_endproc
42*8d67ca89SAndroid Build Coastguard Worker#  define cfi_endproc	.cfi_endproc
43*8d67ca89SAndroid Build Coastguard Worker# endif
44*8d67ca89SAndroid Build Coastguard Worker
45*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_rel_offset
46*8d67ca89SAndroid Build Coastguard Worker#  define cfi_rel_offset(reg, off)	.cfi_rel_offset reg, off
47*8d67ca89SAndroid Build Coastguard Worker# endif
48*8d67ca89SAndroid Build Coastguard Worker
49*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_restore
50*8d67ca89SAndroid Build Coastguard Worker#  define cfi_restore(reg)	.cfi_restore reg
51*8d67ca89SAndroid Build Coastguard Worker# endif
52*8d67ca89SAndroid Build Coastguard Worker
53*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_adjust_cfa_offset
54*8d67ca89SAndroid Build Coastguard Worker#  define cfi_adjust_cfa_offset(off)	.cfi_adjust_cfa_offset off
55*8d67ca89SAndroid Build Coastguard Worker# endif
56*8d67ca89SAndroid Build Coastguard Worker
57*8d67ca89SAndroid Build Coastguard Worker# ifndef ENTRY
58*8d67ca89SAndroid Build Coastguard Worker#  define ENTRY(name)	\
59*8d67ca89SAndroid Build Coastguard Worker	.type name, @function;	\
60*8d67ca89SAndroid Build Coastguard Worker	.globl name;	\
61*8d67ca89SAndroid Build Coastguard Worker	.p2align 4;	\
62*8d67ca89SAndroid Build Coastguard Workername:	\
63*8d67ca89SAndroid Build Coastguard Worker	cfi_startproc
64*8d67ca89SAndroid Build Coastguard Worker# endif
65*8d67ca89SAndroid Build Coastguard Worker
66*8d67ca89SAndroid Build Coastguard Worker# ifndef END
67*8d67ca89SAndroid Build Coastguard Worker#  define END(name)	\
68*8d67ca89SAndroid Build Coastguard Worker	cfi_endproc;	\
69*8d67ca89SAndroid Build Coastguard Worker	.size name, .-name
70*8d67ca89SAndroid Build Coastguard Worker# endif
71*8d67ca89SAndroid Build Coastguard Worker
72*8d67ca89SAndroid Build Coastguard Worker# define CFI_PUSH(REG)	\
73*8d67ca89SAndroid Build Coastguard Worker	cfi_adjust_cfa_offset (4);	\
74*8d67ca89SAndroid Build Coastguard Worker	cfi_rel_offset (REG, 0)
75*8d67ca89SAndroid Build Coastguard Worker
76*8d67ca89SAndroid Build Coastguard Worker# define CFI_POP(REG)	\
77*8d67ca89SAndroid Build Coastguard Worker	cfi_adjust_cfa_offset (-4);	\
78*8d67ca89SAndroid Build Coastguard Worker	cfi_restore (REG)
79*8d67ca89SAndroid Build Coastguard Worker
80*8d67ca89SAndroid Build Coastguard Worker# define PUSH(REG)	pushl REG; CFI_PUSH (REG)
81*8d67ca89SAndroid Build Coastguard Worker# define POP(REG)	popl REG; CFI_POP (REG)
82*8d67ca89SAndroid Build Coastguard Worker
83*8d67ca89SAndroid Build Coastguard Worker# ifndef STRCPY
84*8d67ca89SAndroid Build Coastguard Worker#  define STRCPY  strcpy_atom
85*8d67ca89SAndroid Build Coastguard Worker# endif
86*8d67ca89SAndroid Build Coastguard Worker
87*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
88*8d67ca89SAndroid Build Coastguard Worker#  define PARMS  8
89*8d67ca89SAndroid Build Coastguard Worker#  define ENTRANCE PUSH (%ebx)
90*8d67ca89SAndroid Build Coastguard Worker#  define RETURN  POP (%ebx); ret; CFI_PUSH (%ebx);
91*8d67ca89SAndroid Build Coastguard Worker#  define RETURN1  POP (%edi); POP (%ebx); ret; CFI_PUSH (%ebx); CFI_PUSH (%edi)
92*8d67ca89SAndroid Build Coastguard Worker# else
93*8d67ca89SAndroid Build Coastguard Worker#  define PARMS  4
94*8d67ca89SAndroid Build Coastguard Worker#  define ENTRANCE
95*8d67ca89SAndroid Build Coastguard Worker#  define RETURN  ret
96*8d67ca89SAndroid Build Coastguard Worker#  define RETURN1  POP (%edi); ret; CFI_PUSH (%edi)
97*8d67ca89SAndroid Build Coastguard Worker# endif
98*8d67ca89SAndroid Build Coastguard Worker
99*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY
100*8d67ca89SAndroid Build Coastguard Worker#  define SAVE_RESULT(n)  lea	n(%edx), %eax
101*8d67ca89SAndroid Build Coastguard Worker#  define SAVE_RESULT_TAIL(n)  lea	n(%edx), %eax
102*8d67ca89SAndroid Build Coastguard Worker# else
103*8d67ca89SAndroid Build Coastguard Worker#  define SAVE_RESULT(n)  movl	%edi, %eax
104*8d67ca89SAndroid Build Coastguard Worker#  define SAVE_RESULT_TAIL(n)  movl	%edx, %eax
105*8d67ca89SAndroid Build Coastguard Worker# endif
106*8d67ca89SAndroid Build Coastguard Worker
107*8d67ca89SAndroid Build Coastguard Worker# define STR1  PARMS
108*8d67ca89SAndroid Build Coastguard Worker# define STR2  STR1+4
109*8d67ca89SAndroid Build Coastguard Worker# define LEN  STR2+4
110*8d67ca89SAndroid Build Coastguard Worker
111*8d67ca89SAndroid Build Coastguard Worker/* In this code following instructions are used for copying:
112*8d67ca89SAndroid Build Coastguard Worker	movb	- 1 byte
113*8d67ca89SAndroid Build Coastguard Worker	movw	- 2 byte
114*8d67ca89SAndroid Build Coastguard Worker	movl	- 4 byte
115*8d67ca89SAndroid Build Coastguard Worker	movlpd	- 8 byte
116*8d67ca89SAndroid Build Coastguard Worker	movaps	- 16 byte - requires 16 byte alignment
117*8d67ca89SAndroid Build Coastguard Worker	of	sourse and destination adresses.
118*8d67ca89SAndroid Build Coastguard Worker*/
119*8d67ca89SAndroid Build Coastguard Worker
120*8d67ca89SAndroid Build Coastguard Worker.text
121*8d67ca89SAndroid Build Coastguard WorkerENTRY (STRCPY)
122*8d67ca89SAndroid Build Coastguard Worker	ENTRANCE
123*8d67ca89SAndroid Build Coastguard Worker	mov	STR1(%esp), %edx
124*8d67ca89SAndroid Build Coastguard Worker	mov	STR2(%esp), %ecx
125*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
126*8d67ca89SAndroid Build Coastguard Worker	movl	LEN(%esp), %ebx
127*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ebx
128*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8Bytes)
129*8d67ca89SAndroid Build Coastguard Worker# endif
130*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, (%ecx)
131*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail1)
132*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 1(%ecx)
133*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail2)
134*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 2(%ecx)
135*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail3)
136*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 3(%ecx)
137*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail4)
138*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 4(%ecx)
139*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail5)
140*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 5(%ecx)
141*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail6)
142*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 6(%ecx)
143*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail7)
144*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 7(%ecx)
145*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail8)
146*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
147*8d67ca89SAndroid Build Coastguard Worker	cmp	$16, %ebx
148*8d67ca89SAndroid Build Coastguard Worker	jb	L(StrncpyExit15Bytes)
149*8d67ca89SAndroid Build Coastguard Worker# endif
150*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 8(%ecx)
151*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail9)
152*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 9(%ecx)
153*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail10)
154*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 10(%ecx)
155*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail11)
156*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 11(%ecx)
157*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail12)
158*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 12(%ecx)
159*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail13)
160*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 13(%ecx)
161*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail14)
162*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 14(%ecx)
163*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail15)
164*8d67ca89SAndroid Build Coastguard Worker# if defined USE_AS_STRNCPY && !defined USE_AS_STRLCPY
165*8d67ca89SAndroid Build Coastguard Worker	cmp	$16, %ebx
166*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail16)
167*8d67ca89SAndroid Build Coastguard Worker# endif
168*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 15(%ecx)
169*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail16)
170*8d67ca89SAndroid Build Coastguard Worker
171*8d67ca89SAndroid Build Coastguard Worker# if defined USE_AS_STRNCPY && defined USE_AS_STRLCPY
172*8d67ca89SAndroid Build Coastguard Worker	cmp	$16, %ebx
173*8d67ca89SAndroid Build Coastguard Worker	je	L(StrlcpyExitTail16)
174*8d67ca89SAndroid Build Coastguard Worker# endif
175*8d67ca89SAndroid Build Coastguard Worker
176*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%edi)
177*8d67ca89SAndroid Build Coastguard Worker# ifndef USE_AS_STRLCPY
178*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %edi
179*8d67ca89SAndroid Build Coastguard Worker# else
180*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %edi
181*8d67ca89SAndroid Build Coastguard Worker# endif
182*8d67ca89SAndroid Build Coastguard Worker#endif
183*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%esi)
184*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
185*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %esi
186*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
187*8d67ca89SAndroid Build Coastguard Worker	and	$0xf, %esi
188*8d67ca89SAndroid Build Coastguard Worker
189*8d67ca89SAndroid Build Coastguard Worker/* add 16 bytes ecx_offset to ebx */
190*8d67ca89SAndroid Build Coastguard Worker
191*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %ebx
192*8d67ca89SAndroid Build Coastguard Worker#endif
193*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %esi
194*8d67ca89SAndroid Build Coastguard Worker	and	$-16, %esi
195*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
196*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm1
197*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, (%edx)
198*8d67ca89SAndroid Build Coastguard Worker
199*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%esi), %xmm0
200*8d67ca89SAndroid Build Coastguard Worker	movlpd	8(%ecx), %xmm1
201*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 8(%edx)
202*8d67ca89SAndroid Build Coastguard Worker
203*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
204*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %esi
205*8d67ca89SAndroid Build Coastguard Worker
206*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
207*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
208*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
209*8d67ca89SAndroid Build Coastguard Worker#endif
210*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
211*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
212*8d67ca89SAndroid Build Coastguard Worker
213*8d67ca89SAndroid Build Coastguard Worker	mov	%edx, %eax
214*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
215*8d67ca89SAndroid Build Coastguard Worker	and	$-16, %edx
216*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %eax
217*8d67ca89SAndroid Build Coastguard Worker
218*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
219*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %esi
220*8d67ca89SAndroid Build Coastguard Worker	lea	-1(%esi), %esi
221*8d67ca89SAndroid Build Coastguard Worker	and	$1<<31, %esi
222*8d67ca89SAndroid Build Coastguard Worker	test	%esi, %esi
223*8d67ca89SAndroid Build Coastguard Worker	jnz	L(ContinueCopy)
224*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ebx), %ebx
225*8d67ca89SAndroid Build Coastguard Worker
226*8d67ca89SAndroid Build Coastguard WorkerL(ContinueCopy):
227*8d67ca89SAndroid Build Coastguard Worker#endif
228*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %ecx
229*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
230*8d67ca89SAndroid Build Coastguard Worker	and	$0xf, %eax
231*8d67ca89SAndroid Build Coastguard Worker	mov	$0, %esi
232*8d67ca89SAndroid Build Coastguard Worker
233*8d67ca89SAndroid Build Coastguard Worker/* case: ecx_offset == edx_offset */
234*8d67ca89SAndroid Build Coastguard Worker
235*8d67ca89SAndroid Build Coastguard Worker	jz	L(Align16Both)
236*8d67ca89SAndroid Build Coastguard Worker
237*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %eax
238*8d67ca89SAndroid Build Coastguard Worker	jae	L(ShlHigh8)
239*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %eax
240*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl1)
241*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %eax
242*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl2)
243*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %eax
244*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl3)
245*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %eax
246*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl4)
247*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %eax
248*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl5)
249*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %eax
250*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl6)
251*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl7)
252*8d67ca89SAndroid Build Coastguard Worker
253*8d67ca89SAndroid Build Coastguard WorkerL(ShlHigh8):
254*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl8)
255*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %eax
256*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl9)
257*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %eax
258*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl10)
259*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %eax
260*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl11)
261*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %eax
262*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl12)
263*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %eax
264*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl13)
265*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %eax
266*8d67ca89SAndroid Build Coastguard Worker	je	L(Shl14)
267*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl15)
268*8d67ca89SAndroid Build Coastguard Worker
269*8d67ca89SAndroid Build Coastguard WorkerL(Align16Both):
270*8d67ca89SAndroid Build Coastguard Worker	movaps	(%ecx), %xmm1
271*8d67ca89SAndroid Build Coastguard Worker	movaps	16(%ecx), %xmm2
272*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm1, (%edx)
273*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
274*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
275*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
276*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
277*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
278*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
279*8d67ca89SAndroid Build Coastguard Worker#endif
280*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
281*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
282*8d67ca89SAndroid Build Coastguard Worker
283*8d67ca89SAndroid Build Coastguard Worker	movaps	16(%ecx, %esi), %xmm3
284*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx, %esi)
285*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
286*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
287*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
288*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
289*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
290*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
291*8d67ca89SAndroid Build Coastguard Worker#endif
292*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
293*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
294*8d67ca89SAndroid Build Coastguard Worker
295*8d67ca89SAndroid Build Coastguard Worker	movaps	16(%ecx, %esi), %xmm4
296*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, (%edx, %esi)
297*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm4, %xmm0
298*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
299*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
300*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
301*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
302*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
303*8d67ca89SAndroid Build Coastguard Worker#endif
304*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
305*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
306*8d67ca89SAndroid Build Coastguard Worker
307*8d67ca89SAndroid Build Coastguard Worker	movaps	16(%ecx, %esi), %xmm1
308*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, (%edx, %esi)
309*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
310*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
311*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
312*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
313*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
314*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
315*8d67ca89SAndroid Build Coastguard Worker#endif
316*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
317*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
318*8d67ca89SAndroid Build Coastguard Worker
319*8d67ca89SAndroid Build Coastguard Worker	movaps	16(%ecx, %esi), %xmm2
320*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm1, (%edx, %esi)
321*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
322*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
323*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
324*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
325*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
326*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
327*8d67ca89SAndroid Build Coastguard Worker#endif
328*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
329*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
330*8d67ca89SAndroid Build Coastguard Worker
331*8d67ca89SAndroid Build Coastguard Worker	movaps	16(%ecx, %esi), %xmm3
332*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx, %esi)
333*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm3, %xmm0
334*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
335*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
336*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
337*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
338*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
339*8d67ca89SAndroid Build Coastguard Worker#endif
340*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
341*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
342*8d67ca89SAndroid Build Coastguard Worker
343*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, (%edx, %esi)
344*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
345*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx, %esi), %ecx
346*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
347*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
348*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
349*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
350*8d67ca89SAndroid Build Coastguard Worker	lea	112(%ebx, %eax), %ebx
351*8d67ca89SAndroid Build Coastguard Worker#endif
352*8d67ca89SAndroid Build Coastguard Worker	mov	$-0x40, %esi
353*8d67ca89SAndroid Build Coastguard Worker
354*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64Loop):
355*8d67ca89SAndroid Build Coastguard Worker	movaps	(%ecx), %xmm2
356*8d67ca89SAndroid Build Coastguard Worker	movaps	32(%ecx), %xmm3
357*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm4
358*8d67ca89SAndroid Build Coastguard Worker	movaps	16(%ecx), %xmm5
359*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
360*8d67ca89SAndroid Build Coastguard Worker	movaps	48(%ecx), %xmm7
361*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm2
362*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm7, %xmm3
363*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm3
364*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
365*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm3
366*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
367*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %eax
368*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
369*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
370*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeaveCase2OrCase3)
371*8d67ca89SAndroid Build Coastguard Worker#endif
372*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
373*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Aligned64Leave)
374*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, -64(%edx)
375*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, -48(%edx)
376*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm6, -32(%edx)
377*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, -16(%edx)
378*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Aligned64Loop)
379*8d67ca89SAndroid Build Coastguard Worker
380*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64Leave):
381*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
382*8d67ca89SAndroid Build Coastguard Worker	lea	48(%ebx), %ebx
383*8d67ca89SAndroid Build Coastguard Worker#endif
384*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm4, %xmm0
385*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
386*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
387*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
388*8d67ca89SAndroid Build Coastguard Worker
389*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm5, %xmm0
390*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
391*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
392*8d67ca89SAndroid Build Coastguard Worker#endif
393*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
394*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, -64(%edx)
395*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
396*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
397*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
398*8d67ca89SAndroid Build Coastguard Worker
399*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm6, %xmm0
400*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
401*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
402*8d67ca89SAndroid Build Coastguard Worker#endif
403*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
404*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, -48(%edx)
405*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
406*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
407*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
408*8d67ca89SAndroid Build Coastguard Worker
409*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm6, -32(%edx)
410*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm7, %xmm0
411*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
412*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
413*8d67ca89SAndroid Build Coastguard Worker#endif
414*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
415*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
416*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
417*8d67ca89SAndroid Build Coastguard Worker
418*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
419*8d67ca89SAndroid Build Coastguard WorkerL(Shl1):
420*8d67ca89SAndroid Build Coastguard Worker	movaps	-1(%ecx), %xmm1
421*8d67ca89SAndroid Build Coastguard Worker	movaps	15(%ecx), %xmm2
422*8d67ca89SAndroid Build Coastguard WorkerL(Shl1Start):
423*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
424*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
425*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
426*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
427*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
428*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit1Case2OrCase3)
429*8d67ca89SAndroid Build Coastguard Worker#endif
430*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
431*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl1LoopExit)
432*8d67ca89SAndroid Build Coastguard Worker
433*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm1, %xmm2
434*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
435*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
436*8d67ca89SAndroid Build Coastguard Worker	movaps	31(%ecx), %xmm2
437*8d67ca89SAndroid Build Coastguard Worker
438*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
439*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
440*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
441*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
442*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
443*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
444*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
445*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit1Case2OrCase3)
446*8d67ca89SAndroid Build Coastguard Worker#endif
447*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
448*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl1LoopExit)
449*8d67ca89SAndroid Build Coastguard Worker
450*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm1, %xmm2
451*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
452*8d67ca89SAndroid Build Coastguard Worker	movaps	31(%ecx), %xmm2
453*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
454*8d67ca89SAndroid Build Coastguard Worker
455*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
456*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
457*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
458*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
459*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
460*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
461*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
462*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit1Case2OrCase3)
463*8d67ca89SAndroid Build Coastguard Worker#endif
464*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
465*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl1LoopExit)
466*8d67ca89SAndroid Build Coastguard Worker
467*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm1, %xmm2
468*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
469*8d67ca89SAndroid Build Coastguard Worker	movaps	31(%ecx), %xmm2
470*8d67ca89SAndroid Build Coastguard Worker
471*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
472*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
473*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
474*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
475*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
476*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
477*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit1Case2OrCase3)
478*8d67ca89SAndroid Build Coastguard Worker#endif
479*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
480*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl1LoopExit)
481*8d67ca89SAndroid Build Coastguard Worker
482*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm3, %xmm2
483*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
484*8d67ca89SAndroid Build Coastguard Worker	lea	31(%ecx), %ecx
485*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
486*8d67ca89SAndroid Build Coastguard Worker
487*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
488*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
489*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
490*8d67ca89SAndroid Build Coastguard Worker	lea	-15(%ecx), %ecx
491*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
492*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
493*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
494*8d67ca89SAndroid Build Coastguard Worker#endif
495*8d67ca89SAndroid Build Coastguard Worker	movaps	-1(%ecx), %xmm1
496*8d67ca89SAndroid Build Coastguard Worker
497*8d67ca89SAndroid Build Coastguard WorkerL(Shl1LoopStart):
498*8d67ca89SAndroid Build Coastguard Worker	movaps	15(%ecx), %xmm2
499*8d67ca89SAndroid Build Coastguard Worker	movaps	31(%ecx), %xmm3
500*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
501*8d67ca89SAndroid Build Coastguard Worker	movaps	47(%ecx), %xmm4
502*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
503*8d67ca89SAndroid Build Coastguard Worker	movaps	63(%ecx), %xmm5
504*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
505*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
506*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
507*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
508*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
509*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
510*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm4, %xmm5
511*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm3, %xmm4
512*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
513*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl1Start)
514*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
515*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
516*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave1)
517*8d67ca89SAndroid Build Coastguard Worker#endif
518*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm2, %xmm3
519*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
520*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm1, %xmm2
521*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
522*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
523*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
524*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
525*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
526*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
527*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl1LoopStart)
528*8d67ca89SAndroid Build Coastguard Worker
529*8d67ca89SAndroid Build Coastguard WorkerL(Shl1LoopExit):
530*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
531*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
532*8d67ca89SAndroid Build Coastguard Worker	movlpd	7(%ecx), %xmm0
533*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 7(%edx)
534*8d67ca89SAndroid Build Coastguard Worker	mov	$15, %esi
535*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
536*8d67ca89SAndroid Build Coastguard Worker
537*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
538*8d67ca89SAndroid Build Coastguard WorkerL(Shl2):
539*8d67ca89SAndroid Build Coastguard Worker	movaps	-2(%ecx), %xmm1
540*8d67ca89SAndroid Build Coastguard Worker	movaps	14(%ecx), %xmm2
541*8d67ca89SAndroid Build Coastguard WorkerL(Shl2Start):
542*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
543*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
544*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
545*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
546*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
547*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit2Case2OrCase3)
548*8d67ca89SAndroid Build Coastguard Worker#endif
549*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
550*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl2LoopExit)
551*8d67ca89SAndroid Build Coastguard Worker
552*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm1, %xmm2
553*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
554*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
555*8d67ca89SAndroid Build Coastguard Worker	movaps	30(%ecx), %xmm2
556*8d67ca89SAndroid Build Coastguard Worker
557*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
558*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
559*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
560*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
561*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
562*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
563*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
564*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit2Case2OrCase3)
565*8d67ca89SAndroid Build Coastguard Worker#endif
566*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
567*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl2LoopExit)
568*8d67ca89SAndroid Build Coastguard Worker
569*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm1, %xmm2
570*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
571*8d67ca89SAndroid Build Coastguard Worker	movaps	30(%ecx), %xmm2
572*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
573*8d67ca89SAndroid Build Coastguard Worker
574*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
575*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
576*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
577*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
578*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
579*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
580*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
581*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit2Case2OrCase3)
582*8d67ca89SAndroid Build Coastguard Worker#endif
583*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
584*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl2LoopExit)
585*8d67ca89SAndroid Build Coastguard Worker
586*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm1, %xmm2
587*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
588*8d67ca89SAndroid Build Coastguard Worker	movaps	30(%ecx), %xmm2
589*8d67ca89SAndroid Build Coastguard Worker
590*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
591*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
592*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
593*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
594*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
595*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
596*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit2Case2OrCase3)
597*8d67ca89SAndroid Build Coastguard Worker#endif
598*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
599*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl2LoopExit)
600*8d67ca89SAndroid Build Coastguard Worker
601*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm3, %xmm2
602*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
603*8d67ca89SAndroid Build Coastguard Worker	lea	30(%ecx), %ecx
604*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
605*8d67ca89SAndroid Build Coastguard Worker
606*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
607*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
608*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
609*8d67ca89SAndroid Build Coastguard Worker	lea	-14(%ecx), %ecx
610*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
611*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
612*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
613*8d67ca89SAndroid Build Coastguard Worker#endif
614*8d67ca89SAndroid Build Coastguard Worker	movaps	-2(%ecx), %xmm1
615*8d67ca89SAndroid Build Coastguard Worker
616*8d67ca89SAndroid Build Coastguard WorkerL(Shl2LoopStart):
617*8d67ca89SAndroid Build Coastguard Worker	movaps	14(%ecx), %xmm2
618*8d67ca89SAndroid Build Coastguard Worker	movaps	30(%ecx), %xmm3
619*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
620*8d67ca89SAndroid Build Coastguard Worker	movaps	46(%ecx), %xmm4
621*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
622*8d67ca89SAndroid Build Coastguard Worker	movaps	62(%ecx), %xmm5
623*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
624*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
625*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
626*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
627*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
628*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
629*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm4, %xmm5
630*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm3, %xmm4
631*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
632*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl2Start)
633*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
634*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
635*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave2)
636*8d67ca89SAndroid Build Coastguard Worker#endif
637*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm2, %xmm3
638*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
639*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm1, %xmm2
640*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
641*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
642*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
643*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
644*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
645*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
646*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl2LoopStart)
647*8d67ca89SAndroid Build Coastguard Worker
648*8d67ca89SAndroid Build Coastguard WorkerL(Shl2LoopExit):
649*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
650*8d67ca89SAndroid Build Coastguard Worker	movlpd	6(%ecx), %xmm1
651*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
652*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 6(%edx)
653*8d67ca89SAndroid Build Coastguard Worker	mov	$14, %esi
654*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
655*8d67ca89SAndroid Build Coastguard Worker
656*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
657*8d67ca89SAndroid Build Coastguard WorkerL(Shl3):
658*8d67ca89SAndroid Build Coastguard Worker	movaps	-3(%ecx), %xmm1
659*8d67ca89SAndroid Build Coastguard Worker	movaps	13(%ecx), %xmm2
660*8d67ca89SAndroid Build Coastguard WorkerL(Shl3Start):
661*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
662*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
663*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
664*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
665*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
666*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit3Case2OrCase3)
667*8d67ca89SAndroid Build Coastguard Worker#endif
668*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
669*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl3LoopExit)
670*8d67ca89SAndroid Build Coastguard Worker
671*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm1, %xmm2
672*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
673*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
674*8d67ca89SAndroid Build Coastguard Worker	movaps	29(%ecx), %xmm2
675*8d67ca89SAndroid Build Coastguard Worker
676*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
677*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
678*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
679*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
680*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
681*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
682*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
683*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit3Case2OrCase3)
684*8d67ca89SAndroid Build Coastguard Worker#endif
685*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
686*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl3LoopExit)
687*8d67ca89SAndroid Build Coastguard Worker
688*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm1, %xmm2
689*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
690*8d67ca89SAndroid Build Coastguard Worker	movaps	29(%ecx), %xmm2
691*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
692*8d67ca89SAndroid Build Coastguard Worker
693*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
694*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
695*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
696*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
697*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
698*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
699*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
700*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit3Case2OrCase3)
701*8d67ca89SAndroid Build Coastguard Worker#endif
702*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
703*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl3LoopExit)
704*8d67ca89SAndroid Build Coastguard Worker
705*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm1, %xmm2
706*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
707*8d67ca89SAndroid Build Coastguard Worker	movaps	29(%ecx), %xmm2
708*8d67ca89SAndroid Build Coastguard Worker
709*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
710*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
711*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
712*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
713*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
714*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
715*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit3Case2OrCase3)
716*8d67ca89SAndroid Build Coastguard Worker#endif
717*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
718*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl3LoopExit)
719*8d67ca89SAndroid Build Coastguard Worker
720*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm3, %xmm2
721*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
722*8d67ca89SAndroid Build Coastguard Worker	lea	29(%ecx), %ecx
723*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
724*8d67ca89SAndroid Build Coastguard Worker
725*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
726*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
727*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
728*8d67ca89SAndroid Build Coastguard Worker	lea	-13(%ecx), %ecx
729*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
730*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
731*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
732*8d67ca89SAndroid Build Coastguard Worker#endif
733*8d67ca89SAndroid Build Coastguard Worker	movaps	-3(%ecx), %xmm1
734*8d67ca89SAndroid Build Coastguard Worker
735*8d67ca89SAndroid Build Coastguard WorkerL(Shl3LoopStart):
736*8d67ca89SAndroid Build Coastguard Worker	movaps	13(%ecx), %xmm2
737*8d67ca89SAndroid Build Coastguard Worker	movaps	29(%ecx), %xmm3
738*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
739*8d67ca89SAndroid Build Coastguard Worker	movaps	45(%ecx), %xmm4
740*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
741*8d67ca89SAndroid Build Coastguard Worker	movaps	61(%ecx), %xmm5
742*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
743*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
744*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
745*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
746*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
747*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
748*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm4, %xmm5
749*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm3, %xmm4
750*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
751*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl3Start)
752*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
753*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
754*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave3)
755*8d67ca89SAndroid Build Coastguard Worker#endif
756*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm2, %xmm3
757*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
758*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm1, %xmm2
759*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
760*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
761*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
762*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
763*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
764*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
765*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl3LoopStart)
766*8d67ca89SAndroid Build Coastguard Worker
767*8d67ca89SAndroid Build Coastguard WorkerL(Shl3LoopExit):
768*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
769*8d67ca89SAndroid Build Coastguard Worker	movlpd	5(%ecx), %xmm1
770*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
771*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 5(%edx)
772*8d67ca89SAndroid Build Coastguard Worker	mov	$13, %esi
773*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
774*8d67ca89SAndroid Build Coastguard Worker
775*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
776*8d67ca89SAndroid Build Coastguard WorkerL(Shl4):
777*8d67ca89SAndroid Build Coastguard Worker	movaps	-4(%ecx), %xmm1
778*8d67ca89SAndroid Build Coastguard Worker	movaps	12(%ecx), %xmm2
779*8d67ca89SAndroid Build Coastguard WorkerL(Shl4Start):
780*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
781*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
782*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
783*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
784*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
785*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit4Case2OrCase3)
786*8d67ca89SAndroid Build Coastguard Worker#endif
787*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
788*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl4LoopExit)
789*8d67ca89SAndroid Build Coastguard Worker
790*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm1, %xmm2
791*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
792*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
793*8d67ca89SAndroid Build Coastguard Worker	movaps	28(%ecx), %xmm2
794*8d67ca89SAndroid Build Coastguard Worker
795*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
796*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
797*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
798*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
799*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
800*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
801*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
802*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit4Case2OrCase3)
803*8d67ca89SAndroid Build Coastguard Worker#endif
804*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
805*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl4LoopExit)
806*8d67ca89SAndroid Build Coastguard Worker
807*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm1, %xmm2
808*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
809*8d67ca89SAndroid Build Coastguard Worker	movaps	28(%ecx), %xmm2
810*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
811*8d67ca89SAndroid Build Coastguard Worker
812*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
813*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
814*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
815*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
816*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
817*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
818*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
819*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit4Case2OrCase3)
820*8d67ca89SAndroid Build Coastguard Worker#endif
821*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
822*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl4LoopExit)
823*8d67ca89SAndroid Build Coastguard Worker
824*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm1, %xmm2
825*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
826*8d67ca89SAndroid Build Coastguard Worker	movaps	28(%ecx), %xmm2
827*8d67ca89SAndroid Build Coastguard Worker
828*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
829*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
830*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
831*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
832*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
833*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
834*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit4Case2OrCase3)
835*8d67ca89SAndroid Build Coastguard Worker#endif
836*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
837*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl4LoopExit)
838*8d67ca89SAndroid Build Coastguard Worker
839*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm3, %xmm2
840*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
841*8d67ca89SAndroid Build Coastguard Worker	lea	28(%ecx), %ecx
842*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
843*8d67ca89SAndroid Build Coastguard Worker
844*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
845*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
846*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
847*8d67ca89SAndroid Build Coastguard Worker	lea	-12(%ecx), %ecx
848*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
849*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
850*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
851*8d67ca89SAndroid Build Coastguard Worker#endif
852*8d67ca89SAndroid Build Coastguard Worker	movaps	-4(%ecx), %xmm1
853*8d67ca89SAndroid Build Coastguard Worker
854*8d67ca89SAndroid Build Coastguard WorkerL(Shl4LoopStart):
855*8d67ca89SAndroid Build Coastguard Worker	movaps	12(%ecx), %xmm2
856*8d67ca89SAndroid Build Coastguard Worker	movaps	28(%ecx), %xmm3
857*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
858*8d67ca89SAndroid Build Coastguard Worker	movaps	44(%ecx), %xmm4
859*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
860*8d67ca89SAndroid Build Coastguard Worker	movaps	60(%ecx), %xmm5
861*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
862*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
863*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
864*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
865*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
866*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
867*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm4, %xmm5
868*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm3, %xmm4
869*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
870*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl4Start)
871*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
872*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
873*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave4)
874*8d67ca89SAndroid Build Coastguard Worker#endif
875*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm2, %xmm3
876*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
877*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm1, %xmm2
878*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
879*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
880*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
881*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
882*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
883*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
884*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl4LoopStart)
885*8d67ca89SAndroid Build Coastguard Worker
886*8d67ca89SAndroid Build Coastguard WorkerL(Shl4LoopExit):
887*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
888*8d67ca89SAndroid Build Coastguard Worker	movl	8(%ecx), %esi
889*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
890*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, 8(%edx)
891*8d67ca89SAndroid Build Coastguard Worker	mov	$12, %esi
892*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
893*8d67ca89SAndroid Build Coastguard Worker
894*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
895*8d67ca89SAndroid Build Coastguard WorkerL(Shl5):
896*8d67ca89SAndroid Build Coastguard Worker	movaps	-5(%ecx), %xmm1
897*8d67ca89SAndroid Build Coastguard Worker	movaps	11(%ecx), %xmm2
898*8d67ca89SAndroid Build Coastguard WorkerL(Shl5Start):
899*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
900*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
901*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
902*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
903*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
904*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit5Case2OrCase3)
905*8d67ca89SAndroid Build Coastguard Worker#endif
906*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
907*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl5LoopExit)
908*8d67ca89SAndroid Build Coastguard Worker
909*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm1, %xmm2
910*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
911*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
912*8d67ca89SAndroid Build Coastguard Worker	movaps	27(%ecx), %xmm2
913*8d67ca89SAndroid Build Coastguard Worker
914*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
915*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
916*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
917*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
918*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
919*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
920*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
921*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit5Case2OrCase3)
922*8d67ca89SAndroid Build Coastguard Worker#endif
923*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
924*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl5LoopExit)
925*8d67ca89SAndroid Build Coastguard Worker
926*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm1, %xmm2
927*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
928*8d67ca89SAndroid Build Coastguard Worker	movaps	27(%ecx), %xmm2
929*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
930*8d67ca89SAndroid Build Coastguard Worker
931*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
932*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
933*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
934*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
935*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
936*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
937*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
938*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit5Case2OrCase3)
939*8d67ca89SAndroid Build Coastguard Worker#endif
940*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
941*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl5LoopExit)
942*8d67ca89SAndroid Build Coastguard Worker
943*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm1, %xmm2
944*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
945*8d67ca89SAndroid Build Coastguard Worker	movaps	27(%ecx), %xmm2
946*8d67ca89SAndroid Build Coastguard Worker
947*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
948*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
949*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
950*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
951*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
952*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
953*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit5Case2OrCase3)
954*8d67ca89SAndroid Build Coastguard Worker#endif
955*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
956*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl5LoopExit)
957*8d67ca89SAndroid Build Coastguard Worker
958*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm3, %xmm2
959*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
960*8d67ca89SAndroid Build Coastguard Worker	lea	27(%ecx), %ecx
961*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
962*8d67ca89SAndroid Build Coastguard Worker
963*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
964*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
965*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
966*8d67ca89SAndroid Build Coastguard Worker	lea	-11(%ecx), %ecx
967*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
968*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
969*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
970*8d67ca89SAndroid Build Coastguard Worker#endif
971*8d67ca89SAndroid Build Coastguard Worker	movaps	-5(%ecx), %xmm1
972*8d67ca89SAndroid Build Coastguard Worker
973*8d67ca89SAndroid Build Coastguard WorkerL(Shl5LoopStart):
974*8d67ca89SAndroid Build Coastguard Worker	movaps	11(%ecx), %xmm2
975*8d67ca89SAndroid Build Coastguard Worker	movaps	27(%ecx), %xmm3
976*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
977*8d67ca89SAndroid Build Coastguard Worker	movaps	43(%ecx), %xmm4
978*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
979*8d67ca89SAndroid Build Coastguard Worker	movaps	59(%ecx), %xmm5
980*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
981*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
982*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
983*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
984*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
985*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
986*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm4, %xmm5
987*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm3, %xmm4
988*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
989*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl5Start)
990*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
991*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
992*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave5)
993*8d67ca89SAndroid Build Coastguard Worker#endif
994*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm2, %xmm3
995*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
996*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm1, %xmm2
997*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
998*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
999*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1000*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1001*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1002*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1003*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl5LoopStart)
1004*8d67ca89SAndroid Build Coastguard Worker
1005*8d67ca89SAndroid Build Coastguard WorkerL(Shl5LoopExit):
1006*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
1007*8d67ca89SAndroid Build Coastguard Worker	movl	7(%ecx), %esi
1008*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
1009*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, 7(%edx)
1010*8d67ca89SAndroid Build Coastguard Worker	mov	$11, %esi
1011*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1012*8d67ca89SAndroid Build Coastguard Worker
1013*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1014*8d67ca89SAndroid Build Coastguard WorkerL(Shl6):
1015*8d67ca89SAndroid Build Coastguard Worker	movaps	-6(%ecx), %xmm1
1016*8d67ca89SAndroid Build Coastguard Worker	movaps	10(%ecx), %xmm2
1017*8d67ca89SAndroid Build Coastguard WorkerL(Shl6Start):
1018*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1019*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1020*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1021*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1022*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1023*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit6Case2OrCase3)
1024*8d67ca89SAndroid Build Coastguard Worker#endif
1025*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1026*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl6LoopExit)
1027*8d67ca89SAndroid Build Coastguard Worker
1028*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm1, %xmm2
1029*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1030*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1031*8d67ca89SAndroid Build Coastguard Worker	movaps	26(%ecx), %xmm2
1032*8d67ca89SAndroid Build Coastguard Worker
1033*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1034*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1035*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1036*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1037*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1038*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1039*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1040*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit6Case2OrCase3)
1041*8d67ca89SAndroid Build Coastguard Worker#endif
1042*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1043*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl6LoopExit)
1044*8d67ca89SAndroid Build Coastguard Worker
1045*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm1, %xmm2
1046*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1047*8d67ca89SAndroid Build Coastguard Worker	movaps	26(%ecx), %xmm2
1048*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1049*8d67ca89SAndroid Build Coastguard Worker
1050*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1051*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1052*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1053*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1054*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1055*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1056*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1057*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit6Case2OrCase3)
1058*8d67ca89SAndroid Build Coastguard Worker#endif
1059*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1060*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl6LoopExit)
1061*8d67ca89SAndroid Build Coastguard Worker
1062*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm1, %xmm2
1063*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1064*8d67ca89SAndroid Build Coastguard Worker	movaps	26(%ecx), %xmm2
1065*8d67ca89SAndroid Build Coastguard Worker
1066*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1067*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1068*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1069*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1070*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1071*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1072*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit6Case2OrCase3)
1073*8d67ca89SAndroid Build Coastguard Worker#endif
1074*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1075*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl6LoopExit)
1076*8d67ca89SAndroid Build Coastguard Worker
1077*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm3, %xmm2
1078*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1079*8d67ca89SAndroid Build Coastguard Worker	lea	26(%ecx), %ecx
1080*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1081*8d67ca89SAndroid Build Coastguard Worker
1082*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
1083*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
1084*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1085*8d67ca89SAndroid Build Coastguard Worker	lea	-10(%ecx), %ecx
1086*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
1087*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1088*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
1089*8d67ca89SAndroid Build Coastguard Worker#endif
1090*8d67ca89SAndroid Build Coastguard Worker	movaps	-6(%ecx), %xmm1
1091*8d67ca89SAndroid Build Coastguard Worker
1092*8d67ca89SAndroid Build Coastguard WorkerL(Shl6LoopStart):
1093*8d67ca89SAndroid Build Coastguard Worker	movaps	10(%ecx), %xmm2
1094*8d67ca89SAndroid Build Coastguard Worker	movaps	26(%ecx), %xmm3
1095*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
1096*8d67ca89SAndroid Build Coastguard Worker	movaps	42(%ecx), %xmm4
1097*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
1098*8d67ca89SAndroid Build Coastguard Worker	movaps	58(%ecx), %xmm5
1099*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
1100*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
1101*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
1102*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
1103*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
1104*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
1105*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm4, %xmm5
1106*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm3, %xmm4
1107*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1108*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl6Start)
1109*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1110*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
1111*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave6)
1112*8d67ca89SAndroid Build Coastguard Worker#endif
1113*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm2, %xmm3
1114*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
1115*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm1, %xmm2
1116*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
1117*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
1118*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1119*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1120*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1121*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1122*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl6LoopStart)
1123*8d67ca89SAndroid Build Coastguard Worker
1124*8d67ca89SAndroid Build Coastguard WorkerL(Shl6LoopExit):
1125*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
1126*8d67ca89SAndroid Build Coastguard Worker	movl	6(%ecx), %esi
1127*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
1128*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, 6(%edx)
1129*8d67ca89SAndroid Build Coastguard Worker	mov	$10, %esi
1130*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1131*8d67ca89SAndroid Build Coastguard Worker
1132*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1133*8d67ca89SAndroid Build Coastguard WorkerL(Shl7):
1134*8d67ca89SAndroid Build Coastguard Worker	movaps	-7(%ecx), %xmm1
1135*8d67ca89SAndroid Build Coastguard Worker	movaps	9(%ecx), %xmm2
1136*8d67ca89SAndroid Build Coastguard WorkerL(Shl7Start):
1137*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1138*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1139*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1140*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1141*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1142*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit7Case2OrCase3)
1143*8d67ca89SAndroid Build Coastguard Worker#endif
1144*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1145*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl7LoopExit)
1146*8d67ca89SAndroid Build Coastguard Worker
1147*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm1, %xmm2
1148*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1149*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1150*8d67ca89SAndroid Build Coastguard Worker	movaps	25(%ecx), %xmm2
1151*8d67ca89SAndroid Build Coastguard Worker
1152*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1153*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1154*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1155*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1156*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1157*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1158*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1159*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit7Case2OrCase3)
1160*8d67ca89SAndroid Build Coastguard Worker#endif
1161*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1162*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl7LoopExit)
1163*8d67ca89SAndroid Build Coastguard Worker
1164*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm1, %xmm2
1165*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1166*8d67ca89SAndroid Build Coastguard Worker	movaps	25(%ecx), %xmm2
1167*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1168*8d67ca89SAndroid Build Coastguard Worker
1169*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1170*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1171*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1172*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1173*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1174*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1175*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1176*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit7Case2OrCase3)
1177*8d67ca89SAndroid Build Coastguard Worker#endif
1178*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1179*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl7LoopExit)
1180*8d67ca89SAndroid Build Coastguard Worker
1181*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm1, %xmm2
1182*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1183*8d67ca89SAndroid Build Coastguard Worker	movaps	25(%ecx), %xmm2
1184*8d67ca89SAndroid Build Coastguard Worker
1185*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1186*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1187*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1188*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1189*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1190*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1191*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit7Case2OrCase3)
1192*8d67ca89SAndroid Build Coastguard Worker#endif
1193*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1194*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl7LoopExit)
1195*8d67ca89SAndroid Build Coastguard Worker
1196*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm3, %xmm2
1197*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1198*8d67ca89SAndroid Build Coastguard Worker	lea	25(%ecx), %ecx
1199*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1200*8d67ca89SAndroid Build Coastguard Worker
1201*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
1202*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
1203*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1204*8d67ca89SAndroid Build Coastguard Worker	lea	-9(%ecx), %ecx
1205*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
1206*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1207*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
1208*8d67ca89SAndroid Build Coastguard Worker#endif
1209*8d67ca89SAndroid Build Coastguard Worker	movaps	-7(%ecx), %xmm1
1210*8d67ca89SAndroid Build Coastguard Worker
1211*8d67ca89SAndroid Build Coastguard WorkerL(Shl7LoopStart):
1212*8d67ca89SAndroid Build Coastguard Worker	movaps	9(%ecx), %xmm2
1213*8d67ca89SAndroid Build Coastguard Worker	movaps	25(%ecx), %xmm3
1214*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
1215*8d67ca89SAndroid Build Coastguard Worker	movaps	41(%ecx), %xmm4
1216*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
1217*8d67ca89SAndroid Build Coastguard Worker	movaps	57(%ecx), %xmm5
1218*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
1219*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
1220*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
1221*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
1222*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
1223*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
1224*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm4, %xmm5
1225*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm3, %xmm4
1226*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1227*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl7Start)
1228*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1229*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
1230*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave7)
1231*8d67ca89SAndroid Build Coastguard Worker#endif
1232*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm2, %xmm3
1233*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
1234*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm1, %xmm2
1235*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
1236*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
1237*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1238*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1239*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1240*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1241*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl7LoopStart)
1242*8d67ca89SAndroid Build Coastguard Worker
1243*8d67ca89SAndroid Build Coastguard WorkerL(Shl7LoopExit):
1244*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
1245*8d67ca89SAndroid Build Coastguard Worker	movl	5(%ecx), %esi
1246*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
1247*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, 5(%edx)
1248*8d67ca89SAndroid Build Coastguard Worker	mov	$9, %esi
1249*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1250*8d67ca89SAndroid Build Coastguard Worker
1251*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1252*8d67ca89SAndroid Build Coastguard WorkerL(Shl8):
1253*8d67ca89SAndroid Build Coastguard Worker	movaps	-8(%ecx), %xmm1
1254*8d67ca89SAndroid Build Coastguard Worker	movaps	8(%ecx), %xmm2
1255*8d67ca89SAndroid Build Coastguard WorkerL(Shl8Start):
1256*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1257*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1258*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1259*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1260*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1261*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8Case2OrCase3)
1262*8d67ca89SAndroid Build Coastguard Worker#endif
1263*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1264*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl8LoopExit)
1265*8d67ca89SAndroid Build Coastguard Worker
1266*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm1, %xmm2
1267*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1268*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1269*8d67ca89SAndroid Build Coastguard Worker	movaps	24(%ecx), %xmm2
1270*8d67ca89SAndroid Build Coastguard Worker
1271*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1272*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1273*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1274*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1275*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1276*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1277*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1278*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8Case2OrCase3)
1279*8d67ca89SAndroid Build Coastguard Worker#endif
1280*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1281*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl8LoopExit)
1282*8d67ca89SAndroid Build Coastguard Worker
1283*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm1, %xmm2
1284*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1285*8d67ca89SAndroid Build Coastguard Worker	movaps	24(%ecx), %xmm2
1286*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1287*8d67ca89SAndroid Build Coastguard Worker
1288*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1289*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1290*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1291*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1292*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1293*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1294*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1295*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8Case2OrCase3)
1296*8d67ca89SAndroid Build Coastguard Worker#endif
1297*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1298*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl8LoopExit)
1299*8d67ca89SAndroid Build Coastguard Worker
1300*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm1, %xmm2
1301*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1302*8d67ca89SAndroid Build Coastguard Worker	movaps	24(%ecx), %xmm2
1303*8d67ca89SAndroid Build Coastguard Worker
1304*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1305*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1306*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1307*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1308*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1309*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1310*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8Case2OrCase3)
1311*8d67ca89SAndroid Build Coastguard Worker#endif
1312*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1313*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl8LoopExit)
1314*8d67ca89SAndroid Build Coastguard Worker
1315*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm3, %xmm2
1316*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1317*8d67ca89SAndroid Build Coastguard Worker	lea	24(%ecx), %ecx
1318*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1319*8d67ca89SAndroid Build Coastguard Worker
1320*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
1321*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
1322*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1323*8d67ca89SAndroid Build Coastguard Worker	lea	-8(%ecx), %ecx
1324*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
1325*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1326*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
1327*8d67ca89SAndroid Build Coastguard Worker#endif
1328*8d67ca89SAndroid Build Coastguard Worker	movaps	-8(%ecx), %xmm1
1329*8d67ca89SAndroid Build Coastguard Worker
1330*8d67ca89SAndroid Build Coastguard WorkerL(Shl8LoopStart):
1331*8d67ca89SAndroid Build Coastguard Worker	movaps	8(%ecx), %xmm2
1332*8d67ca89SAndroid Build Coastguard Worker	movaps	24(%ecx), %xmm3
1333*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
1334*8d67ca89SAndroid Build Coastguard Worker	movaps	40(%ecx), %xmm4
1335*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
1336*8d67ca89SAndroid Build Coastguard Worker	movaps	56(%ecx), %xmm5
1337*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
1338*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
1339*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
1340*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
1341*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
1342*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
1343*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm4, %xmm5
1344*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm3, %xmm4
1345*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1346*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl8Start)
1347*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1348*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
1349*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave8)
1350*8d67ca89SAndroid Build Coastguard Worker#endif
1351*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm2, %xmm3
1352*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
1353*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm1, %xmm2
1354*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
1355*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
1356*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1357*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1358*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1359*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1360*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl8LoopStart)
1361*8d67ca89SAndroid Build Coastguard Worker
1362*8d67ca89SAndroid Build Coastguard WorkerL(Shl8LoopExit):
1363*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
1364*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
1365*8d67ca89SAndroid Build Coastguard Worker	mov	$8, %esi
1366*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1367*8d67ca89SAndroid Build Coastguard Worker
1368*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1369*8d67ca89SAndroid Build Coastguard WorkerL(Shl9):
1370*8d67ca89SAndroid Build Coastguard Worker	movaps	-9(%ecx), %xmm1
1371*8d67ca89SAndroid Build Coastguard Worker	movaps	7(%ecx), %xmm2
1372*8d67ca89SAndroid Build Coastguard WorkerL(Shl9Start):
1373*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1374*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1375*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1376*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1377*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1378*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit9Case2OrCase3)
1379*8d67ca89SAndroid Build Coastguard Worker#endif
1380*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1381*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl9LoopExit)
1382*8d67ca89SAndroid Build Coastguard Worker
1383*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm1, %xmm2
1384*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1385*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1386*8d67ca89SAndroid Build Coastguard Worker	movaps	23(%ecx), %xmm2
1387*8d67ca89SAndroid Build Coastguard Worker
1388*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1389*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1390*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1391*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1392*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1393*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1394*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1395*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit9Case2OrCase3)
1396*8d67ca89SAndroid Build Coastguard Worker#endif
1397*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1398*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl9LoopExit)
1399*8d67ca89SAndroid Build Coastguard Worker
1400*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm1, %xmm2
1401*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1402*8d67ca89SAndroid Build Coastguard Worker	movaps	23(%ecx), %xmm2
1403*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1404*8d67ca89SAndroid Build Coastguard Worker
1405*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1406*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1407*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1408*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1409*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1410*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1411*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1412*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit9Case2OrCase3)
1413*8d67ca89SAndroid Build Coastguard Worker#endif
1414*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1415*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl9LoopExit)
1416*8d67ca89SAndroid Build Coastguard Worker
1417*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm1, %xmm2
1418*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1419*8d67ca89SAndroid Build Coastguard Worker	movaps	23(%ecx), %xmm2
1420*8d67ca89SAndroid Build Coastguard Worker
1421*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1422*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1423*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1424*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1425*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1426*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1427*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit9Case2OrCase3)
1428*8d67ca89SAndroid Build Coastguard Worker#endif
1429*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1430*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl9LoopExit)
1431*8d67ca89SAndroid Build Coastguard Worker
1432*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm3, %xmm2
1433*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1434*8d67ca89SAndroid Build Coastguard Worker	lea	23(%ecx), %ecx
1435*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1436*8d67ca89SAndroid Build Coastguard Worker
1437*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
1438*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
1439*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1440*8d67ca89SAndroid Build Coastguard Worker	lea	-7(%ecx), %ecx
1441*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
1442*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1443*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
1444*8d67ca89SAndroid Build Coastguard Worker#endif
1445*8d67ca89SAndroid Build Coastguard Worker	movaps	-9(%ecx), %xmm1
1446*8d67ca89SAndroid Build Coastguard Worker
1447*8d67ca89SAndroid Build Coastguard WorkerL(Shl9LoopStart):
1448*8d67ca89SAndroid Build Coastguard Worker	movaps	7(%ecx), %xmm2
1449*8d67ca89SAndroid Build Coastguard Worker	movaps	23(%ecx), %xmm3
1450*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
1451*8d67ca89SAndroid Build Coastguard Worker	movaps	39(%ecx), %xmm4
1452*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
1453*8d67ca89SAndroid Build Coastguard Worker	movaps	55(%ecx), %xmm5
1454*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
1455*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
1456*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
1457*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
1458*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
1459*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
1460*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm4, %xmm5
1461*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm3, %xmm4
1462*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1463*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl9Start)
1464*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1465*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
1466*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave9)
1467*8d67ca89SAndroid Build Coastguard Worker#endif
1468*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm2, %xmm3
1469*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
1470*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm1, %xmm2
1471*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
1472*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
1473*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1474*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1475*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1476*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1477*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl9LoopStart)
1478*8d67ca89SAndroid Build Coastguard Worker
1479*8d67ca89SAndroid Build Coastguard WorkerL(Shl9LoopExit):
1480*8d67ca89SAndroid Build Coastguard Worker	movlpd	-1(%ecx), %xmm0
1481*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -1(%edx)
1482*8d67ca89SAndroid Build Coastguard Worker	mov	$7, %esi
1483*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1484*8d67ca89SAndroid Build Coastguard Worker
1485*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1486*8d67ca89SAndroid Build Coastguard WorkerL(Shl10):
1487*8d67ca89SAndroid Build Coastguard Worker	movaps	-10(%ecx), %xmm1
1488*8d67ca89SAndroid Build Coastguard Worker	movaps	6(%ecx), %xmm2
1489*8d67ca89SAndroid Build Coastguard WorkerL(Shl10Start):
1490*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1491*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1492*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1493*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1494*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1495*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit10Case2OrCase3)
1496*8d67ca89SAndroid Build Coastguard Worker#endif
1497*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1498*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl10LoopExit)
1499*8d67ca89SAndroid Build Coastguard Worker
1500*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm1, %xmm2
1501*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1502*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1503*8d67ca89SAndroid Build Coastguard Worker	movaps	22(%ecx), %xmm2
1504*8d67ca89SAndroid Build Coastguard Worker
1505*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1506*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1507*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1508*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1509*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1510*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1511*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1512*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit10Case2OrCase3)
1513*8d67ca89SAndroid Build Coastguard Worker#endif
1514*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1515*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl10LoopExit)
1516*8d67ca89SAndroid Build Coastguard Worker
1517*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm1, %xmm2
1518*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1519*8d67ca89SAndroid Build Coastguard Worker	movaps	22(%ecx), %xmm2
1520*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1521*8d67ca89SAndroid Build Coastguard Worker
1522*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1523*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1524*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1525*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1526*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1527*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1528*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1529*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit10Case2OrCase3)
1530*8d67ca89SAndroid Build Coastguard Worker#endif
1531*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1532*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl10LoopExit)
1533*8d67ca89SAndroid Build Coastguard Worker
1534*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm1, %xmm2
1535*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1536*8d67ca89SAndroid Build Coastguard Worker	movaps	22(%ecx), %xmm2
1537*8d67ca89SAndroid Build Coastguard Worker
1538*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1539*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1540*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1541*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1542*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1543*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1544*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit10Case2OrCase3)
1545*8d67ca89SAndroid Build Coastguard Worker#endif
1546*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1547*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl10LoopExit)
1548*8d67ca89SAndroid Build Coastguard Worker
1549*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm3, %xmm2
1550*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1551*8d67ca89SAndroid Build Coastguard Worker	lea	22(%ecx), %ecx
1552*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1553*8d67ca89SAndroid Build Coastguard Worker
1554*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
1555*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
1556*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1557*8d67ca89SAndroid Build Coastguard Worker	lea	-6(%ecx), %ecx
1558*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
1559*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1560*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
1561*8d67ca89SAndroid Build Coastguard Worker#endif
1562*8d67ca89SAndroid Build Coastguard Worker	movaps	-10(%ecx), %xmm1
1563*8d67ca89SAndroid Build Coastguard Worker
1564*8d67ca89SAndroid Build Coastguard WorkerL(Shl10LoopStart):
1565*8d67ca89SAndroid Build Coastguard Worker	movaps	6(%ecx), %xmm2
1566*8d67ca89SAndroid Build Coastguard Worker	movaps	22(%ecx), %xmm3
1567*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
1568*8d67ca89SAndroid Build Coastguard Worker	movaps	38(%ecx), %xmm4
1569*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
1570*8d67ca89SAndroid Build Coastguard Worker	movaps	54(%ecx), %xmm5
1571*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
1572*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
1573*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
1574*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
1575*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
1576*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
1577*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm4, %xmm5
1578*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm3, %xmm4
1579*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1580*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl10Start)
1581*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1582*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
1583*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave10)
1584*8d67ca89SAndroid Build Coastguard Worker#endif
1585*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm2, %xmm3
1586*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
1587*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm1, %xmm2
1588*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
1589*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
1590*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1591*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1592*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1593*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1594*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl10LoopStart)
1595*8d67ca89SAndroid Build Coastguard Worker
1596*8d67ca89SAndroid Build Coastguard WorkerL(Shl10LoopExit):
1597*8d67ca89SAndroid Build Coastguard Worker	movlpd	-2(%ecx), %xmm0
1598*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -2(%edx)
1599*8d67ca89SAndroid Build Coastguard Worker	mov	$6, %esi
1600*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1601*8d67ca89SAndroid Build Coastguard Worker
1602*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1603*8d67ca89SAndroid Build Coastguard WorkerL(Shl11):
1604*8d67ca89SAndroid Build Coastguard Worker	movaps	-11(%ecx), %xmm1
1605*8d67ca89SAndroid Build Coastguard Worker	movaps	5(%ecx), %xmm2
1606*8d67ca89SAndroid Build Coastguard WorkerL(Shl11Start):
1607*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1608*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1609*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1610*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1611*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1612*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit11Case2OrCase3)
1613*8d67ca89SAndroid Build Coastguard Worker#endif
1614*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1615*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl11LoopExit)
1616*8d67ca89SAndroid Build Coastguard Worker
1617*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm1, %xmm2
1618*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1619*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1620*8d67ca89SAndroid Build Coastguard Worker	movaps	21(%ecx), %xmm2
1621*8d67ca89SAndroid Build Coastguard Worker
1622*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1623*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1624*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1625*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1626*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1627*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1628*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1629*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit11Case2OrCase3)
1630*8d67ca89SAndroid Build Coastguard Worker#endif
1631*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1632*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl11LoopExit)
1633*8d67ca89SAndroid Build Coastguard Worker
1634*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm1, %xmm2
1635*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1636*8d67ca89SAndroid Build Coastguard Worker	movaps	21(%ecx), %xmm2
1637*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1638*8d67ca89SAndroid Build Coastguard Worker
1639*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1640*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1641*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1642*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1643*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1644*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1645*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1646*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit11Case2OrCase3)
1647*8d67ca89SAndroid Build Coastguard Worker#endif
1648*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1649*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl11LoopExit)
1650*8d67ca89SAndroid Build Coastguard Worker
1651*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm1, %xmm2
1652*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1653*8d67ca89SAndroid Build Coastguard Worker	movaps	21(%ecx), %xmm2
1654*8d67ca89SAndroid Build Coastguard Worker
1655*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1656*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1657*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1658*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1659*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1660*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1661*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit11Case2OrCase3)
1662*8d67ca89SAndroid Build Coastguard Worker#endif
1663*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1664*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl11LoopExit)
1665*8d67ca89SAndroid Build Coastguard Worker
1666*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm3, %xmm2
1667*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1668*8d67ca89SAndroid Build Coastguard Worker	lea	21(%ecx), %ecx
1669*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1670*8d67ca89SAndroid Build Coastguard Worker
1671*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
1672*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
1673*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1674*8d67ca89SAndroid Build Coastguard Worker	lea	-5(%ecx), %ecx
1675*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
1676*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1677*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
1678*8d67ca89SAndroid Build Coastguard Worker#endif
1679*8d67ca89SAndroid Build Coastguard Worker	movaps	-11(%ecx), %xmm1
1680*8d67ca89SAndroid Build Coastguard Worker
1681*8d67ca89SAndroid Build Coastguard WorkerL(Shl11LoopStart):
1682*8d67ca89SAndroid Build Coastguard Worker	movaps	5(%ecx), %xmm2
1683*8d67ca89SAndroid Build Coastguard Worker	movaps	21(%ecx), %xmm3
1684*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
1685*8d67ca89SAndroid Build Coastguard Worker	movaps	37(%ecx), %xmm4
1686*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
1687*8d67ca89SAndroid Build Coastguard Worker	movaps	53(%ecx), %xmm5
1688*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
1689*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
1690*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
1691*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
1692*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
1693*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
1694*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm4, %xmm5
1695*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm3, %xmm4
1696*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1697*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl11Start)
1698*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1699*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
1700*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave11)
1701*8d67ca89SAndroid Build Coastguard Worker#endif
1702*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm2, %xmm3
1703*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
1704*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm1, %xmm2
1705*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
1706*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
1707*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1708*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1709*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1710*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1711*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl11LoopStart)
1712*8d67ca89SAndroid Build Coastguard Worker
1713*8d67ca89SAndroid Build Coastguard WorkerL(Shl11LoopExit):
1714*8d67ca89SAndroid Build Coastguard Worker	movlpd	-3(%ecx), %xmm0
1715*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -3(%edx)
1716*8d67ca89SAndroid Build Coastguard Worker	mov	$5, %esi
1717*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1718*8d67ca89SAndroid Build Coastguard Worker
1719*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1720*8d67ca89SAndroid Build Coastguard WorkerL(Shl12):
1721*8d67ca89SAndroid Build Coastguard Worker	movaps	-12(%ecx), %xmm1
1722*8d67ca89SAndroid Build Coastguard Worker	movaps	4(%ecx), %xmm2
1723*8d67ca89SAndroid Build Coastguard WorkerL(Shl12Start):
1724*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1725*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1726*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1727*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1728*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1729*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit12Case2OrCase3)
1730*8d67ca89SAndroid Build Coastguard Worker#endif
1731*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1732*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl12LoopExit)
1733*8d67ca89SAndroid Build Coastguard Worker
1734*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm1, %xmm2
1735*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1736*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1737*8d67ca89SAndroid Build Coastguard Worker	movaps	20(%ecx), %xmm2
1738*8d67ca89SAndroid Build Coastguard Worker
1739*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1740*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1741*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1742*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1743*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1744*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1745*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1746*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit12Case2OrCase3)
1747*8d67ca89SAndroid Build Coastguard Worker#endif
1748*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1749*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl12LoopExit)
1750*8d67ca89SAndroid Build Coastguard Worker
1751*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm1, %xmm2
1752*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1753*8d67ca89SAndroid Build Coastguard Worker	movaps	20(%ecx), %xmm2
1754*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1755*8d67ca89SAndroid Build Coastguard Worker
1756*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1757*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1758*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1759*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1760*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1761*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1762*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1763*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit12Case2OrCase3)
1764*8d67ca89SAndroid Build Coastguard Worker#endif
1765*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1766*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl12LoopExit)
1767*8d67ca89SAndroid Build Coastguard Worker
1768*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm1, %xmm2
1769*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1770*8d67ca89SAndroid Build Coastguard Worker	movaps	20(%ecx), %xmm2
1771*8d67ca89SAndroid Build Coastguard Worker
1772*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1773*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1774*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1775*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1776*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1777*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1778*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit12Case2OrCase3)
1779*8d67ca89SAndroid Build Coastguard Worker#endif
1780*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1781*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl12LoopExit)
1782*8d67ca89SAndroid Build Coastguard Worker
1783*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm3, %xmm2
1784*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1785*8d67ca89SAndroid Build Coastguard Worker	lea	20(%ecx), %ecx
1786*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1787*8d67ca89SAndroid Build Coastguard Worker
1788*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
1789*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
1790*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1791*8d67ca89SAndroid Build Coastguard Worker	lea	-4(%ecx), %ecx
1792*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
1793*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1794*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
1795*8d67ca89SAndroid Build Coastguard Worker#endif
1796*8d67ca89SAndroid Build Coastguard Worker	movaps	-12(%ecx), %xmm1
1797*8d67ca89SAndroid Build Coastguard Worker
1798*8d67ca89SAndroid Build Coastguard WorkerL(Shl12LoopStart):
1799*8d67ca89SAndroid Build Coastguard Worker	movaps	4(%ecx), %xmm2
1800*8d67ca89SAndroid Build Coastguard Worker	movaps	20(%ecx), %xmm3
1801*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
1802*8d67ca89SAndroid Build Coastguard Worker	movaps	36(%ecx), %xmm4
1803*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
1804*8d67ca89SAndroid Build Coastguard Worker	movaps	52(%ecx), %xmm5
1805*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
1806*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
1807*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
1808*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
1809*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
1810*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
1811*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm4, %xmm5
1812*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm3, %xmm4
1813*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1814*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl12Start)
1815*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1816*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
1817*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave12)
1818*8d67ca89SAndroid Build Coastguard Worker#endif
1819*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm2, %xmm3
1820*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
1821*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm1, %xmm2
1822*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
1823*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
1824*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1825*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1826*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1827*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1828*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl12LoopStart)
1829*8d67ca89SAndroid Build Coastguard Worker
1830*8d67ca89SAndroid Build Coastguard WorkerL(Shl12LoopExit):
1831*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %esi
1832*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, (%edx)
1833*8d67ca89SAndroid Build Coastguard Worker	mov	$4, %esi
1834*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1835*8d67ca89SAndroid Build Coastguard Worker
1836*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1837*8d67ca89SAndroid Build Coastguard WorkerL(Shl13):
1838*8d67ca89SAndroid Build Coastguard Worker	movaps	-13(%ecx), %xmm1
1839*8d67ca89SAndroid Build Coastguard Worker	movaps	3(%ecx), %xmm2
1840*8d67ca89SAndroid Build Coastguard WorkerL(Shl13Start):
1841*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1842*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1843*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1844*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1845*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1846*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit13Case2OrCase3)
1847*8d67ca89SAndroid Build Coastguard Worker#endif
1848*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1849*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl13LoopExit)
1850*8d67ca89SAndroid Build Coastguard Worker
1851*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm1, %xmm2
1852*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1853*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1854*8d67ca89SAndroid Build Coastguard Worker	movaps	19(%ecx), %xmm2
1855*8d67ca89SAndroid Build Coastguard Worker
1856*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1857*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1858*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1859*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1860*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1861*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1862*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1863*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit13Case2OrCase3)
1864*8d67ca89SAndroid Build Coastguard Worker#endif
1865*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1866*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl13LoopExit)
1867*8d67ca89SAndroid Build Coastguard Worker
1868*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm1, %xmm2
1869*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1870*8d67ca89SAndroid Build Coastguard Worker	movaps	19(%ecx), %xmm2
1871*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1872*8d67ca89SAndroid Build Coastguard Worker
1873*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1874*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1875*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1876*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1877*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1878*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1879*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1880*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit13Case2OrCase3)
1881*8d67ca89SAndroid Build Coastguard Worker#endif
1882*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1883*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl13LoopExit)
1884*8d67ca89SAndroid Build Coastguard Worker
1885*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm1, %xmm2
1886*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1887*8d67ca89SAndroid Build Coastguard Worker	movaps	19(%ecx), %xmm2
1888*8d67ca89SAndroid Build Coastguard Worker
1889*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1890*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1891*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1892*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1893*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1894*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1895*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit13Case2OrCase3)
1896*8d67ca89SAndroid Build Coastguard Worker#endif
1897*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1898*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl13LoopExit)
1899*8d67ca89SAndroid Build Coastguard Worker
1900*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm3, %xmm2
1901*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1902*8d67ca89SAndroid Build Coastguard Worker	lea	19(%ecx), %ecx
1903*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1904*8d67ca89SAndroid Build Coastguard Worker
1905*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
1906*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
1907*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
1908*8d67ca89SAndroid Build Coastguard Worker	lea	-3(%ecx), %ecx
1909*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
1910*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1911*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
1912*8d67ca89SAndroid Build Coastguard Worker#endif
1913*8d67ca89SAndroid Build Coastguard Worker	movaps	-13(%ecx), %xmm1
1914*8d67ca89SAndroid Build Coastguard Worker
1915*8d67ca89SAndroid Build Coastguard WorkerL(Shl13LoopStart):
1916*8d67ca89SAndroid Build Coastguard Worker	movaps	3(%ecx), %xmm2
1917*8d67ca89SAndroid Build Coastguard Worker	movaps	19(%ecx), %xmm3
1918*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
1919*8d67ca89SAndroid Build Coastguard Worker	movaps	35(%ecx), %xmm4
1920*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
1921*8d67ca89SAndroid Build Coastguard Worker	movaps	51(%ecx), %xmm5
1922*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
1923*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
1924*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
1925*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
1926*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
1927*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
1928*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm4, %xmm5
1929*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm3, %xmm4
1930*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1931*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl13Start)
1932*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1933*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
1934*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave13)
1935*8d67ca89SAndroid Build Coastguard Worker#endif
1936*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm2, %xmm3
1937*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
1938*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm1, %xmm2
1939*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
1940*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
1941*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
1942*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
1943*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1944*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
1945*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl13LoopStart)
1946*8d67ca89SAndroid Build Coastguard Worker
1947*8d67ca89SAndroid Build Coastguard WorkerL(Shl13LoopExit):
1948*8d67ca89SAndroid Build Coastguard Worker	movl	-1(%ecx), %esi
1949*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, -1(%edx)
1950*8d67ca89SAndroid Build Coastguard Worker	mov	$3, %esi
1951*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
1952*8d67ca89SAndroid Build Coastguard Worker
1953*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
1954*8d67ca89SAndroid Build Coastguard WorkerL(Shl14):
1955*8d67ca89SAndroid Build Coastguard Worker	movaps	-14(%ecx), %xmm1
1956*8d67ca89SAndroid Build Coastguard Worker	movaps	2(%ecx), %xmm2
1957*8d67ca89SAndroid Build Coastguard WorkerL(Shl14Start):
1958*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1959*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1960*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1961*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1962*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1963*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit14Case2OrCase3)
1964*8d67ca89SAndroid Build Coastguard Worker#endif
1965*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1966*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl14LoopExit)
1967*8d67ca89SAndroid Build Coastguard Worker
1968*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm1, %xmm2
1969*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1970*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1971*8d67ca89SAndroid Build Coastguard Worker	movaps	18(%ecx), %xmm2
1972*8d67ca89SAndroid Build Coastguard Worker
1973*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1974*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1975*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1976*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1977*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1978*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1979*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1980*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit14Case2OrCase3)
1981*8d67ca89SAndroid Build Coastguard Worker#endif
1982*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
1983*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl14LoopExit)
1984*8d67ca89SAndroid Build Coastguard Worker
1985*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm1, %xmm2
1986*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
1987*8d67ca89SAndroid Build Coastguard Worker	movaps	18(%ecx), %xmm2
1988*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
1989*8d67ca89SAndroid Build Coastguard Worker
1990*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
1991*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
1992*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
1993*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
1994*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
1995*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
1996*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
1997*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit14Case2OrCase3)
1998*8d67ca89SAndroid Build Coastguard Worker#endif
1999*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2000*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl14LoopExit)
2001*8d67ca89SAndroid Build Coastguard Worker
2002*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm1, %xmm2
2003*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
2004*8d67ca89SAndroid Build Coastguard Worker	movaps	18(%ecx), %xmm2
2005*8d67ca89SAndroid Build Coastguard Worker
2006*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
2007*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
2008*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
2009*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
2010*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2011*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
2012*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit14Case2OrCase3)
2013*8d67ca89SAndroid Build Coastguard Worker#endif
2014*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2015*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl14LoopExit)
2016*8d67ca89SAndroid Build Coastguard Worker
2017*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm3, %xmm2
2018*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
2019*8d67ca89SAndroid Build Coastguard Worker	lea	18(%ecx), %ecx
2020*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
2021*8d67ca89SAndroid Build Coastguard Worker
2022*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
2023*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
2024*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
2025*8d67ca89SAndroid Build Coastguard Worker	lea	-2(%ecx), %ecx
2026*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
2027*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2028*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
2029*8d67ca89SAndroid Build Coastguard Worker#endif
2030*8d67ca89SAndroid Build Coastguard Worker	movaps	-14(%ecx), %xmm1
2031*8d67ca89SAndroid Build Coastguard Worker
2032*8d67ca89SAndroid Build Coastguard WorkerL(Shl14LoopStart):
2033*8d67ca89SAndroid Build Coastguard Worker	movaps	2(%ecx), %xmm2
2034*8d67ca89SAndroid Build Coastguard Worker	movaps	18(%ecx), %xmm3
2035*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
2036*8d67ca89SAndroid Build Coastguard Worker	movaps	34(%ecx), %xmm4
2037*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
2038*8d67ca89SAndroid Build Coastguard Worker	movaps	50(%ecx), %xmm5
2039*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
2040*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
2041*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
2042*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
2043*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
2044*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
2045*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm4, %xmm5
2046*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm3, %xmm4
2047*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2048*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl14Start)
2049*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2050*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
2051*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave14)
2052*8d67ca89SAndroid Build Coastguard Worker#endif
2053*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm2, %xmm3
2054*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
2055*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm1, %xmm2
2056*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
2057*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
2058*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
2059*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
2060*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
2061*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
2062*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl14LoopStart)
2063*8d67ca89SAndroid Build Coastguard Worker
2064*8d67ca89SAndroid Build Coastguard WorkerL(Shl14LoopExit):
2065*8d67ca89SAndroid Build Coastguard Worker	movl	-2(%ecx), %esi
2066*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, -2(%edx)
2067*8d67ca89SAndroid Build Coastguard Worker	mov	$2, %esi
2068*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
2069*8d67ca89SAndroid Build Coastguard Worker
2070*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2071*8d67ca89SAndroid Build Coastguard WorkerL(Shl15):
2072*8d67ca89SAndroid Build Coastguard Worker	movaps	-15(%ecx), %xmm1
2073*8d67ca89SAndroid Build Coastguard Worker	movaps	1(%ecx), %xmm2
2074*8d67ca89SAndroid Build Coastguard WorkerL(Shl15Start):
2075*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
2076*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
2077*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
2078*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2079*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
2080*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit15Case2OrCase3)
2081*8d67ca89SAndroid Build Coastguard Worker#endif
2082*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2083*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl15LoopExit)
2084*8d67ca89SAndroid Build Coastguard Worker
2085*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm1, %xmm2
2086*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
2087*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
2088*8d67ca89SAndroid Build Coastguard Worker	movaps	17(%ecx), %xmm2
2089*8d67ca89SAndroid Build Coastguard Worker
2090*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
2091*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
2092*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
2093*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
2094*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
2095*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2096*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
2097*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit15Case2OrCase3)
2098*8d67ca89SAndroid Build Coastguard Worker#endif
2099*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2100*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl15LoopExit)
2101*8d67ca89SAndroid Build Coastguard Worker
2102*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm1, %xmm2
2103*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
2104*8d67ca89SAndroid Build Coastguard Worker	movaps	17(%ecx), %xmm2
2105*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm1
2106*8d67ca89SAndroid Build Coastguard Worker
2107*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
2108*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
2109*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
2110*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
2111*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
2112*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2113*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
2114*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit15Case2OrCase3)
2115*8d67ca89SAndroid Build Coastguard Worker#endif
2116*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2117*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl15LoopExit)
2118*8d67ca89SAndroid Build Coastguard Worker
2119*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm1, %xmm2
2120*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
2121*8d67ca89SAndroid Build Coastguard Worker	movaps	17(%ecx), %xmm2
2122*8d67ca89SAndroid Build Coastguard Worker
2123*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm2, %xmm0
2124*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
2125*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
2126*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
2127*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2128*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
2129*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit15Case2OrCase3)
2130*8d67ca89SAndroid Build Coastguard Worker#endif
2131*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2132*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl15LoopExit)
2133*8d67ca89SAndroid Build Coastguard Worker
2134*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm3, %xmm2
2135*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
2136*8d67ca89SAndroid Build Coastguard Worker	lea	17(%ecx), %ecx
2137*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %edx
2138*8d67ca89SAndroid Build Coastguard Worker
2139*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %eax
2140*8d67ca89SAndroid Build Coastguard Worker	and	$-0x40, %ecx
2141*8d67ca89SAndroid Build Coastguard Worker	sub	%ecx, %eax
2142*8d67ca89SAndroid Build Coastguard Worker	lea	-1(%ecx), %ecx
2143*8d67ca89SAndroid Build Coastguard Worker	sub	%eax, %edx
2144*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2145*8d67ca89SAndroid Build Coastguard Worker	add	%eax, %ebx
2146*8d67ca89SAndroid Build Coastguard Worker#endif
2147*8d67ca89SAndroid Build Coastguard Worker	movaps	-15(%ecx), %xmm1
2148*8d67ca89SAndroid Build Coastguard Worker
2149*8d67ca89SAndroid Build Coastguard WorkerL(Shl15LoopStart):
2150*8d67ca89SAndroid Build Coastguard Worker	movaps	1(%ecx), %xmm2
2151*8d67ca89SAndroid Build Coastguard Worker	movaps	17(%ecx), %xmm3
2152*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, %xmm6
2153*8d67ca89SAndroid Build Coastguard Worker	movaps	33(%ecx), %xmm4
2154*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, %xmm7
2155*8d67ca89SAndroid Build Coastguard Worker	movaps	49(%ecx), %xmm5
2156*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm2, %xmm6
2157*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm5, %xmm7
2158*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm6, %xmm7
2159*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0, %xmm7
2160*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm7, %eax
2161*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, %xmm7
2162*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm4, %xmm5
2163*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm3, %xmm4
2164*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2165*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Shl15Start)
2166*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
2167*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
2168*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyLeave15)
2169*8d67ca89SAndroid Build Coastguard Worker#endif
2170*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm2, %xmm3
2171*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
2172*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm1, %xmm2
2173*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm7, %xmm1
2174*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
2175*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
2176*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm3, 16(%edx)
2177*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
2178*8d67ca89SAndroid Build Coastguard Worker	lea	64(%edx), %edx
2179*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Shl15LoopStart)
2180*8d67ca89SAndroid Build Coastguard Worker
2181*8d67ca89SAndroid Build Coastguard WorkerL(Shl15LoopExit):
2182*8d67ca89SAndroid Build Coastguard Worker	movl	-3(%ecx), %esi
2183*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, -3(%edx)
2184*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %esi
2185*8d67ca89SAndroid Build Coastguard Worker#if defined USE_AS_STRCAT || defined USE_AS_STRLCPY
2186*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16Bytes)
2187*8d67ca89SAndroid Build Coastguard Worker#endif
2188*8d67ca89SAndroid Build Coastguard Worker
2189*8d67ca89SAndroid Build Coastguard Worker
2190*8d67ca89SAndroid Build Coastguard Worker#if !defined USE_AS_STRCAT && !defined USE_AS_STRLCPY
2191*8d67ca89SAndroid Build Coastguard Worker
2192*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2193*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16Bytes):
2194*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2195*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ebx
2196*8d67ca89SAndroid Build Coastguard Worker# endif
2197*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %edx
2198*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %ecx
2199*8d67ca89SAndroid Build Coastguard Worker
2200*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
2201*8d67ca89SAndroid Build Coastguard Worker	test	%al, %al
2202*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitHigh8)
2203*8d67ca89SAndroid Build Coastguard Worker
2204*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesLess8):
2205*8d67ca89SAndroid Build Coastguard Worker	mov	%al, %ah
2206*8d67ca89SAndroid Build Coastguard Worker	and	$15, %ah
2207*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitHigh4)
2208*8d67ca89SAndroid Build Coastguard Worker
2209*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %al
2210*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit1)
2211*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %al
2212*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit2)
2213*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %al
2214*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit3)
2215*8d67ca89SAndroid Build Coastguard Worker
2216*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2217*8d67ca89SAndroid Build Coastguard WorkerL(Exit4):
2218*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2219*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2220*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(3)
2221*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2222*8d67ca89SAndroid Build Coastguard Worker	sub	$4, %ebx
2223*8d67ca89SAndroid Build Coastguard Worker	lea	4(%edx), %ecx
2224*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2225*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2226*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2227*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2228*8d67ca89SAndroid Build Coastguard Worker#  endif
2229*8d67ca89SAndroid Build Coastguard Worker# endif
2230*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2231*8d67ca89SAndroid Build Coastguard Worker
2232*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2233*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh4):
2234*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %al
2235*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit5)
2236*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %al
2237*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit6)
2238*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %al
2239*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit7)
2240*8d67ca89SAndroid Build Coastguard Worker
2241*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2242*8d67ca89SAndroid Build Coastguard WorkerL(Exit8):
2243*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2244*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2245*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(7)
2246*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2247*8d67ca89SAndroid Build Coastguard Worker	sub	$8, %ebx
2248*8d67ca89SAndroid Build Coastguard Worker	lea	8(%edx), %ecx
2249*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2250*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2251*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2252*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2253*8d67ca89SAndroid Build Coastguard Worker#  endif
2254*8d67ca89SAndroid Build Coastguard Worker# endif
2255*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2256*8d67ca89SAndroid Build Coastguard Worker
2257*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2258*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh8):
2259*8d67ca89SAndroid Build Coastguard Worker	mov	%ah, %al
2260*8d67ca89SAndroid Build Coastguard Worker	and	$15, %al
2261*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitHigh12)
2262*8d67ca89SAndroid Build Coastguard Worker
2263*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %ah
2264*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit9)
2265*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %ah
2266*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit10)
2267*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %ah
2268*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit11)
2269*8d67ca89SAndroid Build Coastguard Worker
2270*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2271*8d67ca89SAndroid Build Coastguard WorkerL(Exit12):
2272*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2273*8d67ca89SAndroid Build Coastguard Worker	movl	8(%ecx), %eax
2274*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2275*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 8(%edx)
2276*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(11)
2277*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2278*8d67ca89SAndroid Build Coastguard Worker	sub	$12, %ebx
2279*8d67ca89SAndroid Build Coastguard Worker	lea	12(%edx), %ecx
2280*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2281*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2282*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2283*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2284*8d67ca89SAndroid Build Coastguard Worker#  endif
2285*8d67ca89SAndroid Build Coastguard Worker# endif
2286*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2287*8d67ca89SAndroid Build Coastguard Worker
2288*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2289*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh12):
2290*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %ah
2291*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit13)
2292*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %ah
2293*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit14)
2294*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %ah
2295*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit15)
2296*8d67ca89SAndroid Build Coastguard Worker
2297*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2298*8d67ca89SAndroid Build Coastguard WorkerL(Exit16):
2299*8d67ca89SAndroid Build Coastguard Worker	movdqu	(%ecx), %xmm0
2300*8d67ca89SAndroid Build Coastguard Worker	movdqu	%xmm0, (%edx)
2301*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(15)
2302*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2303*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
2304*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %ecx
2305*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2306*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2307*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2308*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2309*8d67ca89SAndroid Build Coastguard Worker#  endif
2310*8d67ca89SAndroid Build Coastguard Worker# endif
2311*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2312*8d67ca89SAndroid Build Coastguard Worker
2313*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STRNCPY
2314*8d67ca89SAndroid Build Coastguard Worker
2315*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH(%esi)
2316*8d67ca89SAndroid Build Coastguard Worker
2317*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2318*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase2):
2319*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ebx
2320*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %ecx
2321*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %edx
2322*8d67ca89SAndroid Build Coastguard Worker
2323*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
2324*8d67ca89SAndroid Build Coastguard Worker
2325*8d67ca89SAndroid Build Coastguard Worker	test	%al, %al
2326*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitHighCase2)
2327*8d67ca89SAndroid Build Coastguard Worker
2328*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ebx
2329*8d67ca89SAndroid Build Coastguard Worker	ja	L(CopyFrom1To16BytesLess8)
2330*8d67ca89SAndroid Build Coastguard Worker
2331*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %al
2332*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit1)
2333*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %ebx
2334*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit1)
2335*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %al
2336*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit2)
2337*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ebx
2338*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit2)
2339*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %al
2340*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit3)
2341*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %ebx
2342*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit3)
2343*8d67ca89SAndroid Build Coastguard Worker	test	$0x08, %al
2344*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit4)
2345*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ebx
2346*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit4)
2347*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %al
2348*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit5)
2349*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %ebx
2350*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit5)
2351*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %al
2352*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit6)
2353*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ebx
2354*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit6)
2355*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %al
2356*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit7)
2357*8d67ca89SAndroid Build Coastguard Worker	cmp	$7, %ebx
2358*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit7)
2359*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Exit8)
2360*8d67ca89SAndroid Build Coastguard Worker
2361*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2362*8d67ca89SAndroid Build Coastguard WorkerL(ExitHighCase2):
2363*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ebx
2364*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesLess8Case3)
2365*8d67ca89SAndroid Build Coastguard Worker
2366*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %ah
2367*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit9)
2368*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %ebx
2369*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit9)
2370*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %ah
2371*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit10)
2372*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ebx
2373*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit10)
2374*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %ah
2375*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit11)
2376*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %ebx
2377*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit11)
2378*8d67ca89SAndroid Build Coastguard Worker	test	$0x8, %ah
2379*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit12)
2380*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ebx
2381*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit12)
2382*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %ah
2383*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit13)
2384*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %ebx
2385*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit13)
2386*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %ah
2387*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit14)
2388*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %ebx
2389*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit14)
2390*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %ah
2391*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit15)
2392*8d67ca89SAndroid Build Coastguard Worker	cmp	$15, %ebx
2393*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit15)
2394*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Exit16)
2395*8d67ca89SAndroid Build Coastguard Worker
2396*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH(%esi)
2397*8d67ca89SAndroid Build Coastguard Worker
2398*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2399*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase2OrCase3):
2400*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
2401*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
2402*8d67ca89SAndroid Build Coastguard Worker
2403*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2404*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase3):
2405*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ebx
2406*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %edx
2407*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %ecx
2408*8d67ca89SAndroid Build Coastguard Worker
2409*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
2410*8d67ca89SAndroid Build Coastguard Worker
2411*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ebx
2412*8d67ca89SAndroid Build Coastguard Worker	ja	L(ExitHigh8Case3)
2413*8d67ca89SAndroid Build Coastguard Worker
2414*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesLess8Case3):
2415*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ebx
2416*8d67ca89SAndroid Build Coastguard Worker	ja	L(ExitHigh4Case3)
2417*8d67ca89SAndroid Build Coastguard Worker
2418*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %ebx
2419*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit1)
2420*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ebx
2421*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit2)
2422*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %ebx
2423*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit3)
2424*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2425*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2426*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(4)
2427*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2428*8d67ca89SAndroid Build Coastguard Worker
2429*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2430*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh4Case3):
2431*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %ebx
2432*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit5)
2433*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ebx
2434*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit6)
2435*8d67ca89SAndroid Build Coastguard Worker	cmp	$7, %ebx
2436*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit7)
2437*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2438*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2439*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(8)
2440*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2441*8d67ca89SAndroid Build Coastguard Worker
2442*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2443*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh8Case3):
2444*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ebx
2445*8d67ca89SAndroid Build Coastguard Worker	ja	L(ExitHigh12Case3)
2446*8d67ca89SAndroid Build Coastguard Worker
2447*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %ebx
2448*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit9)
2449*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ebx
2450*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit10)
2451*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %ebx
2452*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit11)
2453*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2454*8d67ca89SAndroid Build Coastguard Worker	movl	8(%ecx), %eax
2455*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2456*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 8(%edx)
2457*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(12)
2458*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2459*8d67ca89SAndroid Build Coastguard Worker
2460*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2461*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh12Case3):
2462*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %ebx
2463*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit13)
2464*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %ebx
2465*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit14)
2466*8d67ca89SAndroid Build Coastguard Worker	cmp	$15, %ebx
2467*8d67ca89SAndroid Build Coastguard Worker	je	L(Exit15)
2468*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2469*8d67ca89SAndroid Build Coastguard Worker	movlpd	8(%ecx), %xmm1
2470*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2471*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 8(%edx)
2472*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(16)
2473*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2474*8d67ca89SAndroid Build Coastguard Worker
2475*8d67ca89SAndroid Build Coastguard Worker# endif
2476*8d67ca89SAndroid Build Coastguard Worker
2477*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2478*8d67ca89SAndroid Build Coastguard WorkerL(Exit1):
2479*8d67ca89SAndroid Build Coastguard Worker	movb	(%ecx), %al
2480*8d67ca89SAndroid Build Coastguard Worker	movb	%al, (%edx)
2481*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(0)
2482*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2483*8d67ca89SAndroid Build Coastguard Worker	sub	$1, %ebx
2484*8d67ca89SAndroid Build Coastguard Worker	lea	1(%edx), %ecx
2485*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2486*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2487*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2488*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2489*8d67ca89SAndroid Build Coastguard Worker#  endif
2490*8d67ca89SAndroid Build Coastguard Worker# endif
2491*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2492*8d67ca89SAndroid Build Coastguard Worker
2493*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2494*8d67ca89SAndroid Build Coastguard WorkerL(Exit2):
2495*8d67ca89SAndroid Build Coastguard Worker	movw	(%ecx), %ax
2496*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, (%edx)
2497*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(1)
2498*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2499*8d67ca89SAndroid Build Coastguard Worker	sub	$2, %ebx
2500*8d67ca89SAndroid Build Coastguard Worker	lea	2(%edx), %ecx
2501*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2502*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2503*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2504*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2505*8d67ca89SAndroid Build Coastguard Worker#  endif
2506*8d67ca89SAndroid Build Coastguard Worker# endif
2507*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2508*8d67ca89SAndroid Build Coastguard Worker
2509*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2510*8d67ca89SAndroid Build Coastguard WorkerL(Exit3):
2511*8d67ca89SAndroid Build Coastguard Worker	movw	(%ecx), %ax
2512*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, (%edx)
2513*8d67ca89SAndroid Build Coastguard Worker	movb	2(%ecx), %al
2514*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 2(%edx)
2515*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(2)
2516*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2517*8d67ca89SAndroid Build Coastguard Worker	sub	$3, %ebx
2518*8d67ca89SAndroid Build Coastguard Worker	lea	3(%edx), %ecx
2519*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2520*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2521*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2522*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2523*8d67ca89SAndroid Build Coastguard Worker#  endif
2524*8d67ca89SAndroid Build Coastguard Worker# endif
2525*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2526*8d67ca89SAndroid Build Coastguard Worker
2527*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2528*8d67ca89SAndroid Build Coastguard WorkerL(Exit5):
2529*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2530*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2531*8d67ca89SAndroid Build Coastguard Worker	movb	4(%ecx), %al
2532*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 4(%edx)
2533*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(4)
2534*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2535*8d67ca89SAndroid Build Coastguard Worker	sub	$5, %ebx
2536*8d67ca89SAndroid Build Coastguard Worker	lea	5(%edx), %ecx
2537*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2538*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2539*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2540*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2541*8d67ca89SAndroid Build Coastguard Worker#  endif
2542*8d67ca89SAndroid Build Coastguard Worker# endif
2543*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2544*8d67ca89SAndroid Build Coastguard Worker
2545*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2546*8d67ca89SAndroid Build Coastguard WorkerL(Exit6):
2547*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2548*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2549*8d67ca89SAndroid Build Coastguard Worker	movw	4(%ecx), %ax
2550*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, 4(%edx)
2551*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(5)
2552*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2553*8d67ca89SAndroid Build Coastguard Worker	sub	$6, %ebx
2554*8d67ca89SAndroid Build Coastguard Worker	lea	6(%edx), %ecx
2555*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2556*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2557*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2558*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2559*8d67ca89SAndroid Build Coastguard Worker#  endif
2560*8d67ca89SAndroid Build Coastguard Worker# endif
2561*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2562*8d67ca89SAndroid Build Coastguard Worker
2563*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2564*8d67ca89SAndroid Build Coastguard WorkerL(Exit7):
2565*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2566*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2567*8d67ca89SAndroid Build Coastguard Worker	movl	3(%ecx), %eax
2568*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 3(%edx)
2569*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(6)
2570*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2571*8d67ca89SAndroid Build Coastguard Worker	sub	$7, %ebx
2572*8d67ca89SAndroid Build Coastguard Worker	lea	7(%edx), %ecx
2573*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2574*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2575*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2576*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2577*8d67ca89SAndroid Build Coastguard Worker#  endif
2578*8d67ca89SAndroid Build Coastguard Worker# endif
2579*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2580*8d67ca89SAndroid Build Coastguard Worker
2581*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2582*8d67ca89SAndroid Build Coastguard WorkerL(Exit9):
2583*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2584*8d67ca89SAndroid Build Coastguard Worker	movb	8(%ecx), %al
2585*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2586*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 8(%edx)
2587*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(8)
2588*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2589*8d67ca89SAndroid Build Coastguard Worker	sub	$9, %ebx
2590*8d67ca89SAndroid Build Coastguard Worker	lea	9(%edx), %ecx
2591*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2592*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2593*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2594*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2595*8d67ca89SAndroid Build Coastguard Worker#  endif
2596*8d67ca89SAndroid Build Coastguard Worker# endif
2597*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2598*8d67ca89SAndroid Build Coastguard Worker
2599*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2600*8d67ca89SAndroid Build Coastguard WorkerL(Exit10):
2601*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2602*8d67ca89SAndroid Build Coastguard Worker	movw	8(%ecx), %ax
2603*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2604*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, 8(%edx)
2605*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(9)
2606*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2607*8d67ca89SAndroid Build Coastguard Worker	sub	$10, %ebx
2608*8d67ca89SAndroid Build Coastguard Worker	lea	10(%edx), %ecx
2609*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2610*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2611*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2612*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2613*8d67ca89SAndroid Build Coastguard Worker#  endif
2614*8d67ca89SAndroid Build Coastguard Worker# endif
2615*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2616*8d67ca89SAndroid Build Coastguard Worker
2617*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2618*8d67ca89SAndroid Build Coastguard WorkerL(Exit11):
2619*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2620*8d67ca89SAndroid Build Coastguard Worker	movl	7(%ecx), %eax
2621*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2622*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 7(%edx)
2623*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(10)
2624*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2625*8d67ca89SAndroid Build Coastguard Worker	sub	$11, %ebx
2626*8d67ca89SAndroid Build Coastguard Worker	lea	11(%edx), %ecx
2627*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2628*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2629*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2630*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2631*8d67ca89SAndroid Build Coastguard Worker#  endif
2632*8d67ca89SAndroid Build Coastguard Worker# endif
2633*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2634*8d67ca89SAndroid Build Coastguard Worker
2635*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2636*8d67ca89SAndroid Build Coastguard WorkerL(Exit13):
2637*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2638*8d67ca89SAndroid Build Coastguard Worker	movlpd	5(%ecx), %xmm1
2639*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2640*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 5(%edx)
2641*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(12)
2642*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2643*8d67ca89SAndroid Build Coastguard Worker	sub	$13, %ebx
2644*8d67ca89SAndroid Build Coastguard Worker	lea	13(%edx), %ecx
2645*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2646*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2647*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2648*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2649*8d67ca89SAndroid Build Coastguard Worker#  endif
2650*8d67ca89SAndroid Build Coastguard Worker# endif
2651*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2652*8d67ca89SAndroid Build Coastguard Worker
2653*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2654*8d67ca89SAndroid Build Coastguard WorkerL(Exit14):
2655*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2656*8d67ca89SAndroid Build Coastguard Worker	movlpd	6(%ecx), %xmm1
2657*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2658*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 6(%edx)
2659*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(13)
2660*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2661*8d67ca89SAndroid Build Coastguard Worker	sub	$14, %ebx
2662*8d67ca89SAndroid Build Coastguard Worker	lea	14(%edx), %ecx
2663*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2664*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2665*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2666*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2667*8d67ca89SAndroid Build Coastguard Worker#  endif
2668*8d67ca89SAndroid Build Coastguard Worker# endif
2669*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2670*8d67ca89SAndroid Build Coastguard Worker
2671*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2672*8d67ca89SAndroid Build Coastguard WorkerL(Exit15):
2673*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
2674*8d67ca89SAndroid Build Coastguard Worker	movlpd	7(%ecx), %xmm1
2675*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
2676*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 7(%edx)
2677*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT	(14)
2678*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2679*8d67ca89SAndroid Build Coastguard Worker	sub	$15, %ebx
2680*8d67ca89SAndroid Build Coastguard Worker	lea	15(%edx), %ecx
2681*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero1)
2682*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2683*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2684*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2685*8d67ca89SAndroid Build Coastguard Worker#  endif
2686*8d67ca89SAndroid Build Coastguard Worker# endif
2687*8d67ca89SAndroid Build Coastguard Worker	RETURN1
2688*8d67ca89SAndroid Build Coastguard Worker
2689*8d67ca89SAndroid Build Coastguard WorkerCFI_POP	(%edi)
2690*8d67ca89SAndroid Build Coastguard Worker
2691*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2692*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2693*8d67ca89SAndroid Build Coastguard WorkerL(Fill0):
2694*8d67ca89SAndroid Build Coastguard Worker	RETURN
2695*8d67ca89SAndroid Build Coastguard Worker
2696*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2697*8d67ca89SAndroid Build Coastguard WorkerL(Fill1):
2698*8d67ca89SAndroid Build Coastguard Worker	movb	%dl, (%ecx)
2699*8d67ca89SAndroid Build Coastguard Worker	RETURN
2700*8d67ca89SAndroid Build Coastguard Worker
2701*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2702*8d67ca89SAndroid Build Coastguard WorkerL(Fill2):
2703*8d67ca89SAndroid Build Coastguard Worker	movw	%dx, (%ecx)
2704*8d67ca89SAndroid Build Coastguard Worker	RETURN
2705*8d67ca89SAndroid Build Coastguard Worker
2706*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2707*8d67ca89SAndroid Build Coastguard WorkerL(Fill3):
2708*8d67ca89SAndroid Build Coastguard Worker	movw	%dx, (%ecx)
2709*8d67ca89SAndroid Build Coastguard Worker	movb	%dl, 2(%ecx)
2710*8d67ca89SAndroid Build Coastguard Worker	RETURN
2711*8d67ca89SAndroid Build Coastguard Worker
2712*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2713*8d67ca89SAndroid Build Coastguard WorkerL(Fill4):
2714*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, (%ecx)
2715*8d67ca89SAndroid Build Coastguard Worker	RETURN
2716*8d67ca89SAndroid Build Coastguard Worker
2717*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2718*8d67ca89SAndroid Build Coastguard WorkerL(Fill5):
2719*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, (%ecx)
2720*8d67ca89SAndroid Build Coastguard Worker	movb	%dl, 4(%ecx)
2721*8d67ca89SAndroid Build Coastguard Worker	RETURN
2722*8d67ca89SAndroid Build Coastguard Worker
2723*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2724*8d67ca89SAndroid Build Coastguard WorkerL(Fill6):
2725*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, (%ecx)
2726*8d67ca89SAndroid Build Coastguard Worker	movw	%dx, 4(%ecx)
2727*8d67ca89SAndroid Build Coastguard Worker	RETURN
2728*8d67ca89SAndroid Build Coastguard Worker
2729*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2730*8d67ca89SAndroid Build Coastguard WorkerL(Fill7):
2731*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, (%ecx)
2732*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, 3(%ecx)
2733*8d67ca89SAndroid Build Coastguard Worker	RETURN
2734*8d67ca89SAndroid Build Coastguard Worker
2735*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2736*8d67ca89SAndroid Build Coastguard WorkerL(Fill8):
2737*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2738*8d67ca89SAndroid Build Coastguard Worker	RETURN
2739*8d67ca89SAndroid Build Coastguard Worker
2740*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2741*8d67ca89SAndroid Build Coastguard WorkerL(Fill9):
2742*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2743*8d67ca89SAndroid Build Coastguard Worker	movb	%dl, 8(%ecx)
2744*8d67ca89SAndroid Build Coastguard Worker	RETURN
2745*8d67ca89SAndroid Build Coastguard Worker
2746*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2747*8d67ca89SAndroid Build Coastguard WorkerL(Fill10):
2748*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2749*8d67ca89SAndroid Build Coastguard Worker	movw	%dx, 8(%ecx)
2750*8d67ca89SAndroid Build Coastguard Worker	RETURN
2751*8d67ca89SAndroid Build Coastguard Worker
2752*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2753*8d67ca89SAndroid Build Coastguard WorkerL(Fill11):
2754*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2755*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, 7(%ecx)
2756*8d67ca89SAndroid Build Coastguard Worker	RETURN
2757*8d67ca89SAndroid Build Coastguard Worker
2758*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2759*8d67ca89SAndroid Build Coastguard WorkerL(Fill12):
2760*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2761*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, 8(%ecx)
2762*8d67ca89SAndroid Build Coastguard Worker	RETURN
2763*8d67ca89SAndroid Build Coastguard Worker
2764*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2765*8d67ca89SAndroid Build Coastguard WorkerL(Fill13):
2766*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2767*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 5(%ecx)
2768*8d67ca89SAndroid Build Coastguard Worker	RETURN
2769*8d67ca89SAndroid Build Coastguard Worker
2770*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2771*8d67ca89SAndroid Build Coastguard WorkerL(Fill14):
2772*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2773*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 6(%ecx)
2774*8d67ca89SAndroid Build Coastguard Worker	RETURN
2775*8d67ca89SAndroid Build Coastguard Worker
2776*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2777*8d67ca89SAndroid Build Coastguard WorkerL(Fill15):
2778*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2779*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 7(%ecx)
2780*8d67ca89SAndroid Build Coastguard Worker	RETURN
2781*8d67ca89SAndroid Build Coastguard Worker
2782*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2783*8d67ca89SAndroid Build Coastguard WorkerL(Fill16):
2784*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2785*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 8(%ecx)
2786*8d67ca89SAndroid Build Coastguard Worker	RETURN
2787*8d67ca89SAndroid Build Coastguard Worker
2788*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2789*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillExit1):
2790*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ebx), %ebx
2791*8d67ca89SAndroid Build Coastguard WorkerL(FillFrom1To16Bytes):
2792*8d67ca89SAndroid Build Coastguard Worker	test	%ebx, %ebx
2793*8d67ca89SAndroid Build Coastguard Worker	jz	L(Fill0)
2794*8d67ca89SAndroid Build Coastguard Worker	cmp	$16, %ebx
2795*8d67ca89SAndroid Build Coastguard Worker	je	L(Fill16)
2796*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ebx
2797*8d67ca89SAndroid Build Coastguard Worker	je	L(Fill8)
2798*8d67ca89SAndroid Build Coastguard Worker	jg	L(FillMore8)
2799*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ebx
2800*8d67ca89SAndroid Build Coastguard Worker	je	L(Fill4)
2801*8d67ca89SAndroid Build Coastguard Worker	jg	L(FillMore4)
2802*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ebx
2803*8d67ca89SAndroid Build Coastguard Worker	jl	L(Fill1)
2804*8d67ca89SAndroid Build Coastguard Worker	je	L(Fill2)
2805*8d67ca89SAndroid Build Coastguard Worker	jg	L(Fill3)
2806*8d67ca89SAndroid Build Coastguard WorkerL(FillMore8):	/* but less than 16 */
2807*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ebx
2808*8d67ca89SAndroid Build Coastguard Worker	je	L(Fill12)
2809*8d67ca89SAndroid Build Coastguard Worker	jl	L(FillLess12)
2810*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %ebx
2811*8d67ca89SAndroid Build Coastguard Worker	jl	L(Fill13)
2812*8d67ca89SAndroid Build Coastguard Worker	je	L(Fill14)
2813*8d67ca89SAndroid Build Coastguard Worker	jg	L(Fill15)
2814*8d67ca89SAndroid Build Coastguard WorkerL(FillMore4):	/* but less than 8 */
2815*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ebx
2816*8d67ca89SAndroid Build Coastguard Worker	jl	L(Fill5)
2817*8d67ca89SAndroid Build Coastguard Worker	je	L(Fill6)
2818*8d67ca89SAndroid Build Coastguard Worker	jg	L(Fill7)
2819*8d67ca89SAndroid Build Coastguard WorkerL(FillLess12):	/* but more than 8 */
2820*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ebx
2821*8d67ca89SAndroid Build Coastguard Worker	jl	L(Fill9)
2822*8d67ca89SAndroid Build Coastguard Worker	je	L(Fill10)
2823*8d67ca89SAndroid Build Coastguard Worker	jmp	L(Fill11)
2824*8d67ca89SAndroid Build Coastguard Worker
2825*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH(%edi)
2826*8d67ca89SAndroid Build Coastguard Worker
2827*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2828*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillTailWithZero1):
2829*8d67ca89SAndroid Build Coastguard Worker	POP	(%edi)
2830*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillTailWithZero):
2831*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
2832*8d67ca89SAndroid Build Coastguard Worker	xor	%edx, %edx
2833*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
2834*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyFillExit1)
2835*8d67ca89SAndroid Build Coastguard Worker
2836*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%ecx)
2837*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 8(%ecx)
2838*8d67ca89SAndroid Build Coastguard Worker
2839*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
2840*8d67ca89SAndroid Build Coastguard Worker
2841*8d67ca89SAndroid Build Coastguard Worker	mov	%ecx, %edx
2842*8d67ca89SAndroid Build Coastguard Worker	and	$0xf, %edx
2843*8d67ca89SAndroid Build Coastguard Worker	sub	%edx, %ecx
2844*8d67ca89SAndroid Build Coastguard Worker	add	%edx, %ebx
2845*8d67ca89SAndroid Build Coastguard Worker	xor	%edx, %edx
2846*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
2847*8d67ca89SAndroid Build Coastguard Worker	jb	L(StrncpyFillLess64)
2848*8d67ca89SAndroid Build Coastguard Worker
2849*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLoopMovdqa):
2850*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, (%ecx)
2851*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, 16(%ecx)
2852*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, 32(%ecx)
2853*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, 48(%ecx)
2854*8d67ca89SAndroid Build Coastguard Worker	lea	64(%ecx), %ecx
2855*8d67ca89SAndroid Build Coastguard Worker	sub	$64, %ebx
2856*8d67ca89SAndroid Build Coastguard Worker	jae	L(StrncpyFillLoopMovdqa)
2857*8d67ca89SAndroid Build Coastguard Worker
2858*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLess64):
2859*8d67ca89SAndroid Build Coastguard Worker	add	$32, %ebx
2860*8d67ca89SAndroid Build Coastguard Worker	jl	L(StrncpyFillLess32)
2861*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, (%ecx)
2862*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, 16(%ecx)
2863*8d67ca89SAndroid Build Coastguard Worker	lea	32(%ecx), %ecx
2864*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
2865*8d67ca89SAndroid Build Coastguard Worker	jl	L(StrncpyFillExit1)
2866*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, (%ecx)
2867*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
2868*8d67ca89SAndroid Build Coastguard Worker	jmp	L(FillFrom1To16Bytes)
2869*8d67ca89SAndroid Build Coastguard Worker
2870*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLess32):
2871*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ebx
2872*8d67ca89SAndroid Build Coastguard Worker	jl	L(StrncpyFillExit1)
2873*8d67ca89SAndroid Build Coastguard Worker	movdqa	%xmm0, (%ecx)
2874*8d67ca89SAndroid Build Coastguard Worker	lea	16(%ecx), %ecx
2875*8d67ca89SAndroid Build Coastguard Worker	jmp	L(FillFrom1To16Bytes)
2876*8d67ca89SAndroid Build Coastguard Worker# endif
2877*8d67ca89SAndroid Build Coastguard Worker
2878*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2879*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail1):
2880*8d67ca89SAndroid Build Coastguard Worker	movb	(%ecx), %al
2881*8d67ca89SAndroid Build Coastguard Worker	movb	%al, (%edx)
2882*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (0)
2883*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2884*8d67ca89SAndroid Build Coastguard Worker	sub	$1, %ebx
2885*8d67ca89SAndroid Build Coastguard Worker	lea	1(%edx), %ecx
2886*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
2887*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2888*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2889*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2890*8d67ca89SAndroid Build Coastguard Worker#  endif
2891*8d67ca89SAndroid Build Coastguard Worker# endif
2892*8d67ca89SAndroid Build Coastguard Worker	RETURN
2893*8d67ca89SAndroid Build Coastguard Worker
2894*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2895*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail2):
2896*8d67ca89SAndroid Build Coastguard Worker	movw	(%ecx), %ax
2897*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, (%edx)
2898*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (1)
2899*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2900*8d67ca89SAndroid Build Coastguard Worker	sub	$2, %ebx
2901*8d67ca89SAndroid Build Coastguard Worker	lea	2(%edx), %ecx
2902*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
2903*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2904*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2905*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2906*8d67ca89SAndroid Build Coastguard Worker#  endif
2907*8d67ca89SAndroid Build Coastguard Worker# endif
2908*8d67ca89SAndroid Build Coastguard Worker	RETURN
2909*8d67ca89SAndroid Build Coastguard Worker
2910*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2911*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail3):
2912*8d67ca89SAndroid Build Coastguard Worker	movw	(%ecx), %ax
2913*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, (%edx)
2914*8d67ca89SAndroid Build Coastguard Worker	movb	2(%ecx), %al
2915*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 2(%edx)
2916*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (2)
2917*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2918*8d67ca89SAndroid Build Coastguard Worker	sub	$3, %ebx
2919*8d67ca89SAndroid Build Coastguard Worker	lea	3(%edx), %ecx
2920*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
2921*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2922*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2923*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2924*8d67ca89SAndroid Build Coastguard Worker#  endif
2925*8d67ca89SAndroid Build Coastguard Worker# endif
2926*8d67ca89SAndroid Build Coastguard Worker	RETURN
2927*8d67ca89SAndroid Build Coastguard Worker
2928*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2929*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail4):
2930*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2931*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2932*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (3)
2933*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2934*8d67ca89SAndroid Build Coastguard Worker	sub	$4, %ebx
2935*8d67ca89SAndroid Build Coastguard Worker	lea	4(%edx), %ecx
2936*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
2937*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2938*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2939*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2940*8d67ca89SAndroid Build Coastguard Worker#  endif
2941*8d67ca89SAndroid Build Coastguard Worker# endif
2942*8d67ca89SAndroid Build Coastguard Worker	RETURN
2943*8d67ca89SAndroid Build Coastguard Worker
2944*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2945*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail5):
2946*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2947*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2948*8d67ca89SAndroid Build Coastguard Worker	movb	4(%ecx), %al
2949*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 4(%edx)
2950*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (4)
2951*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2952*8d67ca89SAndroid Build Coastguard Worker	sub	$5, %ebx
2953*8d67ca89SAndroid Build Coastguard Worker	lea	5(%edx), %ecx
2954*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
2955*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2956*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2957*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2958*8d67ca89SAndroid Build Coastguard Worker#  endif
2959*8d67ca89SAndroid Build Coastguard Worker# endif
2960*8d67ca89SAndroid Build Coastguard Worker	RETURN
2961*8d67ca89SAndroid Build Coastguard Worker
2962*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2963*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail6):
2964*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2965*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2966*8d67ca89SAndroid Build Coastguard Worker	movw	4(%ecx), %ax
2967*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, 4(%edx)
2968*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (5)
2969*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2970*8d67ca89SAndroid Build Coastguard Worker	sub	$6, %ebx
2971*8d67ca89SAndroid Build Coastguard Worker	lea	6(%edx), %ecx
2972*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
2973*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2974*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2975*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2976*8d67ca89SAndroid Build Coastguard Worker#  endif
2977*8d67ca89SAndroid Build Coastguard Worker# endif
2978*8d67ca89SAndroid Build Coastguard Worker	RETURN
2979*8d67ca89SAndroid Build Coastguard Worker
2980*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2981*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail7):
2982*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
2983*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
2984*8d67ca89SAndroid Build Coastguard Worker	movl	3(%ecx), %eax
2985*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 3(%edx)
2986*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (6)
2987*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
2988*8d67ca89SAndroid Build Coastguard Worker	sub	$7, %ebx
2989*8d67ca89SAndroid Build Coastguard Worker	lea	7(%edx), %ecx
2990*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
2991*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
2992*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
2993*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
2994*8d67ca89SAndroid Build Coastguard Worker#  endif
2995*8d67ca89SAndroid Build Coastguard Worker# endif
2996*8d67ca89SAndroid Build Coastguard Worker	RETURN
2997*8d67ca89SAndroid Build Coastguard Worker
2998*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
2999*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail8):
3000*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3001*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3002*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (7)
3003*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3004*8d67ca89SAndroid Build Coastguard Worker	sub	$8, %ebx
3005*8d67ca89SAndroid Build Coastguard Worker	lea	8(%edx), %ecx
3006*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3007*8d67ca89SAndroid Build Coastguard Worker# endif
3008*8d67ca89SAndroid Build Coastguard Worker	RETURN
3009*8d67ca89SAndroid Build Coastguard Worker
3010*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3011*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail9):
3012*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3013*8d67ca89SAndroid Build Coastguard Worker	movb	8(%ecx), %al
3014*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3015*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 8(%edx)
3016*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (8)
3017*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3018*8d67ca89SAndroid Build Coastguard Worker	sub	$9, %ebx
3019*8d67ca89SAndroid Build Coastguard Worker	lea	9(%edx), %ecx
3020*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3021*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3022*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3023*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3024*8d67ca89SAndroid Build Coastguard Worker#  endif
3025*8d67ca89SAndroid Build Coastguard Worker# endif
3026*8d67ca89SAndroid Build Coastguard Worker	RETURN
3027*8d67ca89SAndroid Build Coastguard Worker
3028*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3029*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail10):
3030*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3031*8d67ca89SAndroid Build Coastguard Worker	movw	8(%ecx), %ax
3032*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3033*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, 8(%edx)
3034*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (9)
3035*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3036*8d67ca89SAndroid Build Coastguard Worker	sub	$10, %ebx
3037*8d67ca89SAndroid Build Coastguard Worker	lea	10(%edx), %ecx
3038*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3039*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3040*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3041*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3042*8d67ca89SAndroid Build Coastguard Worker#  endif
3043*8d67ca89SAndroid Build Coastguard Worker# endif
3044*8d67ca89SAndroid Build Coastguard Worker	RETURN
3045*8d67ca89SAndroid Build Coastguard Worker
3046*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3047*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail11):
3048*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3049*8d67ca89SAndroid Build Coastguard Worker	movl	7(%ecx), %eax
3050*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3051*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 7(%edx)
3052*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (10)
3053*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3054*8d67ca89SAndroid Build Coastguard Worker	sub	$11, %ebx
3055*8d67ca89SAndroid Build Coastguard Worker	lea	11(%edx), %ecx
3056*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3057*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3058*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3059*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3060*8d67ca89SAndroid Build Coastguard Worker#  endif
3061*8d67ca89SAndroid Build Coastguard Worker# endif
3062*8d67ca89SAndroid Build Coastguard Worker	RETURN
3063*8d67ca89SAndroid Build Coastguard Worker
3064*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3065*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail12):
3066*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3067*8d67ca89SAndroid Build Coastguard Worker	movl	8(%ecx), %eax
3068*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3069*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 8(%edx)
3070*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (11)
3071*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3072*8d67ca89SAndroid Build Coastguard Worker	sub	$12, %ebx
3073*8d67ca89SAndroid Build Coastguard Worker	lea	12(%edx), %ecx
3074*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3075*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3076*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3077*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3078*8d67ca89SAndroid Build Coastguard Worker#  endif
3079*8d67ca89SAndroid Build Coastguard Worker# endif
3080*8d67ca89SAndroid Build Coastguard Worker	RETURN
3081*8d67ca89SAndroid Build Coastguard Worker
3082*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3083*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail13):
3084*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3085*8d67ca89SAndroid Build Coastguard Worker	movlpd	5(%ecx), %xmm1
3086*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3087*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 5(%edx)
3088*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (12)
3089*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3090*8d67ca89SAndroid Build Coastguard Worker	sub	$13, %ebx
3091*8d67ca89SAndroid Build Coastguard Worker	lea	13(%edx), %ecx
3092*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3093*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3094*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3095*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3096*8d67ca89SAndroid Build Coastguard Worker#  endif
3097*8d67ca89SAndroid Build Coastguard Worker# endif
3098*8d67ca89SAndroid Build Coastguard Worker	RETURN
3099*8d67ca89SAndroid Build Coastguard Worker
3100*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3101*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail14):
3102*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3103*8d67ca89SAndroid Build Coastguard Worker	movlpd	6(%ecx), %xmm1
3104*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3105*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 6(%edx)
3106*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (13)
3107*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3108*8d67ca89SAndroid Build Coastguard Worker	sub	$14, %ebx
3109*8d67ca89SAndroid Build Coastguard Worker	lea	14(%edx), %ecx
3110*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3111*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY
3112*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3113*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3114*8d67ca89SAndroid Build Coastguard Worker#  endif
3115*8d67ca89SAndroid Build Coastguard Worker# endif
3116*8d67ca89SAndroid Build Coastguard Worker	RETURN
3117*8d67ca89SAndroid Build Coastguard Worker
3118*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3119*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail15):
3120*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3121*8d67ca89SAndroid Build Coastguard Worker	movlpd	7(%ecx), %xmm1
3122*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3123*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 7(%edx)
3124*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (14)
3125*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3126*8d67ca89SAndroid Build Coastguard Worker	sub	$15, %ebx
3127*8d67ca89SAndroid Build Coastguard Worker	lea	15(%edx), %ecx
3128*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3129*8d67ca89SAndroid Build Coastguard Worker# endif
3130*8d67ca89SAndroid Build Coastguard Worker	RETURN
3131*8d67ca89SAndroid Build Coastguard Worker
3132*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3133*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail16):
3134*8d67ca89SAndroid Build Coastguard Worker	movdqu	(%ecx), %xmm0
3135*8d67ca89SAndroid Build Coastguard Worker	movdqu	%xmm0, (%edx)
3136*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (15)
3137*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3138*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3139*8d67ca89SAndroid Build Coastguard Worker	lea	16(%edx), %ecx
3140*8d67ca89SAndroid Build Coastguard Worker	jnz	L(StrncpyFillTailWithZero)
3141*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3142*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3143*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3144*8d67ca89SAndroid Build Coastguard Worker#  endif
3145*8d67ca89SAndroid Build Coastguard Worker# endif
3146*8d67ca89SAndroid Build Coastguard Worker	RETURN
3147*8d67ca89SAndroid Build Coastguard Worker#endif
3148*8d67ca89SAndroid Build Coastguard Worker
3149*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
3150*8d67ca89SAndroid Build Coastguard Worker# if !defined(USE_AS_STRCAT) && !defined(USE_AS_STRLCPY)
3151*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%esi)
3152*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%edi)
3153*8d67ca89SAndroid Build Coastguard Worker# endif
3154*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3155*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeaveCase2OrCase3):
3156*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3157*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Aligned64LeaveCase2)
3158*8d67ca89SAndroid Build Coastguard Worker
3159*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64LeaveCase3):
3160*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3161*8d67ca89SAndroid Build Coastguard Worker	jle	L(CopyFrom1To16BytesCase3)
3162*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, -64(%edx)
3163*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3164*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3165*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase3)
3166*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, -48(%edx)
3167*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3168*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3169*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase3)
3170*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm6, -32(%edx)
3171*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3172*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3173*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3174*8d67ca89SAndroid Build Coastguard Worker
3175*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64LeaveCase2):
3176*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm4, %xmm0
3177*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
3178*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3179*8d67ca89SAndroid Build Coastguard Worker	jle	L(CopyFrom1To16BytesCase2OrCase3)
3180*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3181*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
3182*8d67ca89SAndroid Build Coastguard Worker
3183*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm5, %xmm0
3184*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
3185*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, -64(%edx)
3186*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3187*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3188*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
3189*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3190*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
3191*8d67ca89SAndroid Build Coastguard Worker
3192*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm6, %xmm0
3193*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
3194*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, -48(%edx)
3195*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3196*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3197*8d67ca89SAndroid Build Coastguard Worker	jbe	L(CopyFrom1To16BytesCase2OrCase3)
3198*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3199*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16Bytes)
3200*8d67ca89SAndroid Build Coastguard Worker
3201*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm7, %xmm0
3202*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %eax
3203*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm6, -32(%edx)
3204*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3205*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3206*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase2)
3207*8d67ca89SAndroid Build Coastguard Worker
3208*8d67ca89SAndroid Build Coastguard Worker/*--------------------------------------------------*/
3209*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3210*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit1Case2OrCase3):
3211*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3212*8d67ca89SAndroid Build Coastguard Worker	movlpd	7(%ecx), %xmm1
3213*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3214*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 7(%edx)
3215*8d67ca89SAndroid Build Coastguard Worker	mov	$15, %esi
3216*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3217*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3218*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3219*8d67ca89SAndroid Build Coastguard Worker
3220*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3221*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit2Case2OrCase3):
3222*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3223*8d67ca89SAndroid Build Coastguard Worker	movlpd	6(%ecx), %xmm1
3224*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3225*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 6(%edx)
3226*8d67ca89SAndroid Build Coastguard Worker	mov	$14, %esi
3227*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3228*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3229*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3230*8d67ca89SAndroid Build Coastguard Worker
3231*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3232*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit3Case2OrCase3):
3233*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3234*8d67ca89SAndroid Build Coastguard Worker	movlpd	5(%ecx), %xmm1
3235*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3236*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 5(%edx)
3237*8d67ca89SAndroid Build Coastguard Worker	mov	$13, %esi
3238*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3239*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3240*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3241*8d67ca89SAndroid Build Coastguard Worker
3242*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3243*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit4Case2OrCase3):
3244*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3245*8d67ca89SAndroid Build Coastguard Worker	movl	8(%ecx), %esi
3246*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3247*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, 8(%edx)
3248*8d67ca89SAndroid Build Coastguard Worker	mov	$12, %esi
3249*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3250*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3251*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3252*8d67ca89SAndroid Build Coastguard Worker
3253*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3254*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit5Case2OrCase3):
3255*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3256*8d67ca89SAndroid Build Coastguard Worker	movl	7(%ecx), %esi
3257*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3258*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, 7(%edx)
3259*8d67ca89SAndroid Build Coastguard Worker	mov	$11, %esi
3260*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3261*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3262*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3263*8d67ca89SAndroid Build Coastguard Worker
3264*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3265*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit6Case2OrCase3):
3266*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3267*8d67ca89SAndroid Build Coastguard Worker	movl	6(%ecx), %esi
3268*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3269*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, 6(%edx)
3270*8d67ca89SAndroid Build Coastguard Worker	mov	$10, %esi
3271*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3272*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3273*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3274*8d67ca89SAndroid Build Coastguard Worker
3275*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3276*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit7Case2OrCase3):
3277*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3278*8d67ca89SAndroid Build Coastguard Worker	movl	5(%ecx), %esi
3279*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3280*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, 5(%edx)
3281*8d67ca89SAndroid Build Coastguard Worker	mov	$9, %esi
3282*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3283*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3284*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3285*8d67ca89SAndroid Build Coastguard Worker
3286*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3287*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit8Case2OrCase3):
3288*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3289*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3290*8d67ca89SAndroid Build Coastguard Worker	mov	$8, %esi
3291*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3292*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3293*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3294*8d67ca89SAndroid Build Coastguard Worker
3295*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3296*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit9Case2OrCase3):
3297*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3298*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3299*8d67ca89SAndroid Build Coastguard Worker	mov	$7, %esi
3300*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3301*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3302*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3303*8d67ca89SAndroid Build Coastguard Worker
3304*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3305*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit10Case2OrCase3):
3306*8d67ca89SAndroid Build Coastguard Worker	movlpd	-1(%ecx), %xmm0
3307*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -1(%edx)
3308*8d67ca89SAndroid Build Coastguard Worker	mov	$6, %esi
3309*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3310*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3311*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3312*8d67ca89SAndroid Build Coastguard Worker
3313*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3314*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit11Case2OrCase3):
3315*8d67ca89SAndroid Build Coastguard Worker	movlpd	-2(%ecx), %xmm0
3316*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -2(%edx)
3317*8d67ca89SAndroid Build Coastguard Worker	mov	$5, %esi
3318*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3319*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3320*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3321*8d67ca89SAndroid Build Coastguard Worker
3322*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3323*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit12Case2OrCase3):
3324*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %esi
3325*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, (%edx)
3326*8d67ca89SAndroid Build Coastguard Worker	mov	$4, %esi
3327*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3328*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3329*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3330*8d67ca89SAndroid Build Coastguard Worker
3331*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3332*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit13Case2OrCase3):
3333*8d67ca89SAndroid Build Coastguard Worker	movl	-1(%ecx), %esi
3334*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, -1(%edx)
3335*8d67ca89SAndroid Build Coastguard Worker	mov	$3, %esi
3336*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3337*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3338*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3339*8d67ca89SAndroid Build Coastguard Worker
3340*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3341*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit14Case2OrCase3):
3342*8d67ca89SAndroid Build Coastguard Worker	movl	-2(%ecx), %esi
3343*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, -2(%edx)
3344*8d67ca89SAndroid Build Coastguard Worker	mov	$2, %esi
3345*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3346*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3347*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3348*8d67ca89SAndroid Build Coastguard Worker
3349*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3350*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit15Case2OrCase3):
3351*8d67ca89SAndroid Build Coastguard Worker	movl	-3(%ecx), %esi
3352*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, -3(%edx)
3353*8d67ca89SAndroid Build Coastguard Worker	mov	$1, %esi
3354*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
3355*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
3356*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3357*8d67ca89SAndroid Build Coastguard Worker
3358*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave1):
3359*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3360*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3361*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit1)
3362*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm1, %xmm2
3363*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3364*8d67ca89SAndroid Build Coastguard Worker	movaps	31(%ecx), %xmm2
3365*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3366*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3367*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit1)
3368*8d67ca89SAndroid Build Coastguard Worker	palignr	$1, %xmm3, %xmm2
3369*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3370*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3371*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3372*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit1)
3373*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3374*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3375*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3376*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit1)
3377*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3378*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3379*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3380*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit1):
3381*8d67ca89SAndroid Build Coastguard Worker	lea	15(%edx, %esi), %edx
3382*8d67ca89SAndroid Build Coastguard Worker	lea	15(%ecx, %esi), %ecx
3383*8d67ca89SAndroid Build Coastguard Worker	movdqu	-16(%ecx), %xmm0
3384*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3385*8d67ca89SAndroid Build Coastguard Worker	movdqu	%xmm0, -16(%edx)
3386*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3387*8d67ca89SAndroid Build Coastguard Worker
3388*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave2):
3389*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3390*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3391*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit2)
3392*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm1, %xmm2
3393*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3394*8d67ca89SAndroid Build Coastguard Worker	movaps	30(%ecx), %xmm2
3395*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3396*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3397*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit2)
3398*8d67ca89SAndroid Build Coastguard Worker	palignr	$2, %xmm3, %xmm2
3399*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3400*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3401*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3402*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit2)
3403*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3404*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3405*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3406*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit2)
3407*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3408*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3409*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3410*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit2):
3411*8d67ca89SAndroid Build Coastguard Worker	lea	14(%edx, %esi), %edx
3412*8d67ca89SAndroid Build Coastguard Worker	lea	14(%ecx, %esi), %ecx
3413*8d67ca89SAndroid Build Coastguard Worker	movdqu	-16(%ecx), %xmm0
3414*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3415*8d67ca89SAndroid Build Coastguard Worker	movdqu	%xmm0, -16(%edx)
3416*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3417*8d67ca89SAndroid Build Coastguard Worker
3418*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave3):
3419*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3420*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3421*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit3)
3422*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm1, %xmm2
3423*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3424*8d67ca89SAndroid Build Coastguard Worker	movaps	29(%ecx), %xmm2
3425*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3426*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3427*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit3)
3428*8d67ca89SAndroid Build Coastguard Worker	palignr	$3, %xmm3, %xmm2
3429*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3430*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3431*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3432*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit3)
3433*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3434*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3435*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3436*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit3)
3437*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3438*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3439*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3440*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit3):
3441*8d67ca89SAndroid Build Coastguard Worker	lea	13(%edx, %esi), %edx
3442*8d67ca89SAndroid Build Coastguard Worker	lea	13(%ecx, %esi), %ecx
3443*8d67ca89SAndroid Build Coastguard Worker	movdqu	-16(%ecx), %xmm0
3444*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3445*8d67ca89SAndroid Build Coastguard Worker	movdqu	%xmm0, -16(%edx)
3446*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3447*8d67ca89SAndroid Build Coastguard Worker
3448*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave4):
3449*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3450*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3451*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit4)
3452*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm1, %xmm2
3453*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3454*8d67ca89SAndroid Build Coastguard Worker	movaps	28(%ecx), %xmm2
3455*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3456*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3457*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit4)
3458*8d67ca89SAndroid Build Coastguard Worker	palignr	$4, %xmm3, %xmm2
3459*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3460*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3461*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3462*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit4)
3463*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3464*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3465*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3466*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit4)
3467*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3468*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3469*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3470*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit4):
3471*8d67ca89SAndroid Build Coastguard Worker	lea	12(%edx, %esi), %edx
3472*8d67ca89SAndroid Build Coastguard Worker	lea	12(%ecx, %esi), %ecx
3473*8d67ca89SAndroid Build Coastguard Worker	movlpd	-12(%ecx), %xmm0
3474*8d67ca89SAndroid Build Coastguard Worker	movl	-4(%ecx), %eax
3475*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -12(%edx)
3476*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, -4(%edx)
3477*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3478*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3479*8d67ca89SAndroid Build Coastguard Worker
3480*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave5):
3481*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3482*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3483*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit5)
3484*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm1, %xmm2
3485*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3486*8d67ca89SAndroid Build Coastguard Worker	movaps	27(%ecx), %xmm2
3487*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3488*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3489*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit5)
3490*8d67ca89SAndroid Build Coastguard Worker	palignr	$5, %xmm3, %xmm2
3491*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3492*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3493*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3494*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit5)
3495*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3496*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3497*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3498*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit5)
3499*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3500*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3501*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3502*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit5):
3503*8d67ca89SAndroid Build Coastguard Worker	lea	11(%edx, %esi), %edx
3504*8d67ca89SAndroid Build Coastguard Worker	lea	11(%ecx, %esi), %ecx
3505*8d67ca89SAndroid Build Coastguard Worker	movlpd	-11(%ecx), %xmm0
3506*8d67ca89SAndroid Build Coastguard Worker	movl	-4(%ecx), %eax
3507*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -11(%edx)
3508*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, -4(%edx)
3509*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3510*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3511*8d67ca89SAndroid Build Coastguard Worker
3512*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave6):
3513*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3514*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3515*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit6)
3516*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm1, %xmm2
3517*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3518*8d67ca89SAndroid Build Coastguard Worker	movaps	26(%ecx), %xmm2
3519*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3520*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3521*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit6)
3522*8d67ca89SAndroid Build Coastguard Worker	palignr	$6, %xmm3, %xmm2
3523*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3524*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3525*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3526*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit6)
3527*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3528*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3529*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3530*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit6)
3531*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3532*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3533*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3534*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit6):
3535*8d67ca89SAndroid Build Coastguard Worker	lea	10(%edx, %esi), %edx
3536*8d67ca89SAndroid Build Coastguard Worker	lea	10(%ecx, %esi), %ecx
3537*8d67ca89SAndroid Build Coastguard Worker
3538*8d67ca89SAndroid Build Coastguard Worker	movlpd	-10(%ecx), %xmm0
3539*8d67ca89SAndroid Build Coastguard Worker	movw	-2(%ecx), %ax
3540*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -10(%edx)
3541*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, -2(%edx)
3542*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3543*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3544*8d67ca89SAndroid Build Coastguard Worker
3545*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave7):
3546*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3547*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3548*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit7)
3549*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm1, %xmm2
3550*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3551*8d67ca89SAndroid Build Coastguard Worker	movaps	25(%ecx), %xmm2
3552*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3553*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3554*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit7)
3555*8d67ca89SAndroid Build Coastguard Worker	palignr	$7, %xmm3, %xmm2
3556*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3557*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3558*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3559*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit7)
3560*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3561*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3562*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3563*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit7)
3564*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3565*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3566*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3567*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit7):
3568*8d67ca89SAndroid Build Coastguard Worker	lea	9(%edx, %esi), %edx
3569*8d67ca89SAndroid Build Coastguard Worker	lea	9(%ecx, %esi), %ecx
3570*8d67ca89SAndroid Build Coastguard Worker
3571*8d67ca89SAndroid Build Coastguard Worker	movlpd	-9(%ecx), %xmm0
3572*8d67ca89SAndroid Build Coastguard Worker	movb	-1(%ecx), %ah
3573*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -9(%edx)
3574*8d67ca89SAndroid Build Coastguard Worker	movb	%ah, -1(%edx)
3575*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3576*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3577*8d67ca89SAndroid Build Coastguard Worker
3578*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave8):
3579*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3580*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3581*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit8)
3582*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm1, %xmm2
3583*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3584*8d67ca89SAndroid Build Coastguard Worker	movaps	24(%ecx), %xmm2
3585*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3586*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3587*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8)
3588*8d67ca89SAndroid Build Coastguard Worker	palignr	$8, %xmm3, %xmm2
3589*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3590*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3591*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3592*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8)
3593*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3594*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3595*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3596*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8)
3597*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3598*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3599*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3600*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit8):
3601*8d67ca89SAndroid Build Coastguard Worker	lea	8(%edx, %esi), %edx
3602*8d67ca89SAndroid Build Coastguard Worker	lea	8(%ecx, %esi), %ecx
3603*8d67ca89SAndroid Build Coastguard Worker	movlpd	-8(%ecx), %xmm0
3604*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -8(%edx)
3605*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3606*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3607*8d67ca89SAndroid Build Coastguard Worker
3608*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave9):
3609*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3610*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3611*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit9)
3612*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm1, %xmm2
3613*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3614*8d67ca89SAndroid Build Coastguard Worker	movaps	23(%ecx), %xmm2
3615*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3616*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3617*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit9)
3618*8d67ca89SAndroid Build Coastguard Worker	palignr	$9, %xmm3, %xmm2
3619*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3620*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3621*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3622*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit9)
3623*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3624*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3625*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3626*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit9)
3627*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3628*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3629*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3630*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit9):
3631*8d67ca89SAndroid Build Coastguard Worker	lea	7(%edx, %esi), %edx
3632*8d67ca89SAndroid Build Coastguard Worker	lea	7(%ecx, %esi), %ecx
3633*8d67ca89SAndroid Build Coastguard Worker
3634*8d67ca89SAndroid Build Coastguard Worker	movlpd	-8(%ecx), %xmm0
3635*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -8(%edx)
3636*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3637*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3638*8d67ca89SAndroid Build Coastguard Worker
3639*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave10):
3640*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3641*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3642*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit10)
3643*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm1, %xmm2
3644*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3645*8d67ca89SAndroid Build Coastguard Worker	movaps	22(%ecx), %xmm2
3646*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3647*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3648*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit10)
3649*8d67ca89SAndroid Build Coastguard Worker	palignr	$10, %xmm3, %xmm2
3650*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3651*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3652*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3653*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit10)
3654*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3655*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3656*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3657*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit10)
3658*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3659*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3660*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3661*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit10):
3662*8d67ca89SAndroid Build Coastguard Worker	lea	6(%edx, %esi), %edx
3663*8d67ca89SAndroid Build Coastguard Worker	lea	6(%ecx, %esi), %ecx
3664*8d67ca89SAndroid Build Coastguard Worker
3665*8d67ca89SAndroid Build Coastguard Worker	movlpd	-8(%ecx), %xmm0
3666*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, -8(%edx)
3667*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3668*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3669*8d67ca89SAndroid Build Coastguard Worker
3670*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave11):
3671*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3672*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3673*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit11)
3674*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm1, %xmm2
3675*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3676*8d67ca89SAndroid Build Coastguard Worker	movaps	21(%ecx), %xmm2
3677*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3678*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3679*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit11)
3680*8d67ca89SAndroid Build Coastguard Worker	palignr	$11, %xmm3, %xmm2
3681*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3682*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3683*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3684*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit11)
3685*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3686*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3687*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3688*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit11)
3689*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3690*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3691*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3692*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit11):
3693*8d67ca89SAndroid Build Coastguard Worker	lea	5(%edx, %esi), %edx
3694*8d67ca89SAndroid Build Coastguard Worker	lea	5(%ecx, %esi), %ecx
3695*8d67ca89SAndroid Build Coastguard Worker	movl	-5(%ecx), %esi
3696*8d67ca89SAndroid Build Coastguard Worker	movb	-1(%ecx), %ah
3697*8d67ca89SAndroid Build Coastguard Worker	movl	%esi, -5(%edx)
3698*8d67ca89SAndroid Build Coastguard Worker	movb	%ah, -1(%edx)
3699*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3700*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3701*8d67ca89SAndroid Build Coastguard Worker
3702*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave12):
3703*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3704*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3705*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit12)
3706*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm1, %xmm2
3707*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3708*8d67ca89SAndroid Build Coastguard Worker	movaps	20(%ecx), %xmm2
3709*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3710*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3711*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit12)
3712*8d67ca89SAndroid Build Coastguard Worker	palignr	$12, %xmm3, %xmm2
3713*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3714*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3715*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3716*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit12)
3717*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3718*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3719*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3720*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit12)
3721*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3722*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3723*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3724*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit12):
3725*8d67ca89SAndroid Build Coastguard Worker	lea	4(%edx, %esi), %edx
3726*8d67ca89SAndroid Build Coastguard Worker	lea	4(%ecx, %esi), %ecx
3727*8d67ca89SAndroid Build Coastguard Worker	movl	-4(%ecx), %eax
3728*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, -4(%edx)
3729*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3730*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3731*8d67ca89SAndroid Build Coastguard Worker
3732*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave13):
3733*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3734*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3735*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit13)
3736*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm1, %xmm2
3737*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3738*8d67ca89SAndroid Build Coastguard Worker	movaps	19(%ecx), %xmm2
3739*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3740*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3741*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit13)
3742*8d67ca89SAndroid Build Coastguard Worker	palignr	$13, %xmm3, %xmm2
3743*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3744*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3745*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3746*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit13)
3747*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3748*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3749*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3750*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit13)
3751*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3752*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3753*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3754*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit13):
3755*8d67ca89SAndroid Build Coastguard Worker	lea	3(%edx, %esi), %edx
3756*8d67ca89SAndroid Build Coastguard Worker	lea	3(%ecx, %esi), %ecx
3757*8d67ca89SAndroid Build Coastguard Worker
3758*8d67ca89SAndroid Build Coastguard Worker	movl	-4(%ecx), %eax
3759*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, -4(%edx)
3760*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3761*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3762*8d67ca89SAndroid Build Coastguard Worker
3763*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave14):
3764*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3765*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3766*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit14)
3767*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm1, %xmm2
3768*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3769*8d67ca89SAndroid Build Coastguard Worker	movaps	18(%ecx), %xmm2
3770*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3771*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3772*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit14)
3773*8d67ca89SAndroid Build Coastguard Worker	palignr	$14, %xmm3, %xmm2
3774*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3775*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3776*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3777*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit14)
3778*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3779*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3780*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3781*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit14)
3782*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3783*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3784*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3785*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit14):
3786*8d67ca89SAndroid Build Coastguard Worker	lea	2(%edx, %esi), %edx
3787*8d67ca89SAndroid Build Coastguard Worker	lea	2(%ecx, %esi), %ecx
3788*8d67ca89SAndroid Build Coastguard Worker	movw	-2(%ecx), %ax
3789*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, -2(%edx)
3790*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3791*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3792*8d67ca89SAndroid Build Coastguard Worker
3793*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave15):
3794*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, %xmm3
3795*8d67ca89SAndroid Build Coastguard Worker	add	$48, %ebx
3796*8d67ca89SAndroid Build Coastguard Worker	jle	L(StrncpyExit15)
3797*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm1, %xmm2
3798*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, (%edx)
3799*8d67ca89SAndroid Build Coastguard Worker	movaps	17(%ecx), %xmm2
3800*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3801*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3802*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit15)
3803*8d67ca89SAndroid Build Coastguard Worker	palignr	$15, %xmm3, %xmm2
3804*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm2, 16(%edx)
3805*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3806*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3807*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit15)
3808*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm4, 32(%edx)
3809*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3810*8d67ca89SAndroid Build Coastguard Worker	sub	$16, %ebx
3811*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit15)
3812*8d67ca89SAndroid Build Coastguard Worker	movaps	%xmm5, 48(%edx)
3813*8d67ca89SAndroid Build Coastguard Worker	lea	16(%esi), %esi
3814*8d67ca89SAndroid Build Coastguard Worker	lea	-16(%ebx), %ebx
3815*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit15):
3816*8d67ca89SAndroid Build Coastguard Worker	lea	1(%edx, %esi), %edx
3817*8d67ca89SAndroid Build Coastguard Worker	lea	1(%ecx, %esi), %ecx
3818*8d67ca89SAndroid Build Coastguard Worker	movb	-1(%ecx), %ah
3819*8d67ca89SAndroid Build Coastguard Worker	movb	%ah, -1(%edx)
3820*8d67ca89SAndroid Build Coastguard Worker	xor	%esi, %esi
3821*8d67ca89SAndroid Build Coastguard Worker	jmp	L(CopyFrom1To16BytesCase3)
3822*8d67ca89SAndroid Build Coastguard Worker#endif
3823*8d67ca89SAndroid Build Coastguard Worker
3824*8d67ca89SAndroid Build Coastguard Worker#if !defined USE_AS_STRCAT && ! defined USE_AS_STRLCPY
3825*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY
3826*8d67ca89SAndroid Build Coastguard Worker	CFI_POP (%esi)
3827*8d67ca89SAndroid Build Coastguard Worker	CFI_POP (%edi)
3828*8d67ca89SAndroid Build Coastguard Worker
3829*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3830*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail0):
3831*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, %eax
3832*8d67ca89SAndroid Build Coastguard Worker	RETURN
3833*8d67ca89SAndroid Build Coastguard Worker
3834*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3835*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit15Bytes):
3836*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ebx
3837*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit12Bytes)
3838*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 8(%ecx)
3839*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail9)
3840*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 9(%ecx)
3841*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail10)
3842*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 10(%ecx)
3843*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail11)
3844*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 11(%ecx)
3845*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail12)
3846*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %ebx
3847*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail13)
3848*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 12(%ecx)
3849*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail13)
3850*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %ebx
3851*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail14)
3852*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 13(%ecx)
3853*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail14)
3854*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3855*8d67ca89SAndroid Build Coastguard Worker	movlpd	7(%ecx), %xmm1
3856*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3857*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 7(%edx)
3858*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3859*8d67ca89SAndroid Build Coastguard Worker	lea	14(%edx), %eax
3860*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3861*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3862*8d67ca89SAndroid Build Coastguard Worker#  else
3863*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, %eax
3864*8d67ca89SAndroid Build Coastguard Worker#  endif
3865*8d67ca89SAndroid Build Coastguard Worker	RETURN
3866*8d67ca89SAndroid Build Coastguard Worker
3867*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3868*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit12Bytes):
3869*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %ebx
3870*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail9)
3871*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 8(%ecx)
3872*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail9)
3873*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ebx
3874*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail10)
3875*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 9(%ecx)
3876*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail10)
3877*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %ebx
3878*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail11)
3879*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 10(%ecx)
3880*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail11)
3881*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3882*8d67ca89SAndroid Build Coastguard Worker	movl	8(%ecx), %eax
3883*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3884*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 8(%edx)
3885*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (11)
3886*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3887*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3888*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3889*8d67ca89SAndroid Build Coastguard Worker#  endif
3890*8d67ca89SAndroid Build Coastguard Worker	RETURN
3891*8d67ca89SAndroid Build Coastguard Worker
3892*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3893*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit8Bytes):
3894*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ebx
3895*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit4Bytes)
3896*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, (%ecx)
3897*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail1)
3898*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 1(%ecx)
3899*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail2)
3900*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 2(%ecx)
3901*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail3)
3902*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 3(%ecx)
3903*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail4)
3904*8d67ca89SAndroid Build Coastguard Worker
3905*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %ebx
3906*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail5)
3907*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 4(%ecx)
3908*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail5)
3909*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ebx
3910*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail6)
3911*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 5(%ecx)
3912*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail6)
3913*8d67ca89SAndroid Build Coastguard Worker	cmp	$7, %ebx
3914*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail7)
3915*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 6(%ecx)
3916*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail7)
3917*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
3918*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
3919*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3920*8d67ca89SAndroid Build Coastguard Worker	lea	7(%edx), %eax
3921*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3922*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3923*8d67ca89SAndroid Build Coastguard Worker#  else
3924*8d67ca89SAndroid Build Coastguard Worker	movl	%edx, %eax
3925*8d67ca89SAndroid Build Coastguard Worker#  endif
3926*8d67ca89SAndroid Build Coastguard Worker	RETURN
3927*8d67ca89SAndroid Build Coastguard Worker
3928*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
3929*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit4Bytes):
3930*8d67ca89SAndroid Build Coastguard Worker	test	%ebx, %ebx
3931*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail0)
3932*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %ebx
3933*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail1)
3934*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, (%ecx)
3935*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail1)
3936*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ebx
3937*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail2)
3938*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 1(%ecx)
3939*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail2)
3940*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %ebx
3941*8d67ca89SAndroid Build Coastguard Worker	je	L(ExitTail3)
3942*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 2(%ecx)
3943*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitTail3)
3944*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
3945*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
3946*8d67ca89SAndroid Build Coastguard Worker	SAVE_RESULT_TAIL (3)
3947*8d67ca89SAndroid Build Coastguard Worker#  ifdef USE_AS_STPCPY
3948*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
3949*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
3950*8d67ca89SAndroid Build Coastguard Worker#  endif
3951*8d67ca89SAndroid Build Coastguard Worker	RETURN
3952*8d67ca89SAndroid Build Coastguard Worker# endif
3953*8d67ca89SAndroid Build Coastguard Worker
3954*8d67ca89SAndroid Build Coastguard WorkerEND (STRCPY)
3955*8d67ca89SAndroid Build Coastguard Worker#endif
3956