SVE2.2 (or in streaming mode, SME2.2) adds support for zeroing predication
for the following integer unary instructions:

SVE:
        - ABS (Absolute value (predicated))
        - CLS (Count leading sign bits (predicated))
        - CLZ (Count leading zero bits (predicated))
        - CNT (Count non-zero bits (predicated))
        - CNOT (Logically invert boolean condition (predicated))
        - NEG (Negate (predicated))
        - NOT (Bitwise invert (predicated))
        - RBIT (Reverse bits (predicated))

SVE2:
        - SQABS (Signed saturating absolute value)
        - SQNEG (Signed saturating negate)
        - URECPE (Unsigned reciprocal estimate (predicated))
        - URSRQTE (Unsigned reciprocal square root estimate (predicated))

These instructions are covered by the SVE_INT_UNARY and SVE2_U32_UNARY
iterators, except for CNOT, which has a standalone pattern.  Therefore,
three patterns across aarch64-sve.md and aarch64-sve2.md had to be
provided with a new alternative, having Dz (const_vector of all zeroes) as
the merge operand.  The new alternatives are conditional upon the
sve2p2_or_sme2p2 test added earlier, and emit the new zeroing-predication
forms of the original instructions.

The tests that have been added are based on the original SVE/SVE2 tests
for corresponding instructions, but all have a "_z" suffix in their name
since they only test codegen for the "_z" variants of the corresponding
intrinsics.

gcc/ChangeLog:

        * config/aarch64/aarch64-sve.md (*cond_<optab><mode>_any):
        New alternative for zeroing predication.  Add `arch` attribute
        to every alternative.
        (*cond_cnot<mode>_any): Likewise.
        * config/aarch64/aarch64-sve2.md: (*cond_<sve_int_op><mode>):
        Likewise.

gcc/testsuite/ChangeLog:

        * gcc.target/aarch64/sve2/acle/asm/abs_s16_z.c: New test.
        * gcc.target/aarch64/sve2/acle/asm/abs_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/abs_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/abs_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cls_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cls_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cls_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cls_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/clz_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/clz_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/clz_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/clz_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/clz_u16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/clz_u32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/clz_u64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/clz_u8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnot_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnot_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnot_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnot_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnot_u16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnot_u32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnot_u64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnot_u8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnt_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnt_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnt_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnt_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnt_u16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnt_u32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnt_u64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/cnt_u8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/neg_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/neg_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/neg_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/neg_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/not_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/not_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/not_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/not_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/not_u16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/not_u32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/not_u64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/not_u8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/qabs_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/qabs_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/qabs_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/qabs_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/qneg_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/qneg_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/qneg_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/qneg_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rbit_s16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rbit_s32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rbit_s64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rbit_s8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rbit_u16_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rbit_u32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rbit_u64_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rbit_u8_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/recpe_u32_z.c: Likewise.
        * gcc.target/aarch64/sve2/acle/asm/rsqrte_u32_z.c: Likewise.
---
 gcc/config/aarch64/aarch64-sve.md             | 18 ++++++-----
 gcc/config/aarch64/aarch64-sve2.md            |  9 +++---
 .../aarch64/sve2/acle/asm/abs_s16_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/abs_s32_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/abs_s64_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/abs_s8_z.c          | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/cls_s16_z.c         | 20 +++++++++++++
 .../aarch64/sve2/acle/asm/cls_s32_z.c         | 20 +++++++++++++
 .../aarch64/sve2/acle/asm/cls_s64_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cls_s8_z.c          | 20 +++++++++++++
 .../aarch64/sve2/acle/asm/clz_s16_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/clz_s32_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/clz_s64_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/clz_s8_z.c          | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/clz_u16_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/clz_u32_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/clz_u64_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/clz_u8_z.c          | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnot_s16_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnot_s32_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnot_s64_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnot_s8_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnot_u16_z.c        | 30 +++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnot_u32_z.c        | 30 +++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnot_u64_z.c        | 30 +++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnot_u8_z.c         | 30 +++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnt_bf16_z.c        | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cnt_f16_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cnt_f32_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cnt_f64_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cnt_s16_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cnt_s32_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cnt_s64_z.c         | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cnt_s8_z.c          | 19 ++++++++++++
 .../aarch64/sve2/acle/asm/cnt_u16_z.c         | 30 +++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnt_u32_z.c         | 30 +++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnt_u64_z.c         | 30 +++++++++++++++++++
 .../aarch64/sve2/acle/asm/cnt_u8_z.c          | 30 +++++++++++++++++++
 .../aarch64/sve2/acle/asm/neg_s16_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/neg_s32_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/neg_s64_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/neg_s8_z.c          | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/not_s16_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/not_s32_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/not_s64_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/not_s8_z.c          | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/not_u16_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/not_u32_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/not_u64_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/not_u8_z.c          | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/qabs_s16_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/qabs_s32_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/qabs_s64_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/qabs_s8_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/qneg_s16_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/qneg_s32_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/qneg_s64_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/qneg_s8_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/rbit_s16_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/rbit_s32_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/rbit_s64_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/rbit_s8_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/rbit_u16_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/rbit_u32_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/rbit_u64_z.c        | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/rbit_u8_z.c         | 29 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/recpe_u32_z.c       | 26 ++++++++++++++++
 .../aarch64/sve2/acle/asm/rsqrte_u32_z.c      | 28 +++++++++++++++++
 68 files changed, 1776 insertions(+), 12 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_bf16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u16_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u32_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u64_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u8_z.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/recpe_u32_z.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsqrte_u32_z.c

