]> git.ipfire.org Git - thirdparty/gcc.git/commit
aarch64: Add support for unpacked SVE FP unary operations
authorSpencer Abson <spencer.abson@arm.com>
Mon, 7 Jul 2025 16:49:17 +0000 (16:49 +0000)
committerSpencer Abson <spencer.abson@arm.com>
Wed, 23 Jul 2025 20:37:58 +0000 (20:37 +0000)
commit556ed247adc9857ebd89a5bdbcdc8f929f73bd1e
treec67a0dc425cbaa19ae5129ed0df89f888d7d1d8f
parent659f80c36357ffc440b1adaa0082326f55fd2197
aarch64: Add support for unpacked SVE FP unary operations

This patch extends the expander for unpredicated round, nearbyint, floor,
ceil, rint, and trunc, so that it can handle partial SVE FP modes.

We move fabs and fneg to a separate expander, since they are not trapping
instructions.

gcc/ChangeLog:

* config/aarch64/aarch64-sve.md (<optab><mode>2): Replace use of
aarch64_ptrue_reg with aarch64_sve_fp_pred.
(@aarch64_pred_<optab><mode>): Extend from SVE_FULL_F to SVE_F,
and use aarch64_predicate_operand.
* config/aarch64/iterators.md: Split FABS/FNEG out of
SVE_COND_FP_UNARY (into new SVE_COND_FP_UNARY_BITWISE).

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/sve/unpacked_fabs_1.c: New test.
* gcc.target/aarch64/sve/unpacked_fneg_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frinta_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frinta_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frinti_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frinti_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frintm_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frintm_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frintp_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frintp_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frintx_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frintx_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frintz_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_frintz_2.c: Likewise.
16 files changed:
gcc/config/aarch64/aarch64-sve.md
gcc/config/aarch64/iterators.md
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fabs_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fneg_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frinta_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frinta_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frinti_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frinti_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frintm_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frintm_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frintp_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frintp_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frintx_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frintx_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frintz_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_frintz_2.c [new file with mode: 0644]