]> git.ipfire.org Git - thirdparty/glibc.git/commit
x86: Add support to build strcmp/strlen/strchr with explicit ISA level
authorNoah Goldstein <goldstein.w.n@gmail.com>
Wed, 13 Jul 2022 23:32:59 +0000 (16:32 -0700)
committerNoah Goldstein <goldstein.w.n@gmail.com>
Sat, 16 Jul 2022 10:07:59 +0000 (03:07 -0700)
commitceabdcd130ca7043b0fcf2676183d79431d10493
treef6ced435023b66ac1f3b519e5b26a60ef8f479dd
parentc353689e49e72f3aafa1a9e68d4f7a4f33a79cbe
x86: Add support to build strcmp/strlen/strchr 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 strcmp-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 (strcmp-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.
88 files changed:
sysdeps/x86/isa-level.h
sysdeps/x86_64/Makefile
sysdeps/x86_64/memrchr.S
sysdeps/x86_64/multiarch/Makefile
sysdeps/x86_64/multiarch/ifunc-avx2.h
sysdeps/x86_64/multiarch/ifunc-impl-list.c
sysdeps/x86_64/multiarch/ifunc-strcasecmp.h
sysdeps/x86_64/multiarch/ifunc-wcslen.h
sysdeps/x86_64/multiarch/memrchr-avx2.S
sysdeps/x86_64/multiarch/memrchr-evex.S
sysdeps/x86_64/multiarch/memrchr-sse2.S
sysdeps/x86_64/multiarch/strcasecmp_l-avx2-rtm.S
sysdeps/x86_64/multiarch/strcasecmp_l-avx2.S
sysdeps/x86_64/multiarch/strcasecmp_l-evex.S
sysdeps/x86_64/multiarch/strcasecmp_l-sse2.S
sysdeps/x86_64/multiarch/strchr-avx2.S
sysdeps/x86_64/multiarch/strchr-evex.S
sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S
sysdeps/x86_64/multiarch/strchr-sse2.S
sysdeps/x86_64/multiarch/strchr.c
sysdeps/x86_64/multiarch/strchrnul-avx2.S
sysdeps/x86_64/multiarch/strchrnul-evex.S
sysdeps/x86_64/multiarch/strchrnul-sse2.S
sysdeps/x86_64/multiarch/strcmp-avx2-rtm.S
sysdeps/x86_64/multiarch/strcmp-avx2.S
sysdeps/x86_64/multiarch/strcmp-evex.S
sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S
sysdeps/x86_64/multiarch/strcmp-sse2.S
sysdeps/x86_64/multiarch/strcmp-sse4_2.S
sysdeps/x86_64/multiarch/strcmp.c
sysdeps/x86_64/multiarch/strlen-avx2.S
sysdeps/x86_64/multiarch/strlen-evex-base.S
sysdeps/x86_64/multiarch/strlen-evex.S
sysdeps/x86_64/multiarch/strlen-sse2.S
sysdeps/x86_64/multiarch/strncase_l-avx2-rtm.S
sysdeps/x86_64/multiarch/strncase_l-avx2.S
sysdeps/x86_64/multiarch/strncase_l-evex.S
sysdeps/x86_64/multiarch/strncmp-avx2-rtm.S
sysdeps/x86_64/multiarch/strncmp-avx2.S
sysdeps/x86_64/multiarch/strncmp-evex.S
sysdeps/x86_64/multiarch/strncmp.c
sysdeps/x86_64/multiarch/strnlen-avx2.S
sysdeps/x86_64/multiarch/strnlen-evex.S
sysdeps/x86_64/multiarch/strnlen-sse2.S
sysdeps/x86_64/multiarch/strrchr-avx2.S
sysdeps/x86_64/multiarch/strrchr-evex.S
sysdeps/x86_64/multiarch/strrchr-sse2.S
sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S
sysdeps/x86_64/multiarch/wcschr-avx2.S
sysdeps/x86_64/multiarch/wcschr-evex.S
sysdeps/x86_64/multiarch/wcschr-sse2.S
sysdeps/x86_64/multiarch/wcscmp-avx2-rtm.S
sysdeps/x86_64/multiarch/wcscmp-avx2.S
sysdeps/x86_64/multiarch/wcscmp-evex.S
sysdeps/x86_64/multiarch/wcscmp-sse2.S
sysdeps/x86_64/multiarch/wcslen-avx2.S
sysdeps/x86_64/multiarch/wcslen-evex.S
sysdeps/x86_64/multiarch/wcslen-sse2.S
sysdeps/x86_64/multiarch/wcslen-sse4_1.S
sysdeps/x86_64/multiarch/wcsncmp-avx2-rtm.S
sysdeps/x86_64/multiarch/wcsncmp-avx2.S
sysdeps/x86_64/multiarch/wcsncmp-evex.S
sysdeps/x86_64/multiarch/wcsncmp-generic.c
sysdeps/x86_64/multiarch/wcsnlen-avx2.S
sysdeps/x86_64/multiarch/wcsnlen-evex.S
sysdeps/x86_64/multiarch/wcsnlen-generic.c
sysdeps/x86_64/multiarch/wcsnlen-sse4_1.S
sysdeps/x86_64/multiarch/wcsrchr-avx2.S
sysdeps/x86_64/multiarch/wcsrchr-evex.S
sysdeps/x86_64/multiarch/wcsrchr-sse2.S
sysdeps/x86_64/strcasecmp_l.S
sysdeps/x86_64/strchr-isa-default-impl.h [new file with mode: 0644]
sysdeps/x86_64/strchr.S
sysdeps/x86_64/strchrnul.S
sysdeps/x86_64/strcmp.S
sysdeps/x86_64/strlen.S
sysdeps/x86_64/strncase_l.S
sysdeps/x86_64/strncmp.S
sysdeps/x86_64/strnlen.S
sysdeps/x86_64/strrchr.S
sysdeps/x86_64/wcschr.S
sysdeps/x86_64/wcscmp.S
sysdeps/x86_64/wcslen.S
sysdeps/x86_64/wcsncmp-generic.c [new file with mode: 0644]
sysdeps/x86_64/wcsncmp.S [new file with mode: 0644]
sysdeps/x86_64/wcsnlen-generic.c [new file with mode: 0644]
sysdeps/x86_64/wcsnlen.S [new file with mode: 0644]
sysdeps/x86_64/wcsrchr.S