]> git.ipfire.org Git - thirdparty/glibc.git/commit
x86: Optimize memset-vec-unaligned-erms.S
authorNoah Goldstein <goldstein.w.n@gmail.com>
Mon, 20 Sep 2021 21:20:15 +0000 (16:20 -0500)
committerSunil K Pandey <skpgkp2@gmail.com>
Mon, 2 May 2022 20:01:06 +0000 (13:01 -0700)
commita4e41f7253a9ad8a60016a2b8362ed261eb1d447
tree0206f72930c1befc84d62e1b7ede0e3c9a5fd62b
parent280fcf7f56b5e9d2fa45bc76cfee6b3335ae88e8
x86: Optimize memset-vec-unaligned-erms.S

No bug.

Optimization are

1. change control flow for L(more_2x_vec) to fall through to loop and
   jump for L(less_4x_vec) and L(less_8x_vec). This uses less code
   size and saves jumps for length > 4x VEC_SIZE.

2. For EVEX/AVX512 move L(less_vec) closer to entry.

3. Avoid complex address mode for length > 2x VEC_SIZE

4. Slightly better aligning code for the loop from the perspective of
   code size and uops.

5. Align targets so they make full use of their fetch block and if
   possible cache line.

6. Try and reduce total number of icache lines that will need to be
   pulled in for a given length.

7. Include "local" version of stosb target. For AVX2/EVEX/AVX512
   jumping to the stosb target in the sse2 code section will almost
   certainly be to a new page. The new version does increase code size
   marginally by duplicating the target but should get better iTLB
   behavior as a result.

test-memset, test-wmemset, and test-bzero are all passing.

Signed-off-by: Noah Goldstein <goldstein.w.n@gmail.com>
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
(cherry picked from commit e59ced238482fd71f3e493717f14f6507346741e)
sysdeps/x86_64/memset.S
sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S
sysdeps/x86_64/multiarch/memset-avx512-unaligned-erms.S
sysdeps/x86_64/multiarch/memset-evex-unaligned-erms.S
sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S