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