2 Copyright (C) 2011 Free Software Foundation, Inc.
3 Contributed by Intel Corporation.
4 This file is part of the GNU C Library.
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, write to the Free
18 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 # define STRCPY __strcpy_ssse3
29 .section .text.ssse3,"ax",@progbits
32 # ifdef USE_AS_STRNCPY
36 # ifdef USE_AS_STRNCPY
40 jbe L(StrncpyExit8Bytes)
58 # ifdef USE_AS_STRNCPY
60 jb L(StrncpyExit15Bytes)
76 # ifdef USE_AS_STRNCPY
83 # ifdef USE_AS_STRNCPY
87 /* add 16 bytes rcx_shift to r8 */
93 rsi = alignment_16(rcx) + rcx_shift + 16;
94 rcx_shift = rcx - alignment_16(rcx)
98 rsi = alignment_16(rcx) + 16
104 look if there is zero symbol in next 16 bytes of string
105 from rsi to rsi + 15 and form mask in xmm0
107 pcmpeqb (%rsi), %xmm0
111 /* convert byte mask in xmm0 to bit mask */
116 /* rsi = 16 - rcx_shift */
118 /* rax = 0: there isn't end of string from position rsi to rsi+15 */
120 # ifdef USE_AS_STRNCPY
122 jbe L(CopyFrom1To16BytesCase2OrCase3)
125 jnz L(CopyFrom1To16Bytes)
130 rdx = rdx + 16 = alignment_16(rdx) + rdx_shift + 16
134 /* Now: rdx = alignment_16(rdx) + 16 */
138 /* Now: rax = rdx_shift - 16 */
140 # ifdef USE_AS_STRNCPY
152 case rcx_shift >= rdx_shift:
153 rcx = alignment_16(rcx) + (rcx_shift - rdx_shift) + 16
154 case rcx_shift < rdx_shift:
155 rcx = alignment_16(rcx) + (16 + rcx_shift - rdx_shift)
160 case rcx_shift >= rdx_shift: rax = rcx_shift - rdx_shift
161 case rcx_shift < rdx_shift: rax = (16 + rcx_shift - rdx_shift)
162 rax can be 0, 1, ..., 15
166 /* case: rcx_shift == rdx_shift */
204 movaps 16(%rcx), %xmm2
209 # ifdef USE_AS_STRNCPY
211 jbe L(CopyFrom1To16BytesCase2OrCase3)
214 jnz L(CopyFrom1To16Bytes)
216 movaps 16(%rcx, %rsi), %xmm3
217 movaps %xmm2, (%rdx, %rsi)
221 # ifdef USE_AS_STRNCPY
223 jbe L(CopyFrom1To16BytesCase2OrCase3)
226 jnz L(CopyFrom1To16Bytes)
228 movaps 16(%rcx, %rsi), %xmm4
229 movaps %xmm3, (%rdx, %rsi)
233 # ifdef USE_AS_STRNCPY
235 jbe L(CopyFrom1To16BytesCase2OrCase3)
238 jnz L(CopyFrom1To16Bytes)
240 movaps 16(%rcx, %rsi), %xmm1
241 movaps %xmm4, (%rdx, %rsi)
245 # ifdef USE_AS_STRNCPY
247 jbe L(CopyFrom1To16BytesCase2OrCase3)
250 jnz L(CopyFrom1To16Bytes)
252 movaps 16(%rcx, %rsi), %xmm2
253 movaps %xmm1, (%rdx, %rsi)
257 # ifdef USE_AS_STRNCPY
259 jbe L(CopyFrom1To16BytesCase2OrCase3)
262 jnz L(CopyFrom1To16Bytes)
264 movaps 16(%rcx, %rsi), %xmm3
265 movaps %xmm2, (%rdx, %rsi)
269 # ifdef USE_AS_STRNCPY
271 jbe L(CopyFrom1To16BytesCase2OrCase3)
274 jnz L(CopyFrom1To16Bytes)
276 movaps %xmm3, (%rdx, %rsi)
278 lea 16(%rcx, %rsi), %rcx
282 # ifdef USE_AS_STRNCPY
283 lea 48+64(%r8, %rax), %r8
290 movaps 16(%rcx), %xmm5
291 movaps 32(%rcx), %xmm3
293 movaps 48(%rcx), %xmm7
301 # ifdef USE_AS_STRNCPY
303 jbe L(StrncpyLeaveCase2OrCase3)
306 jnz L(Aligned64Leave)
307 movaps %xmm4, -64(%rdx)
308 movaps %xmm5, -48(%rdx)
309 movaps %xmm6, -32(%rdx)
310 movaps %xmm7, -16(%rdx)
314 # ifdef USE_AS_STRNCPY
320 jnz L(CopyFrom1To16Bytes)
323 # ifdef USE_AS_STRNCPY
327 movaps %xmm4, -64(%rdx)
330 jnz L(CopyFrom1To16Bytes)
333 # ifdef USE_AS_STRNCPY
337 movaps %xmm5, -48(%rdx)
340 jnz L(CopyFrom1To16Bytes)
342 movaps %xmm6, -32(%rdx)
344 # ifdef USE_AS_STRNCPY
349 jmp L(CopyFrom1To16Bytes)
353 movaps -1(%rcx), %xmm1
354 movaps 15(%rcx), %xmm2
359 # ifdef USE_AS_STRNCPY
361 jbe L(StrncpyExit1Case2OrCase3)
366 palignr $1, %xmm1, %xmm2
369 movaps 31(%rcx), %xmm2
376 # ifdef USE_AS_STRNCPY
378 jbe L(StrncpyExit1Case2OrCase3)
383 palignr $1, %xmm1, %xmm2
385 movaps 31(%rcx), %xmm2
393 # ifdef USE_AS_STRNCPY
395 jbe L(StrncpyExit1Case2OrCase3)
400 palignr $1, %xmm1, %xmm2
403 movaps 31(%rcx), %xmm2
410 # ifdef USE_AS_STRNCPY
412 jbe L(StrncpyExit1Case2OrCase3)
417 palignr $1, %xmm1, %xmm2
428 # ifdef USE_AS_STRNCPY
431 movaps -1(%rcx), %xmm1
434 movaps 15(%rcx), %xmm2
435 movaps 31(%rcx), %xmm3
437 movaps 47(%rcx), %xmm4
439 movaps 63(%rcx), %xmm5
446 palignr $1, %xmm4, %xmm5
448 palignr $1, %xmm3, %xmm4
450 # ifdef USE_AS_STRNCPY
454 palignr $1, %xmm2, %xmm3
456 palignr $1, %xmm1, %xmm2
458 movaps %xmm5, 48(%rdx)
459 movaps %xmm4, 32(%rdx)
460 movaps %xmm3, 16(%rdx)
469 palignr $1, %xmm1, %xmm6
471 jmp L(CopyFrom1To16Bytes)
475 movaps -2(%rcx), %xmm1
476 movaps 14(%rcx), %xmm2
481 # ifdef USE_AS_STRNCPY
483 jbe L(StrncpyExit2Case2OrCase3)
488 palignr $2, %xmm1, %xmm2
491 movaps 30(%rcx), %xmm2
498 # ifdef USE_AS_STRNCPY
500 jbe L(StrncpyExit2Case2OrCase3)
505 palignr $2, %xmm1, %xmm2
507 movaps 30(%rcx), %xmm2
515 # ifdef USE_AS_STRNCPY
517 jbe L(StrncpyExit2Case2OrCase3)
522 palignr $2, %xmm1, %xmm2
525 movaps 30(%rcx), %xmm2
532 # ifdef USE_AS_STRNCPY
534 jbe L(StrncpyExit2Case2OrCase3)
539 palignr $2, %xmm1, %xmm2
550 # ifdef USE_AS_STRNCPY
553 movaps -2(%rcx), %xmm1
556 movaps 14(%rcx), %xmm2
557 movaps 30(%rcx), %xmm3
559 movaps 46(%rcx), %xmm4
561 movaps 62(%rcx), %xmm5
568 palignr $2, %xmm4, %xmm5
570 palignr $2, %xmm3, %xmm4
572 # ifdef USE_AS_STRNCPY
576 palignr $2, %xmm2, %xmm3
578 palignr $2, %xmm1, %xmm2
580 movaps %xmm5, 48(%rdx)
581 movaps %xmm4, 32(%rdx)
582 movaps %xmm3, 16(%rdx)
591 palignr $2, %xmm1, %xmm6
593 jmp L(CopyFrom1To16Bytes)
597 movaps -3(%rcx), %xmm1
598 movaps 13(%rcx), %xmm2
603 # ifdef USE_AS_STRNCPY
605 jbe L(StrncpyExit3Case2OrCase3)
610 palignr $3, %xmm1, %xmm2
613 movaps 29(%rcx), %xmm2
620 # ifdef USE_AS_STRNCPY
622 jbe L(StrncpyExit3Case2OrCase3)
627 palignr $3, %xmm1, %xmm2
629 movaps 29(%rcx), %xmm2
637 # ifdef USE_AS_STRNCPY
639 jbe L(StrncpyExit3Case2OrCase3)
644 palignr $3, %xmm1, %xmm2
647 movaps 29(%rcx), %xmm2
654 # ifdef USE_AS_STRNCPY
656 jbe L(StrncpyExit3Case2OrCase3)
661 palignr $3, %xmm1, %xmm2
672 # ifdef USE_AS_STRNCPY
675 movaps -3(%rcx), %xmm1
678 movaps 13(%rcx), %xmm2
679 movaps 29(%rcx), %xmm3
681 movaps 45(%rcx), %xmm4
683 movaps 61(%rcx), %xmm5
690 palignr $3, %xmm4, %xmm5
692 palignr $3, %xmm3, %xmm4
694 # ifdef USE_AS_STRNCPY
698 palignr $3, %xmm2, %xmm3
700 palignr $3, %xmm1, %xmm2
702 movaps %xmm5, 48(%rdx)
703 movaps %xmm4, 32(%rdx)
704 movaps %xmm3, 16(%rdx)
713 palignr $3, %xmm1, %xmm6
715 jmp L(CopyFrom1To16Bytes)
719 movaps -4(%rcx), %xmm1
720 movaps 12(%rcx), %xmm2
725 # ifdef USE_AS_STRNCPY
727 jbe L(StrncpyExit4Case2OrCase3)
732 palignr $4, %xmm1, %xmm2
735 movaps 28(%rcx), %xmm2
742 # ifdef USE_AS_STRNCPY
744 jbe L(StrncpyExit4Case2OrCase3)
749 palignr $4, %xmm1, %xmm2
751 movaps 28(%rcx), %xmm2
759 # ifdef USE_AS_STRNCPY
761 jbe L(StrncpyExit4Case2OrCase3)
766 palignr $4, %xmm1, %xmm2
769 movaps 28(%rcx), %xmm2
776 # ifdef USE_AS_STRNCPY
778 jbe L(StrncpyExit4Case2OrCase3)
783 palignr $4, %xmm1, %xmm2
794 # ifdef USE_AS_STRNCPY
797 movaps -4(%rcx), %xmm1
800 movaps 12(%rcx), %xmm2
801 movaps 28(%rcx), %xmm3
803 movaps 44(%rcx), %xmm4
805 movaps 60(%rcx), %xmm5
812 palignr $4, %xmm4, %xmm5
814 palignr $4, %xmm3, %xmm4
816 # ifdef USE_AS_STRNCPY
820 palignr $4, %xmm2, %xmm3
822 palignr $4, %xmm1, %xmm2
824 movaps %xmm5, 48(%rdx)
825 movaps %xmm4, 32(%rdx)
826 movaps %xmm3, 16(%rdx)
835 palignr $4, %xmm1, %xmm6
837 jmp L(CopyFrom1To16Bytes)
841 movaps -5(%rcx), %xmm1
842 movaps 11(%rcx), %xmm2
847 # ifdef USE_AS_STRNCPY
849 jbe L(StrncpyExit5Case2OrCase3)
854 palignr $5, %xmm1, %xmm2
857 movaps 27(%rcx), %xmm2
864 # ifdef USE_AS_STRNCPY
866 jbe L(StrncpyExit5Case2OrCase3)
871 palignr $5, %xmm1, %xmm2
873 movaps 27(%rcx), %xmm2
881 # ifdef USE_AS_STRNCPY
883 jbe L(StrncpyExit5Case2OrCase3)
888 palignr $5, %xmm1, %xmm2
891 movaps 27(%rcx), %xmm2
898 # ifdef USE_AS_STRNCPY
900 jbe L(StrncpyExit5Case2OrCase3)
905 palignr $5, %xmm1, %xmm2
916 # ifdef USE_AS_STRNCPY
919 movaps -5(%rcx), %xmm1
922 movaps 11(%rcx), %xmm2
923 movaps 27(%rcx), %xmm3
925 movaps 43(%rcx), %xmm4
927 movaps 59(%rcx), %xmm5
934 palignr $5, %xmm4, %xmm5
936 palignr $5, %xmm3, %xmm4
938 # ifdef USE_AS_STRNCPY
942 palignr $5, %xmm2, %xmm3
944 palignr $5, %xmm1, %xmm2
946 movaps %xmm5, 48(%rdx)
947 movaps %xmm4, 32(%rdx)
948 movaps %xmm3, 16(%rdx)
957 palignr $5, %xmm1, %xmm6
959 jmp L(CopyFrom1To16Bytes)
963 movaps -6(%rcx), %xmm1
964 movaps 10(%rcx), %xmm2
969 # ifdef USE_AS_STRNCPY
971 jbe L(StrncpyExit6Case2OrCase3)
976 palignr $6, %xmm1, %xmm2
979 movaps 26(%rcx), %xmm2
986 # ifdef USE_AS_STRNCPY
988 jbe L(StrncpyExit6Case2OrCase3)
993 palignr $6, %xmm1, %xmm2
995 movaps 26(%rcx), %xmm2
1000 pmovmskb %xmm0, %rax
1003 # ifdef USE_AS_STRNCPY
1005 jbe L(StrncpyExit6Case2OrCase3)
1010 palignr $6, %xmm1, %xmm2
1012 movaps %xmm2, (%rdx)
1013 movaps 26(%rcx), %xmm2
1015 pcmpeqb %xmm2, %xmm0
1017 pmovmskb %xmm0, %rax
1020 # ifdef USE_AS_STRNCPY
1022 jbe L(StrncpyExit6Case2OrCase3)
1027 palignr $6, %xmm1, %xmm2
1029 movaps %xmm2, (%rdx)
1038 # ifdef USE_AS_STRNCPY
1041 movaps -6(%rcx), %xmm1
1044 movaps 10(%rcx), %xmm2
1045 movaps 26(%rcx), %xmm3
1047 movaps 42(%rcx), %xmm4
1049 movaps 58(%rcx), %xmm5
1053 pcmpeqb %xmm0, %xmm7
1054 pmovmskb %xmm7, %rax
1056 palignr $6, %xmm4, %xmm5
1058 palignr $6, %xmm3, %xmm4
1060 # ifdef USE_AS_STRNCPY
1062 jbe L(StrncpyLeave6)
1064 palignr $6, %xmm2, %xmm3
1066 palignr $6, %xmm1, %xmm2
1068 movaps %xmm5, 48(%rdx)
1069 movaps %xmm4, 32(%rdx)
1070 movaps %xmm3, 16(%rdx)
1071 movaps %xmm2, (%rdx)
1073 jmp L(Shl6LoopStart)
1076 movaps (%rdx), %xmm6
1079 palignr $6, %xmm1, %xmm6
1080 movaps %xmm6, (%rdx)
1081 jmp L(CopyFrom1To16Bytes)
1085 movaps -7(%rcx), %xmm1
1086 movaps 9(%rcx), %xmm2
1088 pcmpeqb %xmm2, %xmm0
1089 pmovmskb %xmm0, %rax
1091 # ifdef USE_AS_STRNCPY
1093 jbe L(StrncpyExit7Case2OrCase3)
1098 palignr $7, %xmm1, %xmm2
1100 movaps %xmm2, (%rdx)
1101 movaps 25(%rcx), %xmm2
1103 pcmpeqb %xmm2, %xmm0
1105 pmovmskb %xmm0, %rax
1108 # ifdef USE_AS_STRNCPY
1110 jbe L(StrncpyExit7Case2OrCase3)
1115 palignr $7, %xmm1, %xmm2
1116 movaps %xmm2, (%rdx)
1117 movaps 25(%rcx), %xmm2
1120 pcmpeqb %xmm2, %xmm0
1122 pmovmskb %xmm0, %rax
1125 # ifdef USE_AS_STRNCPY
1127 jbe L(StrncpyExit7Case2OrCase3)
1132 palignr $7, %xmm1, %xmm2
1134 movaps %xmm2, (%rdx)
1135 movaps 25(%rcx), %xmm2
1137 pcmpeqb %xmm2, %xmm0
1139 pmovmskb %xmm0, %rax
1142 # ifdef USE_AS_STRNCPY
1144 jbe L(StrncpyExit7Case2OrCase3)
1149 palignr $7, %xmm1, %xmm2
1151 movaps %xmm2, (%rdx)
1160 # ifdef USE_AS_STRNCPY
1163 movaps -7(%rcx), %xmm1
1166 movaps 9(%rcx), %xmm2
1167 movaps 25(%rcx), %xmm3
1169 movaps 41(%rcx), %xmm4
1171 movaps 57(%rcx), %xmm5
1175 pcmpeqb %xmm0, %xmm7
1176 pmovmskb %xmm7, %rax
1178 palignr $7, %xmm4, %xmm5
1180 palignr $7, %xmm3, %xmm4
1182 # ifdef USE_AS_STRNCPY
1184 jbe L(StrncpyLeave7)
1186 palignr $7, %xmm2, %xmm3
1188 palignr $7, %xmm1, %xmm2
1190 movaps %xmm5, 48(%rdx)
1191 movaps %xmm4, 32(%rdx)
1192 movaps %xmm3, 16(%rdx)
1193 movaps %xmm2, (%rdx)
1195 jmp L(Shl7LoopStart)
1198 movaps (%rdx), %xmm6
1201 palignr $7, %xmm1, %xmm6
1202 movaps %xmm6, (%rdx)
1203 jmp L(CopyFrom1To16Bytes)
1207 movaps -8(%rcx), %xmm1
1208 movaps 8(%rcx), %xmm2
1210 pcmpeqb %xmm2, %xmm0
1211 pmovmskb %xmm0, %rax
1213 # ifdef USE_AS_STRNCPY
1215 jbe L(StrncpyExit8Case2OrCase3)
1220 palignr $8, %xmm1, %xmm2
1222 movaps %xmm2, (%rdx)
1223 movaps 24(%rcx), %xmm2
1225 pcmpeqb %xmm2, %xmm0
1227 pmovmskb %xmm0, %rax
1230 # ifdef USE_AS_STRNCPY
1232 jbe L(StrncpyExit8Case2OrCase3)
1237 palignr $8, %xmm1, %xmm2
1238 movaps %xmm2, (%rdx)
1239 movaps 24(%rcx), %xmm2
1242 pcmpeqb %xmm2, %xmm0
1244 pmovmskb %xmm0, %rax
1247 # ifdef USE_AS_STRNCPY
1249 jbe L(StrncpyExit8Case2OrCase3)
1254 palignr $8, %xmm1, %xmm2
1256 movaps %xmm2, (%rdx)
1257 movaps 24(%rcx), %xmm2
1259 pcmpeqb %xmm2, %xmm0
1261 pmovmskb %xmm0, %rax
1264 # ifdef USE_AS_STRNCPY
1266 jbe L(StrncpyExit8Case2OrCase3)
1271 palignr $8, %xmm1, %xmm2
1273 movaps %xmm2, (%rdx)
1282 # ifdef USE_AS_STRNCPY
1285 movaps -8(%rcx), %xmm1
1288 movaps 8(%rcx), %xmm2
1289 movaps 24(%rcx), %xmm3
1291 movaps 40(%rcx), %xmm4
1293 movaps 56(%rcx), %xmm5
1297 pcmpeqb %xmm0, %xmm7
1298 pmovmskb %xmm7, %rax
1300 palignr $8, %xmm4, %xmm5
1302 palignr $8, %xmm3, %xmm4
1304 # ifdef USE_AS_STRNCPY
1306 jbe L(StrncpyLeave8)
1308 palignr $8, %xmm2, %xmm3
1310 palignr $8, %xmm1, %xmm2
1312 movaps %xmm5, 48(%rdx)
1313 movaps %xmm4, 32(%rdx)
1314 movaps %xmm3, 16(%rdx)
1315 movaps %xmm2, (%rdx)
1317 jmp L(Shl8LoopStart)
1320 movaps (%rdx), %xmm6
1323 palignr $8, %xmm1, %xmm6
1324 movaps %xmm6, (%rdx)
1325 jmp L(CopyFrom1To16Bytes)
1329 movaps -9(%rcx), %xmm1
1330 movaps 7(%rcx), %xmm2
1332 pcmpeqb %xmm2, %xmm0
1333 pmovmskb %xmm0, %rax
1335 # ifdef USE_AS_STRNCPY
1337 jbe L(StrncpyExit9Case2OrCase3)
1342 palignr $9, %xmm1, %xmm2
1344 movaps %xmm2, (%rdx)
1345 movaps 23(%rcx), %xmm2
1347 pcmpeqb %xmm2, %xmm0
1349 pmovmskb %xmm0, %rax
1352 # ifdef USE_AS_STRNCPY
1354 jbe L(StrncpyExit9Case2OrCase3)
1359 palignr $9, %xmm1, %xmm2
1360 movaps %xmm2, (%rdx)
1361 movaps 23(%rcx), %xmm2
1364 pcmpeqb %xmm2, %xmm0
1366 pmovmskb %xmm0, %rax
1369 # ifdef USE_AS_STRNCPY
1371 jbe L(StrncpyExit9Case2OrCase3)
1376 palignr $9, %xmm1, %xmm2
1378 movaps %xmm2, (%rdx)
1379 movaps 23(%rcx), %xmm2
1381 pcmpeqb %xmm2, %xmm0
1383 pmovmskb %xmm0, %rax
1386 # ifdef USE_AS_STRNCPY
1388 jbe L(StrncpyExit9Case2OrCase3)
1393 palignr $9, %xmm1, %xmm2
1395 movaps %xmm2, (%rdx)
1404 # ifdef USE_AS_STRNCPY
1407 movaps -9(%rcx), %xmm1
1410 movaps 7(%rcx), %xmm2
1411 movaps 23(%rcx), %xmm3
1413 movaps 39(%rcx), %xmm4
1415 movaps 55(%rcx), %xmm5
1419 pcmpeqb %xmm0, %xmm7
1420 pmovmskb %xmm7, %rax
1422 palignr $9, %xmm4, %xmm5
1424 palignr $9, %xmm3, %xmm4
1426 # ifdef USE_AS_STRNCPY
1428 jbe L(StrncpyLeave9)
1430 palignr $9, %xmm2, %xmm3
1432 palignr $9, %xmm1, %xmm2
1434 movaps %xmm5, 48(%rdx)
1435 movaps %xmm4, 32(%rdx)
1436 movaps %xmm3, 16(%rdx)
1437 movaps %xmm2, (%rdx)
1439 jmp L(Shl9LoopStart)
1442 movaps (%rdx), %xmm6
1445 palignr $9, %xmm1, %xmm6
1446 movaps %xmm6, (%rdx)
1447 jmp L(CopyFrom1To16Bytes)
1451 movaps -10(%rcx), %xmm1
1452 movaps 6(%rcx), %xmm2
1454 pcmpeqb %xmm2, %xmm0
1455 pmovmskb %xmm0, %rax
1457 # ifdef USE_AS_STRNCPY
1459 jbe L(StrncpyExit10Case2OrCase3)
1462 jnz L(Shl10LoopExit)
1464 palignr $10, %xmm1, %xmm2
1466 movaps %xmm2, (%rdx)
1467 movaps 22(%rcx), %xmm2
1469 pcmpeqb %xmm2, %xmm0
1471 pmovmskb %xmm0, %rax
1474 # ifdef USE_AS_STRNCPY
1476 jbe L(StrncpyExit10Case2OrCase3)
1479 jnz L(Shl10LoopExit)
1481 palignr $10, %xmm1, %xmm2
1482 movaps %xmm2, (%rdx)
1483 movaps 22(%rcx), %xmm2
1486 pcmpeqb %xmm2, %xmm0
1488 pmovmskb %xmm0, %rax
1491 # ifdef USE_AS_STRNCPY
1493 jbe L(StrncpyExit10Case2OrCase3)
1496 jnz L(Shl10LoopExit)
1498 palignr $10, %xmm1, %xmm2
1500 movaps %xmm2, (%rdx)
1501 movaps 22(%rcx), %xmm2
1503 pcmpeqb %xmm2, %xmm0
1505 pmovmskb %xmm0, %rax
1508 # ifdef USE_AS_STRNCPY
1510 jbe L(StrncpyExit10Case2OrCase3)
1513 jnz L(Shl10LoopExit)
1515 palignr $10, %xmm1, %xmm2
1517 movaps %xmm2, (%rdx)
1526 # ifdef USE_AS_STRNCPY
1529 movaps -10(%rcx), %xmm1
1532 movaps 6(%rcx), %xmm2
1533 movaps 22(%rcx), %xmm3
1535 movaps 38(%rcx), %xmm4
1537 movaps 54(%rcx), %xmm5
1541 pcmpeqb %xmm0, %xmm7
1542 pmovmskb %xmm7, %rax
1544 palignr $10, %xmm4, %xmm5
1546 palignr $10, %xmm3, %xmm4
1548 # ifdef USE_AS_STRNCPY
1550 jbe L(StrncpyLeave10)
1552 palignr $10, %xmm2, %xmm3
1554 palignr $10, %xmm1, %xmm2
1556 movaps %xmm5, 48(%rdx)
1557 movaps %xmm4, 32(%rdx)
1558 movaps %xmm3, 16(%rdx)
1559 movaps %xmm2, (%rdx)
1561 jmp L(Shl10LoopStart)
1564 movaps (%rdx), %xmm6
1567 palignr $10, %xmm1, %xmm6
1568 movaps %xmm6, (%rdx)
1569 jmp L(CopyFrom1To16Bytes)
1573 movaps -11(%rcx), %xmm1
1574 movaps 5(%rcx), %xmm2
1576 pcmpeqb %xmm2, %xmm0
1577 pmovmskb %xmm0, %rax
1579 # ifdef USE_AS_STRNCPY
1581 jbe L(StrncpyExit11Case2OrCase3)
1584 jnz L(Shl11LoopExit)
1586 palignr $11, %xmm1, %xmm2
1588 movaps %xmm2, (%rdx)
1589 movaps 21(%rcx), %xmm2
1591 pcmpeqb %xmm2, %xmm0
1593 pmovmskb %xmm0, %rax
1596 # ifdef USE_AS_STRNCPY
1598 jbe L(StrncpyExit11Case2OrCase3)
1601 jnz L(Shl11LoopExit)
1603 palignr $11, %xmm1, %xmm2
1604 movaps %xmm2, (%rdx)
1605 movaps 21(%rcx), %xmm2
1608 pcmpeqb %xmm2, %xmm0
1610 pmovmskb %xmm0, %rax
1613 # ifdef USE_AS_STRNCPY
1615 jbe L(StrncpyExit11Case2OrCase3)
1618 jnz L(Shl11LoopExit)
1620 palignr $11, %xmm1, %xmm2
1622 movaps %xmm2, (%rdx)
1623 movaps 21(%rcx), %xmm2
1625 pcmpeqb %xmm2, %xmm0
1627 pmovmskb %xmm0, %rax
1630 # ifdef USE_AS_STRNCPY
1632 jbe L(StrncpyExit11Case2OrCase3)
1635 jnz L(Shl11LoopExit)
1637 palignr $11, %xmm1, %xmm2
1639 movaps %xmm2, (%rdx)
1648 # ifdef USE_AS_STRNCPY
1651 movaps -11(%rcx), %xmm1
1654 movaps 5(%rcx), %xmm2
1655 movaps 21(%rcx), %xmm3
1657 movaps 37(%rcx), %xmm4
1659 movaps 53(%rcx), %xmm5
1663 pcmpeqb %xmm0, %xmm7
1664 pmovmskb %xmm7, %rax
1666 palignr $11, %xmm4, %xmm5
1668 palignr $11, %xmm3, %xmm4
1670 # ifdef USE_AS_STRNCPY
1672 jbe L(StrncpyLeave11)
1674 palignr $11, %xmm2, %xmm3
1676 palignr $11, %xmm1, %xmm2
1678 movaps %xmm5, 48(%rdx)
1679 movaps %xmm4, 32(%rdx)
1680 movaps %xmm3, 16(%rdx)
1681 movaps %xmm2, (%rdx)
1683 jmp L(Shl11LoopStart)
1686 movaps (%rdx), %xmm6
1689 palignr $11, %xmm1, %xmm6
1690 movaps %xmm6, (%rdx)
1691 jmp L(CopyFrom1To16Bytes)
1695 movaps -12(%rcx), %xmm1
1696 movaps 4(%rcx), %xmm2
1698 pcmpeqb %xmm2, %xmm0
1699 pmovmskb %xmm0, %rax
1701 # ifdef USE_AS_STRNCPY
1703 jbe L(StrncpyExit12Case2OrCase3)
1706 jnz L(Shl12LoopExit)
1708 palignr $12, %xmm1, %xmm2
1710 movaps %xmm2, (%rdx)
1711 movaps 20(%rcx), %xmm2
1713 pcmpeqb %xmm2, %xmm0
1715 pmovmskb %xmm0, %rax
1718 # ifdef USE_AS_STRNCPY
1720 jbe L(StrncpyExit12Case2OrCase3)
1723 jnz L(Shl12LoopExit)
1725 palignr $12, %xmm1, %xmm2
1726 movaps %xmm2, (%rdx)
1727 movaps 20(%rcx), %xmm2
1730 pcmpeqb %xmm2, %xmm0
1732 pmovmskb %xmm0, %rax
1735 # ifdef USE_AS_STRNCPY
1737 jbe L(StrncpyExit12Case2OrCase3)
1740 jnz L(Shl12LoopExit)
1742 palignr $12, %xmm1, %xmm2
1744 movaps %xmm2, (%rdx)
1745 movaps 20(%rcx), %xmm2
1747 pcmpeqb %xmm2, %xmm0
1749 pmovmskb %xmm0, %rax
1752 # ifdef USE_AS_STRNCPY
1754 jbe L(StrncpyExit12Case2OrCase3)
1757 jnz L(Shl12LoopExit)
1759 palignr $12, %xmm1, %xmm2
1761 movaps %xmm2, (%rdx)
1770 # ifdef USE_AS_STRNCPY
1773 movaps -12(%rcx), %xmm1
1776 movaps 4(%rcx), %xmm2
1777 movaps 20(%rcx), %xmm3
1779 movaps 36(%rcx), %xmm4
1781 movaps 52(%rcx), %xmm5
1785 pcmpeqb %xmm0, %xmm7
1786 pmovmskb %xmm7, %rax
1788 palignr $12, %xmm4, %xmm5
1790 palignr $12, %xmm3, %xmm4
1792 # ifdef USE_AS_STRNCPY
1794 jbe L(StrncpyLeave12)
1796 palignr $12, %xmm2, %xmm3
1798 palignr $12, %xmm1, %xmm2
1800 movaps %xmm5, 48(%rdx)
1801 movaps %xmm4, 32(%rdx)
1802 movaps %xmm3, 16(%rdx)
1803 movaps %xmm2, (%rdx)
1805 jmp L(Shl12LoopStart)
1808 movaps (%rdx), %xmm6
1811 palignr $12, %xmm1, %xmm6
1812 movaps %xmm6, (%rdx)
1813 jmp L(CopyFrom1To16Bytes)
1817 movaps -13(%rcx), %xmm1
1818 movaps 3(%rcx), %xmm2
1820 pcmpeqb %xmm2, %xmm0
1821 pmovmskb %xmm0, %rax
1823 # ifdef USE_AS_STRNCPY
1825 jbe L(StrncpyExit13Case2OrCase3)
1828 jnz L(Shl13LoopExit)
1830 palignr $13, %xmm1, %xmm2
1832 movaps %xmm2, (%rdx)
1833 movaps 19(%rcx), %xmm2
1835 pcmpeqb %xmm2, %xmm0
1837 pmovmskb %xmm0, %rax
1840 # ifdef USE_AS_STRNCPY
1842 jbe L(StrncpyExit13Case2OrCase3)
1845 jnz L(Shl13LoopExit)
1847 palignr $13, %xmm1, %xmm2
1848 movaps %xmm2, (%rdx)
1849 movaps 19(%rcx), %xmm2
1852 pcmpeqb %xmm2, %xmm0
1854 pmovmskb %xmm0, %rax
1857 # ifdef USE_AS_STRNCPY
1859 jbe L(StrncpyExit13Case2OrCase3)
1862 jnz L(Shl13LoopExit)
1864 palignr $13, %xmm1, %xmm2
1866 movaps %xmm2, (%rdx)
1867 movaps 19(%rcx), %xmm2
1869 pcmpeqb %xmm2, %xmm0
1871 pmovmskb %xmm0, %rax
1874 # ifdef USE_AS_STRNCPY
1876 jbe L(StrncpyExit13Case2OrCase3)
1879 jnz L(Shl13LoopExit)
1881 palignr $13, %xmm1, %xmm2
1883 movaps %xmm2, (%rdx)
1892 # ifdef USE_AS_STRNCPY
1895 movaps -13(%rcx), %xmm1
1898 movaps 3(%rcx), %xmm2
1899 movaps 19(%rcx), %xmm3
1901 movaps 35(%rcx), %xmm4
1903 movaps 51(%rcx), %xmm5
1907 pcmpeqb %xmm0, %xmm7
1908 pmovmskb %xmm7, %rax
1910 palignr $13, %xmm4, %xmm5
1912 palignr $13, %xmm3, %xmm4
1914 # ifdef USE_AS_STRNCPY
1916 jbe L(StrncpyLeave13)
1918 palignr $13, %xmm2, %xmm3
1920 palignr $13, %xmm1, %xmm2
1922 movaps %xmm5, 48(%rdx)
1923 movaps %xmm4, 32(%rdx)
1924 movaps %xmm3, 16(%rdx)
1925 movaps %xmm2, (%rdx)
1927 jmp L(Shl13LoopStart)
1930 movaps (%rdx), %xmm6
1933 palignr $13, %xmm1, %xmm6
1934 movaps %xmm6, (%rdx)
1935 jmp L(CopyFrom1To16Bytes)
1939 movaps -14(%rcx), %xmm1
1940 movaps 2(%rcx), %xmm2
1942 pcmpeqb %xmm2, %xmm0
1943 pmovmskb %xmm0, %rax
1945 # ifdef USE_AS_STRNCPY
1947 jbe L(StrncpyExit14Case2OrCase3)
1950 jnz L(Shl14LoopExit)
1952 palignr $14, %xmm1, %xmm2
1954 movaps %xmm2, (%rdx)
1955 movaps 18(%rcx), %xmm2
1957 pcmpeqb %xmm2, %xmm0
1959 pmovmskb %xmm0, %rax
1962 # ifdef USE_AS_STRNCPY
1964 jbe L(StrncpyExit14Case2OrCase3)
1967 jnz L(Shl14LoopExit)
1969 palignr $14, %xmm1, %xmm2
1970 movaps %xmm2, (%rdx)
1971 movaps 18(%rcx), %xmm2
1974 pcmpeqb %xmm2, %xmm0
1976 pmovmskb %xmm0, %rax
1979 # ifdef USE_AS_STRNCPY
1981 jbe L(StrncpyExit14Case2OrCase3)
1984 jnz L(Shl14LoopExit)
1986 palignr $14, %xmm1, %xmm2
1988 movaps %xmm2, (%rdx)
1989 movaps 18(%rcx), %xmm2
1991 pcmpeqb %xmm2, %xmm0
1993 pmovmskb %xmm0, %rax
1996 # ifdef USE_AS_STRNCPY
1998 jbe L(StrncpyExit14Case2OrCase3)
2001 jnz L(Shl14LoopExit)
2003 palignr $14, %xmm1, %xmm2
2005 movaps %xmm2, (%rdx)
2014 # ifdef USE_AS_STRNCPY
2017 movaps -14(%rcx), %xmm1
2020 movaps 2(%rcx), %xmm2
2021 movaps 18(%rcx), %xmm3
2023 movaps 34(%rcx), %xmm4
2025 movaps 50(%rcx), %xmm5
2029 pcmpeqb %xmm0, %xmm7
2030 pmovmskb %xmm7, %rax
2032 palignr $14, %xmm4, %xmm5
2034 palignr $14, %xmm3, %xmm4
2036 # ifdef USE_AS_STRNCPY
2038 jbe L(StrncpyLeave14)
2040 palignr $14, %xmm2, %xmm3
2042 palignr $14, %xmm1, %xmm2
2044 movaps %xmm5, 48(%rdx)
2045 movaps %xmm4, 32(%rdx)
2046 movaps %xmm3, 16(%rdx)
2047 movaps %xmm2, (%rdx)
2049 jmp L(Shl14LoopStart)
2052 movaps (%rdx), %xmm6
2055 palignr $14, %xmm1, %xmm6
2056 movaps %xmm6, (%rdx)
2057 jmp L(CopyFrom1To16Bytes)
2061 movaps -15(%rcx), %xmm1
2062 movaps 1(%rcx), %xmm2
2064 pcmpeqb %xmm2, %xmm0
2065 pmovmskb %xmm0, %rax
2067 # ifdef USE_AS_STRNCPY
2069 jbe L(StrncpyExit15Case2OrCase3)
2072 jnz L(Shl15LoopExit)
2074 palignr $15, %xmm1, %xmm2
2076 movaps %xmm2, (%rdx)
2077 movaps 17(%rcx), %xmm2
2079 pcmpeqb %xmm2, %xmm0
2081 pmovmskb %xmm0, %rax
2084 # ifdef USE_AS_STRNCPY
2086 jbe L(StrncpyExit15Case2OrCase3)
2089 jnz L(Shl15LoopExit)
2091 palignr $15, %xmm1, %xmm2
2092 movaps %xmm2, (%rdx)
2093 movaps 17(%rcx), %xmm2
2096 pcmpeqb %xmm2, %xmm0
2098 pmovmskb %xmm0, %rax
2101 # ifdef USE_AS_STRNCPY
2103 jbe L(StrncpyExit15Case2OrCase3)
2106 jnz L(Shl15LoopExit)
2108 palignr $15, %xmm1, %xmm2
2110 movaps %xmm2, (%rdx)
2111 movaps 17(%rcx), %xmm2
2113 pcmpeqb %xmm2, %xmm0
2115 pmovmskb %xmm0, %rax
2118 # ifdef USE_AS_STRNCPY
2120 jbe L(StrncpyExit15Case2OrCase3)
2123 jnz L(Shl15LoopExit)
2125 palignr $15, %xmm1, %xmm2
2127 movaps %xmm2, (%rdx)
2136 # ifdef USE_AS_STRNCPY
2139 movaps -15(%rcx), %xmm1
2142 movaps 1(%rcx), %xmm2
2143 movaps 17(%rcx), %xmm3
2145 movaps 33(%rcx), %xmm4
2147 movaps 49(%rcx), %xmm5
2151 pcmpeqb %xmm0, %xmm7
2152 pmovmskb %xmm7, %rax
2154 palignr $15, %xmm4, %xmm5
2156 palignr $15, %xmm3, %xmm4
2158 # ifdef USE_AS_STRNCPY
2160 jbe L(StrncpyLeave15)
2162 palignr $15, %xmm2, %xmm3
2164 palignr $15, %xmm1, %xmm2
2166 movaps %xmm5, 48(%rdx)
2167 movaps %xmm4, 32(%rdx)
2168 movaps %xmm3, 16(%rdx)
2169 movaps %xmm2, (%rdx)
2171 jmp L(Shl15LoopStart)
2174 movaps (%rdx), %xmm6
2177 palignr $15, %xmm1, %xmm6
2178 movaps %xmm6, (%rdx)
2179 # ifdef USE_AS_STRCAT
2180 jmp L(CopyFrom1To16Bytes)
2185 L(CopyFrom1To16Bytes):
2186 # ifdef USE_AS_STRNCPY
2213 # ifdef USE_AS_STPCPY
2218 # ifdef USE_AS_STRNCPY
2221 jnz L(StrncpyFillTailWithZero1)
2222 # ifdef USE_AS_STPCPY
2252 # ifdef USE_AS_STPCPY
2257 # ifdef USE_AS_STRNCPY
2260 jnz L(StrncpyFillTailWithZero1)
2261 # ifdef USE_AS_STPCPY
2268 # ifdef USE_AS_STRNCPY
2271 L(CopyFrom1To16BytesCase2):
2274 lea (%rsi, %rdx), %rsi
2344 L(CopyFrom1To16BytesCase2OrCase3):
2346 jnz L(CopyFrom1To16BytesCase2)
2349 L(CopyFrom1To16BytesCase3):
2366 L(More8Case3): /* but less than 16 */
2374 L(More4Case3): /* but less than 8 */
2379 L(Less12Case3): /* but more than 8 */
2390 # ifdef USE_AS_STPCPY
2395 # ifdef USE_AS_STRNCPY
2398 jnz L(StrncpyFillTailWithZero1)
2399 # ifdef USE_AS_STPCPY
2410 # ifdef USE_AS_STPCPY
2415 # ifdef USE_AS_STRNCPY
2418 jnz L(StrncpyFillTailWithZero1)
2419 # ifdef USE_AS_STPCPY
2432 # ifdef USE_AS_STPCPY
2437 # ifdef USE_AS_STRNCPY
2440 jnz L(StrncpyFillTailWithZero1)
2441 # ifdef USE_AS_STPCPY
2452 # ifdef USE_AS_STPCPY
2457 # ifdef USE_AS_STRNCPY
2460 jnz L(StrncpyFillTailWithZero1)
2461 # ifdef USE_AS_STPCPY
2474 # ifdef USE_AS_STPCPY
2479 # ifdef USE_AS_STRNCPY
2482 jnz L(StrncpyFillTailWithZero1)
2483 # ifdef USE_AS_STPCPY
2496 # ifdef USE_AS_STPCPY
2501 # ifdef USE_AS_STRNCPY
2504 jnz L(StrncpyFillTailWithZero1)
2505 # ifdef USE_AS_STPCPY
2518 # ifdef USE_AS_STPCPY
2523 # ifdef USE_AS_STRNCPY
2526 jnz L(StrncpyFillTailWithZero1)
2527 # ifdef USE_AS_STPCPY
2540 # ifdef USE_AS_STPCPY
2545 # ifdef USE_AS_STRNCPY
2548 jnz L(StrncpyFillTailWithZero1)
2549 # ifdef USE_AS_STPCPY
2562 # ifdef USE_AS_STPCPY
2567 # ifdef USE_AS_STRNCPY
2570 jnz L(StrncpyFillTailWithZero1)
2571 # ifdef USE_AS_STPCPY
2584 # ifdef USE_AS_STPCPY
2589 # ifdef USE_AS_STRNCPY
2592 jnz L(StrncpyFillTailWithZero1)
2593 # ifdef USE_AS_STPCPY
2606 # ifdef USE_AS_STPCPY
2611 # ifdef USE_AS_STRNCPY
2614 jnz L(StrncpyFillTailWithZero1)
2615 # ifdef USE_AS_STPCPY
2628 # ifdef USE_AS_STPCPY
2633 # ifdef USE_AS_STRNCPY
2636 jnz L(StrncpyFillTailWithZero1)
2637 # ifdef USE_AS_STPCPY
2650 # ifdef USE_AS_STPCPY
2655 # ifdef USE_AS_STRNCPY
2658 jnz L(StrncpyFillTailWithZero1)
2659 # ifdef USE_AS_STPCPY
2672 # ifdef USE_AS_STPCPY
2677 # ifdef USE_AS_STRNCPY
2680 jnz L(StrncpyFillTailWithZero1)
2681 # ifdef USE_AS_STPCPY
2688 # ifdef USE_AS_STRNCPY
2786 L(StrncpyFillExit1):
2788 L(FillFrom1To16Bytes):
2803 L(FillMore8): /* but less than 16 */
2811 L(FillMore4): /* but less than 8 */
2816 L(FillLess12): /* but more than 8 */
2823 L(StrncpyFillTailWithZero1):
2826 jbe L(StrncpyFillExit1)
2840 jb L(StrncpyFillLess64)
2842 L(StrncpyFillLoopMovdqa):
2843 movdqa %xmm0, (%rcx)
2844 movdqa %xmm0, 16(%rcx)
2845 movdqa %xmm0, 32(%rcx)
2846 movdqa %xmm0, 48(%rcx)
2849 jae L(StrncpyFillLoopMovdqa)
2851 L(StrncpyFillLess64):
2853 jl L(StrncpyFillLess32)
2854 movdqa %xmm0, (%rcx)
2855 movdqa %xmm0, 16(%rcx)
2858 jl L(StrncpyFillExit1)
2859 movdqa %xmm0, (%rcx)
2861 jmp L(FillFrom1To16Bytes)
2863 L(StrncpyFillLess32):
2865 jl L(StrncpyFillExit1)
2866 movdqa %xmm0, (%rcx)
2868 jmp L(FillFrom1To16Bytes)
2876 L(StrncpyExit15Bytes):
2905 # ifdef USE_AS_STPCPY
2915 L(StrncpyExit8Bytes):
2946 # ifdef USE_AS_STPCPY
2957 # ifdef USE_AS_STRNCPY
2959 L(StrncpyLeaveCase2OrCase3):
2961 jnz L(Aligned64LeaveCase2)
2963 L(Aligned64LeaveCase3):
2966 jbe L(CopyFrom1To16BytesCase3)
2967 movaps %xmm4, -64(%rdx)
2970 jbe L(CopyFrom1To16BytesCase3)
2971 movaps %xmm5, -48(%rdx)
2974 jbe L(CopyFrom1To16BytesCase3)
2975 movaps %xmm6, -32(%rdx)
2978 jmp L(CopyFrom1To16BytesCase3)
2980 L(Aligned64LeaveCase2):
2981 pcmpeqb %xmm4, %xmm0
2982 pmovmskb %xmm0, %rax
2984 jle L(CopyFrom1To16BytesCase2OrCase3)
2986 jnz L(CopyFrom1To16Bytes)
2988 pcmpeqb %xmm5, %xmm0
2989 pmovmskb %xmm0, %rax
2990 movaps %xmm4, -64(%rdx)
2993 jbe L(CopyFrom1To16BytesCase2OrCase3)
2995 jnz L(CopyFrom1To16Bytes)
2997 pcmpeqb %xmm6, %xmm0
2998 pmovmskb %xmm0, %rax
2999 movaps %xmm5, -48(%rdx)
3002 jbe L(CopyFrom1To16BytesCase2OrCase3)
3004 jnz L(CopyFrom1To16Bytes)
3006 pcmpeqb %xmm7, %xmm0
3007 pmovmskb %xmm0, %rax
3008 movaps %xmm6, -32(%rdx)
3011 jmp L(CopyFrom1To16BytesCase2)
3012 /*--------------------------------------------------*/
3013 L(StrncpyExit1Case2OrCase3):
3014 movaps (%rdx), %xmm6
3017 palignr $1, %xmm1, %xmm6
3018 movaps %xmm6, (%rdx)
3020 jnz L(CopyFrom1To16BytesCase2)
3021 jmp L(CopyFrom1To16BytesCase3)
3023 L(StrncpyExit2Case2OrCase3):
3024 movaps (%rdx), %xmm6
3027 palignr $2, %xmm1, %xmm6
3028 movaps %xmm6, (%rdx)
3030 jnz L(CopyFrom1To16BytesCase2)
3031 jmp L(CopyFrom1To16BytesCase3)
3033 L(StrncpyExit3Case2OrCase3):
3034 movaps (%rdx), %xmm6
3037 palignr $3, %xmm1, %xmm6
3038 movaps %xmm6, (%rdx)
3040 jnz L(CopyFrom1To16BytesCase2)
3041 jmp L(CopyFrom1To16BytesCase3)
3043 L(StrncpyExit4Case2OrCase3):
3044 movaps (%rdx), %xmm6
3047 palignr $4, %xmm1, %xmm6
3048 movaps %xmm6, (%rdx)
3050 jnz L(CopyFrom1To16BytesCase2)
3051 jmp L(CopyFrom1To16BytesCase3)
3053 L(StrncpyExit5Case2OrCase3):
3054 movaps (%rdx), %xmm6
3057 palignr $5, %xmm1, %xmm6
3058 movaps %xmm6, (%rdx)
3060 jnz L(CopyFrom1To16BytesCase2)
3061 jmp L(CopyFrom1To16BytesCase3)
3063 L(StrncpyExit6Case2OrCase3):
3064 movaps (%rdx), %xmm6
3067 palignr $6, %xmm1, %xmm6
3068 movaps %xmm6, (%rdx)
3070 jnz L(CopyFrom1To16BytesCase2)
3071 jmp L(CopyFrom1To16BytesCase3)
3073 L(StrncpyExit7Case2OrCase3):
3074 movaps (%rdx), %xmm6
3077 palignr $7, %xmm1, %xmm6
3078 movaps %xmm6, (%rdx)
3080 jnz L(CopyFrom1To16BytesCase2)
3081 jmp L(CopyFrom1To16BytesCase3)
3083 L(StrncpyExit8Case2OrCase3):
3084 movaps (%rdx), %xmm6
3087 palignr $8, %xmm1, %xmm6
3088 movaps %xmm6, (%rdx)
3090 jnz L(CopyFrom1To16BytesCase2)
3091 jmp L(CopyFrom1To16BytesCase3)
3093 L(StrncpyExit9Case2OrCase3):
3094 movaps (%rdx), %xmm6
3097 palignr $9, %xmm1, %xmm6
3098 movaps %xmm6, (%rdx)
3100 jnz L(CopyFrom1To16BytesCase2)
3101 jmp L(CopyFrom1To16BytesCase3)
3103 L(StrncpyExit10Case2OrCase3):
3104 movaps (%rdx), %xmm6
3107 palignr $10, %xmm1, %xmm6
3108 movaps %xmm6, (%rdx)
3110 jnz L(CopyFrom1To16BytesCase2)
3111 jmp L(CopyFrom1To16BytesCase3)
3113 L(StrncpyExit11Case2OrCase3):
3114 movaps (%rdx), %xmm6
3117 palignr $11, %xmm1, %xmm6
3118 movaps %xmm6, (%rdx)
3120 jnz L(CopyFrom1To16BytesCase2)
3121 jmp L(CopyFrom1To16BytesCase3)
3123 L(StrncpyExit12Case2OrCase3):
3124 movaps (%rdx), %xmm6
3127 palignr $12, %xmm1, %xmm6
3128 movaps %xmm6, (%rdx)
3130 jnz L(CopyFrom1To16BytesCase2)
3131 jmp L(CopyFrom1To16BytesCase3)
3133 L(StrncpyExit13Case2OrCase3):
3134 movaps (%rdx), %xmm6
3137 palignr $13, %xmm1, %xmm6
3138 movaps %xmm6, (%rdx)
3140 jnz L(CopyFrom1To16BytesCase2)
3141 jmp L(CopyFrom1To16BytesCase3)
3143 L(StrncpyExit14Case2OrCase3):
3144 movaps (%rdx), %xmm6
3147 palignr $14, %xmm1, %xmm6
3148 movaps %xmm6, (%rdx)
3150 jnz L(CopyFrom1To16BytesCase2)
3151 jmp L(CopyFrom1To16BytesCase3)
3153 L(StrncpyExit15Case2OrCase3):
3154 movaps (%rdx), %xmm6
3157 palignr $15, %xmm1, %xmm6
3158 movaps %xmm6, (%rdx)
3160 jnz L(CopyFrom1To16BytesCase2)
3161 jmp L(CopyFrom1To16BytesCase3)
3167 palignr $1, %xmm1, %xmm2
3169 movaps %xmm2, (%rdx)
3170 movaps 31(%rcx), %xmm2
3175 palignr $1, %xmm1, %xmm2
3176 movaps %xmm2, 16(%rdx)
3177 movaps 31+16(%rcx), %xmm2
3183 movaps %xmm4, 32(%rdx)
3188 movaps %xmm5, 48(%rdx)
3193 movaps (%rdx, %rsi), %xmm6
3195 palignr $1, %xmm1, %xmm6
3196 movaps %xmm6, (%rdx, %rsi)
3198 jmp L(CopyFrom1To16BytesCase3)
3204 palignr $2, %xmm1, %xmm2
3206 movaps %xmm2, (%rdx)
3207 movaps 30(%rcx), %xmm2
3212 palignr $2, %xmm1, %xmm2
3213 movaps %xmm2, 16(%rdx)
3214 movaps 30+16(%rcx), %xmm2
3220 movaps %xmm4, 32(%rdx)
3225 movaps %xmm5, 48(%rdx)
3230 movaps (%rdx, %rsi), %xmm6
3232 palignr $2, %xmm1, %xmm6
3233 movaps %xmm6, (%rdx, %rsi)
3235 jmp L(CopyFrom1To16BytesCase3)
3241 palignr $3, %xmm1, %xmm2
3243 movaps %xmm2, (%rdx)
3244 movaps 29(%rcx), %xmm2
3249 palignr $3, %xmm1, %xmm2
3250 movaps %xmm2, 16(%rdx)
3251 movaps 29+16(%rcx), %xmm2
3257 movaps %xmm4, 32(%rdx)
3262 movaps %xmm5, 48(%rdx)
3267 movaps (%rdx, %rsi), %xmm6
3269 palignr $3, %xmm1, %xmm6
3270 movaps %xmm6, (%rdx, %rsi)
3272 jmp L(CopyFrom1To16BytesCase3)
3278 palignr $4, %xmm1, %xmm2
3280 movaps %xmm2, (%rdx)
3281 movaps 28(%rcx), %xmm2
3286 palignr $4, %xmm1, %xmm2
3287 movaps %xmm2, 16(%rdx)
3288 movaps 28+16(%rcx), %xmm2
3294 movaps %xmm4, 32(%rdx)
3299 movaps %xmm5, 48(%rdx)
3304 movaps (%rdx, %rsi), %xmm6
3306 palignr $4, %xmm1, %xmm6
3307 movaps %xmm6, (%rdx, %rsi)
3309 jmp L(CopyFrom1To16BytesCase3)
3315 palignr $5, %xmm1, %xmm2
3317 movaps %xmm2, (%rdx)
3318 movaps 27(%rcx), %xmm2
3323 palignr $5, %xmm1, %xmm2
3324 movaps %xmm2, 16(%rdx)
3325 movaps 27+16(%rcx), %xmm2
3331 movaps %xmm4, 32(%rdx)
3336 movaps %xmm5, 48(%rdx)
3341 movaps (%rdx, %rsi), %xmm6
3343 palignr $5, %xmm1, %xmm6
3344 movaps %xmm6, (%rdx, %rsi)
3346 jmp L(CopyFrom1To16BytesCase3)
3352 palignr $6, %xmm1, %xmm2
3354 movaps %xmm2, (%rdx)
3355 movaps 26(%rcx), %xmm2
3360 palignr $6, %xmm1, %xmm2
3361 movaps %xmm2, 16(%rdx)
3362 movaps 26+16(%rcx), %xmm2
3368 movaps %xmm4, 32(%rdx)
3373 movaps %xmm5, 48(%rdx)
3378 movaps (%rdx, %rsi), %xmm6
3380 palignr $6, %xmm1, %xmm6
3381 movaps %xmm6, (%rdx, %rsi)
3383 jmp L(CopyFrom1To16BytesCase3)
3389 palignr $7, %xmm1, %xmm2
3391 movaps %xmm2, (%rdx)
3392 movaps 25(%rcx), %xmm2
3397 palignr $7, %xmm1, %xmm2
3398 movaps %xmm2, 16(%rdx)
3399 movaps 25+16(%rcx), %xmm2
3405 movaps %xmm4, 32(%rdx)
3410 movaps %xmm5, 48(%rdx)
3415 movaps (%rdx, %rsi), %xmm6
3417 palignr $7, %xmm1, %xmm6
3418 movaps %xmm6, (%rdx, %rsi)
3420 jmp L(CopyFrom1To16BytesCase3)
3426 palignr $8, %xmm1, %xmm2
3428 movaps %xmm2, (%rdx)
3429 movaps 24(%rcx), %xmm2
3434 palignr $8, %xmm1, %xmm2
3435 movaps %xmm2, 16(%rdx)
3436 movaps 24+16(%rcx), %xmm2
3442 movaps %xmm4, 32(%rdx)
3447 movaps %xmm5, 48(%rdx)
3452 movaps (%rdx, %rsi), %xmm6
3454 palignr $8, %xmm1, %xmm6
3455 movaps %xmm6, (%rdx, %rsi)
3457 jmp L(CopyFrom1To16BytesCase3)
3463 palignr $9, %xmm1, %xmm2
3465 movaps %xmm2, (%rdx)
3466 movaps 23(%rcx), %xmm2
3471 palignr $9, %xmm1, %xmm2
3472 movaps %xmm2, 16(%rdx)
3473 movaps 23+16(%rcx), %xmm2
3479 movaps %xmm4, 32(%rdx)
3484 movaps %xmm5, 48(%rdx)
3489 movaps (%rdx, %rsi), %xmm6
3491 palignr $9, %xmm1, %xmm6
3492 movaps %xmm6, (%rdx, %rsi)
3494 jmp L(CopyFrom1To16BytesCase3)
3499 jle L(StrncpyExit10)
3500 palignr $10, %xmm1, %xmm2
3502 movaps %xmm2, (%rdx)
3503 movaps 22(%rcx), %xmm2
3507 jbe L(StrncpyExit10)
3508 palignr $10, %xmm1, %xmm2
3509 movaps %xmm2, 16(%rdx)
3510 movaps 22+16(%rcx), %xmm2
3514 jbe L(StrncpyExit10)
3516 movaps %xmm4, 32(%rdx)
3519 jbe L(StrncpyExit10)
3521 movaps %xmm5, 48(%rdx)
3526 movaps (%rdx, %rsi), %xmm6
3528 palignr $10, %xmm1, %xmm6
3529 movaps %xmm6, (%rdx, %rsi)
3531 jmp L(CopyFrom1To16BytesCase3)
3536 jle L(StrncpyExit11)
3537 palignr $11, %xmm1, %xmm2
3539 movaps %xmm2, (%rdx)
3540 movaps 21(%rcx), %xmm2
3544 jbe L(StrncpyExit11)
3545 palignr $11, %xmm1, %xmm2
3546 movaps %xmm2, 16(%rdx)
3547 movaps 21+16(%rcx), %xmm2
3551 jbe L(StrncpyExit11)
3553 movaps %xmm4, 32(%rdx)
3556 jbe L(StrncpyExit11)
3558 movaps %xmm5, 48(%rdx)
3563 movaps (%rdx, %rsi), %xmm6
3565 palignr $11, %xmm1, %xmm6
3566 movaps %xmm6, (%rdx, %rsi)
3568 jmp L(CopyFrom1To16BytesCase3)
3573 jle L(StrncpyExit12)
3574 palignr $12, %xmm1, %xmm2
3576 movaps %xmm2, (%rdx)
3577 movaps 20(%rcx), %xmm2
3581 jbe L(StrncpyExit12)
3582 palignr $12, %xmm1, %xmm2
3583 movaps %xmm2, 16(%rdx)
3584 movaps 20+16(%rcx), %xmm2
3588 jbe L(StrncpyExit12)
3590 movaps %xmm4, 32(%rdx)
3593 jbe L(StrncpyExit12)
3595 movaps %xmm5, 48(%rdx)
3600 movaps (%rdx, %rsi), %xmm6
3602 palignr $12, %xmm1, %xmm6
3603 movaps %xmm6, (%rdx, %rsi)
3605 jmp L(CopyFrom1To16BytesCase3)
3610 jle L(StrncpyExit13)
3611 palignr $13, %xmm1, %xmm2
3613 movaps %xmm2, (%rdx)
3614 movaps 19(%rcx), %xmm2
3618 jbe L(StrncpyExit13)
3619 palignr $13, %xmm1, %xmm2
3620 movaps %xmm2, 16(%rdx)
3621 movaps 19+16(%rcx), %xmm2
3625 jbe L(StrncpyExit13)
3627 movaps %xmm4, 32(%rdx)
3630 jbe L(StrncpyExit13)
3632 movaps %xmm5, 48(%rdx)
3637 movaps (%rdx, %rsi), %xmm6
3639 palignr $13, %xmm1, %xmm6
3640 movaps %xmm6, (%rdx, %rsi)
3642 jmp L(CopyFrom1To16BytesCase3)
3647 jle L(StrncpyExit14)
3648 palignr $14, %xmm1, %xmm2
3650 movaps %xmm2, (%rdx)
3651 movaps 18(%rcx), %xmm2
3655 jbe L(StrncpyExit14)
3656 palignr $14, %xmm1, %xmm2
3657 movaps %xmm2, 16(%rdx)
3658 movaps 18+16(%rcx), %xmm2
3662 jbe L(StrncpyExit14)
3664 movaps %xmm4, 32(%rdx)
3667 jbe L(StrncpyExit14)
3669 movaps %xmm5, 48(%rdx)
3674 movaps (%rdx, %rsi), %xmm6
3676 palignr $14, %xmm1, %xmm6
3677 movaps %xmm6, (%rdx, %rsi)
3679 jmp L(CopyFrom1To16BytesCase3)
3684 jle L(StrncpyExit15)
3685 palignr $15, %xmm1, %xmm2
3687 movaps %xmm2, (%rdx)
3688 movaps 17(%rcx), %xmm2
3692 jbe L(StrncpyExit15)
3693 palignr $15, %xmm1, %xmm2
3694 movaps %xmm2, 16(%rdx)
3695 movaps 17+16(%rcx), %xmm2
3699 jbe L(StrncpyExit15)
3701 movaps %xmm4, 32(%rdx)
3704 jbe L(StrncpyExit15)
3706 movaps %xmm5, 48(%rdx)
3711 movaps (%rdx, %rsi), %xmm6
3713 palignr $15, %xmm1, %xmm6
3714 movaps %xmm6, (%rdx, %rsi)
3716 jmp L(CopyFrom1To16BytesCase3)