diff options
author | Noah Goldstein <goldstein.w.n@gmail.com> | 2022-07-13 16:33:01 -0700 |
---|---|---|
committer | Noah Goldstein <goldstein.w.n@gmail.com> | 2022-07-16 03:07:59 -0700 |
commit | 49889fb256a7f9b894b2d16fea23de1ac25b65e2 (patch) | |
tree | 923f7a6a2eb94e4baf9141783b19df06ed9ee747 /sysdeps/x86_64/multiarch/strcpy-sse2.S | |
parent | 192979ee351315b84ff4277d0985f26243717cd7 (diff) | |
download | glibc-49889fb256a7f9b894b2d16fea23de1ac25b65e2.tar.gz glibc-49889fb256a7f9b894b2d16fea23de1ac25b65e2.tar.xz glibc-49889fb256a7f9b894b2d16fea23de1ac25b65e2.zip |
x86: Add support to build st{p|r}{n}{cpy|cat} with explicit ISA level
1. Add default ISA level selection in non-multiarch/rtld implementations. 2. Add ISA level build guards to different implementations. - I.e strcpy-avx2.S which is ISA level 3 will only build if compiled ISA level <= 3. Otherwise there is no reason to include it as we will always use one of the ISA level 4 implementations (strcpy-evex.S). 3. Refactor the ifunc selector and ifunc implementation list to use the ISA level aware wrapper macros that allow functions below the compiled ISA level (with a guranteed replacement) to be skipped. Tested with and without multiarch on x86_64 for ISA levels: {generic, x86-64-v2, x86-64-v3, x86-64-v4} And m32 with and without multiarch.
Diffstat (limited to 'sysdeps/x86_64/multiarch/strcpy-sse2.S')
-rw-r--r-- | sysdeps/x86_64/multiarch/strcpy-sse2.S | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/sysdeps/x86_64/multiarch/strcpy-sse2.S b/sysdeps/x86_64/multiarch/strcpy-sse2.S index 8b5db8b13d..e29b411314 100644 --- a/sysdeps/x86_64/multiarch/strcpy-sse2.S +++ b/sysdeps/x86_64/multiarch/strcpy-sse2.S @@ -1,5 +1,5 @@ -/* strcpy optimized with SSE2. - Copyright (C) 2017-2022 Free Software Foundation, Inc. +/* strcpy/stpcpy implementation for x86-64. + Copyright (C) 2002-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,13 +16,15 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ -#if IS_IN (libc) -# ifndef STRCPY +#include <isa-level.h> + +#if ISA_SHOULD_BUILD (1) + +# include <sysdep.h> + +# ifndef STPCPY # define STRCPY __strcpy_sse2 # endif -#endif - -#include <sysdep.h> .text ENTRY (STRCPY) @@ -144,10 +146,11 @@ ENTRY (STRCPY) jmp 3b /* and look at next two bytes in %rax. */ 4: -#ifdef USE_AS_STPCPY +# ifdef USE_AS_STPCPY movq %rdx, %rax /* Destination is return value. */ -#else +# else movq %rdi, %rax /* Source is return value. */ -#endif +# endif retq END (STRCPY) +#endif |