2 Copyright (C) 2011-2024 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
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.
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.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
24 # define CFI_PUSH(REG) \
25 cfi_adjust_cfa_offset (4); \
26 cfi_rel_offset (REG, 0)
28 # define CFI_POP(REG) \
29 cfi_adjust_cfa_offset (-4); \
32 # define PUSH(REG) pushl REG; CFI_PUSH (REG)
33 # define POP(REG) popl REG; CFI_POP (REG)
36 # define STRCAT __strcat_ssse3
43 # ifdef USE_AS_STRNCAT
47 # define USE_AS_STRCAT
55 # define RETURN jmp L(StartStrcpyPart)
56 # include "strlen-sse2.S"
60 lea (%edi, %eax), %edx
61 # ifdef USE_AS_STRNCAT
67 jbe L(StrncatExit8Bytes)
87 # ifdef USE_AS_STRNCAT
89 jb L(StrncatExit15Bytes)
105 # ifdef USE_AS_STRNCAT
115 # define USE_AS_STRNCPY
117 # define RETURN1 POP (%edi); ret; CFI_PUSH (%edi)
119 # include "strcpy-ssse3.S"
121 L(CopyFrom1To16Bytes):
164 movlpd 8(%ecx), %xmm1
166 movlpd %xmm1, 8(%edx)
300 movlpd 5(%ecx), %xmm0
301 movlpd %xmm0, 5(%edx)
311 movlpd 6(%ecx), %xmm0
312 movlpd %xmm0, 6(%edx)
322 movlpd 7(%ecx), %xmm0
323 movlpd %xmm0, 7(%edx)
332 movlpd 8(%ecx), %xmm1
334 movlpd %xmm1, 8(%edx)
338 # ifdef USE_AS_STRNCPY
343 L(CopyFrom1To16BytesCase2):
346 lea (%esi, %edx), %esi
425 movlpd 8(%ecx), %xmm1
426 movlpd %xmm1, 8(%edx)
432 L(CopyFrom1To16BytesCase2OrCase3):
434 jnz L(CopyFrom1To16BytesCase2)
437 L(CopyFrom1To16BytesCase3):
484 movlpd 8(%ecx), %xmm1
485 movlpd %xmm1, 8(%edx)
496 L(StrncatExit15Bytes):
521 movlpd 7(%ecx), %xmm0
522 movlpd %xmm0, 7(%edx)
531 L(StrncatExit8Bytes):