On 9/3/2025 1:24 PM, Karl Meakin wrote:

On 03/09/2025 09:39, Saurabh Jha wrote:
Hi Karl,

It would be helpful if you add a short summary in the email body describing the patch. For example, in this patch, you added new insn patterns, new shapes, and other things.
I will add that to the next revision of the series.

More comments inline.

On 9/2/2025 3:16 PM, Karl Meakin 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
Can you double check the indentation on this line? I think it is okay but maybe take another look please.
I just copied the indentation of the insn immediately above. What looks wrong with it to you?

It is fine. It just looked more indented but if it is copied, then all good.

+      [(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")
+       (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>
Any reason this one and the one right above this is a struct and not a class? I guess its convention but do you have any thoughts on this?
The only difference between `struct` and `class` is the default visibility of members (for `struct` it is `public`, for `class` it is `private`).

Makes sense, thank you the explanation.

Since this type is only used in one place and does not have any data members, there would be no benefit of using `class`. It is also consistent with all the other shape declarations in the file, which also use `struct`.
+ {
+  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} }  */
+}
Thanks,
Saurabh

Reply via email to