Hi Karl,

> On 2 Sep 2025, at 16:16, Karl Meakin <[email protected]> wrote:
> 
> gcc/ChangeLog:
> 
> * config/aarch64/aarch64-sme.md (@aarch64_sme_write_zt<SVE_FULL:mode>): New 
> insn.
> (aarch64_sme_lut_zt): Likewise.
> * config/aarch64/aarch64-sve-builtins-shapes.cc (parse_type): New type format 
> "%T".
> (struct luti_lane_zt_base): New function shape.
> (SHAPE): Likewise.
> (struct write_zt_def): Likewise.
> (struct write_lane_zt_def): Likewise.
> * config/aarch64/aarch64-sve-builtins-shapes.h: New function shape.
> * config/aarch64/aarch64-sve-builtins-sme.cc (class svluti_zt_impl): New 
> function expander.
> (class svwrite_zt_impl): Likewise.
> (class svwrite_lane_zt_impl): Likewise.
> (FUNCTION): Likewise
> * config/aarch64/aarch64-sve-builtins-sme.def (svwrite_zt): New function 
> shape.
> (svwrite_lane_zt): Likewise.
> (svluti4_zt): Likewise.
> * config/aarch64/aarch64-sve-builtins-sme.h: New function base.
> * config/aarch64/aarch64-sve-builtins.h: Mention the arrays of 
> function_group_info by name.
> 
> gcc/testsuite/ChangeLog:
> 
> * gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c: New test.
> * gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c: New test.
> * gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c: New test.
> * gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c: New test.
> * gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c: New test.
> * gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c: New test.
> ---
> gcc/config/aarch64/aarch64-sme.md             |  36 ++
> .../aarch64/aarch64-sve-builtins-shapes.cc    | 104 ++++-
> .../aarch64/aarch64-sve-builtins-shapes.h     |   3 +
> .../aarch64/aarch64-sve-builtins-sme.cc       |  68 +++
> .../aarch64/aarch64-sve-builtins-sme.def      |   3 +
> gcc/config/aarch64/aarch64-sve-builtins-sme.h |   3 +
> gcc/config/aarch64/aarch64-sve-builtins.h     |   7 +-
> .../aarch64/sme2/acle-asm/svluti4_zt_1.c      |  30 ++
> .../aarch64/sme2/acle-asm/svwrite_lane_zt_1.c | 204 +++++++++
> .../aarch64/sme2/acle-asm/svwrite_zt_1.c      |  96 +++++
> .../aarch64/sve/acle/general-c/svluti4_zt_1.c |  77 ++++
> .../sve/acle/general-c/svwrite_lane_zt_1.c    | 397 ++++++++++++++++++
> .../aarch64/sve/acle/general-c/svwrite_zt_1.c | 342 +++++++++++++++
> 13 files changed, 1366 insertions(+), 4 deletions(-)
> create mode 100644 
> gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c
> create mode 100644 
> gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c
> create mode 100644 
> gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c
> create mode 100644 
> gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c
> create mode 100644 
> gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c
> create mode 100644 
> gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c
> 
> diff --git a/gcc/config/aarch64/aarch64-sme.md 
> b/gcc/config/aarch64/aarch64-sme.md
> index 0123ea0e234..5c803441b58 100644
> --- a/gcc/config/aarch64/aarch64-sme.md
> +++ b/gcc/config/aarch64/aarch64-sme.md
> @@ -1040,6 +1040,25 @@ (define_insn "*aarch64_sme_write<mode>_plus"
>   "mova\tza.d[%w0, %1, vgx<vector_count>], %2"
> )
> 
> +;; MOVT (vector to table)
> +;; Variants are also available for:
> +;; [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +;; [_bf16], [_f16], [_f32], [_f64]
> +;; void svwrite_zt[_u8](uint64_t zt0, svuint8_t zt)
> +;;      __arm_streaming __arm_out ("zt0");
> +;; void svwrite_lane_zt[_u8](uint64_t zt0, svuint8_t zt, uint64_t idx)
> +;;      __arm_streaming __arm_out ("zt0");
> +(define_insn "@aarch64_sme_write_zt<SVE_FULL:mode>"
> +  [(set (reg:V8DI ZT0_REGNUM)
> + (unspec_volatile:V8DI
> +  [(match_operand:DI       0 "const0_operand") ;; always 0, ignored
> +   (match_operand:SVE_FULL 1 "register_operand" "w")
> +   (match_operand:DI       2 "const_int_operand")]
> +  UNSPEC_SME_WRITE))]
> +  "TARGET_SME_LUTv2"
> +  "movt\tzt0 [%2, mul vl], %1"
> +)
> +
> ;; -------------------------------------------------------------------------
> ;; ---- Zeroing
> ;; -------------------------------------------------------------------------
> @@ -2165,6 +2184,7 @@ (define_insn 
> "@aarch64_sme_<optab><VNx4SI_ONLY:mode><SVE_FULL_HF:mode>"
> 
> (define_c_enum "unspec" [
>   UNSPEC_SME_LUTI
> +  UNSPEC_SME_LUTI_ZT
> ])
> 
> (define_insn "@aarch64_sme_lut<LUTI_BITS><mode>"
> @@ -2193,3 +2213,19 @@ (define_insn "@aarch64_sme_lut<LUTI_BITS><mode>"
>    && !(<LUTI_BITS> == 4 && <vector_count> == 4 && <elem_bits> == 8)"
>   "luti<LUTI_BITS>\t%0, zt0, %1[%2]"
> )
> +
> +;; LUTI4 (four registers, 8-bit)
> +;; Variants are also available for: _u8
> +;; svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn)
> +;;      __arm_streaming __arm_in ("zt0");  */
> +(define_insn "aarch64_sme_lut_zt"
> +  [(set (match_operand:VNx64QI 0 "aligned_register_operand" "=Uw4")
> + (unspec:VNx64QI
> +  [(reg:V8DI ZT0_REGNUM)
> +   (reg:DI SME_STATE_REGNUM)
> +   (match_operand:DI 1 "const0_operand")

Why is this operand needed? It’s not printed and it doesn’t encode any 
dependencies of this insn.
Thanks,
Kyrill


> +   (match_operand:VNx32QI 2 "register_operand" "w")]
> +  UNSPEC_SME_LUTI_ZT))]
> +  "TARGET_SME_LUTv2"
> +  "luti4\t%0, zt0, {%Z2 - %T2}"
> +)
> diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc 
> b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
> index af23a154d0e..74a3338e955 100644
> --- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
> +++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
> @@ -182,6 +182,7 @@ parse_element_type (const function_instance &instance, 
> const char *&format)
>    e<name> - an enum with the given name
>    s<elt>  - a scalar type with the given element suffix
>    t<elt>  - a vector or tuple type with given element suffix [*1]
> +   T<elt>  - a vector or tuple type with given element suffix [*2]
>    v<elt>  - a vector with the given element suffix
>    D<elt>  - a 64 bit neon vector
>    Q<elt>  - a 128 bit neon vector
> @@ -189,7 +190,9 @@ parse_element_type (const function_instance &instance, 
> const char *&format)
>    where <elt> has the format described above parse_element_type
> 
>    [*1] the vectors_per_tuple function indicates whether the type should
> -        be a tuple, and if so, how many vectors it should contain.  */
> + be a tuple, and if so, how many vectors it should contain.
> +   [*2] same as for [*1], but the tuple contains half as many vectors.
> +*/
> static tree
> parse_type (const function_instance &instance, const char *&format)
> {
> @@ -261,6 +264,13 @@ parse_type (const function_instance &instance, const 
> char *&format)
>       unsigned int num_vectors = instance.vectors_per_tuple ();
>       return acle_vector_types[num_vectors - 1][vector_type];
>     }
> +  if (ch == 'T')
> +    {
> +      type_suffix_index suffix = parse_element_type (instance, format);
> +      vector_type_index vector_type = type_suffixes[suffix].vector_type;
> +      unsigned int num_vectors = instance.vectors_per_tuple () / 2;
> +      return acle_vector_types[num_vectors - 1][vector_type];
> +    }
> 
>   if (ch == 'v')
>     {
> @@ -973,6 +983,24 @@ struct luti_lane_zt_base : public nonoverloaded_base
>   }
> };
> 
> +/* LUTI4 (four registers, 8-bit)
> +   Variants are also available for: _u8
> +   svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn)
> +      __arm_streaming __arm_in ("zt0");  */
> +template <unsigned int BITS> struct luti_zt_base : public nonoverloaded_base
> +{
> +  void build (function_builder &b,
> +      const function_group_info &group) const override
> +  {
> +    build_all (b, "t0,su64,Tu0", group, MODE_none);
> +  }
> +
> +  bool check (function_checker &c) const override
> +  {
> +    return c.require_immediate_range (0, 0, 0);
> +  }
> +};
> +
> /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:quarter>_t,
>       sv<t0:quarter>_t)  (for integer t0)
>    sv<t0>_t svmmla[_t0](sv<t0>_t, sv<t0>_t, sv<t0>_t)  (for floating-point t0)
> @@ -3207,6 +3235,9 @@ SHAPE (luti2_lane_zt)
> using luti4_lane_zt_def = luti_lane_zt_base<4>;
> SHAPE (luti4_lane_zt)
> 
> +using luti4_zt_def = luti_zt_base<4>;
> +SHAPE (luti4_zt)
> +
> /* svbool_t svfoo(enum svpattern).  */
> struct pattern_pred_def : public nonoverloaded_base
> {
> @@ -5269,4 +5300,75 @@ struct write_za_slice_def : public overloaded_base<1>
> };
> SHAPE (write_za_slice)
> 
> +/* MOVT (vector to table)
> +   Variants are also available for:
> +   [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +   [_bf16], [_f16], [_f32], [_f64]
> +   void svwrite_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx)
> + __arm_streaming __arm_out ("zt0");  */
> +struct write_zt_def : public overloaded_base<0>
> +{
> +  void build (function_builder &b,
> +      const function_group_info &group) const override
> +  {
> +    b.add_overloaded_functions (group, MODE_none);
> +    build_all (b, "_,su64,v0", group, MODE_none);
> +  }
> +
> +  tree resolve (function_resolver &r) const override
> +  {
> +    sve_type type;
> +
> +    if (!r.check_num_arguments (2)
> + || !r.require_scalar_type (0, "uint64_t")
> + || !r.require_integer_immediate (0)
> + || !(type = r.infer_vector_type (1)))
> +      return error_mark_node;
> +
> +    return r.resolve_to (r.mode_suffix_id, type);
> +  }
> +
> +  bool check (function_checker &c) const override
> +  {
> +    return c.require_immediate_range (0, 0, 0);
> +  }
> +};
> +SHAPE (write_zt);
> +
> +/* MOVT (vector to table)
> +   Variants are also available for:
> +   [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +   [_bf16], [_f16], [_f32], [_f64]
> +   void svwrite_lane_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx)
> + __arm_streaming __arm_out ("zt0");  */
> +struct write_lane_zt_def : public overloaded_base<0>
> +{
> +  void build (function_builder &b,
> +      const function_group_info &group) const override
> +  {
> +    b.add_overloaded_functions (group, MODE_none);
> +    build_all (b, "_,su64,v0,su64", group, MODE_none);
> +  }
> +
> +  tree resolve (function_resolver &r) const override
> +  {
> +    sve_type type;
> +
> +    if (!r.check_num_arguments (3)
> + || !r.require_scalar_type (0, "uint64_t")
> + || !r.require_integer_immediate (0)
> + || !(type = r.infer_vector_type (1))
> + || !r.require_scalar_type (2, "uint64_t"))
> +      return error_mark_node;
> +
> +    return r.resolve_to (r.mode_suffix_id, type);
> +  }
> +
> +  bool check (function_checker &c) const override
> +  {
> +    return c.require_immediate_range (0, 0, 0)
> +   && c.require_immediate_range (2, 0, 3);
> +  }
> +};
> +SHAPE (write_lane_zt);
> }
> diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.h 
> b/gcc/config/aarch64/aarch64-sve-builtins-shapes.h
> index 349eae6e34a..421cb1e8b85 100644
> --- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.h
> +++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.h
> @@ -168,6 +168,7 @@ namespace aarch64_sve
>     extern const function_shape *const luti4;
>     extern const function_shape *const luti2_lane_zt;
>     extern const function_shape *const luti4_lane_zt;
> +    extern const function_shape *const luti4_zt;
>     extern const function_shape *const mmla;
>     extern const function_shape *const pattern_pred;
>     extern const function_shape *const pmov_from_vector;
> @@ -260,6 +261,8 @@ namespace aarch64_sve
>     extern const function_shape *const write_za;
>     extern const function_shape *const write_za_m;
>     extern const function_shape *const write_za_slice;
> +    extern const function_shape *const write_zt;
> +    extern const function_shape *const write_lane_zt;
>   }
> }
> 
> diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.cc 
> b/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
> index e0f0f660952..d5ca79163df 100644
> --- a/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
> +++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
> @@ -352,6 +352,28 @@ public:
>   unsigned int m_bits;
> };
> 
> +/* LUTI4 (four registers, 8-bit)
> +   Variants are also available for: _u8
> +   svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn)
> +      __arm_streaming __arm_in ("zt0");  */
> +class svluti_zt_impl : public read_zt0<function_base>
> +{
> +public:
> +  CONSTEXPR svluti_zt_impl (unsigned int bits) : m_bits (bits) {}
> +
> +  unsigned int call_properties (const function_instance &) const override
> +  {
> +    return CP_READ_ZT0;
> +  }
> +
> +  rtx expand (function_expander &e) const override
> +  {
> +    return e.use_exact_insn (CODE_FOR_aarch64_sme_lut_zt);
> +  }
> +
> +  unsigned int m_bits;
> +};
> +
> template<insn_code (*CODE) (machine_mode)>
> class svread_za_slice_base : public function_base
> {
> @@ -467,6 +489,49 @@ public:
>   }
> };
> 
> +/* MOVT (vector to table)
> +   Variants are also available for:
> +   [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +   [_bf16], [_f16], [_f32], [_f64]
> +   void svwrite_zt[_u8] (uint64_t zt0, svuint8_t zt)
> + __arm_streaming __arm_out ("zt0");  */
> +class svwrite_zt_impl : public function_base
> +{
> +public:
> +  unsigned int call_properties (const function_instance &) const override
> +  {
> +    return CP_WRITE_ZT0;
> +  }
> +
> +  rtx expand (function_expander &e) const override
> +  {
> +    e.args.safe_push (const0_rtx);
> +    auto mode = e.args[1]->mode;
> +    return e.use_exact_insn (code_for_aarch64_sme_write_zt (mode));
> +  }
> +};
> +
> +/* MOVT (vector to table)
> +   Variants are also available for:
> +   [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +   [_bf16], [_f16], [_f32], [_f64]
> +   void svwrite_lane_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx)
> + __arm_streaming __arm_out ("zt0");  */
> +class svwrite_lane_zt_impl : public function_base
> +{
> +public:
> +  unsigned int call_properties (const function_instance &) const override
> +  {
> +    return CP_WRITE_ZT0;
> +  }
> +
> +  rtx expand (function_expander &e) const override
> +  {
> +    auto mode = e.args[1]->mode;
> +    return e.use_exact_insn (code_for_aarch64_sme_write_zt (mode));
> +  }
> +};
> +
> using svwrite_za_tile_impl = add_call_properties<read_write_za_base,
> CP_READ_ZA | CP_WRITE_ZA>;
> 
> @@ -569,6 +634,7 @@ FUNCTION (svldr_za, svldr_za_impl, )
> FUNCTION (svldr_zt, svldr_zt_impl, )
> FUNCTION (svluti2_lane_zt, svluti_lane_zt_impl, (2))
> FUNCTION (svluti4_lane_zt, svluti_lane_zt_impl, (4))
> +FUNCTION (svluti4_zt, svluti_zt_impl, (4))
> FUNCTION (svmla_za, sme_2mode_function, (UNSPEC_SME_SMLA, UNSPEC_SME_UMLA,
> UNSPEC_SME_FMLA))
> FUNCTION (svmla_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SMLA,
> @@ -616,6 +682,8 @@ FUNCTION (svvdot_lane_za, sme_2mode_lane_function, 
> (UNSPEC_SME_SVDOT,
> FUNCTION (svwrite_za, svwrite_za_impl,)
> FUNCTION (svwrite_hor_za, svwrite_za_tile_impl, (UNSPEC_SME_WRITE_HOR))
> FUNCTION (svwrite_ver_za, svwrite_za_tile_impl, (UNSPEC_SME_WRITE_VER))
> +FUNCTION (svwrite_zt,      svwrite_zt_impl,)
> +FUNCTION (svwrite_lane_zt, svwrite_lane_zt_impl,)
> FUNCTION (svzero_mask_za, svzero_mask_za_impl, )
> FUNCTION (svzero_za, svzero_za_impl, )
> FUNCTION (svzero_zt, svzero_zt_impl, )
> diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.def 
> b/gcc/config/aarch64/aarch64-sve-builtins-sme.def
> index 117b70ede74..55a778c56c2 100644
> --- a/gcc/config/aarch64/aarch64-sve-builtins-sme.def
> +++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.def
> @@ -68,6 +68,8 @@ DEF_SME_ZA_FUNCTION (svusmopa, binary_za_int_m, 
> mop_base_unsigned, za_m)
> DEF_SME_ZA_FUNCTION (svusmops, binary_za_int_m, mop_base_unsigned, za_m)
> DEF_SME_ZA_FUNCTION (svwrite_hor, write_za_m, za_all_data, za_m)
> DEF_SME_ZA_FUNCTION (svwrite_ver, write_za_m, za_all_data, za_m)
> +DEF_SME_FUNCTION_GS (svwrite_zt,      write_zt,      all_data, none, none)
> +DEF_SME_FUNCTION_GS (svwrite_lane_zt, write_lane_zt, all_data, none, none)
> #undef REQUIRED_EXTENSIONS
> 
> #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_I16I64)
> @@ -120,6 +122,7 @@ DEF_SME_ZA_FUNCTION_GS (svdot_lane, dot_za_slice_lane, 
> za_s_b_integer,
> DEF_SME_FUNCTION_GS (svluti2_lane_zt, luti2_lane_zt, bhs_data, x124, none)
> DEF_SME_FUNCTION_GS (svluti4_lane_zt, luti4_lane_zt, bhs_data, x12, none)
> DEF_SME_FUNCTION_GS (svluti4_lane_zt, luti4_lane_zt, hs_data, x4, none)
> +DEF_SME_FUNCTION_GS (svluti4_zt, luti4_zt, b_integer, x4, none)
> DEF_SME_ZA_FUNCTION_GS (svmla, binary_za_slice_opt_single, za_s_float,
> vg1x24, none)
> DEF_SME_ZA_FUNCTION_GS (svmla, binary_za_slice_opt_single, za_s_h_data,
> diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.h 
> b/gcc/config/aarch64/aarch64-sve-builtins-sme.h
> index 9ed8101d2f9..4968f65442b 100644
> --- a/gcc/config/aarch64/aarch64-sve-builtins-sme.h
> +++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.h
> @@ -44,6 +44,7 @@ namespace aarch64_sve
>     extern const function_base *const svldr_zt;
>     extern const function_base *const svluti2_lane_zt;
>     extern const function_base *const svluti4_lane_zt;
> +    extern const function_base *const svluti4_zt;
>     extern const function_base *const svmla_za;
>     extern const function_base *const svmla_lane_za;
>     extern const function_base *const svmls_za;
> @@ -75,6 +76,8 @@ namespace aarch64_sve
>     extern const function_base *const svwrite_za;
>     extern const function_base *const svwrite_hor_za;
>     extern const function_base *const svwrite_ver_za;
> +    extern const function_base *const svwrite_zt;
> +    extern const function_base *const svwrite_lane_zt;
>     extern const function_base *const svundef_za;
>     extern const function_base *const svvdot_lane_za;
>     extern const function_base *const svzero_mask_za;
> diff --git a/gcc/config/aarch64/aarch64-sve-builtins.h 
> b/gcc/config/aarch64/aarch64-sve-builtins.h
> index c145b8065ae..d6a58b450d6 100644
> --- a/gcc/config/aarch64/aarch64-sve-builtins.h
> +++ b/gcc/config/aarch64/aarch64-sve-builtins.h
> @@ -57,9 +57,10 @@
>    function_shape describes how that instruction has been presented at
>    the language level.
> 
> -   The static list of functions uses function_group to describe a group
> -   of related functions.  The function_builder class is responsible for
> -   expanding this static description into a list of individual functions
> +   The static arrays of function_group_info (function_groups,
> +   neon_sve_function_groups, sme_function_groups) use function_group to 
> describe
> +   a group of related functions.  The function_builder class is responsible 
> for
> +   expanding these static description into a list of individual functions
>    and registering the associated built-in functions.  function_instance
>    describes one of these individual functions in terms of the properties
>    described above.
> diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c 
> b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c
> new file mode 100644
> index 00000000000..d05c2e01a8e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c
> @@ -0,0 +1,30 @@
> +/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } }  */
> +
> +/* LUTI4 (four registers, 8-bit)
> +   Variants are also available for: _u8
> +   svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn)
> +      __arm_streaming __arm_in ("zt0");  */
> +
> +#pragma GCC target "+sve2,+sme-lutv2"
> +#define SHARED_ZT0
> +#include "test_sme2_acle.h"
> +
> +/*
> +** luti4_zt_u8_x4:
> +** luti4 {z0.b - z3.b}, zt0, {z0 - z1}
> +** ret
> +*/
> +PROTO (luti4_zt_u8_x4, svuint8x4_t, (svuint8x2_t z0))
> +{
> +  return svluti4_zt_u8_x4 (0, z0);
> +}
> +
> +/*
> +** luti4_zt_s8_x4:
> +** luti4 {z0.b - z3.b}, zt0, {z0 - z1}
> +** ret
> +*/
> +PROTO (luti4_zt_s8_x4, svint8x4_t, (svuint8x2_t z0))
> +{
> +  return svluti4_zt_s8_x4 (0, z0);
> +}
> diff --git 
> a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c 
> b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c
> new file mode 100644
> index 00000000000..256e32b0f6a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c
> @@ -0,0 +1,204 @@
> +/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } }  */
> +
> +/* MOVT (vector to table)
> +   Variants are also available for:
> +   [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +   [_bf16], [_f16], [_f32], [_f64]
> +   void svwrite_lane_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx)
> + __arm_streaming __arm_out ("zt0");  */
> +
> +#pragma GCC target "+sve2,+sme-lutv2"
> +#define SHARED_ZT0
> +#include "test_sme2_acle.h"
> +
> +/*
> +** write_lane_zt_u8:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_u8, void, (svuint8_t z0))
> +{
> +  svwrite_lane_zt_u8 (0, z0, 0);
> +  svwrite_lane_zt_u8 (0, z0, 1);
> +  svwrite_lane_zt_u8 (0, z0, 2);
> +  svwrite_lane_zt_u8 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_s8:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_s8, void, (svint8_t z0))
> +{
> +  svwrite_lane_zt_s8 (0, z0, 0);
> +  svwrite_lane_zt_s8 (0, z0, 1);
> +  svwrite_lane_zt_s8 (0, z0, 2);
> +  svwrite_lane_zt_s8 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_u16:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_u16, void, (svuint16_t z0))
> +{
> +  svwrite_lane_zt_u16 (0, z0, 0);
> +  svwrite_lane_zt_u16 (0, z0, 1);
> +  svwrite_lane_zt_u16 (0, z0, 2);
> +  svwrite_lane_zt_u16 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_s16:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_s16, void, (svint16_t z0))
> +{
> +  svwrite_lane_zt_s16 (0, z0, 0);
> +  svwrite_lane_zt_s16 (0, z0, 1);
> +  svwrite_lane_zt_s16 (0, z0, 2);
> +  svwrite_lane_zt_s16 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_u32:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_u32, void, (svuint32_t z0))
> +{
> +  svwrite_lane_zt_u32 (0, z0, 0);
> +  svwrite_lane_zt_u32 (0, z0, 1);
> +  svwrite_lane_zt_u32 (0, z0, 2);
> +  svwrite_lane_zt_u32 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_s32:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_s32, void, (svint32_t z0))
> +{
> +  svwrite_lane_zt_s32 (0, z0, 0);
> +  svwrite_lane_zt_s32 (0, z0, 1);
> +  svwrite_lane_zt_s32 (0, z0, 2);
> +  svwrite_lane_zt_s32 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_u64:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_u64, void, (svuint64_t z0))
> +{
> +  svwrite_lane_zt_u64 (0, z0, 0);
> +  svwrite_lane_zt_u64 (0, z0, 1);
> +  svwrite_lane_zt_u64 (0, z0, 2);
> +  svwrite_lane_zt_u64 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_s64:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_s64, void, (svint64_t z0))
> +{
> +  svwrite_lane_zt_s64 (0, z0, 0);
> +  svwrite_lane_zt_s64 (0, z0, 1);
> +  svwrite_lane_zt_s64 (0, z0, 2);
> +  svwrite_lane_zt_s64 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_bf16:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_bf16, void, (svbfloat16_t z0))
> +{
> +  svwrite_lane_zt_bf16 (0, z0, 0);
> +  svwrite_lane_zt_bf16 (0, z0, 1);
> +  svwrite_lane_zt_bf16 (0, z0, 2);
> +  svwrite_lane_zt_bf16 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_f16:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_f16, void, (svfloat16_t z0))
> +{
> +  svwrite_lane_zt_f16 (0, z0, 0);
> +  svwrite_lane_zt_f16 (0, z0, 1);
> +  svwrite_lane_zt_f16 (0, z0, 2);
> +  svwrite_lane_zt_f16 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_f32:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_f32, void, (svfloat32_t z0))
> +{
> +  svwrite_lane_zt_f32 (0, z0, 0);
> +  svwrite_lane_zt_f32 (0, z0, 1);
> +  svwrite_lane_zt_f32 (0, z0, 2);
> +  svwrite_lane_zt_f32 (0, z0, 3);
> +}
> +
> +/*
> +** write_lane_zt_f64:
> +** movt zt0 \[0, mul vl\], z0
> +** movt zt0 \[1, mul vl\], z0
> +** movt zt0 \[2, mul vl\], z0
> +** movt zt0 \[3, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_lane_zt_f64, void, (svfloat64_t z0))
> +{
> +  svwrite_lane_zt_f64 (0, z0, 0);
> +  svwrite_lane_zt_f64 (0, z0, 1);
> +  svwrite_lane_zt_f64 (0, z0, 2);
> +  svwrite_lane_zt_f64 (0, z0, 3);
> +}
> diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c 
> b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c
> new file mode 100644
> index 00000000000..dfe3267e0cb
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c
> @@ -0,0 +1,96 @@
> +/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } }  */
> +
> +/* MOVT (vector to table)
> +   Variants are also available for:
> +   [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +   [_bf16], [_f16], [_f32], [_f64]
> +   void svwrite_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx)
> + __arm_streaming __arm_out ("zt0");  */
> +
> +#pragma GCC target "+sve2,+sme-lutv2"
> +#define SHARED_ZT0
> +#include "test_sme2_acle.h"
> +
> +/*
> +** write_zt_u8:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_u8, void, (svuint8_t z0)) { svwrite_zt_u8 (0, z0); }
> +
> +/*
> +** write_zt_s8:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_s8, void, (svint8_t z0)) { svwrite_zt_s8 (0, z0); }
> +
> +/*
> +** write_zt_u16:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_u16, void, (svuint16_t z0)) { svwrite_zt_u16 (0, z0); }
> +
> +/*
> +** write_zt_s16:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_s16, void, (svint16_t z0)) { svwrite_zt_s16 (0, z0); }
> +
> +/*
> +** write_zt_u32:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_u32, void, (svuint32_t z0)) { svwrite_zt_u32 (0, z0); }
> +
> +/*
> +** write_zt_s32:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_s32, void, (svint32_t z0)) { svwrite_zt_s32 (0, z0); }
> +
> +/*
> +** write_zt_u64:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_u64, void, (svuint64_t z0)) { svwrite_zt_u64 (0, z0); }
> +
> +/*
> +** write_zt_s64:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_s64, void, (svint64_t z0)) { svwrite_zt_s64 (0, z0); }
> +
> +/*
> +** write_zt_bf16:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_bf16, void, (svbfloat16_t z0)) { svwrite_zt_bf16 (0, z0); }
> +
> +/*
> +** write_zt_f16:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_f16, void, (svfloat16_t z0)) { svwrite_zt_f16 (0, z0); }
> +
> +/*
> +** write_zt_f32:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_f32, void, (svfloat32_t z0)) { svwrite_zt_f32 (0, z0); }
> +
> +/*
> +** write_zt_f64:
> +** movt zt0 \[0, mul vl\], z0
> +** ret
> +*/
> +PROTO (write_zt_f64, void, (svfloat64_t z0)) { svwrite_zt_f64 (0, z0); }
> diff --git 
> a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c 
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c
> new file mode 100644
> index 00000000000..d30cb71d78b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c
> @@ -0,0 +1,77 @@
> +/* { dg-options "-std=c23" }  */
> +/* { dg-do compile }  */
> +
> +#pragma GCC target "+sve2,+sme-lutv2"
> +static_assert (__ARM_FEATURE_SME_LUTv2 == 1);
> +#include <arm_sme.h>
> +
> +/* LUTI4 (four registers, 8-bit)
> +   Variants are also available for: _u8
> +   svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn)
> +      __arm_streaming __arm_in ("zt0");  */
> +
> +void
> +test_svluti4_zt_ok (svuint8x2_t zn_u8) __arm_streaming __arm_in ("zt0")
> +{
> +  svluti4_zt_s8_x4 (0, zn_u8);
> +  svluti4_zt_u8_x4 (0, zn_u8);
> +}
> +
> +void
> +test_svluti4_zt_not_streaming (svuint8x2_t zn_u8)
> +{
> +  svluti4_zt_s8_x4 ( 0, zn_u8); /* { dg-error {ACLE function 
> 'svluti4_zt_s8_x4' can only be called when SME streaming mode is enabled} }  
> */
> +  svluti4_zt_u8_x4 ( 0, zn_u8); /* { dg-error {ACLE function 
> 'svluti4_zt_u8_x4' can only be called when SME streaming mode is enabled} }  
> */
> +}
> +
> +void
> +test_svluti4_zt_streaming_compatible (svuint8x2_t zn_u8) 
> __arm_streaming_compatible
> +{
> +  svluti4_zt_s8_x4 ( 0, zn_u8); /* { dg-error {ACLE function 
> 'svluti4_zt_s8_x4' can only be called when SME streaming mode is enabled} }  
> */
> +  svluti4_zt_u8_x4 ( 0, zn_u8); /* { dg-error {ACLE function 
> 'svluti4_zt_u8_x4' can only be called when SME streaming mode is enabled} }  
> */
> +}
> +
> +void
> +test_svluti4_zt_arg_count_mismatch (svuint8x2_t zn_u8) __arm_streaming 
> __arm_in ("zt0")
> +{
> +  svluti4_zt_s8_x4 (); /* { dg-error {too few arguments to function 
> 'svluti4_zt_s8_x4'; expected 2, have 0} }  */
> +  svluti4_zt_u8_x4 (); /* { dg-error {too few arguments to function 
> 'svluti4_zt_u8_x4'; expected 2, have 0} }  */
> +
> +  svluti4_zt_s8_x4 (0); /* { dg-error {too few arguments to function 
> 'svluti4_zt_s8_x4'; expected 2, have 1} }  */
> +  svluti4_zt_u8_x4 (0); /* { dg-error {too few arguments to function 
> 'svluti4_zt_u8_x4'; expected 2, have 1} }  */
> +
> +  svluti4_zt_s8_x4 (0, zn_u8, 0); /* { dg-error {too many arguments to 
> function 'svluti4_zt_s8_x4'; expected 2, have 3} }  */
> +  svluti4_zt_u8_x4 (0, zn_u8, 0); /* { dg-error {too many arguments to 
> function 'svluti4_zt_u8_x4'; expected 2, have 3} }  */
> +}
> +
> +void
> +test_svluti4_zt_arg_type_mismatch (svuint8x2_t zn_u8) __arm_streaming 
> __arm_in ("zt0")
> +{
> +  struct Foo { uint64_t val } foo = {0};
> +  svluti4_zt_s8_x4 (foo, zn_u8); /* { dg-error {incompatible type for 
> argument 1 of 'svluti4_zt_s8_x4'} }  */
> +  svluti4_zt_u8_x4 (foo, zn_u8); /* { dg-error {incompatible type for 
> argument 1 of 'svluti4_zt_u8_x4'} }  */
> +}
> +
> +void
> +test_svluti4_zt_ret_type_mismatch (svuint8x2_t zn_u8) __arm_streaming 
> __arm_in ("zt0")
> +{
> +  int x0 = svluti4_zt_s8_x4 ( 0, zn_u8); /* { dg-error {incompatible types 
> when initializing type 'int' using type 'svint8x4_t'} }   */
> +  int x1 = svluti4_zt_u8_x4 ( 0, zn_u8); /* { dg-error {incompatible types 
> when initializing type 'int' using type 'svuint8x4_t'} }  */
> +}
> +
> +void
> +test_svluti4_zt_zt0_not_immediate (uint64_t zt0, svuint8x2_t zn_u8) 
> __arm_streaming __arm_in ("zt0")
> +{
> +  svluti4_zt_s8_x4 (zt0, zn_u8); /* { dg-error {argument 1 of 
> 'svluti4_zt_s8_x4' must be an integer constant expression} }  */
> +  svluti4_zt_u8_x4 (zt0, zn_u8); /* { dg-error {argument 1 of 
> 'svluti4_zt_u8_x4' must be an integer constant expression} }  */
> +}
> +
> +void
> +test_svluti4_zt_zt0_not_in_range (uint64_t zt0, svuint8x2_t 
> zn_u8)__arm_streaming __arm_in ("zt0")
> +{
> +  svluti4_zt_s8_x4 (1, zn_u8); /* { dg-error {passing 1 to argument 1 of 
> 'svluti4_zt_s8_x4', which expects the value 0} }  */
> +  svluti4_zt_u8_x4 (1, zn_u8); /* { dg-error {passing 1 to argument 1 of 
> 'svluti4_zt_u8_x4', which expects the value 0} }  */
> +
> +  svluti4_zt_s8_x4 (-1, zn_u8); /* { dg-error {passing -1 to argument 1 of 
> 'svluti4_zt_s8_x4', which expects the value 0} }  */
> +  svluti4_zt_u8_x4 (-1, zn_u8); /* { dg-error {passing -1 to argument 1 of 
> 'svluti4_zt_u8_x4', which expects the value 0} }  */
> +}
> diff --git 
> a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c 
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c
> new file mode 100644
> index 00000000000..22e82cff340
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c
> @@ -0,0 +1,397 @@
> +/* { dg-options "-std=c23" }  */
> +/* { dg-do compile }  */
> +
> +/* MOVT (vector to table)
> +   Variants are also available for:
> +   [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +   [_bf16], [_f16], [_f32], [_f64]
> +   void svwrite_lane_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx)
> + __arm_streaming __arm_out ("zt0");  */
> +
> +#pragma GCC target "+sve2,+sme-lutv2"
> +static_assert (__ARM_FEATURE_SME_LUTv2 == 1);
> +#include <arm_sme.h>
> +
> +void
> +test_svwrite_lane_zt_explicit_ok (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64) __arm_streaming __arm_inout ("zt0")
> +{
> +  svwrite_lane_zt_u8 (0, zt_u8, 0);
> +  svwrite_lane_zt_s8 (0, zt_s8, 0);
> +  svwrite_lane_zt_u16 (0, zt_u16, 0);
> +  svwrite_lane_zt_s16 (0, zt_s16, 0);
> +  svwrite_lane_zt_u32 (0, zt_u32, 0);
> +  svwrite_lane_zt_s32 (0, zt_s32, 0);
> +  svwrite_lane_zt_u64 (0, zt_u64, 0);
> +  svwrite_lane_zt_s64 (0, zt_s64, 0);
> +  svwrite_lane_zt_bf16 (0, zt_bf16, 0);
> +  svwrite_lane_zt_f16 (0, zt_f16, 0);
> +  svwrite_lane_zt_f32 (0, zt_f32, 0);
> +  svwrite_lane_zt_f64 (0, zt_f64, 0);
> +}
> +
> +void
> +test_svwrite_lane_zt_inferred_ok (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64) __arm_streaming __arm_inout ("zt0")
> +{
> +  svwrite_lane_zt (0, zt_u8, 0);
> +  svwrite_lane_zt (0, zt_s8, 0);
> +  svwrite_lane_zt (0, zt_u16, 0);
> +  svwrite_lane_zt (0, zt_s16, 0);
> +  svwrite_lane_zt (0, zt_u32, 0);
> +  svwrite_lane_zt (0, zt_s32, 0);
> +  svwrite_lane_zt (0, zt_u64, 0);
> +  svwrite_lane_zt (0, zt_s64, 0);
> +  svwrite_lane_zt (0, zt_bf16, 0);
> +  svwrite_lane_zt (0, zt_f16, 0);
> +  svwrite_lane_zt (0, zt_f32, 0);
> +  svwrite_lane_zt (0, zt_f64, 0);
> +}
> +
> +void
> +test_svwrite_lane_zt_explicit_error_not_streaming (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64)
> +{
> +  svwrite_lane_zt_u8 (0, zt_u8, 0);     /* { dg-error {ACLE function 
> 'svwrite_lane_zt_u8' can only be called when SME streaming mode is enabled} } 
>    */
> +  svwrite_lane_zt_s8 (0, zt_s8, 0);     /* { dg-error {ACLE function 
> 'svwrite_lane_zt_s8' can only be called when SME streaming mode is enabled} } 
>    */
> +  svwrite_lane_zt_u16 (0, zt_u16, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_u16' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt_s16 (0, zt_s16, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_s16' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt_u32 (0, zt_u32, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_u32' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt_s32 (0, zt_s32, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_s32' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt_u64 (0, zt_u64, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_u64' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt_s64 (0, zt_s64, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_s64' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt_bf16 (0, zt_bf16, 0); /* { dg-error {ACLE function 
> 'svwrite_lane_zt_bf16' can only be called when SME streaming mode is enabled} 
> }  */
> +  svwrite_lane_zt_f16 (0, zt_f16, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_f16' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt_f32 (0, zt_f32, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_f32' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt_f64 (0, zt_f64, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_f64' can only be called when SME streaming mode is enabled} 
> }   */
> +}
> +
> +void
> +test_svwrite_lane_zt_inferred_error_not_streaming (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64)
> +{
> +  svwrite_lane_zt (0, zt_u8, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_u8' can only be called when SME streaming mode is enabled} } 
>    */
> +  svwrite_lane_zt (0, zt_s8, 0);   /* { dg-error {ACLE function 
> 'svwrite_lane_zt_s8' can only be called when SME streaming mode is enabled} } 
>    */
> +  svwrite_lane_zt (0, zt_u16, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_u16' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt (0, zt_s16, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_s16' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt (0, zt_u32, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_u32' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt (0, zt_s32, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_s32' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt (0, zt_u64, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_u64' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt (0, zt_s64, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_s64' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt (0, zt_bf16, 0); /* { dg-error {ACLE function 
> 'svwrite_lane_zt_bf16' can only be called when SME streaming mode is enabled} 
> }  */
> +  svwrite_lane_zt (0, zt_f16, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_f16' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt (0, zt_f32, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_f32' can only be called when SME streaming mode is enabled} 
> }   */
> +  svwrite_lane_zt (0, zt_f64, 0);  /* { dg-error {ACLE function 
> 'svwrite_lane_zt_f64' can only be called when SME streaming mode is enabled} 
> }   */
> +}
> +
> +void
> +test_svwrite_lane_zt_explicit_error_arg_count_mismatch (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_lane_zt_u8 ();   /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_u8'; expected 3, have 0} }    */
> +  svwrite_lane_zt_s8 ();   /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_s8'; expected 3, have 0} }    */
> +  svwrite_lane_zt_u16 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_u16'; expected 3, have 0} }   */
> +  svwrite_lane_zt_s16 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_s16'; expected 3, have 0} }   */
> +  svwrite_lane_zt_u32 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_u32'; expected 3, have 0} }   */
> +  svwrite_lane_zt_s32 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_s32'; expected 3, have 0} }   */
> +  svwrite_lane_zt_u64 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_u64'; expected 3, have 0} }   */
> +  svwrite_lane_zt_s64 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_s64'; expected 3, have 0} }   */
> +  svwrite_lane_zt_bf16 (); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_bf16'; expected 3, have 0} }  */
> +  svwrite_lane_zt_f16 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_f16'; expected 3, have 0} }   */
> +  svwrite_lane_zt_f32 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_f32'; expected 3, have 0} }   */
> +  svwrite_lane_zt_f64 ();  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_f64'; expected 3, have 0} }   */
> +
> +  svwrite_lane_zt_u8 (0);   /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_u8'; expected 3, have 1} }    */
> +  svwrite_lane_zt_s8 (0);   /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_s8'; expected 3, have 1} }    */
> +  svwrite_lane_zt_u16 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_u16'; expected 3, have 1} }   */
> +  svwrite_lane_zt_s16 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_s16'; expected 3, have 1} }   */
> +  svwrite_lane_zt_u32 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_u32'; expected 3, have 1} }   */
> +  svwrite_lane_zt_s32 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_s32'; expected 3, have 1} }   */
> +  svwrite_lane_zt_u64 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_u64'; expected 3, have 1} }   */
> +  svwrite_lane_zt_s64 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_s64'; expected 3, have 1} }   */
> +  svwrite_lane_zt_bf16 (0); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_bf16'; expected 3, have 1} }  */
> +  svwrite_lane_zt_f16 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_f16'; expected 3, have 1} }   */
> +  svwrite_lane_zt_f32 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_f32'; expected 3, have 1} }   */
> +  svwrite_lane_zt_f64 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt_f64'; expected 3, have 1} }   */
> +
> +  svwrite_lane_zt_u8 (0, zt_u8);     /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_u8'; expected 3, have 2} }    */
> +  svwrite_lane_zt_s8 (0, zt_s8);     /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_s8'; expected 3, have 2} }    */
> +  svwrite_lane_zt_u16 (0, zt_u16);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_u16'; expected 3, have 2} }   */
> +  svwrite_lane_zt_s16 (0, zt_s16);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_s16'; expected 3, have 2} }   */
> +  svwrite_lane_zt_u32 (0, zt_u32);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_u32'; expected 3, have 2} }   */
> +  svwrite_lane_zt_s32 (0, zt_s32);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_s32'; expected 3, have 2} }   */
> +  svwrite_lane_zt_u64 (0, zt_u64);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_u64'; expected 3, have 2} }   */
> +  svwrite_lane_zt_s64 (0, zt_s64);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_s64'; expected 3, have 2} }   */
> +  svwrite_lane_zt_bf16 (0, zt_bf16); /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_bf16'; expected 3, have 2} }  */
> +  svwrite_lane_zt_f16 (0, zt_f16);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_f16'; expected 3, have 2} }   */
> +  svwrite_lane_zt_f32 (0, zt_f32);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_f32'; expected 3, have 2} }   */
> +  svwrite_lane_zt_f64 (0, zt_f64);   /* { dg-error {too few arguments to 
> function 'svwrite_lane_zt_f64'; expected 3, have 2} }   */
> +
> +  svwrite_lane_zt_u8 (0, zt_u8, 0, 0);     /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_u8'; expected 3, have 4} }    */
> +  svwrite_lane_zt_s8 (0, zt_s8, 0, 0);     /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_s8'; expected 3, have 4} }    */
> +  svwrite_lane_zt_u16 (0, zt_u16, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_u16'; expected 3, have 4} }   */
> +  svwrite_lane_zt_s16 (0, zt_s16, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_s16'; expected 3, have 4} }   */
> +  svwrite_lane_zt_u32 (0, zt_u32, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_u32'; expected 3, have 4} }   */
> +  svwrite_lane_zt_s32 (0, zt_s32, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_s32'; expected 3, have 4} }   */
> +  svwrite_lane_zt_u64 (0, zt_u64, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_u64'; expected 3, have 4} }   */
> +  svwrite_lane_zt_s64 (0, zt_s64, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_s64'; expected 3, have 4} }   */
> +  svwrite_lane_zt_bf16 (0, zt_bf16, 0, 0); /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_bf16'; expected 3, have 4} }  */
> +  svwrite_lane_zt_f16 (0, zt_f16, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_f16'; expected 3, have 4} }   */
> +  svwrite_lane_zt_f32 (0, zt_f32, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_f32'; expected 3, have 4} }   */
> +  svwrite_lane_zt_f64 (0, zt_f64, 0, 0);   /* { dg-error {too many arguments 
> to function 'svwrite_lane_zt_f64'; expected 3, have 4} }   */
> +}
> +
> +void
> +test_svwrite_lane_zt_implicit_error_arg_count_mismatch (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_lane_zt ();           /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0);          /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_u8);   /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_s8);   /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_u16); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_s16); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_u32); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_s32); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_u64); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_s64); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_bf16); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_f16); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_f32); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_f64); /* { dg-error {too few arguments to function 
> 'svwrite_lane_zt'} }  */
> +
> +  svwrite_lane_zt (0, zt_u8, 0, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_s8, 0, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_u16, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_s16, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_u32, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_s32, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_u64, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_s64, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_bf16, 0, 0); /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_f16, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_f32, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +  svwrite_lane_zt (0, zt_f64, 0, 0);  /* { dg-error {too many arguments to 
> function 'svwrite_lane_zt'} }  */
> +}
> +
> +void
> +test_svwrite_lane_zt_explicit_error_arg_type_mismatch (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64, svuint8x2_t zt_u8x2, svint8x2_t zt_s8x2,
> +  svuint16x2_t zt_u16x2, svint16x2_t zt_s16x2, svuint32x2_t zt_u32x2,
> +  svint32x2_t zt_s32x2, svuint64x2_t zt_u64x2, svint64x2_t zt_s64x2,
> +  svbfloat16x2_t zt_bf16x2, svfloat16x2_t zt_f16x2, svfloat32x2_t zt_f32x2,
> +  svfloat64x2_t zt_f64x2) __arm_streaming __arm_out ("zt0")
> +{
> +  struct Foo { uint64_t val } foo = {0};
> +  svwrite_lane_zt_u8 (foo, zt_u8, 0);     /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_u8'} }    */
> +  svwrite_lane_zt_s8 (foo, zt_s8, 0);     /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_s8'} }    */
> +  svwrite_lane_zt_u16 (foo, zt_u16, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_u16'} }   */
> +  svwrite_lane_zt_s16 (foo, zt_s16, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_s16'} }   */
> +  svwrite_lane_zt_u32 (foo, zt_u32, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_u32'} }   */
> +  svwrite_lane_zt_s32 (foo, zt_s32, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_s32'} }   */
> +  svwrite_lane_zt_u64 (foo, zt_u64, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_u64'} }   */
> +  svwrite_lane_zt_s64 (foo, zt_s64, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_s64'} }   */
> +  svwrite_lane_zt_bf16 (foo, zt_bf16, 0); /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_bf16'} }  */
> +  svwrite_lane_zt_f16 (foo, zt_f16, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_f16'} }   */
> +  svwrite_lane_zt_f32 (foo, zt_f32, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_f32'} }   */
> +  svwrite_lane_zt_f64 (foo, zt_f64, 0);   /* { dg-error {incompatible type 
> for argument 1 of 'svwrite_lane_zt_f64'} }   */
> +
> +  svwrite_lane_zt_u8 (0, zt_s8, 0);    /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_u8'} }    */
> +  svwrite_lane_zt_s8 (0, zt_u8, 0);    /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_s8'} }    */
> +  svwrite_lane_zt_u16 (0, zt_s16, 0);  /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_u16'} }   */
> +  svwrite_lane_zt_s16 (0, zt_u16, 0);  /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_s16'} }   */
> +  svwrite_lane_zt_u32 (0, zt_s32, 0);  /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_u32'} }   */
> +  svwrite_lane_zt_s32 (0, zt_u32, 0);  /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_s32'} }   */
> +  svwrite_lane_zt_u64 (0, zt_s64, 0);  /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_u64'} }   */
> +  svwrite_lane_zt_s64 (0, zt_u64, 0);  /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_s64'} }   */
> +  svwrite_lane_zt_bf16 (0, zt_f16, 0); /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_bf16'} }  */
> +  svwrite_lane_zt_f16 (0, zt_bf16, 0); /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_f16'} }   */
> +  svwrite_lane_zt_f32 (0, zt_f64, 0);  /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_f32'} }   */
> +  svwrite_lane_zt_f64 (0, zt_f32, 0);  /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_lane_zt_f64'} }   */
> +
> +  svwrite_lane_zt_u8 (0, zt_u8x2, 0);     /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_u8'} }    */
> +  svwrite_lane_zt_s8 (0, zt_s8x2, 0);     /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_s8'} }    */
> +  svwrite_lane_zt_u16 (0, zt_u16x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_u16'} }   */
> +  svwrite_lane_zt_s16 (0, zt_s16x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_s16'} }   */
> +  svwrite_lane_zt_u32 (0, zt_u32x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_u32'} }   */
> +  svwrite_lane_zt_s32 (0, zt_s32x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_s32'} }   */
> +  svwrite_lane_zt_u64 (0, zt_u64x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_u64'} }   */
> +  svwrite_lane_zt_s64 (0, zt_s64x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_s64'} }   */
> +  svwrite_lane_zt_bf16 (0, zt_bf16x2, 0); /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_bf16'} }  */
> +  svwrite_lane_zt_f16 (0, zt_f16x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_f16'} }   */
> +  svwrite_lane_zt_f32 (0, zt_f32x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_f32'} }   */
> +  svwrite_lane_zt_f64 (0, zt_f64x2, 0);   /* { dg-error {incompatible type 
> for argument 2 of 'svwrite_lane_zt_f64'} }   */
> +
> +  svwrite_lane_zt_u8 (0, zt_u8, foo);     /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_u8'} }    */
> +  svwrite_lane_zt_s8 (0, zt_s8, foo);     /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_s8'} }    */
> +  svwrite_lane_zt_u16 (0, zt_u16, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_u16'} }   */
> +  svwrite_lane_zt_s16 (0, zt_s16, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_s16'} }   */
> +  svwrite_lane_zt_u32 (0, zt_u32, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_u32'} }   */
> +  svwrite_lane_zt_s32 (0, zt_s32, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_s32'} }   */
> +  svwrite_lane_zt_u64 (0, zt_u64, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_u64'} }   */
> +  svwrite_lane_zt_s64 (0, zt_s64, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_s64'} }   */
> +  svwrite_lane_zt_bf16 (0, zt_bf16, foo); /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_bf16'} }  */
> +  svwrite_lane_zt_f16 (0, zt_f16, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_f16'} }   */
> +  svwrite_lane_zt_f32 (0, zt_f32, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_f32'} }   */
> +  svwrite_lane_zt_f64 (0, zt_f64, foo);   /* { dg-error {incompatible type 
> for argument 3 of 'svwrite_lane_zt_f64'} }   */
> +}
> +
> +void
> +test_svwrite_zt_inferred_error_arg_type_mismatch (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64, svuint8x2_t zt_u8x2) __arm_streaming __arm_out ("zt0")
> +{
> +  struct Foo { uint64_t val } foo = {0};
> +  svwrite_lane_zt (foo, zt_u8, 0);  /* { dg-error {passing 'struct Foo' to 
> argument 1 of 'svwrite_lane_zt', which expects 'uint64_t'} }  */
> +  svwrite_lane_zt ( 0, zt_u8x2, 0); /* { dg-error {passing 'svuint8x2_t' to 
> argument 2 of 'svwrite_lane_zt', which expects a single SVE vector rather 
> than a tuple} }  */
> +  svwrite_lane_zt (0, zt_u8, foo);  /* { dg-error {passing 'struct Foo' to 
> argument 3 of 'svwrite_lane_zt', which expects 'uint64_t'} }  */
> +}
> +
> +void
> +test_svwrite_lane_zt_explicit_error_zt0_not_immediate (
> +  uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_lane_zt_u8 (zt0, zt_u8, 0);     /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_u8' must be an integer constant expression} }    */
> +  svwrite_lane_zt_s8 (zt0, zt_s8, 0);     /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_s8' must be an integer constant expression} }    */
> +  svwrite_lane_zt_u16 (zt0, zt_u16, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_u16' must be an integer constant expression} }   */
> +  svwrite_lane_zt_s16 (zt0, zt_s16, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_s16' must be an integer constant expression} }   */
> +  svwrite_lane_zt_u32 (zt0, zt_u32, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_u32' must be an integer constant expression} }   */
> +  svwrite_lane_zt_s32 (zt0, zt_s32, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_s32' must be an integer constant expression} }   */
> +  svwrite_lane_zt_u64 (zt0, zt_u64, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_u64' must be an integer constant expression} }   */
> +  svwrite_lane_zt_s64 (zt0, zt_s64, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_s64' must be an integer constant expression} }   */
> +  svwrite_lane_zt_bf16 (zt0, zt_bf16, 0); /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_bf16' must be an integer constant expression} }  */
> +  svwrite_lane_zt_f16 (zt0, zt_f16, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_f16' must be an integer constant expression} }   */
> +  svwrite_lane_zt_f32 (zt0, zt_f32, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_f32' must be an integer constant expression} }   */
> +  svwrite_lane_zt_f64 (zt0, zt_f64, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt_f64' must be an integer constant expression} }   */
> +}
> +
> +void
> +test_svwrite_lane_zt_inferred_error_zt0_not_immediate (
> +  uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_lane_zt (zt0, zt_u8, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_s8, 0);   /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_u16, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_s16, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_u32, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_s32, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_u64, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_s64, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_bf16, 0); /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_f16, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_f32, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (zt0, zt_f64, 0);  /* { dg-error {argument 1 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +}
> +
> +void
> +test_svwrite_lane_zt_explicit_error_idx_not_immediate (
> +  uint64_t idx, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_lane_zt_u8 (0, zt_u8, idx);      /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_u8' must be an integer constant expression} }    */
> +  svwrite_lane_zt_s8 (0, zt_s8, idx);      /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_s8' must be an integer constant expression} }    */
> +  svwrite_lane_zt_u16 (0, zt_u16, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_u16' must be an integer constant expression} }   */
> +  svwrite_lane_zt_s16 (0, zt_s16, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_s16' must be an integer constant expression} }   */
> +  svwrite_lane_zt_u32 (0, zt_u32, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_u32' must be an integer constant expression} }   */
> +  svwrite_lane_zt_s32 (0, zt_s32, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_s32' must be an integer constant expression} }   */
> +  svwrite_lane_zt_u64 (0, zt_u64, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_u64' must be an integer constant expression} }   */
> +  svwrite_lane_zt_s64 (0, zt_s64, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_s64' must be an integer constant expression} }   */
> +  svwrite_lane_zt_bf16 ( 0, zt_bf16, idx); /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_bf16' must be an integer constant expression} }  */
> +  svwrite_lane_zt_f16 (0, zt_f16, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_f16' must be an integer constant expression} }   */
> +  svwrite_lane_zt_f32 (0, zt_f32, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_f32' must be an integer constant expression} }   */
> +  svwrite_lane_zt_f64 (0, zt_f64, idx);    /* { dg-error {argument 3 of 
> 'svwrite_lane_zt_f64' must be an integer constant expression} }   */
> +}
> +
> +void
> +test_svwrite_lane_zt_inferred_error_idx_not_immediate (
> +  uint64_t idx, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_lane_zt (0, zt_u8, idx);   /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_s8, idx);   /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_u16, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_s16, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_u32, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_s32, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_u64, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_s64, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_bf16, idx); /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_f16, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_f32, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +  svwrite_lane_zt (0, zt_f64, idx);  /* { dg-error {argument 3 of 
> 'svwrite_lane_zt' must be an integer constant expression} }  */
> +}
> +
> +void
> +test_svwrite_lane_zt_explicit_error_idx_not_in_range (
> +  uint64_t idx, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_lane_zt_u8 (0, zt_u8, 4);     /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_u8', which expects a value in the range \[0, 3\]} }    
> */
> +  svwrite_lane_zt_s8 (0, zt_s8, 4);     /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_s8', which expects a value in the range \[0, 3\]} }    
> */
> +  svwrite_lane_zt_u16 (0, zt_u16, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_u16', which expects a value in the range \[0, 3\]} }   
> */
> +  svwrite_lane_zt_s16 (0, zt_s16, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_s16', which expects a value in the range \[0, 3\]} }   
> */
> +  svwrite_lane_zt_u32 (0, zt_u32, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_u32', which expects a value in the range \[0, 3\]} }   
> */
> +  svwrite_lane_zt_s32 (0, zt_s32, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_s32', which expects a value in the range \[0, 3\]} }   
> */
> +  svwrite_lane_zt_u64 (0, zt_u64, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_u64', which expects a value in the range \[0, 3\]} }   
> */
> +  svwrite_lane_zt_s64 (0, zt_s64, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_s64', which expects a value in the range \[0, 3\]} }   
> */
> +  svwrite_lane_zt_bf16 (0, zt_bf16, 4); /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_bf16', which expects a value in the range \[0, 3\]} }  
> */
> +  svwrite_lane_zt_f16 (0, zt_f16, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_f16', which expects a value in the range \[0, 3\]} }   
> */
> +  svwrite_lane_zt_f32 (0, zt_f32, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_f32', which expects a value in the range \[0, 3\]} }   
> */
> +  svwrite_lane_zt_f64 (0, zt_f64, 4);   /* { dg-error {passing 4 to argument 
> 3 of 'svwrite_lane_zt_f64', which expects a value in the range \[0, 3\]} }   
> */
> +}
> +
> +void
> +test_svwrite_lane_zt_inferred_error_idx_not_in_range (
> +  uint64_t idx, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_lane_zt (0, zt_u8, 4);   /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_s8, 4);   /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_u16, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_s16, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_u32, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_s32, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_u64, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_s64, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_bf16, 4); /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_f16, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_f32, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +  svwrite_lane_zt (0, zt_f64, 4);  /* { dg-error {passing 4 to argument 3 of 
> 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} }  */
> +}
> diff --git 
> a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c 
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c
> new file mode 100644
> index 00000000000..1bc10e61da8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c
> @@ -0,0 +1,342 @@
> +/* { dg-options "-std=c23" }  */
> +/* { dg-do compile }  */
> +
> +/* MOVT (vector to table)
> +   Variants are also available for:
> +   [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64]
> +   [_bf16], [_f16], [_f32], [_f64]
> +   void svwrite_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx)
> + __arm_streaming __arm_out ("zt0");  */
> +
> +#pragma GCC target "+sve2,+sme-lutv2"
> +static_assert (__ARM_FEATURE_SME_LUTv2 == 1);
> +#include <arm_sme.h>
> +
> +void
> +test_svwrite_zt_explicit_ok (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_zt_u8 (0, zt_u8);
> +  svwrite_zt_s8 (0, zt_s8);
> +  svwrite_zt_u16 (0, zt_u16);
> +  svwrite_zt_s16 (0, zt_s16);
> +  svwrite_zt_u32 (0, zt_u32);
> +  svwrite_zt_s32 (0, zt_s32);
> +  svwrite_zt_u64 (0, zt_u64);
> +  svwrite_zt_s64 (0, zt_s64);
> +  svwrite_zt_bf16 (0, zt_bf16);
> +  svwrite_zt_f16 (0, zt_f16);
> +  svwrite_zt_f32 (0, zt_f32);
> +  svwrite_zt_f64 (0, zt_f64);
> +}
> +
> +void
> +test_svwrite_zt_inferred_ok (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_zt (0, zt_u8);
> +  svwrite_zt (0, zt_s8);
> +  svwrite_zt (0, zt_u16);
> +  svwrite_zt (0, zt_s16);
> +  svwrite_zt (0, zt_u32);
> +  svwrite_zt (0, zt_s32);
> +  svwrite_zt (0, zt_u64);
> +  svwrite_zt (0, zt_s64);
> +  svwrite_zt (0, zt_bf16);
> +  svwrite_zt (0, zt_f16);
> +  svwrite_zt (0, zt_f32);
> +  svwrite_zt (0, zt_f64);
> +}
> +
> +void
> +test_svwrite_zt_explicit_error_not_streaming (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64)
> +{
> +  svwrite_zt_u8 (0, zt_u8);      /* { dg-error {ACLE function 
> 'svwrite_zt_u8' can only be called when SME streaming mode is enabled} }    */
> +  svwrite_zt_s8 (0, zt_s8);      /* { dg-error {ACLE function 
> 'svwrite_zt_s8' can only be called when SME streaming mode is enabled} }    */
> +  svwrite_zt_u16 ( 0, zt_u16);   /* { dg-error {ACLE function 
> 'svwrite_zt_u16' can only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt_s16 ( 0, zt_s16);   /* { dg-error {ACLE function 
> 'svwrite_zt_s16' can only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt_u32 ( 0, zt_u32);   /* { dg-error {ACLE function 
> 'svwrite_zt_u32' can only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt_s32 ( 0, zt_s32);   /* { dg-error {ACLE function 
> 'svwrite_zt_s32' can only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt_u64 ( 0, zt_u64);   /* { dg-error {ACLE function 
> 'svwrite_zt_u64' can only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt_s64 ( 0, zt_s64);   /* { dg-error {ACLE function 
> 'svwrite_zt_s64' can only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt_bf16 ( 0, zt_bf16); /* { dg-error {ACLE function 
> 'svwrite_zt_bf16' can only be called when SME streaming mode is enabled} }  */
> +  svwrite_zt_f16 ( 0, zt_f16);   /* { dg-error {ACLE function 
> 'svwrite_zt_f16' can only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt_f32 ( 0, zt_f32);   /* { dg-error {ACLE function 
> 'svwrite_zt_f32' can only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt_f64 ( 0, zt_f64);   /* { dg-error {ACLE function 
> 'svwrite_zt_f64' can only be called when SME streaming mode is enabled} }   */
> +}
> +
> +void
> +test_svwrite_zt_inferred_error_not_streaming (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64)
> +{
> +  svwrite_zt (0, zt_u8);   /* { dg-error {ACLE function 'svwrite_zt_u8' can 
> only be called when SME streaming mode is enabled} }    */
> +  svwrite_zt (0, zt_s8);   /* { dg-error {ACLE function 'svwrite_zt_s8' can 
> only be called when SME streaming mode is enabled} }    */
> +  svwrite_zt (0, zt_u16);  /* { dg-error {ACLE function 'svwrite_zt_u16' can 
> only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt (0, zt_s16);  /* { dg-error {ACLE function 'svwrite_zt_s16' can 
> only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt (0, zt_u32);  /* { dg-error {ACLE function 'svwrite_zt_u32' can 
> only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt (0, zt_s32);  /* { dg-error {ACLE function 'svwrite_zt_s32' can 
> only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt (0, zt_u64);  /* { dg-error {ACLE function 'svwrite_zt_u64' can 
> only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt (0, zt_s64);  /* { dg-error {ACLE function 'svwrite_zt_s64' can 
> only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt (0, zt_bf16); /* { dg-error {ACLE function 'svwrite_zt_bf16' 
> can only be called when SME streaming mode is enabled} }  */
> +  svwrite_zt (0, zt_f16);  /* { dg-error {ACLE function 'svwrite_zt_f16' can 
> only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt (0, zt_f32);  /* { dg-error {ACLE function 'svwrite_zt_f32' can 
> only be called when SME streaming mode is enabled} }   */
> +  svwrite_zt (0, zt_f64);  /* { dg-error {ACLE function 'svwrite_zt_f64' can 
> only be called when SME streaming mode is enabled} }   */
> +}
> +
> +void
> +test_svwrite_zt_explicit_error_arg_count_mismatch (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_zt_u8 ();   /* { dg-error {too few arguments to function 
> 'svwrite_zt_u8'; expected 2, have 0} }    */
> +  svwrite_zt_s8 ();   /* { dg-error {too few arguments to function 
> 'svwrite_zt_s8'; expected 2, have 0} }    */
> +  svwrite_zt_u16 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_u16'; expected 2, have 0} }   */
> +  svwrite_zt_s16 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_s16'; expected 2, have 0} }   */
> +  svwrite_zt_u32 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_u32'; expected 2, have 0} }   */
> +  svwrite_zt_s32 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_s32'; expected 2, have 0} }   */
> +  svwrite_zt_u64 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_u64'; expected 2, have 0} }   */
> +  svwrite_zt_s64 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_s64'; expected 2, have 0} }   */
> +  svwrite_zt_bf16 (); /* { dg-error {too few arguments to function 
> 'svwrite_zt_bf16'; expected 2, have 0} }  */
> +  svwrite_zt_f16 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_f16'; expected 2, have 0} }   */
> +  svwrite_zt_f32 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_f32'; expected 2, have 0} }   */
> +  svwrite_zt_f64 ();  /* { dg-error {too few arguments to function 
> 'svwrite_zt_f64'; expected 2, have 0} }   */
> +
> +  svwrite_zt_u8 (0);   /* { dg-error {too few arguments to function 
> 'svwrite_zt_u8'; expected 2, have 1} }    */
> +  svwrite_zt_s8 (0);   /* { dg-error {too few arguments to function 
> 'svwrite_zt_s8'; expected 2, have 1} }    */
> +  svwrite_zt_u16 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_u16'; expected 2, have 1} }   */
> +  svwrite_zt_s16 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_s16'; expected 2, have 1} }   */
> +  svwrite_zt_u32 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_u32'; expected 2, have 1} }   */
> +  svwrite_zt_s32 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_s32'; expected 2, have 1} }   */
> +  svwrite_zt_u64 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_u64'; expected 2, have 1} }   */
> +  svwrite_zt_s64 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_s64'; expected 2, have 1} }   */
> +  svwrite_zt_bf16 (0); /* { dg-error {too few arguments to function 
> 'svwrite_zt_bf16'; expected 2, have 1} }  */
> +  svwrite_zt_f16 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_f16'; expected 2, have 1} }   */
> +  svwrite_zt_f32 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_f32'; expected 2, have 1} }   */
> +  svwrite_zt_f64 (0);  /* { dg-error {too few arguments to function 
> 'svwrite_zt_f64'; expected 2, have 1} }   */
> +
> +  svwrite_zt_u8 (0, zt_u8, 0);     /* { dg-error {too many arguments to 
> function 'svwrite_zt_u8'; expected 2, have 3} }    */
> +  svwrite_zt_s8 (0, zt_s8, 0);     /* { dg-error {too many arguments to 
> function 'svwrite_zt_s8'; expected 2, have 3} }    */
> +  svwrite_zt_u16 (0, zt_u16, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_u16'; expected 2, have 3} }   */
> +  svwrite_zt_s16 (0, zt_s16, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_s16'; expected 2, have 3} }   */
> +  svwrite_zt_u32 (0, zt_u32, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_u32'; expected 2, have 3} }   */
> +  svwrite_zt_s32 (0, zt_s32, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_s32'; expected 2, have 3} }   */
> +  svwrite_zt_u64 (0, zt_u64, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_u64'; expected 2, have 3} }   */
> +  svwrite_zt_s64 (0, zt_s64, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_s64'; expected 2, have 3} }   */
> +  svwrite_zt_bf16 (0, zt_bf16, 0); /* { dg-error {too many arguments to 
> function 'svwrite_zt_bf16'; expected 2, have 3} }  */
> +  svwrite_zt_f16 (0, zt_f16, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_f16'; expected 2, have 3} }   */
> +  svwrite_zt_f32 (0, zt_f32, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_f32'; expected 2, have 3} }   */
> +  svwrite_zt_f64 (0, zt_f64, 0);   /* { dg-error {too many arguments to 
> function 'svwrite_zt_f64'; expected 2, have 3} }   */
> +}
> +
> +void
> +test_svwrite_zt_inferred_error_arg_count_mismatch (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_zt ();  /* { dg-error {too few arguments to function 'svwrite_zt'} 
> }  */
> +  svwrite_zt (0); /* { dg-error {too few arguments to function 'svwrite_zt'} 
> }  */
> +
> +  svwrite_zt (0, zt_u8, 0);   /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_s8, 0);   /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_u16, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_s16, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_u32, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_s32, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_u64, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_s64, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_bf16, 0); /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_f16, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_f32, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +  svwrite_zt (0, zt_f64, 0);  /* { dg-error {too many arguments to function 
> 'svwrite_zt'} }  */
> +}
> +
> +void
> +test_svwrite_zt_explicit_error_arg_type_mismatch (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64, svuint8x2_t zt_u8x2, svint8x2_t zt_s8x2,
> +  svuint16x2_t zt_u16x2, svint16x2_t zt_s16x2, svuint32x2_t zt_u32x2,
> +  svint32x2_t zt_s32x2, svuint64x2_t zt_u64x2, svint64x2_t zt_s64x2,
> +  svbfloat16x2_t zt_bf16x2, svfloat16x2_t zt_f16x2, svfloat32x2_t zt_f32x2,
> +  svfloat64x2_t zt_f64x2) __arm_streaming __arm_out ("zt0")
> +{
> +  struct Foo { uint64_t val } foo = {0};
> +  svwrite_zt_u8 (foo, zt_u8);     /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_u8'} }    */
> +  svwrite_zt_s8 (foo, zt_s8);     /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_s8'} }    */
> +  svwrite_zt_u16 (foo, zt_u16);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_u16'} }   */
> +  svwrite_zt_s16 (foo, zt_s16);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_s16'} }   */
> +  svwrite_zt_u32 (foo, zt_u32);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_u32'} }   */
> +  svwrite_zt_s32 (foo, zt_s32);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_s32'} }   */
> +  svwrite_zt_u64 (foo, zt_u64);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_u64'} }   */
> +  svwrite_zt_s64 (foo, zt_s64);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_s64'} }   */
> +  svwrite_zt_bf16 (foo, zt_bf16); /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_bf16'} }  */
> +  svwrite_zt_f16 (foo, zt_f16);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_f16'} }   */
> +  svwrite_zt_f32 (foo, zt_f32);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_f32'} }   */
> +  svwrite_zt_f64 (foo, zt_f64);   /* { dg-error {incompatible type for 
> argument 1 of 'svwrite_zt_f64'} }   */
> +
> +  svwrite_zt_u8 (0, zt_s8);    /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_u8'} }    */
> +  svwrite_zt_s8 (0, zt_u8);    /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_s8'} }    */
> +  svwrite_zt_u16 (0, zt_s16);  /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_u16'} }   */
> +  svwrite_zt_s16 (0, zt_u16);  /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_s16'} }   */
> +  svwrite_zt_u32 (0, zt_s32);  /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_u32'} }   */
> +  svwrite_zt_s32 (0, zt_u32);  /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_s32'} }   */
> +  svwrite_zt_u64 (0, zt_s64);  /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_u64'} }   */
> +  svwrite_zt_s64 (0, zt_u64);  /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_s64'} }   */
> +  svwrite_zt_bf16 (0, zt_f16); /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_bf16'} }  */
> +  svwrite_zt_f16 (0, zt_bf16); /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_f16'} }   */
> +  svwrite_zt_f32 (0, zt_f64);  /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_f32'} }   */
> +  svwrite_zt_f64 (0, zt_f32);  /* { dg-error {incompatible type for argument 
> 2 of 'svwrite_zt_f64'} }   */
> +
> +  svwrite_zt_u8 (0, zt_u8x2);     /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_u8'} }    */
> +  svwrite_zt_s8 (0, zt_s8x2);     /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_s8'} }    */
> +  svwrite_zt_u16 (0, zt_u16x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_u16'} }   */
> +  svwrite_zt_s16 (0, zt_s16x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_s16'} }   */
> +  svwrite_zt_u32 (0, zt_u32x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_u32'} }   */
> +  svwrite_zt_s32 (0, zt_s32x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_s32'} }   */
> +  svwrite_zt_u64 (0, zt_u64x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_u64'} }   */
> +  svwrite_zt_s64 (0, zt_s64x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_s64'} }   */
> +  svwrite_zt_bf16 (0, zt_bf16x2); /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_bf16'} }  */
> +  svwrite_zt_f16 (0, zt_f16x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_f16'} }   */
> +  svwrite_zt_f32 (0, zt_f32x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_f32'} }   */
> +  svwrite_zt_f64 (0, zt_f64x2);   /* { dg-error {incompatible type for 
> argument 2 of 'svwrite_zt_f64'} }   */
> +}
> +
> +void
> +test_svwrite_zt_inferred_error_arg_type_mismatch (
> +  svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16,
> +  svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64,
> +  svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32,
> +  svfloat64_t zt_f64, svuint8x2_t zt_u8x2) __arm_streaming __arm_out ("zt0")
> +{
> +  struct Foo { uint64_t val } foo = {0};
> +  svwrite_zt (foo, zt_u8); /* { dg-error {passing 'struct Foo' to argument 1 
> of 'svwrite_zt', which expects 'uint64_t'} } */
> +  svwrite_zt (0, zt_u8x2); /* { dg-error {passing 'svuint8x2_t' to argument 
> 2 of 'svwrite_zt', which expects a single SVE vector rather than a tuple} } */
> +}
> +
> +void
> +test_svwrite_zt_explicit_error_zt0_not_immediate (
> +  uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_zt_u8 (zt0, zt_u8);     /* { dg-error {argument 1 of 
> 'svwrite_zt_u8' must be an integer constant expression} }    */
> +  svwrite_zt_s8 (zt0, zt_s8);     /* { dg-error {argument 1 of 
> 'svwrite_zt_s8' must be an integer constant expression} }    */
> +  svwrite_zt_u16 (zt0, zt_u16);   /* { dg-error {argument 1 of 
> 'svwrite_zt_u16' must be an integer constant expression} }   */
> +  svwrite_zt_s16 (zt0, zt_s16);   /* { dg-error {argument 1 of 
> 'svwrite_zt_s16' must be an integer constant expression} }   */
> +  svwrite_zt_u32 (zt0, zt_u32);   /* { dg-error {argument 1 of 
> 'svwrite_zt_u32' must be an integer constant expression} }   */
> +  svwrite_zt_s32 (zt0, zt_s32);   /* { dg-error {argument 1 of 
> 'svwrite_zt_s32' must be an integer constant expression} }   */
> +  svwrite_zt_u64 (zt0, zt_u64);   /* { dg-error {argument 1 of 
> 'svwrite_zt_u64' must be an integer constant expression} }   */
> +  svwrite_zt_s64 (zt0, zt_s64);   /* { dg-error {argument 1 of 
> 'svwrite_zt_s64' must be an integer constant expression} }   */
> +  svwrite_zt_bf16 (zt0, zt_bf16); /* { dg-error {argument 1 of 
> 'svwrite_zt_bf16' must be an integer constant expression} }  */
> +  svwrite_zt_f16 (zt0, zt_f16);   /* { dg-error {argument 1 of 
> 'svwrite_zt_f16' must be an integer constant expression} }   */
> +  svwrite_zt_f32 (zt0, zt_f32);   /* { dg-error {argument 1 of 
> 'svwrite_zt_f32' must be an integer constant expression} }   */
> +  svwrite_zt_f64 (zt0, zt_f64);   /* { dg-error {argument 1 of 
> 'svwrite_zt_f64' must be an integer constant expression} }   */
> +}
> +
> +void
> +test_svwrite_zt_inferred_error_zt0_not_immediate (
> +  uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_zt (zt0, zt_u8);   /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_s8);   /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_u16);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_s16);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_u32);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_s32);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_u64);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_s64);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_bf16); /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_f16);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_f32);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +  svwrite_zt (zt0, zt_f64);  /* { dg-error {argument 1 of 'svwrite_zt' must 
> be an integer constant expression} }  */
> +}
> +
> +void
> +test_svwrite_zt_explicit_error_zt0_not_in_range (
> +  uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_zt_u8 (1, zt_u8);      /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_u8', which expects the value 0} }    */
> +  svwrite_zt_s8 (1, zt_s8);      /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_s8', which expects the value 0} }    */
> +  svwrite_zt_u16 (1, zt_u16);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_u16', which expects the value 0} }   */
> +  svwrite_zt_s16 (1, zt_s16);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_s16', which expects the value 0} }   */
> +  svwrite_zt_u32 (1, zt_u32);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_u32', which expects the value 0} }   */
> +  svwrite_zt_s32 (1, zt_s32);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_s32', which expects the value 0} }   */
> +  svwrite_zt_u64 (1, zt_u64);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_u64', which expects the value 0} }   */
> +  svwrite_zt_s64 (1, zt_s64);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_s64', which expects the value 0} }   */
> +  svwrite_zt_bf16 ( 1, zt_bf16); /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_bf16', which expects the value 0} }  */
> +  svwrite_zt_f16 (1, zt_f16);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_f16', which expects the value 0} }   */
> +  svwrite_zt_f32 (1, zt_f32);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_f32', which expects the value 0} }   */
> +  svwrite_zt_f64 (1, zt_f64);    /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt_f64', which expects the value 0} }   */
> +
> +  svwrite_zt_u8 (-1, zt_u8);      /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_u8', which expects the value 0} }    */
> +  svwrite_zt_s8 (-1, zt_s8);      /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_s8', which expects the value 0} }    */
> +  svwrite_zt_u16 (-1, zt_u16);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_u16', which expects the value 0} }   */
> +  svwrite_zt_s16 (-1, zt_s16);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_s16', which expects the value 0} }   */
> +  svwrite_zt_u32 (-1, zt_u32);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_u32', which expects the value 0} }   */
> +  svwrite_zt_s32 (-1, zt_s32);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_s32', which expects the value 0} }   */
> +  svwrite_zt_u64 (-1, zt_u64);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_u64', which expects the value 0} }   */
> +  svwrite_zt_s64 (-1, zt_s64);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_s64', which expects the value 0} }   */
> +  svwrite_zt_bf16 ( -1, zt_bf16); /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_bf16', which expects the value 0} }  */
> +  svwrite_zt_f16 (-1, zt_f16);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_f16', which expects the value 0} }   */
> +  svwrite_zt_f32 (-1, zt_f32);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_f32', which expects the value 0} }   */
> +  svwrite_zt_f64 (-1, zt_f64);    /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt_f64', which expects the value 0} }   */
> +}
> +
> +void
> +test_svwrite_zt_inferred_error_zt0_not_in_range (
> +  uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16,
> +  svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64,
> +  svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16,
> +  svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0")
> +{
> +  svwrite_zt (1, zt_u8);   /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_s8);   /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_u16);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_s16);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_u32);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_s32);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_u64);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_s64);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_bf16); /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_f16);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_f32);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (1, zt_f64);  /* { dg-error {passing 1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +
> +  svwrite_zt (-1, zt_u8);   /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_s8);   /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_u16);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_s16);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_u32);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_s32);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_u64);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_s64);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_bf16); /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_f16);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_f32);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +  svwrite_zt (-1, zt_f64);  /* { dg-error {passing -1 to argument 1 of 
> 'svwrite_zt', which expects the value 0} }  */
> +}
> -- 
> 2.43.0
> 

Reply via email to