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