]> git.ipfire.org Git - thirdparty/glibc.git/commit
AArch64: Implement AdvSIMD and SVE powr(f) routines master
authorPierre Blanchard <pierre.blanchard@arm.com>
Wed, 15 Apr 2026 08:32:44 +0000 (08:32 +0000)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 20 Apr 2026 16:01:25 +0000 (13:01 -0300)
commit2ff2565df78160b392b120793d6d1aac2d716701
tree3528aaa6c7df05b396d7291fc9cd0a7659663a20
parent4794e84a2f7899a4868f84a89feb55f9d5f8bb52
AArch64: Implement AdvSIMD and SVE powr(f) routines

Vector variants of the new C23 powr routines.

These provide same maximum error error as pow by virtue of
relying on shared approximation techniques and sources.

Note: Benchmark inputs for powr(f) are identical to pow(f).

Performance gain over pow on V1 with GCC@15:
- SVE powr: 10-12% on subnormal x, 12-13% on x < 0.
- SVE powrf: 15% on all x < 0.
- AdvSIMD powr: for x < 0, 40% if x subnormal, 60% otherwise.
- AdvSIMD powrf: 4% on x subnormals or x < 0.
17 files changed:
bits/libm-simd-decl-stubs.h
math/bits/mathcalls.h
sysdeps/aarch64/fpu/Makefile
sysdeps/aarch64/fpu/Versions
sysdeps/aarch64/fpu/advsimd_f32_protos.h
sysdeps/aarch64/fpu/bits/math-vector.h
sysdeps/aarch64/fpu/finclude/math-vector-fortran.h
sysdeps/aarch64/fpu/powr_advsimd.c [new file with mode: 0644]
sysdeps/aarch64/fpu/powr_sve.c [new file with mode: 0644]
sysdeps/aarch64/fpu/powrf_advsimd.c [new file with mode: 0644]
sysdeps/aarch64/fpu/powrf_sve.c [new file with mode: 0644]
sysdeps/aarch64/fpu/test-double-advsimd-wrappers.c
sysdeps/aarch64/fpu/test-double-sve-wrappers.c
sysdeps/aarch64/fpu/test-float-advsimd-wrappers.c
sysdeps/aarch64/fpu/test-float-sve-wrappers.c
sysdeps/aarch64/fpu/v_powrf_inline.h
sysdeps/unix/sysv/linux/aarch64/libmvec.abilist