diff --git a/gcc/config/aarch64/aarch64-sve.md 
b/gcc/config/aarch64/aarch64-sve.md
index 97fd9516959..6f5786e8a0c 100644
--- a/gcc/config/aarch64/aarch64-sve.md
+++ b/gcc/config/aarch64/aarch64-sve.md
@@ -3409,10 +3409,11 @@
           (match_operand:SVE_I 3 "aarch64_simd_reg_or_zero")]
          UNSPEC_SEL))]
   "TARGET_SVE && !rtx_equal_p (operands[2], operands[3])"
-  {@ [ cons: =0 , 1   , 2 , 3  ; attrs: movprfx ]
-     [ &w       , Upl , w , 0  ; *              ] <sve_int_op>\t%0.<Vetype>, 
%1/m, %2.<Vetype>
-     [ ?&w      , Upl , w , Dz ; yes            ] movprfx\t%0.<Vetype>, %1/z, 
%2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
-     [ ?&w      , Upl , w , w  ; yes            ] movprfx\t%0, 
%3\;<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
+  {@ [ cons: =0 , 1   , 2 , 3  ; attrs: movprfx, arch ]
+     [ &w       , Upl , w , 0  ; *     , *                ] 
<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
+     [ &w       , Upl , w , Dz ; *      , sve2p2_or_sme2p2 ] 
<sve_int_op>\t%0.<Vetype>, %1/z, %2.<Vetype>
+     [ ?&w      , Upl , w , Dz ; yes    , *                ] 
movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, 
%2.<Vetype>
+     [ ?&w      , Upl , w , w  ; yes    , *                ] movprfx\t%0, 
%3\;<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
   }
   [(set_attr "sve_type" "sve_int_general")]
 )
@@ -3862,10 +3863,11 @@
           (match_operand:SVE_I 6 "aarch64_simd_reg_or_zero")]
          UNSPEC_SEL))]
   "TARGET_SVE && !rtx_equal_p (operands[2], operands[6])"
-  {@ [ cons: =0 , 1   , 2 , 6  ; attrs: movprfx ]
-     [ &w       , Upl , w , 0  ; *              ] cnot\t%0.<Vetype>, %1/m, 
%2.<Vetype>
-     [ ?&w      , Upl , w , Dz ; yes            ] movprfx\t%0.<Vetype>, %1/z, 
%2.<Vetype>\;cnot\t%0.<Vetype>, %1/m, %2.<Vetype>
-     [ ?&w      , Upl , w , w  ; yes            ] movprfx\t%0, 
%6\;cnot\t%0.<Vetype>, %1/m, %2.<Vetype>
+  {@ [ cons: =0 , 1   , 2 , 6  ; attrs: movprfx, arch ]
+     [ &w       , Upl , w , 0  ; *   , *                ] cnot\t%0.<Vetype>, 
%1/m, %2.<Vetype>
+     [ &w       , Upl , w , Dz ; *   , sve2p2_or_sme2p2 ] cnot\t%0.<Vetype>, 
%1/z, %2.<Vetype>
+     [ ?&w      , Upl , w , Dz ; yes , *                ] 
movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;cnot\t%0.<Vetype>, %1/m, %2.<Vetype>
+     [ ?&w      , Upl , w , w  ; yes , *                ] movprfx\t%0, 
%6\;cnot\t%0.<Vetype>, %1/m, %2.<Vetype>
   }
   "&& !CONSTANT_P (operands[5])"
   {
diff --git a/gcc/config/aarch64/aarch64-sve2.md 
b/gcc/config/aarch64/aarch64-sve2.md
index f198824707c..017efb3cf5e 100644
--- a/gcc/config/aarch64/aarch64-sve2.md
+++ b/gcc/config/aarch64/aarch64-sve2.md
@@ -3853,10 +3853,11 @@
           (match_operand:VNx4SI_ONLY 3 "aarch64_simd_reg_or_zero")]
          UNSPEC_SEL))]
   "TARGET_SVE2"
