xref: /aosp_15_r20/bionic/libc/arch-x86/string/ssse3-strcat-atom.S (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker/*
2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2011, Intel Corporation
3*8d67ca89SAndroid Build Coastguard WorkerAll rights reserved.
4*8d67ca89SAndroid Build Coastguard Worker
5*8d67ca89SAndroid Build Coastguard WorkerRedistribution and use in source and binary forms, with or without
6*8d67ca89SAndroid Build Coastguard Workermodification, are permitted provided that the following conditions are met:
7*8d67ca89SAndroid Build Coastguard Worker
8*8d67ca89SAndroid Build Coastguard Worker    * Redistributions of source code must retain the above copyright notice,
9*8d67ca89SAndroid Build Coastguard Worker    * this list of conditions and the following disclaimer.
10*8d67ca89SAndroid Build Coastguard Worker
11*8d67ca89SAndroid Build Coastguard Worker    * Redistributions in binary form must reproduce the above copyright notice,
12*8d67ca89SAndroid Build Coastguard Worker    * this list of conditions and the following disclaimer in the documentation
13*8d67ca89SAndroid Build Coastguard Worker    * and/or other materials provided with the distribution.
14*8d67ca89SAndroid Build Coastguard Worker
15*8d67ca89SAndroid Build Coastguard Worker    * Neither the name of Intel Corporation nor the names of its contributors
16*8d67ca89SAndroid Build Coastguard Worker    * may be used to endorse or promote products derived from this software
17*8d67ca89SAndroid Build Coastguard Worker    * without specific prior written permission.
18*8d67ca89SAndroid Build Coastguard Worker
19*8d67ca89SAndroid Build Coastguard WorkerTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20*8d67ca89SAndroid Build Coastguard WorkerANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21*8d67ca89SAndroid Build Coastguard WorkerWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22*8d67ca89SAndroid Build Coastguard WorkerDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23*8d67ca89SAndroid Build Coastguard WorkerANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24*8d67ca89SAndroid Build Coastguard Worker(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25*8d67ca89SAndroid Build Coastguard WorkerLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26*8d67ca89SAndroid Build Coastguard WorkerANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27*8d67ca89SAndroid Build Coastguard Worker(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28*8d67ca89SAndroid Build Coastguard WorkerSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*8d67ca89SAndroid Build Coastguard Worker*/
30*8d67ca89SAndroid Build Coastguard Worker
31*8d67ca89SAndroid Build Coastguard Worker#ifndef L
32*8d67ca89SAndroid Build Coastguard Worker# define L(label)	.L##label
33*8d67ca89SAndroid Build Coastguard Worker#endif
34*8d67ca89SAndroid Build Coastguard Worker
35*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_startproc
36*8d67ca89SAndroid Build Coastguard Worker# define cfi_startproc			.cfi_startproc
37*8d67ca89SAndroid Build Coastguard Worker#endif
38*8d67ca89SAndroid Build Coastguard Worker
39*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_endproc
40*8d67ca89SAndroid Build Coastguard Worker# define cfi_endproc			.cfi_endproc
41*8d67ca89SAndroid Build Coastguard Worker#endif
42*8d67ca89SAndroid Build Coastguard Worker
43*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_rel_offset
44*8d67ca89SAndroid Build Coastguard Worker# define cfi_rel_offset(reg, off)	.cfi_rel_offset reg, off
45*8d67ca89SAndroid Build Coastguard Worker#endif
46*8d67ca89SAndroid Build Coastguard Worker
47*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_restore
48*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore(reg)		.cfi_restore reg
49*8d67ca89SAndroid Build Coastguard Worker#endif
50*8d67ca89SAndroid Build Coastguard Worker
51*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_adjust_cfa_offset
52*8d67ca89SAndroid Build Coastguard Worker# define cfi_adjust_cfa_offset(off)	.cfi_adjust_cfa_offset off
53*8d67ca89SAndroid Build Coastguard Worker#endif
54*8d67ca89SAndroid Build Coastguard Worker
55*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_remember_state
56*8d67ca89SAndroid Build Coastguard Worker# define cfi_remember_state		.cfi_remember_state
57*8d67ca89SAndroid Build Coastguard Worker#endif
58*8d67ca89SAndroid Build Coastguard Worker
59*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_restore_state
60*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore_state		.cfi_restore_state
61*8d67ca89SAndroid Build Coastguard Worker#endif
62*8d67ca89SAndroid Build Coastguard Worker
63*8d67ca89SAndroid Build Coastguard Worker#ifndef ENTRY
64*8d67ca89SAndroid Build Coastguard Worker# define ENTRY(name)			\
65*8d67ca89SAndroid Build Coastguard Worker	.type name,  @function; 	\
66*8d67ca89SAndroid Build Coastguard Worker	.globl name;			\
67*8d67ca89SAndroid Build Coastguard Worker	.p2align 4;			\
68*8d67ca89SAndroid Build Coastguard Workername:					\
69*8d67ca89SAndroid Build Coastguard Worker	cfi_startproc
70*8d67ca89SAndroid Build Coastguard Worker#endif
71*8d67ca89SAndroid Build Coastguard Worker
72*8d67ca89SAndroid Build Coastguard Worker#ifndef END
73*8d67ca89SAndroid Build Coastguard Worker# define END(name)			\
74*8d67ca89SAndroid Build Coastguard Worker	cfi_endproc;			\
75*8d67ca89SAndroid Build Coastguard Worker	.size name, .-name
76*8d67ca89SAndroid Build Coastguard Worker#endif
77*8d67ca89SAndroid Build Coastguard Worker
78*8d67ca89SAndroid Build Coastguard Worker#define CFI_PUSH(REG)			\
79*8d67ca89SAndroid Build Coastguard Worker  cfi_adjust_cfa_offset (4);		\
80*8d67ca89SAndroid Build Coastguard Worker  cfi_rel_offset (REG, 0)
81*8d67ca89SAndroid Build Coastguard Worker
82*8d67ca89SAndroid Build Coastguard Worker#define CFI_POP(REG)			\
83*8d67ca89SAndroid Build Coastguard Worker  cfi_adjust_cfa_offset (-4);		\
84*8d67ca89SAndroid Build Coastguard Worker  cfi_restore (REG)
85*8d67ca89SAndroid Build Coastguard Worker
86*8d67ca89SAndroid Build Coastguard Worker#define PUSH(REG)	pushl REG; CFI_PUSH (REG)
87*8d67ca89SAndroid Build Coastguard Worker#define POP(REG)	popl REG; CFI_POP (REG)
88*8d67ca89SAndroid Build Coastguard Worker
89*8d67ca89SAndroid Build Coastguard Worker#ifndef STRCAT
90*8d67ca89SAndroid Build Coastguard Worker# define STRCAT	strcat
91*8d67ca89SAndroid Build Coastguard Worker#endif
92*8d67ca89SAndroid Build Coastguard Worker
93*8d67ca89SAndroid Build Coastguard Worker#define PARMS	4
94*8d67ca89SAndroid Build Coastguard Worker#define STR1	PARMS+4
95*8d67ca89SAndroid Build Coastguard Worker#define STR2	STR1+4
96*8d67ca89SAndroid Build Coastguard Worker
97*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCAT
98*8d67ca89SAndroid Build Coastguard Worker# define LEN	STR2+8
99*8d67ca89SAndroid Build Coastguard Worker#endif
100*8d67ca89SAndroid Build Coastguard Worker
101*8d67ca89SAndroid Build Coastguard Worker#define USE_AS_STRCAT
102*8d67ca89SAndroid Build Coastguard Worker
103*8d67ca89SAndroid Build Coastguard Worker	.section .text.ssse3,"ax",@progbits
104*8d67ca89SAndroid Build Coastguard WorkerENTRY (STRCAT)
105*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%edi)
106*8d67ca89SAndroid Build Coastguard Worker	mov	STR1(%esp), %edi
107*8d67ca89SAndroid Build Coastguard Worker	mov	%edi, %edx
108*8d67ca89SAndroid Build Coastguard Worker
109*8d67ca89SAndroid Build Coastguard Worker#define RETURN	jmp	L(StrcpyAtom)
110*8d67ca89SAndroid Build Coastguard Worker#include "sse2-strlen-atom.S"
111*8d67ca89SAndroid Build Coastguard Worker
112*8d67ca89SAndroid Build Coastguard WorkerL(StrcpyAtom):
113*8d67ca89SAndroid Build Coastguard Worker	mov	STR2(%esp), %ecx
114*8d67ca89SAndroid Build Coastguard Worker	lea	(%edi, %eax), %edx
115*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCAT
116*8d67ca89SAndroid Build Coastguard Worker	PUSH	(%ebx)
117*8d67ca89SAndroid Build Coastguard Worker	mov	LEN(%esp), %ebx
118*8d67ca89SAndroid Build Coastguard Worker	test	%ebx, %ebx
119*8d67ca89SAndroid Build Coastguard Worker	jz	L(StrncatExit0)
120*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ebx
121*8d67ca89SAndroid Build Coastguard Worker	jbe	L(StrncpyExit8Bytes)
122*8d67ca89SAndroid Build Coastguard Worker#endif
123*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, (%ecx)
124*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit1)
125*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 1(%ecx)
126*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit2)
127*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 2(%ecx)
128*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit3)
129*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 3(%ecx)
130*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit4)
131*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 4(%ecx)
132*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit5)
133*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 5(%ecx)
134*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit6)
135*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 6(%ecx)
136*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit7)
137*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 7(%ecx)
138*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit8)
139*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 8(%ecx)
140*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit9)
141*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCAT
142*8d67ca89SAndroid Build Coastguard Worker	cmp	$16, %ebx
143*8d67ca89SAndroid Build Coastguard Worker	jb	L(StrncpyExit15Bytes)
144*8d67ca89SAndroid Build Coastguard Worker#endif
145*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 9(%ecx)
146*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit10)
147*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 10(%ecx)
148*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit11)
149*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 11(%ecx)
150*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit12)
151*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 12(%ecx)
152*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit13)
153*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 13(%ecx)
154*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit14)
155*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 14(%ecx)
156*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit15)
157*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 15(%ecx)
158*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit16)
159*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCAT
160*8d67ca89SAndroid Build Coastguard Worker	cmp	$16, %ebx
161*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit16)
162*8d67ca89SAndroid Build Coastguard Worker
163*8d67ca89SAndroid Build Coastguard Worker# define RETURN1	POP (%ebx); POP (%edi);	ret; \
164*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH (%ebx); CFI_PUSH (%edi)
165*8d67ca89SAndroid Build Coastguard Worker# define USE_AS_STRNCPY
166*8d67ca89SAndroid Build Coastguard Worker#else
167*8d67ca89SAndroid Build Coastguard Worker# define RETURN1	POP(%edi); ret; CFI_PUSH(%edi)
168*8d67ca89SAndroid Build Coastguard Worker#endif
169*8d67ca89SAndroid Build Coastguard Worker#include "ssse3-strcpy-atom.S"
170*8d67ca89SAndroid Build Coastguard Worker
171*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
172*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16Bytes):
173*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %edx
174*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %ecx
175*8d67ca89SAndroid Build Coastguard Worker
176*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
177*8d67ca89SAndroid Build Coastguard Worker	test	%al, %al
178*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitHigh)
179*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %al
180*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit1)
181*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %al
182*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit2)
183*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %al
184*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit3)
185*8d67ca89SAndroid Build Coastguard Worker	test	$0x08, %al
186*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit4)
187*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %al
188*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit5)
189*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %al
190*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit6)
191*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %al
192*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit7)
193*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
194*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
195*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
196*8d67ca89SAndroid Build Coastguard Worker	RETURN1
197*8d67ca89SAndroid Build Coastguard Worker
198*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
199*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh):
200*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %ah
201*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit9)
202*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %ah
203*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit10)
204*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %ah
205*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit11)
206*8d67ca89SAndroid Build Coastguard Worker	test	$0x08, %ah
207*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit12)
208*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %ah
209*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit13)
210*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %ah
211*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit14)
212*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %ah
213*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit15)
214*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
215*8d67ca89SAndroid Build Coastguard Worker	movlpd	8(%ecx), %xmm1
216*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
217*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 8(%edx)
218*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
219*8d67ca89SAndroid Build Coastguard Worker	RETURN1
220*8d67ca89SAndroid Build Coastguard Worker
221*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
222*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit1):
223*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 1(%edx)
224*8d67ca89SAndroid Build Coastguard WorkerL(Exit1):
225*8d67ca89SAndroid Build Coastguard Worker	movb	(%ecx), %al
226*8d67ca89SAndroid Build Coastguard Worker	movb	%al, (%edx)
227*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
228*8d67ca89SAndroid Build Coastguard Worker	RETURN1
229*8d67ca89SAndroid Build Coastguard Worker
230*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
231*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit2):
232*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 2(%edx)
233*8d67ca89SAndroid Build Coastguard WorkerL(Exit2):
234*8d67ca89SAndroid Build Coastguard Worker	movw	(%ecx), %ax
235*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, (%edx)
236*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
237*8d67ca89SAndroid Build Coastguard Worker	RETURN1
238*8d67ca89SAndroid Build Coastguard Worker
239*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
240*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit3):
241*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 3(%edx)
242*8d67ca89SAndroid Build Coastguard WorkerL(Exit3):
243*8d67ca89SAndroid Build Coastguard Worker	movw	(%ecx), %ax
244*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, (%edx)
245*8d67ca89SAndroid Build Coastguard Worker	movb	2(%ecx), %al
246*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 2(%edx)
247*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
248*8d67ca89SAndroid Build Coastguard Worker	RETURN1
249*8d67ca89SAndroid Build Coastguard Worker
250*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
251*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit4):
252*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 4(%edx)
253*8d67ca89SAndroid Build Coastguard WorkerL(Exit4):
254*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
255*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
256*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
257*8d67ca89SAndroid Build Coastguard Worker	RETURN1
258*8d67ca89SAndroid Build Coastguard Worker
259*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
260*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit5):
261*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 5(%edx)
262*8d67ca89SAndroid Build Coastguard WorkerL(Exit5):
263*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
264*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
265*8d67ca89SAndroid Build Coastguard Worker	movb	4(%ecx), %al
266*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 4(%edx)
267*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
268*8d67ca89SAndroid Build Coastguard Worker	RETURN1
269*8d67ca89SAndroid Build Coastguard Worker
270*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
271*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit6):
272*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 6(%edx)
273*8d67ca89SAndroid Build Coastguard WorkerL(Exit6):
274*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
275*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
276*8d67ca89SAndroid Build Coastguard Worker	movw	4(%ecx), %ax
277*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, 4(%edx)
278*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
279*8d67ca89SAndroid Build Coastguard Worker	RETURN1
280*8d67ca89SAndroid Build Coastguard Worker
281*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
282*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit7):
283*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 7(%edx)
284*8d67ca89SAndroid Build Coastguard WorkerL(Exit7):
285*8d67ca89SAndroid Build Coastguard Worker	movl	(%ecx), %eax
286*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, (%edx)
287*8d67ca89SAndroid Build Coastguard Worker	movl	3(%ecx), %eax
288*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 3(%edx)
289*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
290*8d67ca89SAndroid Build Coastguard Worker	RETURN1
291*8d67ca89SAndroid Build Coastguard Worker
292*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
293*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit8):
294*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 8(%edx)
295*8d67ca89SAndroid Build Coastguard WorkerL(Exit8):
296*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
297*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
298*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
299*8d67ca89SAndroid Build Coastguard Worker	RETURN1
300*8d67ca89SAndroid Build Coastguard Worker
301*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
302*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit9):
303*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 9(%edx)
304*8d67ca89SAndroid Build Coastguard WorkerL(Exit9):
305*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
306*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
307*8d67ca89SAndroid Build Coastguard Worker	movb	8(%ecx), %al
308*8d67ca89SAndroid Build Coastguard Worker	movb	%al, 8(%edx)
309*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
310*8d67ca89SAndroid Build Coastguard Worker	RETURN1
311*8d67ca89SAndroid Build Coastguard Worker
312*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
313*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit10):
314*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 10(%edx)
315*8d67ca89SAndroid Build Coastguard WorkerL(Exit10):
316*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
317*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
318*8d67ca89SAndroid Build Coastguard Worker	movw	8(%ecx), %ax
319*8d67ca89SAndroid Build Coastguard Worker	movw	%ax, 8(%edx)
320*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
321*8d67ca89SAndroid Build Coastguard Worker	RETURN1
322*8d67ca89SAndroid Build Coastguard Worker
323*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
324*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit11):
325*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 11(%edx)
326*8d67ca89SAndroid Build Coastguard WorkerL(Exit11):
327*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
328*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
329*8d67ca89SAndroid Build Coastguard Worker	movl	7(%ecx), %eax
330*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 7(%edx)
331*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
332*8d67ca89SAndroid Build Coastguard Worker	RETURN1
333*8d67ca89SAndroid Build Coastguard Worker
334*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
335*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit12):
336*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 12(%edx)
337*8d67ca89SAndroid Build Coastguard WorkerL(Exit12):
338*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
339*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
340*8d67ca89SAndroid Build Coastguard Worker	movl	8(%ecx), %eax
341*8d67ca89SAndroid Build Coastguard Worker	movl	%eax, 8(%edx)
342*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
343*8d67ca89SAndroid Build Coastguard Worker	RETURN1
344*8d67ca89SAndroid Build Coastguard Worker
345*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
346*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit13):
347*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 13(%edx)
348*8d67ca89SAndroid Build Coastguard WorkerL(Exit13):
349*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
350*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
351*8d67ca89SAndroid Build Coastguard Worker	movlpd	5(%ecx), %xmm0
352*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 5(%edx)
353*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
354*8d67ca89SAndroid Build Coastguard Worker	RETURN1
355*8d67ca89SAndroid Build Coastguard Worker
356*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
357*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit14):
358*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 14(%edx)
359*8d67ca89SAndroid Build Coastguard WorkerL(Exit14):
360*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
361*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
362*8d67ca89SAndroid Build Coastguard Worker	movlpd	6(%ecx), %xmm0
363*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 6(%edx)
364*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
365*8d67ca89SAndroid Build Coastguard Worker	RETURN1
366*8d67ca89SAndroid Build Coastguard Worker
367*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
368*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit15):
369*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 15(%edx)
370*8d67ca89SAndroid Build Coastguard WorkerL(Exit15):
371*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
372*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
373*8d67ca89SAndroid Build Coastguard Worker	movlpd	7(%ecx), %xmm0
374*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 7(%edx)
375*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
376*8d67ca89SAndroid Build Coastguard Worker	RETURN1
377*8d67ca89SAndroid Build Coastguard Worker
378*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
379*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit16):
380*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 16(%edx)
381*8d67ca89SAndroid Build Coastguard WorkerL(Exit16):
382*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
383*8d67ca89SAndroid Build Coastguard Worker	movlpd	8(%ecx), %xmm1
384*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
385*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 8(%edx)
386*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
387*8d67ca89SAndroid Build Coastguard Worker	RETURN1
388*8d67ca89SAndroid Build Coastguard Worker
389*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY
390*8d67ca89SAndroid Build Coastguard Worker
391*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH(%esi)
392*8d67ca89SAndroid Build Coastguard Worker
393*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
394*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase2):
395*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ebx
396*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %ecx
397*8d67ca89SAndroid Build Coastguard Worker	lea	(%esi, %edx), %esi
398*8d67ca89SAndroid Build Coastguard Worker	lea	-9(%ebx), %edx
399*8d67ca89SAndroid Build Coastguard Worker	and	$1<<7, %dh
400*8d67ca89SAndroid Build Coastguard Worker	or	%al, %dh
401*8d67ca89SAndroid Build Coastguard Worker	lea	(%esi), %edx
402*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
403*8d67ca89SAndroid Build Coastguard Worker	jz	L(ExitHighCase2)
404*8d67ca89SAndroid Build Coastguard Worker
405*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %al
406*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit1)
407*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %ebx
408*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit1)
409*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %al
410*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit2)
411*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ebx
412*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit2)
413*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %al
414*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit3)
415*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %ebx
416*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit3)
417*8d67ca89SAndroid Build Coastguard Worker	test	$0x08, %al
418*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit4)
419*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ebx
420*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit4)
421*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %al
422*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit5)
423*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %ebx
424*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit5)
425*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %al
426*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit6)
427*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ebx
428*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit6)
429*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %al
430*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit7)
431*8d67ca89SAndroid Build Coastguard Worker	cmp	$7, %ebx
432*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit7)
433*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
434*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
435*8d67ca89SAndroid Build Coastguard Worker	lea	7(%edx), %eax
436*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
437*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
438*8d67ca89SAndroid Build Coastguard Worker	xor	%cl, %cl
439*8d67ca89SAndroid Build Coastguard Worker	movb	%cl, (%eax)
440*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
441*8d67ca89SAndroid Build Coastguard Worker	RETURN1
442*8d67ca89SAndroid Build Coastguard Worker
443*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
444*8d67ca89SAndroid Build Coastguard WorkerL(ExitHighCase2):
445*8d67ca89SAndroid Build Coastguard Worker	test	$0x01, %ah
446*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit9)
447*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %ebx
448*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit9)
449*8d67ca89SAndroid Build Coastguard Worker	test	$0x02, %ah
450*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit10)
451*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ebx
452*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit10)
453*8d67ca89SAndroid Build Coastguard Worker	test	$0x04, %ah
454*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit11)
455*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %ebx
456*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit11)
457*8d67ca89SAndroid Build Coastguard Worker	test	$0x8, %ah
458*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit12)
459*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ebx
460*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit12)
461*8d67ca89SAndroid Build Coastguard Worker	test	$0x10, %ah
462*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit13)
463*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %ebx
464*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit13)
465*8d67ca89SAndroid Build Coastguard Worker	test	$0x20, %ah
466*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit14)
467*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %ebx
468*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit14)
469*8d67ca89SAndroid Build Coastguard Worker	test	$0x40, %ah
470*8d67ca89SAndroid Build Coastguard Worker	jnz	L(Exit15)
471*8d67ca89SAndroid Build Coastguard Worker	cmp	$15, %ebx
472*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit15)
473*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
474*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
475*8d67ca89SAndroid Build Coastguard Worker	movlpd	8(%ecx), %xmm1
476*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 8(%edx)
477*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
478*8d67ca89SAndroid Build Coastguard Worker	RETURN1
479*8d67ca89SAndroid Build Coastguard Worker
480*8d67ca89SAndroid Build Coastguard Worker	CFI_PUSH(%esi)
481*8d67ca89SAndroid Build Coastguard Worker
482*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase2OrCase3):
483*8d67ca89SAndroid Build Coastguard Worker	test	%eax, %eax
484*8d67ca89SAndroid Build Coastguard Worker	jnz	L(CopyFrom1To16BytesCase2)
485*8d67ca89SAndroid Build Coastguard Worker
486*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
487*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase3):
488*8d67ca89SAndroid Build Coastguard Worker	add	$16, %ebx
489*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %edx
490*8d67ca89SAndroid Build Coastguard Worker	add	%esi, %ecx
491*8d67ca89SAndroid Build Coastguard Worker
492*8d67ca89SAndroid Build Coastguard Worker	POP	(%esi)
493*8d67ca89SAndroid Build Coastguard Worker
494*8d67ca89SAndroid Build Coastguard Worker	cmp	$8, %ebx
495*8d67ca89SAndroid Build Coastguard Worker	ja	L(ExitHighCase3)
496*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %ebx
497*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit1)
498*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ebx
499*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit2)
500*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %ebx
501*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit3)
502*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ebx
503*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit4)
504*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %ebx
505*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit5)
506*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ebx
507*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit6)
508*8d67ca89SAndroid Build Coastguard Worker	cmp	$7, %ebx
509*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit7)
510*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
511*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
512*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 8(%edx)
513*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
514*8d67ca89SAndroid Build Coastguard Worker	RETURN1
515*8d67ca89SAndroid Build Coastguard Worker
516*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
517*8d67ca89SAndroid Build Coastguard WorkerL(ExitHighCase3):
518*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %ebx
519*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit9)
520*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ebx
521*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit10)
522*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %ebx
523*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit11)
524*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ebx
525*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit12)
526*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %ebx
527*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit13)
528*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %ebx
529*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit14)
530*8d67ca89SAndroid Build Coastguard Worker	cmp	$15, %ebx
531*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit15)
532*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
533*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
534*8d67ca89SAndroid Build Coastguard Worker	movlpd	8(%ecx), %xmm1
535*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm1, 8(%edx)
536*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, 16(%edx)
537*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
538*8d67ca89SAndroid Build Coastguard Worker	RETURN1
539*8d67ca89SAndroid Build Coastguard Worker
540*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
541*8d67ca89SAndroid Build Coastguard WorkerL(StrncatExit0):
542*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
543*8d67ca89SAndroid Build Coastguard Worker	RETURN1
544*8d67ca89SAndroid Build Coastguard Worker
545*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
546*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit15Bytes):
547*8d67ca89SAndroid Build Coastguard Worker	cmp	$9, %ebx
548*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit9)
549*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 9(%ecx)
550*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit10)
551*8d67ca89SAndroid Build Coastguard Worker	cmp	$10, %ebx
552*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit10)
553*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 10(%ecx)
554*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit11)
555*8d67ca89SAndroid Build Coastguard Worker	cmp	$11, %ebx
556*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit11)
557*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 11(%ecx)
558*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit12)
559*8d67ca89SAndroid Build Coastguard Worker	cmp	$12, %ebx
560*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit12)
561*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 12(%ecx)
562*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit13)
563*8d67ca89SAndroid Build Coastguard Worker	cmp	$13, %ebx
564*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit13)
565*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 13(%ecx)
566*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit14)
567*8d67ca89SAndroid Build Coastguard Worker	cmp	$14, %ebx
568*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit14)
569*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
570*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
571*8d67ca89SAndroid Build Coastguard Worker	movlpd	7(%ecx), %xmm0
572*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, 7(%edx)
573*8d67ca89SAndroid Build Coastguard Worker	lea	14(%edx), %eax
574*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
575*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
576*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, (%eax)
577*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
578*8d67ca89SAndroid Build Coastguard Worker	RETURN1
579*8d67ca89SAndroid Build Coastguard Worker
580*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
581*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit8Bytes):
582*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, (%ecx)
583*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit1)
584*8d67ca89SAndroid Build Coastguard Worker	cmp	$1, %ebx
585*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit1)
586*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 1(%ecx)
587*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit2)
588*8d67ca89SAndroid Build Coastguard Worker	cmp	$2, %ebx
589*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit2)
590*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 2(%ecx)
591*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit3)
592*8d67ca89SAndroid Build Coastguard Worker	cmp	$3, %ebx
593*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit3)
594*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 3(%ecx)
595*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit4)
596*8d67ca89SAndroid Build Coastguard Worker	cmp	$4, %ebx
597*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit4)
598*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 4(%ecx)
599*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit5)
600*8d67ca89SAndroid Build Coastguard Worker	cmp	$5, %ebx
601*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit5)
602*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 5(%ecx)
603*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit6)
604*8d67ca89SAndroid Build Coastguard Worker	cmp	$6, %ebx
605*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit6)
606*8d67ca89SAndroid Build Coastguard Worker	cmpb	$0, 6(%ecx)
607*8d67ca89SAndroid Build Coastguard Worker	jz	L(Exit7)
608*8d67ca89SAndroid Build Coastguard Worker	cmp	$7, %ebx
609*8d67ca89SAndroid Build Coastguard Worker	je	L(StrncatExit7)
610*8d67ca89SAndroid Build Coastguard Worker	movlpd	(%ecx), %xmm0
611*8d67ca89SAndroid Build Coastguard Worker	movlpd	%xmm0, (%edx)
612*8d67ca89SAndroid Build Coastguard Worker	lea	7(%edx), %eax
613*8d67ca89SAndroid Build Coastguard Worker	cmpb	$1, (%eax)
614*8d67ca89SAndroid Build Coastguard Worker	sbb	$-1, %eax
615*8d67ca89SAndroid Build Coastguard Worker	movb	%bh, (%eax)
616*8d67ca89SAndroid Build Coastguard Worker	movl	%edi, %eax
617*8d67ca89SAndroid Build Coastguard Worker	RETURN1
618*8d67ca89SAndroid Build Coastguard Worker
619*8d67ca89SAndroid Build Coastguard Worker#endif
620*8d67ca89SAndroid Build Coastguard WorkerEND (STRCAT_ssse3)
621