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