x86: Prepare `strrchr-evex` and `strrchr-evex512` for AVX10
authorNoah Goldstein <goldstein.w.n@gmail.com>
Thu, 21 Sep 2023 14:38:37 +0000 (09:38 -0500)
committerNoah Goldstein <goldstein.w.n@gmail.com>
Fri, 6 Oct 2023 05:18:55 +0000 (00:18 -0500)
commita3c50bf46a1ca6d9d2b7d879176d345abf95a9de
treed4663b76ebca54bf5c40e5015464c556e91cfb7f
parent5a4b6f8e4b7e2a76c71b713200a80181d745c93d
x86: Prepare `strrchr-evex` and `strrchr-evex512` for AVX10

This commit refactors `strrchr-evex` and `strrchr-evex512` to use a
common implementation: `strrchr-evex-base.S`.

The motivation is `strrchr-evex` needed to be refactored to not use
64-bit masked registers in preperation for AVX10.

Once vec-width masked register combining was removed, the EVEX and
EVEX512 implementations can easily be implemented in the same file
without any major overhead.

The net result is performance improvements (measured on TGL) for both
`strrchr-evex` and `strrchr-evex512`. Although, note there are some
regressions in the test suite and it may be many of the cases that
make the total-geomean of improvement/regression across bench-strrchr
are cold. The point of the performance measurement is to show there
are no major regressions, but the primary motivation is preperation
for AVX10.

Benchmarks where taken on TGL:
https://www.intel.com/content/www/us/en/products/sku/213799/intel-core-i711850h-processor-24m-cache-up-to-4-80-ghz/specifications.html

EVEX geometric_mean(N=5) of all benchmarks New / Original   : 0.74
EVEX512 geometric_mean(N=5) of all benchmarks New / Original: 0.87

Full check passes on x86.
sysdeps/x86_64/multiarch/strrchr-evex-base.S
sysdeps/x86_64/multiarch/strrchr-evex.S
sysdeps/x86_64/multiarch/wcsrchr-evex.S