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