-  {@ [ cons: =0 , 1   , 2 , 3  ; attrs: movprfx ]
-     [ w        , Upl , w , 0  ; *              ] <sve_int_op>\t%0.<Vetype>, 
%1/m, %2.<Vetype>
-     [ ?&w      , Upl , w , Dz ; yes            ] movprfx\t%0.<Vetype>, %1/z, 
%2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
-     [ ?&w      , Upl , w , w  ; yes            ] movprfx\t%0, 
%3\;<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
+  {@ [ cons: =0 , 1   , 2 , 3  ; attrs: movprfx, arch ]
+     [ w        , Upl , w , 0  ; *   , *                ] 
<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
+     [ w        , Upl , w , Dz ; *   , sve2p2_or_sme2p2 ] 
<sve_int_op>\t%0.<Vetype>, %1/z, %2.<Vetype>
+     [ ?&w      , Upl , w , Dz ; yes , *                ] 
movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, 
%2.<Vetype>
+     [ ?&w      , Upl , w , w  ; yes , *                ] movprfx\t%0, 
%3\;<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
   }
   "&& !CONSTANT_P (operands[4])"
   {
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s16_z.c
new file mode 100644
index 00000000000..69aa0053585
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** abs_s16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     abs     z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (abs_s16_z_tied1, svint16_t,
+               z0 = svabs_s16_z (p0, z0),
+               z0 = svabs_z (p0, z0))
+
+/*
+** abs_s16_z_untied:
+**     abs     z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (abs_s16_z_untied, svint16_t,
+               z0 = svabs_s16_z (p0, z1),
+               z0 = svabs_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s32_z.c
new file mode 100644
index 00000000000..d304782f3a6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** abs_s32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     abs     z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (abs_s32_z_tied1, svint32_t,
+               z0 = svabs_s32_z (p0, z0),
+               z0 = svabs_z (p0, z0))
+
+/*
+** abs_s32_z_untied:
+**     abs     z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (abs_s32_z_untied, svint32_t,
+               z0 = svabs_s32_z (p0, z1),
+               z0 = svabs_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s64_z.c
new file mode 100644
index 00000000000..17d3e2415e0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** abs_s64_z_tied1:
+**     mov     (z[0-9]+\.d), z0\.d
+**     abs     z0\.d, p0/z, \1
+**     ret
+*/
+TEST_UNIFORM_Z (abs_s64_z_tied1, svint64_t,
+               z0 = svabs_s64_z (p0, z0),
+               z0 = svabs_z (p0, z0))
+
+/*
+** abs_s64_z_untied:
+**     abs     z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (abs_s64_z_untied, svint64_t,
+               z0 = svabs_s64_z (p0, z1),
+               z0 = svabs_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s8_z.c
new file mode 100644
index 00000000000..6c032e1ac76
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abs_s8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** abs_s8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     abs     z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (abs_s8_z_tied1, svint8_t,
+               z0 = svabs_s8_z (p0, z0),
+               z0 = svabs_z (p0, z0))
+
+/*
+** abs_s8_z_untied:
+**     abs     z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (abs_s8_z_untied, svint8_t,
+               z0 = svabs_s8_z (p0, z1),
+               z0 = svabs_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s16_z.c
new file mode 100644
index 00000000000..768742bfbcf
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s16_z.c
@@ -0,0 +1,20 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cls_s16_z:
+**     cls     z0\.h, p0/z, z4\.h
+**     ret
+*/
+TEST_DUAL_Z (cls_s16_z, svuint16_t, svint16_t,
+            z0 = svcls_s16_z (p0, z4),
+            z0 = svcls_z (p0, z4))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s32_z.c
new file mode 100644
index 00000000000..c9b27347636
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s32_z.c
@@ -0,0 +1,20 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cls_s32_z:
+**     cls     z0\.s, p0/z, z4\.s
+**     ret
+*/
+TEST_DUAL_Z (cls_s32_z, svuint32_t, svint32_t,
+            z0 = svcls_s32_z (p0, z4),
+            z0 = svcls_z (p0, z4))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s64_z.c
new file mode 100644
index 00000000000..d6a59a94fe0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s64_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cls_s64_z:
+**     cls     z0\.d, p0/z, z4\.d
+**     ret
+*/
+TEST_DUAL_Z (cls_s64_z, svuint64_t, svint64_t,
+            z0 = svcls_s64_z (p0, z4),
+            z0 = svcls_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s8_z.c
new file mode 100644
index 00000000000..b784ddd0bad
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cls_s8_z.c
@@ -0,0 +1,20 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cls_s8_z:
+**     cls     z0\.b, p0/z, z4\.b
+**     ret
+*/
+TEST_DUAL_Z (cls_s8_z, svuint8_t, svint8_t,
+            z0 = svcls_s8_z (p0, z4),
+            z0 = svcls_z (p0, z4))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s16_z.c
new file mode 100644
index 00000000000..84c23fe404d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s16_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** clz_s16_z:
+**     clz     z0\.h, p0/z, z4\.h
+**     ret
+*/
+TEST_DUAL_Z (clz_s16_z, svuint16_t, svint16_t,
+            z0 = svclz_s16_z (p0, z4),
+            z0 = svclz_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s32_z.c
new file mode 100644
index 00000000000..ed74432b000
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s32_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** clz_s32_z:
+**     clz     z0\.s, p0/z, z4\.s
+**     ret
+*/
+TEST_DUAL_Z (clz_s32_z, svuint32_t, svint32_t,
+            z0 = svclz_s32_z (p0, z4),
+            z0 = svclz_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s64_z.c
new file mode 100644
index 00000000000..b899115b3e1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s64_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** clz_s64_z:
+**     clz     z0\.d, p0/z, z4\.d
+**     ret
+*/
+TEST_DUAL_Z (clz_s64_z, svuint64_t, svint64_t,
+            z0 = svclz_s64_z (p0, z4),
+            z0 = svclz_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s8_z.c
new file mode 100644
index 00000000000..bd9f118dc4e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_s8_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** clz_s8_z:
+**     clz     z0\.b, p0/z, z4\.b
+**     ret
+*/
+TEST_DUAL_Z (clz_s8_z, svuint8_t, svint8_t,
+            z0 = svclz_s8_z (p0, z4),
+            z0 = svclz_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u16_z.c
new file mode 100644
index 00000000000..60f203bc1cf
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** clz_u16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     clz     z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (clz_u16_z_tied1, svuint16_t,
+               z0 = svclz_u16_z (p0, z0),
+               z0 = svclz_z (p0, z0))
+
+/*
+** clz_u16_z_untied:
+**     clz     z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (clz_u16_z_untied, svuint16_t,
+               z0 = svclz_u16_z (p0, z1),
+               z0 = svclz_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u32_z.c
new file mode 100644
index 00000000000..2b24e0802ea
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** clz_u32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     clz     z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (clz_u32_z_tied1, svuint32_t,
+               z0 = svclz_u32_z (p0, z0),
+               z0 = svclz_z (p0, z0))
+
+/*
+** clz_u32_z_untied:
+**     clz     z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (clz_u32_z_untied, svuint32_t,
+               z0 = svclz_u32_z (p0, z1),
+               z0 = svclz_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u64_z.c
new file mode 100644
index 00000000000..0237f063632
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** clz_u64_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     clz     z0\.d, p0/z, \1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (clz_u64_z_tied1, svuint64_t,
+               z0 = svclz_u64_z (p0, z0),
+               z0 = svclz_z (p0, z0))
+
+/*
+** clz_u64_z_untied:
+**     clz     z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (clz_u64_z_untied, svuint64_t,
+               z0 = svclz_u64_z (p0, z1),
+               z0 = svclz_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u8_z.c
new file mode 100644
index 00000000000..6db9e0cd547
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clz_u8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** clz_u8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     clz     z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (clz_u8_z_tied1, svuint8_t,
+               z0 = svclz_u8_z (p0, z0),
+               z0 = svclz_z (p0, z0))
+
+/*
+** clz_u8_z_untied:
+**     clz     z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (clz_u8_z_untied, svuint8_t,
+               z0 = svclz_u8_z (p0, z1),
+               z0 = svclz_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s16_z.c
new file mode 100644
index 00000000000..c07d8053ab2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnot_s16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnot    z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_s16_z_tied1, svint16_t,
+               z0 = svcnot_s16_z (p0, z0),
+               z0 = svcnot_z (p0, z0))
+
+/*
+** cnot_s16_z_untied:
+**     cnot    z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_s16_z_untied, svint16_t,
+               z0 = svcnot_s16_z (p0, z1),
+               z0 = svcnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s32_z.c
new file mode 100644
index 00000000000..23cdb91cf55
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnot_s32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnot    z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_s32_z_tied1, svint32_t,
+               z0 = svcnot_s32_z (p0, z0),
+               z0 = svcnot_z (p0, z0))
+
+/*
+** cnot_s32_z_untied:
+**     cnot    z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_s32_z_untied, svint32_t,
+               z0 = svcnot_s32_z (p0, z1),
+               z0 = svcnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s64_z.c
new file mode 100644
index 00000000000..3f71da7c72a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnot_s64_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnot    z0\.d, p0/z, \1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_s64_z_tied1, svint64_t,
+               z0 = svcnot_s64_z (p0, z0),
+               z0 = svcnot_z (p0, z0))
+
+/*
+** cnot_s64_z_untied:
+**     cnot    z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_s64_z_untied, svint64_t,
+               z0 = svcnot_s64_z (p0, z1),
+               z0 = svcnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s8_z.c
new file mode 100644
index 00000000000..2e975e4f068
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_s8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnot_s8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnot    z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_s8_z_tied1, svint8_t,
+               z0 = svcnot_s8_z (p0, z0),
+               z0 = svcnot_z (p0, z0))
+
+/*
+** cnot_s8_z_untied:
+**     cnot    z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_s8_z_untied, svint8_t,
+               z0 = svcnot_s8_z (p0, z1),
+               z0 = svcnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u16_z.c
new file mode 100644
index 00000000000..3e92ecbebfa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u16_z.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnot_u16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnot    z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_u16_z_tied1, svuint16_t,
+               z0 = svcnot_u16_z (p0, z0),
+               z0 = svcnot_z (p0, z0))
+
+/*
+** cnot_u16_z_untied:
+**     cnot    z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_u16_z_untied, svuint16_t,
+               z0 = svcnot_u16_z (p0, z1),
+               z0 = svcnot_z (p0, z1))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u32_z.c
new file mode 100644
index 00000000000..048db22376d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u32_z.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnot_u32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnot    z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_u32_z_tied1, svuint32_t,
+               z0 = svcnot_u32_z (p0, z0),
+               z0 = svcnot_z (p0, z0))
+
+/*
+** cnot_u32_z_untied:
+**     cnot    z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_u32_z_untied, svuint32_t,
+               z0 = svcnot_u32_z (p0, z1),
+               z0 = svcnot_z (p0, z1))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u64_z.c
new file mode 100644
index 00000000000..723551df8f6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u64_z.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnot_u64_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnot    z0\.d, p0/z, \1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_u64_z_tied1, svuint64_t,
+               z0 = svcnot_u64_z (p0, z0),
+               z0 = svcnot_z (p0, z0))
+
+/*
+** cnot_u64_z_untied:
+**     cnot    z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_u64_z_untied, svuint64_t,
+               z0 = svcnot_u64_z (p0, z1),
+               z0 = svcnot_z (p0, z1))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u8_z.c
new file mode 100644
index 00000000000..dafa400b45d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnot_u8_z.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnot_u8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnot    z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_u8_z_tied1, svuint8_t,
+               z0 = svcnot_u8_z (p0, z0),
+               z0 = svcnot_z (p0, z0))
+
+/*
+** cnot_u8_z_untied:
+**     cnot    z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (cnot_u8_z_untied, svuint8_t,
+               z0 = svcnot_u8_z (p0, z1),
+               z0 = svcnot_z (p0, z1))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_bf16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_bf16_z.c
new file mode 100644
index 00000000000..05bbb968091
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_bf16_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_bf16_z:
+**     cnt     z0\.h, p0/z, z4\.h
+**     ret
+*/
+TEST_DUAL_Z (cnt_bf16_z, svuint16_t, svbfloat16_t,
+            z0 = svcnt_bf16_z (p0, z4),
+            z0 = svcnt_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f16_z.c
new file mode 100644
index 00000000000..60c5cde43a2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f16_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_f16_z:
+**     cnt     z0\.h, p0/z, z4\.h
+**     ret
+*/
+TEST_DUAL_Z (cnt_f16_z, svuint16_t, svfloat16_t,
+            z0 = svcnt_f16_z (p0, z4),
+            z0 = svcnt_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f32_z.c
new file mode 100644
index 00000000000..28287d49e90
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f32_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_f32_z:
+**     cnt     z0\.s, p0/z, z4\.s
+**     ret
+*/
+TEST_DUAL_Z (cnt_f32_z, svuint32_t, svfloat32_t,
+            z0 = svcnt_f32_z (p0, z4),
+            z0 = svcnt_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f64_z.c
new file mode 100644
index 00000000000..f3bf1f976ce
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_f64_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_f64_z:
+**     cnt     z0\.d, p0/z, z4\.d
+**     ret
+*/
+TEST_DUAL_Z (cnt_f64_z, svuint64_t, svfloat64_t,
+            z0 = svcnt_f64_z (p0, z4),
+            z0 = svcnt_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s16_z.c
new file mode 100644
index 00000000000..e6023b3b497
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s16_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_s16_z:
+**     cnt     z0\.h, p0/z, z4\.h
+**     ret
+*/
+TEST_DUAL_Z (cnt_s16_z, svuint16_t, svint16_t,
+            z0 = svcnt_s16_z (p0, z4),
+            z0 = svcnt_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s32_z.c
new file mode 100644
index 00000000000..b598d5b0deb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s32_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_s32_z:
+**     cnt     z0\.s, p0/z, z4\.s
+**     ret
+*/
+TEST_DUAL_Z (cnt_s32_z, svuint32_t, svint32_t,
+            z0 = svcnt_s32_z (p0, z4),
+            z0 = svcnt_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s64_z.c
new file mode 100644
index 00000000000..14942c7742f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s64_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_s64_z:
+**     cnt     z0\.d, p0/z, z4\.d
+**     ret
+*/
+TEST_DUAL_Z (cnt_s64_z, svuint64_t, svint64_t,
+            z0 = svcnt_s64_z (p0, z4),
+            z0 = svcnt_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s8_z.c
new file mode 100644
index 00000000000..4dfed72e771
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_s8_z.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_s8_z:
+**     cnt     z0\.b, p0/z, z4\.b
+**     ret
+*/
+TEST_DUAL_Z (cnt_s8_z, svuint8_t, svint8_t,
+            z0 = svcnt_s8_z (p0, z4),
+            z0 = svcnt_z (p0, z4))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u16_z.c
new file mode 100644
index 00000000000..0bf9834b828
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u16_z.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_u16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnt     z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (cnt_u16_z_tied1, svuint16_t,
+               z0 = svcnt_u16_z (p0, z0),
+               z0 = svcnt_z (p0, z0))
+
+/*
+** cnt_u16_z_untied:
+**     cnt     z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (cnt_u16_z_untied, svuint16_t,
+               z0 = svcnt_u16_z (p0, z1),
+               z0 = svcnt_z (p0, z1))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u32_z.c
new file mode 100644
index 00000000000..55b808df43d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u32_z.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_u32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnt     z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (cnt_u32_z_tied1, svuint32_t,
+               z0 = svcnt_u32_z (p0, z0),
+               z0 = svcnt_z (p0, z0))
+
+/*
+** cnt_u32_z_untied:
+**     cnt     z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (cnt_u32_z_untied, svuint32_t,
+               z0 = svcnt_u32_z (p0, z1),
+               z0 = svcnt_z (p0, z1))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u64_z.c
new file mode 100644
index 00000000000..104f138a8ca
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u64_z.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_u64_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnt     z0\.d, p0/z, \1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (cnt_u64_z_tied1, svuint64_t,
+               z0 = svcnt_u64_z (p0, z0),
+               z0 = svcnt_z (p0, z0))
+
+/*
+** cnt_u64_z_untied:
+**     cnt     z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (cnt_u64_z_untied, svuint64_t,
+               z0 = svcnt_u64_z (p0, z1),
+               z0 = svcnt_z (p0, z1))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u8_z.c
new file mode 100644
index 00000000000..729501db810
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cnt_u8_z.c
@@ -0,0 +1,30 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** cnt_u8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     cnt     z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (cnt_u8_z_tied1, svuint8_t,
+               z0 = svcnt_u8_z (p0, z0),
+               z0 = svcnt_z (p0, z0))
+
+/*
+** cnt_u8_z_untied:
+**     cnt     z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (cnt_u8_z_untied, svuint8_t,
+               z0 = svcnt_u8_z (p0, z1),
+               z0 = svcnt_z (p0, z1))
+
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s16_z.c
new file mode 100644
index 00000000000..1ae3cda3c01
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** neg_s16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     neg     z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (neg_s16_z_tied1, svint16_t,
+               z0 = svneg_s16_z (p0, z0),
+               z0 = svneg_z (p0, z0))
+
+/*
+** neg_s16_z_untied:
+**     neg     z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (neg_s16_z_untied, svint16_t,
+               z0 = svneg_s16_z (p0, z1),
+               z0 = svneg_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s32_z.c
new file mode 100644
index 00000000000..51a6b481206
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** neg_s32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     neg     z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (neg_s32_z_tied1, svint32_t,
+               z0 = svneg_s32_z (p0, z0),
+               z0 = svneg_z (p0, z0))
+
+/*
+** neg_s32_z_untied:
+**     neg     z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (neg_s32_z_untied, svint32_t,
+               z0 = svneg_s32_z (p0, z1),
+               z0 = svneg_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s64_z.c
new file mode 100644
index 00000000000..a8a2b35d692
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** neg_s64_z_tied1:
+**     mov     (z[0-9]+\.d), z0\.d
+**     neg     z0\.d, p0/z, \1
+**     ret
+*/
+TEST_UNIFORM_Z (neg_s64_z_tied1, svint64_t,
+               z0 = svneg_s64_z (p0, z0),
+               z0 = svneg_z (p0, z0))
+
+/*
+** neg_s64_z_untied:
+**     neg     z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (neg_s64_z_untied, svint64_t,
+               z0 = svneg_s64_z (p0, z1),
+               z0 = svneg_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s8_z.c
new file mode 100644
index 00000000000..0d0bbfa79b7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/neg_s8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** neg_s8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     neg     z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (neg_s8_z_tied1, svint8_t,
+               z0 = svneg_s8_z (p0, z0),
+               z0 = svneg_z (p0, z0))
+
+/*
+** neg_s8_z_untied:
+**     neg     z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (neg_s8_z_untied, svint8_t,
+               z0 = svneg_s8_z (p0, z1),
+               z0 = svneg_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s16_z.c
new file mode 100644
index 00000000000..60048d3021c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** not_s16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     not     z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (not_s16_z_tied1, svint16_t,
+               z0 = svnot_s16_z (p0, z0),
+               z0 = svnot_z (p0, z0))
+
+/*
+** not_s16_z_untied:
+**     not     z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (not_s16_z_untied, svint16_t,
+               z0 = svnot_s16_z (p0, z1),
+               z0 = svnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s32_z.c
new file mode 100644
index 00000000000..927459fed6c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** not_s32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     not     z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (not_s32_z_tied1, svint32_t,
+               z0 = svnot_s32_z (p0, z0),
+               z0 = svnot_z (p0, z0))
+
+/*
+** not_s32_z_untied:
+**     not     z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (not_s32_z_untied, svint32_t,
+               z0 = svnot_s32_z (p0, z1),
+               z0 = svnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s64_z.c
new file mode 100644
index 00000000000..b005ef349cb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** not_s64_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     not     z0\.d, p0/z, \1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (not_s64_z_tied1, svint64_t,
+               z0 = svnot_s64_z (p0, z0),
+               z0 = svnot_z (p0, z0))
+
+/*
+** not_s64_z_untied:
+**     not     z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (not_s64_z_untied, svint64_t,
+               z0 = svnot_s64_z (p0, z1),
+               z0 = svnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s8_z.c
new file mode 100644
index 00000000000..bbab73885ec
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_s8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** not_s8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     not     z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (not_s8_z_tied1, svint8_t,
+               z0 = svnot_s8_z (p0, z0),
+               z0 = svnot_z (p0, z0))
+
+/*
+** not_s8_z_untied:
+**     not     z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (not_s8_z_untied, svint8_t,
+               z0 = svnot_s8_z (p0, z1),
+               z0 = svnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u16_z.c
new file mode 100644
index 00000000000..7b612a892c4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** not_u16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     not     z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (not_u16_z_tied1, svuint16_t,
+               z0 = svnot_u16_z (p0, z0),
+               z0 = svnot_z (p0, z0))
+
+/*
+** not_u16_z_untied:
+**     not     z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (not_u16_z_untied, svuint16_t,
+               z0 = svnot_u16_z (p0, z1),
+               z0 = svnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u32_z.c
new file mode 100644
index 00000000000..b586f612cd9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** not_u32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     not     z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (not_u32_z_tied1, svuint32_t,
+               z0 = svnot_u32_z (p0, z0),
+               z0 = svnot_z (p0, z0))
+
+/*
+** not_u32_z_untied:
+**     not     z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (not_u32_z_untied, svuint32_t,
+               z0 = svnot_u32_z (p0, z1),
+               z0 = svnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u64_z.c
new file mode 100644
index 00000000000..ee3cfbf4f6a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** not_u64_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     not     z0\.d, p0/z, \1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (not_u64_z_tied1, svuint64_t,
+               z0 = svnot_u64_z (p0, z0),
+               z0 = svnot_z (p0, z0))
+
+/*
+** not_u64_z_untied:
+**     not     z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (not_u64_z_untied, svuint64_t,
+               z0 = svnot_u64_z (p0, z1),
+               z0 = svnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u8_z.c
new file mode 100644
index 00000000000..bb760c6e15f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/not_u8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** not_u8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     not     z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (not_u8_z_tied1, svuint8_t,
+               z0 = svnot_u8_z (p0, z0),
+               z0 = svnot_z (p0, z0))
+
+/*
+** not_u8_z_untied:
+**     not     z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (not_u8_z_untied, svuint8_t,
+               z0 = svnot_u8_z (p0, z1),
+               z0 = svnot_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s16_z.c
new file mode 100644
index 00000000000..bacb34b1de8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** qabs_s16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     sqabs   z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (qabs_s16_z_tied1, svint16_t,
+               z0 = svqabs_s16_z (p0, z0),
+               z0 = svqabs_z (p0, z0))
+
+/*
+** qabs_s16_z_untied:
+**     sqabs   z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (qabs_s16_z_untied, svint16_t,
+               z0 = svqabs_s16_z (p0, z1),
+               z0 = svqabs_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s32_z.c
new file mode 100644
index 00000000000..9b7852e0418
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** qabs_s32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     sqabs   z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (qabs_s32_z_tied1, svint32_t,
+               z0 = svqabs_s32_z (p0, z0),
+               z0 = svqabs_z (p0, z0))
+
+/*
+** qabs_s32_z_untied:
+**     sqabs   z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (qabs_s32_z_untied, svint32_t,
+               z0 = svqabs_s32_z (p0, z1),
+               z0 = svqabs_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s64_z.c
new file mode 100644
index 00000000000..4b899a254e7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** qabs_s64_z_tied1:
+**     mov     (z[0-9]+\.d), z0\.d
+**     sqabs   z0\.d, p0/z, \1
+**     ret
+*/
+TEST_UNIFORM_Z (qabs_s64_z_tied1, svint64_t,
+               z0 = svqabs_s64_z (p0, z0),
+               z0 = svqabs_z (p0, z0))
+
+/*
+** qabs_s64_z_untied:
+**     sqabs   z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (qabs_s64_z_untied, svint64_t,
+               z0 = svqabs_s64_z (p0, z1),
+               z0 = svqabs_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s8_z.c
new file mode 100644
index 00000000000..48b0d0c1aa0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** qabs_s8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     sqabs   z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (qabs_s8_z_tied1, svint8_t,
+               z0 = svqabs_s8_z (p0, z0),
+               z0 = svqabs_z (p0, z0))
+
+/*
+** qabs_s8_z_untied:
+**     sqabs   z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (qabs_s8_z_untied, svint8_t,
+               z0 = svqabs_s8_z (p0, z1),
+               z0 = svqabs_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s16_z.c
new file mode 100644
index 00000000000..82108070776
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** qneg_s16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     sqneg   z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (qneg_s16_z_tied1, svint16_t,
+               z0 = svqneg_s16_z (p0, z0),
+               z0 = svqneg_z (p0, z0))
+
+/*
+** qneg_s16_z_untied:
+**     sqneg   z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (qneg_s16_z_untied, svint16_t,
+               z0 = svqneg_s16_z (p0, z1),
+               z0 = svqneg_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s32_z.c
new file mode 100644
index 00000000000..5f488893014
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** qneg_s32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     sqneg   z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (qneg_s32_z_tied1, svint32_t,
+               z0 = svqneg_s32_z (p0, z0),
+               z0 = svqneg_z (p0, z0))
+
+/*
+** qneg_s32_z_untied:
+**     sqneg   z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (qneg_s32_z_untied, svint32_t,
+               z0 = svqneg_s32_z (p0, z1),
+               z0 = svqneg_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s64_z.c
new file mode 100644
index 00000000000..7c469b0335f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** qneg_s64_z_tied1:
+**     mov     (z[0-9]+\.d), z0\.d
+**     sqneg   z0\.d, p0/z, \1
+**     ret
+*/
+TEST_UNIFORM_Z (qneg_s64_z_tied1, svint64_t,
+               z0 = svqneg_s64_z (p0, z0),
+               z0 = svqneg_z (p0, z0))
+
+/*
+** qneg_s64_z_untied:
+**     sqneg   z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (qneg_s64_z_untied, svint64_t,
+               z0 = svqneg_s64_z (p0, z1),
+               z0 = svqneg_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s8_z.c
new file mode 100644
index 00000000000..67d43096f29
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** qneg_s8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     sqneg   z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (qneg_s8_z_tied1, svint8_t,
+               z0 = svqneg_s8_z (p0, z0),
+               z0 = svqneg_z (p0, z0))
+
+/*
+** qneg_s8_z_untied:
+**     sqneg   z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (qneg_s8_z_untied, svint8_t,
+               z0 = svqneg_s8_z (p0, z1),
+               z0 = svqneg_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s16_z.c
new file mode 100644
index 00000000000..4cb64a87885
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rbit_s16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     rbit    z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_s16_z_tied1, svint16_t,
+               z0 = svrbit_s16_z (p0, z0),
+               z0 = svrbit_z (p0, z0))
+
+/*
+** rbit_s16_z_untied:
+**     rbit    z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_s16_z_untied, svint16_t,
+               z0 = svrbit_s16_z (p0, z1),
+               z0 = svrbit_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s32_z.c
new file mode 100644
index 00000000000..ac00de92754
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rbit_s32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     rbit    z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_s32_z_tied1, svint32_t,
+               z0 = svrbit_s32_z (p0, z0),
+               z0 = svrbit_z (p0, z0))
+
+/*
+** rbit_s32_z_untied:
+**     rbit    z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_s32_z_untied, svint32_t,
+               z0 = svrbit_s32_z (p0, z1),
+               z0 = svrbit_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s64_z.c
new file mode 100644
index 00000000000..63d57fc515c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rbit_s64_z_tied1:
+**     mov     (z[0-9]+\.d), z0\.d
+**     rbit    z0\.d, p0/z, \1
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_s64_z_tied1, svint64_t,
+               z0 = svrbit_s64_z (p0, z0),
+               z0 = svrbit_z (p0, z0))
+
+/*
+** rbit_s64_z_untied:
+**     rbit    z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_s64_z_untied, svint64_t,
+               z0 = svrbit_s64_z (p0, z1),
+               z0 = svrbit_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s8_z.c
new file mode 100644
index 00000000000..6b0486bc7d3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_s8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rbit_s8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     rbit    z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_s8_z_tied1, svint8_t,
+               z0 = svrbit_s8_z (p0, z0),
+               z0 = svrbit_z (p0, z0))
+
+/*
+** rbit_s8_z_untied:
+**     rbit    z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_s8_z_untied, svint8_t,
+               z0 = svrbit_s8_z (p0, z1),
+               z0 = svrbit_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u16_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u16_z.c
new file mode 100644
index 00000000000..e9ab1151d91
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u16_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rbit_u16_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     rbit    z0\.h, p0/z, \1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_u16_z_tied1, svuint16_t,
+               z0 = svrbit_u16_z (p0, z0),
+               z0 = svrbit_z (p0, z0))
+
+/*
+** rbit_u16_z_untied:
+**     rbit    z0\.h, p0/z, z1\.h
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_u16_z_untied, svuint16_t,
+               z0 = svrbit_u16_z (p0, z1),
+               z0 = svrbit_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u32_z.c
new file mode 100644
index 00000000000..b8bfd68e00b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u32_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rbit_u32_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     rbit    z0\.s, p0/z, \1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_u32_z_tied1, svuint32_t,
+               z0 = svrbit_u32_z (p0, z0),
+               z0 = svrbit_z (p0, z0))
+
+/*
+** rbit_u32_z_untied:
+**     rbit    z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_u32_z_untied, svuint32_t,
+               z0 = svrbit_u32_z (p0, z1),
+               z0 = svrbit_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u64_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u64_z.c
new file mode 100644
index 00000000000..2f2170098d1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u64_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rbit_u64_z_tied1:
+**     mov     (z[0-9]+\.d), z0\.d
+**     rbit    z0\.d, p0/z, \1
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_u64_z_tied1, svuint64_t,
+               z0 = svrbit_u64_z (p0, z0),
+               z0 = svrbit_z (p0, z0))
+
+/*
+** rbit_u64_z_untied:
+**     rbit    z0\.d, p0/z, z1\.d
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_u64_z_untied, svuint64_t,
+               z0 = svrbit_u64_z (p0, z1),
+               z0 = svrbit_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u8_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u8_z.c
new file mode 100644
index 00000000000..8590d3a2625
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rbit_u8_z.c
@@ -0,0 +1,29 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rbit_u8_z_tied1:
+**     mov     (z[0-9]+)\.d, z0\.d
+**     rbit    z0\.b, p0/z, \1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_u8_z_tied1, svuint8_t,
+               z0 = svrbit_u8_z (p0, z0),
+               z0 = svrbit_z (p0, z0))
+
+/*
+** rbit_u8_z_untied:
+**     rbit    z0\.b, p0/z, z1\.b
+**     ret
+*/
+TEST_UNIFORM_Z (rbit_u8_z_untied, svuint8_t,
+               z0 = svrbit_u8_z (p0, z1),
+               z0 = svrbit_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/recpe_u32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/recpe_u32_z.c
new file mode 100644
index 00000000000..2df61d500c1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/recpe_u32_z.c
@@ -0,0 +1,26 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */             
                          
+#include "test_sve_acle.h"
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** recpe_u32_z_tied1:
+**     urecpe  z0\.s, p0/z, z0\.s
+**     ret
+*/
+TEST_UNIFORM_Z (recpe_u32_z_tied1, svuint32_t,
+               z0 = svrecpe_u32_z (p0, z0),
+               z0 = svrecpe_z (p0, z0))
+
+/*
+** recpe_u32_z_untied:
+**     urecpe  z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (recpe_u32_z_untied, svuint32_t,
+               z0 = svrecpe_u32_z (p0, z1),
+               z0 = svrecpe_z (p0, z1))
diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsqrte_u32_z.c 
b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsqrte_u32_z.c
new file mode 100644
index 00000000000..352107082eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsqrte_u32_z.c
@@ -0,0 +1,28 @@
+/* { dg-do assemble { target aarch64_asm_sve2p2_ok } } */
+/* { dg-do compile { target { ! aarch64_asm_sve2p2_ok } } } */
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2p2"
+#ifdef STREAMING_COMPATIBLE
+#pragma GCC target "+sme2p2"
+#endif
+
+/*
+** rsqrte_u32_z_tied1:
+**     ursqrte z0\.s, p0/z, z0\.s
+**     ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_z_tied1, svuint32_t,
+               z0 = svrsqrte_u32_z (p0, z0),
+               z0 = svrsqrte_z (p0, z0))
+
+/*
+** rsqrte_u32_z_untied:
+**     ursqrte z0\.s, p0/z, z1\.s
+**     ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_z_untied, svuint32_t,
+               z0 = svrsqrte_u32_z (p0, z1),
+               z0 = svrsqrte_z (p0, z1))
-- 
2.43.0


Reply via email to