xref: /aosp_15_r20/bionic/libc/arch-x86_64/string/sse2-strlen-slm.S (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker/*
2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2014, Intel Corporation
3*8d67ca89SAndroid Build Coastguard WorkerAll rights reserved.
4*8d67ca89SAndroid Build Coastguard Worker
5*8d67ca89SAndroid Build Coastguard WorkerRedistribution and use in source and binary forms, with or without
6*8d67ca89SAndroid Build Coastguard Workermodification, are permitted provided that the following conditions are met:
7*8d67ca89SAndroid Build Coastguard Worker
8*8d67ca89SAndroid Build Coastguard Worker    * Redistributions of source code must retain the above copyright notice,
9*8d67ca89SAndroid Build Coastguard Worker    * this list of conditions and the following disclaimer.
10*8d67ca89SAndroid Build Coastguard Worker
11*8d67ca89SAndroid Build Coastguard Worker    * Redistributions in binary form must reproduce the above copyright notice,
12*8d67ca89SAndroid Build Coastguard Worker    * this list of conditions and the following disclaimer in the documentation
13*8d67ca89SAndroid Build Coastguard Worker    * and/or other materials provided with the distribution.
14*8d67ca89SAndroid Build Coastguard Worker
15*8d67ca89SAndroid Build Coastguard Worker    * Neither the name of Intel Corporation nor the names of its contributors
16*8d67ca89SAndroid Build Coastguard Worker    * may be used to endorse or promote products derived from this software
17*8d67ca89SAndroid Build Coastguard Worker    * without specific prior written permission.
18*8d67ca89SAndroid Build Coastguard Worker
19*8d67ca89SAndroid Build Coastguard WorkerTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20*8d67ca89SAndroid Build Coastguard WorkerANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21*8d67ca89SAndroid Build Coastguard WorkerWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22*8d67ca89SAndroid Build Coastguard WorkerDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23*8d67ca89SAndroid Build Coastguard WorkerANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24*8d67ca89SAndroid Build Coastguard Worker(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25*8d67ca89SAndroid Build Coastguard WorkerLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26*8d67ca89SAndroid Build Coastguard WorkerANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27*8d67ca89SAndroid Build Coastguard Worker(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28*8d67ca89SAndroid Build Coastguard WorkerSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*8d67ca89SAndroid Build Coastguard Worker*/
30*8d67ca89SAndroid Build Coastguard Worker
31*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_STRCAT
32*8d67ca89SAndroid Build Coastguard Worker
33*8d67ca89SAndroid Build Coastguard Worker#ifndef STRLEN
34*8d67ca89SAndroid Build Coastguard Worker# define STRLEN		strlen
35*8d67ca89SAndroid Build Coastguard Worker#endif
36*8d67ca89SAndroid Build Coastguard Worker
37*8d67ca89SAndroid Build Coastguard Worker#ifndef L
38*8d67ca89SAndroid Build Coastguard Worker# define L(label)	.L##label
39*8d67ca89SAndroid Build Coastguard Worker#endif
40*8d67ca89SAndroid Build Coastguard Worker
41*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_startproc
42*8d67ca89SAndroid Build Coastguard Worker# define cfi_startproc			.cfi_startproc
43*8d67ca89SAndroid Build Coastguard Worker#endif
44*8d67ca89SAndroid Build Coastguard Worker
45*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_endproc
46*8d67ca89SAndroid Build Coastguard Worker# define cfi_endproc			.cfi_endproc
47*8d67ca89SAndroid Build Coastguard Worker#endif
48*8d67ca89SAndroid Build Coastguard Worker
49*8d67ca89SAndroid Build Coastguard Worker#ifndef ENTRY
50*8d67ca89SAndroid Build Coastguard Worker# define ENTRY(name)			\
51*8d67ca89SAndroid Build Coastguard Worker	.type name,  @function; 	\
52*8d67ca89SAndroid Build Coastguard Worker	.globl name;			\
53*8d67ca89SAndroid Build Coastguard Worker	.p2align 4;			\
54*8d67ca89SAndroid Build Coastguard Workername:					\
55*8d67ca89SAndroid Build Coastguard Worker	cfi_startproc
56*8d67ca89SAndroid Build Coastguard Worker#endif
57*8d67ca89SAndroid Build Coastguard Worker
58*8d67ca89SAndroid Build Coastguard Worker#ifndef END
59*8d67ca89SAndroid Build Coastguard Worker# define END(name)			\
60*8d67ca89SAndroid Build Coastguard Worker	cfi_endproc;			\
61*8d67ca89SAndroid Build Coastguard Worker	.size name, .-name
62*8d67ca89SAndroid Build Coastguard Worker#endif
63*8d67ca89SAndroid Build Coastguard Worker#define RETURN ret
64*8d67ca89SAndroid Build Coastguard Worker	.section .text.sse2,"ax",@progbits
65*8d67ca89SAndroid Build Coastguard WorkerENTRY (STRLEN)
66*8d67ca89SAndroid Build Coastguard Worker/* end ifndef USE_AS_STRCAT */
67*8d67ca89SAndroid Build Coastguard Worker#endif
68*8d67ca89SAndroid Build Coastguard Worker	xor	%rax, %rax
69*8d67ca89SAndroid Build Coastguard Worker	mov	%edi, %ecx
70*8d67ca89SAndroid Build Coastguard Worker	and	$0x3f, %ecx
71*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
72*8d67ca89SAndroid Build Coastguard Worker	cmp	$0x30, %ecx
73*8d67ca89SAndroid Build Coastguard Worker	ja	L(next)
74*8d67ca89SAndroid Build Coastguard Worker	movdqu	(%rdi), %xmm1
75*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm1, %xmm0
76*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %edx
77*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
78*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit_less16)
79*8d67ca89SAndroid Build Coastguard Worker	mov	%rdi, %rax
80*8d67ca89SAndroid Build Coastguard Worker	and	$-16, %rax
81*8d67ca89SAndroid Build Coastguard Worker	jmp	L(align16_start)
82*8d67ca89SAndroid Build Coastguard WorkerL(next):
83*8d67ca89SAndroid Build Coastguard Worker	mov	%rdi, %rax
84*8d67ca89SAndroid Build Coastguard Worker	and	$-16, %rax
85*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	(%rax), %xmm0
86*8d67ca89SAndroid Build Coastguard Worker	mov	$-1, %r10d
87*8d67ca89SAndroid Build Coastguard Worker	sub	%rax, %rcx
88*8d67ca89SAndroid Build Coastguard Worker	shl	%cl, %r10d
89*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %edx
90*8d67ca89SAndroid Build Coastguard Worker	and	%r10d, %edx
91*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
92*8d67ca89SAndroid Build Coastguard WorkerL(align16_start):
93*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm0, %xmm0
94*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm1, %xmm1
95*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm2, %xmm2
96*8d67ca89SAndroid Build Coastguard Worker	pxor	%xmm3, %xmm3
97*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%rax), %xmm0
98*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %edx
99*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
100*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit16)
101*8d67ca89SAndroid Build Coastguard Worker
102*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%rax), %xmm1
103*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %edx
104*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
105*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit32)
106*8d67ca89SAndroid Build Coastguard Worker
107*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%rax), %xmm2
108*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
109*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
110*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit48)
111*8d67ca89SAndroid Build Coastguard Worker
112*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	64(%rax), %xmm3
113*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
114*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
115*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit64)
116*8d67ca89SAndroid Build Coastguard Worker
117*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	80(%rax), %xmm0
118*8d67ca89SAndroid Build Coastguard Worker	add	$64, %rax
119*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %edx
120*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
121*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit16)
122*8d67ca89SAndroid Build Coastguard Worker
123*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%rax), %xmm1
124*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %edx
125*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
126*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit32)
127*8d67ca89SAndroid Build Coastguard Worker
128*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%rax), %xmm2
129*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
130*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
131*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit48)
132*8d67ca89SAndroid Build Coastguard Worker
133*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	64(%rax), %xmm3
134*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
135*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
136*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit64)
137*8d67ca89SAndroid Build Coastguard Worker
138*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	80(%rax), %xmm0
139*8d67ca89SAndroid Build Coastguard Worker	add	$64, %rax
140*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %edx
141*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
142*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit16)
143*8d67ca89SAndroid Build Coastguard Worker
144*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%rax), %xmm1
145*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %edx
146*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
147*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit32)
148*8d67ca89SAndroid Build Coastguard Worker
149*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%rax), %xmm2
150*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
151*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
152*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit48)
153*8d67ca89SAndroid Build Coastguard Worker
154*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	64(%rax), %xmm3
155*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
156*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
157*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit64)
158*8d67ca89SAndroid Build Coastguard Worker
159*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	80(%rax), %xmm0
160*8d67ca89SAndroid Build Coastguard Worker	add	$64, %rax
161*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %edx
162*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
163*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit16)
164*8d67ca89SAndroid Build Coastguard Worker
165*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%rax), %xmm1
166*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %edx
167*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
168*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit32)
169*8d67ca89SAndroid Build Coastguard Worker
170*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%rax), %xmm2
171*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
172*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
173*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit48)
174*8d67ca89SAndroid Build Coastguard Worker
175*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	64(%rax), %xmm3
176*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
177*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
178*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit64)
179*8d67ca89SAndroid Build Coastguard Worker
180*8d67ca89SAndroid Build Coastguard Worker
181*8d67ca89SAndroid Build Coastguard Worker	test	$0x3f, %rax
182*8d67ca89SAndroid Build Coastguard Worker	jz	L(align64_loop)
183*8d67ca89SAndroid Build Coastguard Worker
184*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	80(%rax), %xmm0
185*8d67ca89SAndroid Build Coastguard Worker	add	$80, %rax
186*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %edx
187*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
188*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
189*8d67ca89SAndroid Build Coastguard Worker
190*8d67ca89SAndroid Build Coastguard Worker	test	$0x3f, %rax
191*8d67ca89SAndroid Build Coastguard Worker	jz	L(align64_loop)
192*8d67ca89SAndroid Build Coastguard Worker
193*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%rax), %xmm1
194*8d67ca89SAndroid Build Coastguard Worker	add	$16, %rax
195*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %edx
196*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
197*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
198*8d67ca89SAndroid Build Coastguard Worker
199*8d67ca89SAndroid Build Coastguard Worker	test	$0x3f, %rax
200*8d67ca89SAndroid Build Coastguard Worker	jz	L(align64_loop)
201*8d67ca89SAndroid Build Coastguard Worker
202*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%rax), %xmm2
203*8d67ca89SAndroid Build Coastguard Worker	add	$16, %rax
204*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
205*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
206*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
207*8d67ca89SAndroid Build Coastguard Worker
208*8d67ca89SAndroid Build Coastguard Worker	test	$0x3f, %rax
209*8d67ca89SAndroid Build Coastguard Worker	jz	L(align64_loop)
210*8d67ca89SAndroid Build Coastguard Worker
211*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	16(%rax), %xmm3
212*8d67ca89SAndroid Build Coastguard Worker	add	$16, %rax
213*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
214*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
215*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit)
216*8d67ca89SAndroid Build Coastguard Worker
217*8d67ca89SAndroid Build Coastguard Worker	add	$16, %rax
218*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
219*8d67ca89SAndroid Build Coastguard Worker	L(align64_loop):
220*8d67ca89SAndroid Build Coastguard Worker	movaps	(%rax),	%xmm4
221*8d67ca89SAndroid Build Coastguard Worker	pminub	16(%rax), 	%xmm4
222*8d67ca89SAndroid Build Coastguard Worker	movaps	32(%rax), 	%xmm5
223*8d67ca89SAndroid Build Coastguard Worker	pminub	48(%rax), 	%xmm5
224*8d67ca89SAndroid Build Coastguard Worker	add	$64, 	%rax
225*8d67ca89SAndroid Build Coastguard Worker	pminub	%xmm4,	%xmm5
226*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	%xmm0,	%xmm5
227*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm5,	%edx
228*8d67ca89SAndroid Build Coastguard Worker	test	%edx,	%edx
229*8d67ca89SAndroid Build Coastguard Worker	jz	L(align64_loop)
230*8d67ca89SAndroid Build Coastguard Worker
231*8d67ca89SAndroid Build Coastguard Worker
232*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	-64(%rax), %xmm0
233*8d67ca89SAndroid Build Coastguard Worker	sub	$80, 	%rax
234*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm0, %edx
235*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
236*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit16)
237*8d67ca89SAndroid Build Coastguard Worker
238*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	32(%rax), %xmm1
239*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm1, %edx
240*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
241*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit32)
242*8d67ca89SAndroid Build Coastguard Worker
243*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	48(%rax), %xmm2
244*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm2, %edx
245*8d67ca89SAndroid Build Coastguard Worker	test	%edx, %edx
246*8d67ca89SAndroid Build Coastguard Worker	jnz	L(exit48)
247*8d67ca89SAndroid Build Coastguard Worker
248*8d67ca89SAndroid Build Coastguard Worker	pcmpeqb	64(%rax), %xmm3
249*8d67ca89SAndroid Build Coastguard Worker	pmovmskb %xmm3, %edx
250*8d67ca89SAndroid Build Coastguard Worker	sub	%rdi, %rax
251*8d67ca89SAndroid Build Coastguard Worker	bsf	%rdx, %rdx
252*8d67ca89SAndroid Build Coastguard Worker	add	%rdx, %rax
253*8d67ca89SAndroid Build Coastguard Worker	add	$64, %rax
254*8d67ca89SAndroid Build Coastguard Worker	RETURN
255*8d67ca89SAndroid Build Coastguard Worker
256*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
257*8d67ca89SAndroid Build Coastguard WorkerL(exit):
258*8d67ca89SAndroid Build Coastguard Worker	sub	%rdi, %rax
259*8d67ca89SAndroid Build Coastguard WorkerL(exit_less16):
260*8d67ca89SAndroid Build Coastguard Worker	bsf	%rdx, %rdx
261*8d67ca89SAndroid Build Coastguard Worker	add	%rdx, %rax
262*8d67ca89SAndroid Build Coastguard Worker	RETURN
263*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
264*8d67ca89SAndroid Build Coastguard WorkerL(exit16):
265*8d67ca89SAndroid Build Coastguard Worker	sub	%rdi, %rax
266*8d67ca89SAndroid Build Coastguard Worker	bsf	%rdx, %rdx
267*8d67ca89SAndroid Build Coastguard Worker	add	%rdx, %rax
268*8d67ca89SAndroid Build Coastguard Worker	add	$16, %rax
269*8d67ca89SAndroid Build Coastguard Worker	RETURN
270*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
271*8d67ca89SAndroid Build Coastguard WorkerL(exit32):
272*8d67ca89SAndroid Build Coastguard Worker	sub	%rdi, %rax
273*8d67ca89SAndroid Build Coastguard Worker	bsf	%rdx, %rdx
274*8d67ca89SAndroid Build Coastguard Worker	add	%rdx, %rax
275*8d67ca89SAndroid Build Coastguard Worker	add	$32, %rax
276*8d67ca89SAndroid Build Coastguard Worker	RETURN
277*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
278*8d67ca89SAndroid Build Coastguard WorkerL(exit48):
279*8d67ca89SAndroid Build Coastguard Worker	sub	%rdi, %rax
280*8d67ca89SAndroid Build Coastguard Worker	bsf	%rdx, %rdx
281*8d67ca89SAndroid Build Coastguard Worker	add	%rdx, %rax
282*8d67ca89SAndroid Build Coastguard Worker	add	$48, %rax
283*8d67ca89SAndroid Build Coastguard Worker	RETURN
284*8d67ca89SAndroid Build Coastguard Worker	.p2align 4
285*8d67ca89SAndroid Build Coastguard WorkerL(exit64):
286*8d67ca89SAndroid Build Coastguard Worker	sub	%rdi, %rax
287*8d67ca89SAndroid Build Coastguard Worker	bsf	%rdx, %rdx
288*8d67ca89SAndroid Build Coastguard Worker	add	%rdx, %rax
289*8d67ca89SAndroid Build Coastguard Worker	add	$64, %rax
290*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_STRCAT
291*8d67ca89SAndroid Build Coastguard Worker	RETURN
292*8d67ca89SAndroid Build Coastguard Worker
293*8d67ca89SAndroid Build Coastguard WorkerEND (STRLEN)
294*8d67ca89SAndroid Build Coastguard Worker#endif
295