Enable libmvec support for AArch64
commitcd94326a1326c4e3f1ee7a8d0a161cc0bdcaf07e
authorJoe Ramsay <Joe.Ramsay@arm.com>
Wed, 12 Apr 2023 13:37:49 +0000 (12 14:37 +0100)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Wed, 3 May 2023 11:09:49 +0000 (3 12:09 +0100)
treeac23e68944f7b02293b052910aaa45604d5761c0
parentcd87e368439ce97d2a2c95894e1851f4c0ff4443
Enable libmvec support for AArch64

This patch enables libmvec on AArch64. The proposed change is mainly
implementing build infrastructure to add the new routines to ABI,
tests and benchmarks. I have demonstrated how this all fits together
by adding implementations for vector cos, in both single and double
precision, targeting both Advanced SIMD and SVE.

The implementations of the routines themselves are just loops over the
scalar routine from libm for now, as we are more concerned with
getting the plumbing right at this point. We plan to contribute vector
routines from the Arm Optimized Routines repo that are compliant with
requirements described in the libmvec wiki.

Building libmvec requires minimum GCC 10 for SVE ACLE. To avoid raising
the minimum GCC by such a big jump, we allow users to disable libmvec
if their compiler is too old.

Note that at this point users have to manually call the vector math
functions. This seems to be acceptable to some downstream users.

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
32 files changed:
INSTALL
NEWS
benchtests/bench-libmvec-skeleton.c [moved from sysdeps/x86_64/fpu/bench-libmvec-skeleton.c with 85% similarity]
manual/install.texi
sysdeps/aarch64/configure
sysdeps/aarch64/configure.ac
sysdeps/aarch64/fpu/Makefile [new file with mode: 0644]
sysdeps/aarch64/fpu/Versions [new file with mode: 0644]
sysdeps/aarch64/fpu/advsimd_utils.h [new file with mode: 0644]
sysdeps/aarch64/fpu/bench-libmvec-arch.h [new file with mode: 0644]
sysdeps/aarch64/fpu/bits/math-vector.h [new file with mode: 0644]
sysdeps/aarch64/fpu/cos_advsimd.c [new file with mode: 0644]
sysdeps/aarch64/fpu/cos_sve.c [new file with mode: 0644]
sysdeps/aarch64/fpu/cosf_advsimd.c [new file with mode: 0644]
sysdeps/aarch64/fpu/cosf_sve.c [new file with mode: 0644]
sysdeps/aarch64/fpu/math-tests-arch.h [new file with mode: 0644]
sysdeps/aarch64/fpu/scripts/bench_libmvec_advsimd.py [new file with mode: 0644]
sysdeps/aarch64/fpu/scripts/bench_libmvec_sve.py [new file with mode: 0755]
sysdeps/aarch64/fpu/sve_utils.h [new file with mode: 0644]
sysdeps/aarch64/fpu/test-double-advsimd-wrappers.c [new file with mode: 0644]
sysdeps/aarch64/fpu/test-double-advsimd.h [new file with mode: 0644]
sysdeps/aarch64/fpu/test-double-sve-wrappers.c [new file with mode: 0644]
sysdeps/aarch64/fpu/test-double-sve.h [new file with mode: 0644]
sysdeps/aarch64/fpu/test-float-advsimd-wrappers.c [new file with mode: 0644]
sysdeps/aarch64/fpu/test-float-advsimd.h [new file with mode: 0644]
sysdeps/aarch64/fpu/test-float-sve-wrappers.c [new file with mode: 0644]
sysdeps/aarch64/fpu/test-float-sve.h [new file with mode: 0644]
sysdeps/aarch64/fpu/test-vpcs-vector-wrapper.h [new file with mode: 0644]
sysdeps/aarch64/libm-test-ulps
sysdeps/unix/sysv/linux/aarch64/libmvec.abilist [new file with mode: 0644]
sysdeps/x86_64/fpu/Makefile
sysdeps/x86_64/fpu/bench-libmvec-arch.h [new file with mode: 0644]