]> git.ipfire.org Git - thirdparty/gcc.git/commit
aarch64: Add SVE2 faminmax intrinsics
authorSaurabh Jha <saurabh.jha@arm.com>
Wed, 25 Sep 2024 22:08:33 +0000 (22:08 +0000)
committerSaurabh Jha <saurabh.jha@arm.com>
Fri, 11 Oct 2024 10:36:29 +0000 (10:36 +0000)
commit1a6a8cb1a72b282c418cd143b132de6e67b5d62b
treea5afcde29b88a2e828078f19f959252a57e41976
parentc64ae8377210bde44714d265311ee7bfa2733df9
aarch64: Add SVE2 faminmax intrinsics

The AArch64 FEAT_FAMINMAX extension introduces instructions for
computing the floating point absolute maximum and minimum of the
two vectors element-wise.

This patch introduces SVE2 faminmax intrinsics. The intrinsics of this
extension are implemented as the following builtin functions:
* sva[max|min]_[m|x|z]
* sva[max|min]_[f16|f32|f64]_[m|x|z]
* sva[max|min]_n_[f16|f32|f64]_[m|x|z]

gcc/ChangeLog:

* config/aarch64/aarch64-sve-builtins-base.cc
(svamax): Absolute maximum declaration.
(svamin): Absolute minimum declaration.
* config/aarch64/aarch64-sve-builtins-base.def
(REQUIRED_EXTENSIONS): Add faminmax intrinsics behind a flag.
(svamax): Absolute maximum declaration.
(svamin): Absolute minimum declaration.
* config/aarch64/aarch64-sve-builtins-base.h: Declaring function
bases for the new intrinsics.
* config/aarch64/aarch64.h
(TARGET_SVE_FAMINMAX): New flag for SVE2 faminmax.
* config/aarch64/iterators.md: New unspecs, iterators, and attrs
for the new intrinsics.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/sve2/acle/asm/amax_f16.c: New test.
* gcc.target/aarch64/sve2/acle/asm/amax_f32.c: New test.
* gcc.target/aarch64/sve2/acle/asm/amax_f64.c: New test.
* gcc.target/aarch64/sve2/acle/asm/amin_f16.c: New test.
* gcc.target/aarch64/sve2/acle/asm/amin_f32.c: New test.
* gcc.target/aarch64/sve2/acle/asm/amin_f64.c: New test.
gcc/config/aarch64/aarch64-sve-builtins-base.cc
gcc/config/aarch64/aarch64-sve-builtins-base.def
gcc/config/aarch64/aarch64-sve-builtins-base.h
gcc/config/aarch64/aarch64.h
gcc/config/aarch64/iterators.md
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amin_f16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amin_f32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amin_f64.c [new file with mode: 0644]