gnu/gcc/f49cb8938ef3ab032fe01c6a39b4baf8e4e8fa49 aarch64: Add SME2p3/SVE2p3 x2 narrowing right shift intrinsics
This patch adds support for the following SME2p3/SVE2p3 x2 narrowing
right shift intrinsics:
- svqrshrn_s8_s16
- svqrshrn_u8_u16
- svqrshrun_u8_s16
- svqshrn_s8_s16
- svqshrn_s16_s32
- svqshrn_u8_u16
- svqshrn_u16_u32
- svqshrun_u8_s16
- svqshrun_u16_s32
Bootstrapped and regression tested on aarch64-linux-gnu.
gcc/ChangeLog:
* config/aarch64/aarch64-acle-builtins.h
(TYPES_qshr_x2): New macro.
(TYPES_qrshr_x2_8): Likewise.
(TYPES_qshru_x2): Likewise.
(TYPES_qrshrun_x2): Likewise.
(DEF_SVE_TYPES_ARRAY): Add qshr_x2, qrshr_x2_8, qrshrun_x2
and qshru_x2.
* config/aarch64/aarch64-sve-builtins-sve2.cc (svqshrn): New
function.
(svqshrun): Likewise.
* config/aarch64/aarch64-sve-builtins-sve2.def (svqrshrn): Add
SVE2p3/SME2p3 x2 form.
(svqrshrun): Likewise.
(svqshrn): Add SVE2p3/SME2p3 x2 form.
(svqshrun): Likewise.
* config/aarch64/aarch64-sve-builtins-sve2.h (svqshrn): Declare.
(svqshrun): Likewise.
* config/aarch64/aarch64-sve2.md
(@aarch64_sve_<sve_int_op><mode>): New define_insn.
* config/aarch64/iterators.md (SVE_FULL_HIx2): New mode iterator.
(UNSPEC_SQSHRN, UNSPEC_SQSHRUN, UNSPEC_UQSHRN): New unspecs.
(VNARROW): Add VNx16HI mapping.
(Ventype): Likewise.
(SVE2_INT_SHIFT_IMM_NARROWxN): Add UNSPEC_SQSHRN,
UNSPEC_SQSHRUN and UNSPEC_UQSHRN.
(sve_int_op): Add sqshrn, sqshrun and uqshrn.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/sme2/acle-asm/qrshrn_s8_x2.c: New test.
* gcc.target/aarch64/sme2/acle-asm/qrshrn_u8_x2.c: New test.
* gcc.target/aarch64/sme2/acle-asm/qrshrun_u8_x2.c: New test.
* gcc.target/aarch64/sme2/acle-asm/qshrn_s16_x2.c: New test.
* gcc.target/aarch64/sme2/acle-asm/qshrn_s8_x2.c: New test.
* gcc.target/aarch64/sme2/acle-asm/qshrn_u16_x2.c: New test.
* gcc.target/aarch64/sme2/acle-asm/qshrn_u8_x2.c: New test.
* gcc.target/aarch64/sme2/acle-asm/qshrun_u16_x2.c: New test.
* gcc.target/aarch64/sme2/acle-asm/qshrun_u8_x2.c: New test.
15 files changed