mbox series

[00/21] aarch64: Add support for SME

Message ID mpt4jhkuwdr.fsf@arm.com
Headers show
Series aarch64: Add support for SME | expand

Message

Richard Sandiford Nov. 17, 2023, 5:23 p.m. UTC
This series of patches adds support for SME.  A follow-on series
will add SME2 on top.

All of the detail is in the individual patch summaries.

The series can't go in yet, because it depends on:

  https://gcc.gnu.org/pipermail/gcc-patches/2023-September/629713.html

and some reviewed-but-unpushed patches that follow on from it.

The series also depends on some patches that I posted last year and were
approved (thanks!), but that I didn't commit at the time because the SME
support didn't go in then.  I'll repost those when I push them.

Tested on aarch64-linux-gnu.  I tested on top of the late-combine pass,
so that might also be an unintentional dependency.

Richard

Comments

Richard Sandiford Nov. 17, 2023, 5:29 p.m. UTC | #1
This adds support for the SME parts of arm_sme.h.

gcc/
	* doc/invoke.texi: Document +sme-i16i64 and +sme-f64f64.
	* config.gcc (aarch64*-*-*): Add arm_sme.h to the list of headers
	to install and aarch64-sve-builtins-sme.o to the list of objects
	to build.
	* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Define
	or undefine TARGET_SME, TARGET_SME_I16I64 and TARGET_SME_F64F64.
	(aarch64_pragma_aarch64): Handle arm_sme.h.
	* config/aarch64/aarch64-option-extensions.def (sme-i16i64)
	(sme-f64f64): New extensions.
	* config/aarch64/aarch64-protos.h (aarch64_sme_vq_immediate)
	(aarch64_addsvl_addspl_immediate_p, aarch64_output_addsvl_addspl)
	(aarch64_output_sme_zero_za): Declare.
	(aarch64_output_move_struct): Delete.
	(aarch64_sme_ldr_vnum_offset): Declare.
	(aarch64_sve::handle_arm_sme_h): Likewise.
	* config/aarch64/aarch64.h (AARCH64_ISA_SM_ON): New macro.
	(AARCH64_ISA_SME_I16I64, AARCH64_ISA_SME_F64F64): Likewise.
	(TARGET_STREAMING, TARGET_STREAMING_SME): Likewise.
	(TARGET_SME_I16I64, TARGET_SME_F64F64): Likewise.
	* config/aarch64/aarch64.cc (aarch64_sve_rdvl_factor_p): Rename to...
	(aarch64_sve_rdvl_addvl_factor_p): ...this.
	(aarch64_sve_rdvl_immediate_p): Update accordingly.
	(aarch64_rdsvl_immediate_p, aarch64_add_offset): Likewise.
	(aarch64_sme_vq_immediate): Likewise.  Make public.
	(aarch64_sve_addpl_factor_p): New function.
	(aarch64_sve_addvl_addpl_immediate_p): Use
	aarch64_sve_rdvl_addvl_factor_p and aarch64_sve_addpl_factor_p.
	(aarch64_addsvl_addspl_immediate_p): New function.
	(aarch64_output_addsvl_addspl): Likewise.
	(aarch64_cannot_force_const_mem): Return true for RDSVL immediates.
	(aarch64_classify_index): Handle .Q scaling for VNx1TImode.
	(aarch64_classify_address): Likewise for vnum offsets.
	(aarch64_output_sme_zero_za): New function.
	(aarch64_sme_ldr_vnum_offset_p): Likewise.
	* config/aarch64/predicates.md (aarch64_addsvl_addspl_immediate):
	New predicate.
	(aarch64_pluslong_operand): Include it for SME.
	* config/aarch64/constraints.md (Ucj, Uav): New constraints.
	* config/aarch64/iterators.md (VNx1TI_ONLY): New mode iterator.
	(SME_ZA_I, SME_ZA_SDI, SME_ZA_SDF_I, SME_MOP_BHI): Likewise.
	(SME_MOP_HSDF): Likewise.
	(UNSPEC_SME_ADDHA, UNSPEC_SME_ADDVA, UNSPEC_SME_FMOPA)
	(UNSPEC_SME_FMOPS, UNSPEC_SME_LD1_HOR, UNSPEC_SME_LD1_VER)
	(UNSPEC_SME_READ_HOR, UNSPEC_SME_READ_VER, UNSPEC_SME_SMOPA)
	(UNSPEC_SME_SMOPS, UNSPEC_SME_ST1_HOR, UNSPEC_SME_ST1_VER)
	(UNSPEC_SME_SUMOPA, UNSPEC_SME_SUMOPS, UNSPEC_SME_UMOPA)
	(UNSPEC_SME_UMOPS, UNSPEC_SME_USMOPA, UNSPEC_SME_USMOPS)
	(UNSPEC_SME_WRITE_HOR, UNSPEC_SME_WRITE_VER): New unspecs.
	(elem_bits): Handle x2 and x4 structure modes, plus VNx1TI.
	(Vetype, Vesize, VPRED): Handle VNx1TI.
	(b): New mode attribute.
	(SME_LD1, SME_READ, SME_ST1, SME_WRITE, SME_BINARY_SDI, SME_INT_MOP)
	(SME_FP_MOP): New int iterators.
	(optab): Handle SME unspecs.
	(hv): New int attribute.
	* config/aarch64/aarch64.md (*add<mode>3_aarch64): Handle ADDSVL
	and ADDSPL.
	* config/aarch64/aarch64-sme.md (UNSPEC_SME_LDR): New unspec.
	(@aarch64_sme_<optab><mode>, @aarch64_sme_<optab><mode>_plus)
	(aarch64_sme_ldr0, @aarch64_sme_ldrn<mode>): New patterns.
	(UNSPEC_SME_STR): New unspec.
	(@aarch64_sme_<optab><mode>, @aarch64_sme_<optab><mode>_plus)
	(aarch64_sme_str0, @aarch64_sme_strn<mode>): New patterns.
	(@aarch64_sme_<optab><v_int_container><mode>): Likewise.
	(*aarch64_sme_<optab><v_int_container><mode>_plus): Likewise.
	(@aarch64_sme_<optab><VNx1TI_ONLY:mode><SVE_FULL:mode>): Likewise.
	(@aarch64_sme_<optab><v_int_container><mode>): Likewise.
	(*aarch64_sme_<optab><v_int_container><mode>_plus): Likewise.
	(@aarch64_sme_<optab><VNx1TI_ONLY:mode><SVE_FULL:mode>): Likewise.
	(UNSPEC_SME_ZERO): New unspec.
	(aarch64_sme_zero): New pattern.
	(@aarch64_sme_<SME_BINARY_SDI:optab><mode>): Likewise.
	(@aarch64_sme_<SME_INT_MOP:optab><mode>): Likewise.
	(@aarch64_sme_<SME_FP_MOP:optab><mode>): Likewise.
	* config/aarch64/aarch64-sve-builtins.def: Add ZA type suffixes.
	Include aarch64-sve-builtins-sme.def.
	(DEF_SME_ZA_FUNCTION): New macro.
	* config/aarch64/aarch64-sve-builtins.h (CP_READ_ZA): New call
	property.
	(CP_WRITE_ZA): Likewise.
	(PRED_za_m): New predication type.
	(type_suffix_index): Handle DEF_SME_ZA_SUFFIX.
	(type_suffix_info): Add vector_p and za_p fields.
	(function_instance::num_za_tiles): New member function.
	(function_builder::get_attributes): Add an aarch64_feature_flags
	argument.
	(function_expander::get_contiguous_base): Take a base argument
	number, a vnum argument number, and an argument that indicates
	whether the vnum parameter is a factor of the SME vector length
	or the prevailing vector length.
	(function_expander::add_integer_operand): Take a poly_int64.
	(sve_switcher::sve_switcher): Take a base set of flags.
	(sme_switcher): New class.
	(scalar_types): Add a null entry for NUM_VECTOR_TYPES.
	* config/aarch64/aarch64-sve-builtins.cc: Include
	aarch64-sve-builtins-sme.h.
	(pred_suffixes): Add an entry for PRED_za_m.
	(type_suffixes): Initialize vector_p and za_p.  Handle ZA suffixes.
	(TYPES_all_za, TYPES_d_za, TYPES_za_bhsd_data, TYPES_za_all_data)
	(TYPES_za_s_integer, TYPES_za_d_integer, TYPES_mop_base)
	(TYPES_mop_base_signed, TYPES_mop_base_unsigned, TYPES_mop_i16i64)
	(TYPES_mop_i16i64_signed, TYPES_mop_i16i64_unsigned, TYPES_za): New
	type suffix macros.
	(preds_m, preds_za_m): New predication lists.
	(function_groups): Handle DEF_SME_ZA_FUNCTION.
	(scalar_types): Add an entry for NUM_VECTOR_TYPES.
	(find_type_suffix_for_scalar_type): Check positively for vectors
	rather than negatively for predicates.
	(check_required_extensions): Handle PSTATE.SM and PSTATE.ZA
	requirements.
	(report_out_of_range): Handle the case where the minimum and
	maximum are the same.
	(function_instance::reads_global_state_p): Return true for functions
	that read ZA.
	(function_instance::modifies_global_state_p): Return true for functions
	that write to ZA.
	(sve_switcher::sve_switcher): Add a base flags argument.
	(function_builder::get_name): Handle "__arm_" prefixes.
	(add_attribute): Add an overload that takes a namespaces.
	(add_shared_state_attribute): New function.
	(function_builder::get_attributes): Take the required feature flags
	as argument.  Add streaming and ZA attributes where appropriate.
	(function_builder::add_unique_function): Update calls accordingly.
	(function_builder::resolve_to): Handle functions whose first type
	suffix is explicit.
	(function_resolver::check_gp_argument): Assert that the predication
	isn't ZA _m predication.
	(function_checker::function_checker): Don't bias the argument
	number for ZA _m predication.
	(function_expander::get_contiguous_base): Add arguments that
	specify the base argument number, the vnum argument number,
	and an argument that indicates whether the vnum parameter is
	a factor of the SME vector length or the prevailing vector length.
	Handle the SME case.
	(function_expander::add_input_operand): Handle pmode_register_operand.
	(function_expander::add_integer_operand): Take a poly_int64.
	(init_builtins): Call handle_arm_sme_h for LTO.
	(handle_arm_sve_h): Skip SME intrinsics.
	(handle_arm_sme_h): New function.
	* config/aarch64/aarch64-sve-builtins-functions.h
	(read_write_za, write_za): New classes.
	(unspec_based_sme_function, za_arith_function): New using aliases.
	(quiet_za_arith_function): Likewise.
	* config/aarch64/aarch64-sve-builtins-shapes.h
	(binary_za_int_m, binary_za_m, binary_za_uint_m, bool_inherent)
	(inherent_za, inherent_mask_za, ldr_za, load_za, read_za_m, store_za)
	(str_za, unary_za_m, write_za_m): Declare.
	* config/aarch64/aarch64-sve-builtins-shapes.cc (apply_predication):
	Expect za_m functions to have an existing governing predicate.
	(binary_za_m_base, binary_za_int_m_def, binary_za_m_def): New classes.
	(binary_za_uint_m_def, bool_inherent_def, inherent_za_def): Likewise.
	(inherent_mask_za_def, ldr_za_def, load_za_def, read_za_m_def)
	(store_za_def, str_za_def, unary_za_m_def, write_za_m_def): Likewise.
	* config/aarch64/arm_sme.h: New file.
	* config/aarch64/aarch64-sve-builtins-sme.h: Likewise.
	* config/aarch64/aarch64-sve-builtins-sme.cc: Likewise.
	* config/aarch64/aarch64-sve-builtins-sme.def: Likewise.
	* config/aarch64/t-aarch64 (aarch64-sve-builtins.o): Depend on
	aarch64-sve-builtins-sme.def and aarch64-sve-builtins-sme.h.
	(aarch64-sve-builtins-sme.o): New rule.

gcc/testsuite/
	* lib/target-supports.exp: Add sme and sme-i16i64 features.
	* gcc.target/aarch64/pragma_cpp_predefs_4.c: Test __ARM_FEATURE_SME*
	macros.
	* gcc.target/aarch64/sve/acle/asm/test_sve_acle.h: Allow functions
	to be marked as __arm_streaming, __arm_streaming_compatible, and
	__arm_inout("za").
	* g++.target/aarch64/sve/acle/general-c++/func_redef_4.c: Mark the
	function as __arm_streaming_compatible.
	* g++.target/aarch64/sve/acle/general-c++/func_redef_5.c: Likewise.
	* g++.target/aarch64/sve/acle/general-c++/func_redef_7.c: Likewise.
	* gcc.target/aarch64/sve/acle/general-c/func_redef_4.c: Likewise.
	* gcc.target/aarch64/sve/acle/general-c/func_redef_5.c: Likewise.
	* g++.target/aarch64/sme/aarch64-sme-acle-asm.exp: New test harness.
	* gcc.target/aarch64/sme/aarch64-sme-acle-asm.exp: Likewise.
	* gcc.target/aarch64/sve/acle/general-c/binary_za_int_m_1.c: New test.
	* gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c: Likewise.
	* gcc.target/aarch64/sve/acle/general-c/binary_za_m_2.c: Likewise.
	* gcc.target/aarch64/sve/acle/general-c/binary_za_uint_m_1.c: Likewise.
	* gcc.target/aarch64/sve/acle/general-c/read_za_m_1.c: Likewise.
	* gcc.target/aarch64/sve/acle/general-c/unary_za_m_1.c: Likewise.
	* gcc.target/aarch64/sve/acle/general-c/write_za_m_1.c: Likewise.
---
 gcc/config.gcc                                |   4 +-
 gcc/config/aarch64/aarch64-c.cc               |   6 +
 .../aarch64/aarch64-option-extensions.def     |   4 +
 gcc/config/aarch64/aarch64-protos.h           |   8 +-
 gcc/config/aarch64/aarch64-sme.md             | 373 +++++++++++++++
 .../aarch64/aarch64-sve-builtins-functions.h  |  64 +++
 .../aarch64/aarch64-sve-builtins-shapes.cc    | 306 +++++++++++-
 .../aarch64/aarch64-sve-builtins-shapes.h     |  13 +
 .../aarch64/aarch64-sve-builtins-sme.cc       | 412 +++++++++++++++++
 .../aarch64/aarch64-sve-builtins-sme.def      |  76 +++
 gcc/config/aarch64/aarch64-sve-builtins-sme.h |  57 +++
 gcc/config/aarch64/aarch64-sve-builtins.cc    | 341 ++++++++++++--
 gcc/config/aarch64/aarch64-sve-builtins.def   |  28 ++
 gcc/config/aarch64/aarch64-sve-builtins.h     |  46 +-
 gcc/config/aarch64/aarch64.cc                 | 140 +++++-
 gcc/config/aarch64/aarch64.h                  |  15 +
 gcc/config/aarch64/aarch64.md                 |   1 +
 gcc/config/aarch64/arm_sme.h                  |  45 ++
 gcc/config/aarch64/constraints.md             |   9 +
 gcc/config/aarch64/iterators.md               |  94 +++-
 gcc/config/aarch64/predicates.md              |   8 +-
 gcc/config/aarch64/t-aarch64                  |  17 +-
 gcc/doc/invoke.texi                           |   4 +
 .../aarch64/sme/aarch64-sme-acle-asm.exp      |  82 ++++
 .../sve/acle/general-c++/func_redef_4.c       |   3 +-
 .../sve/acle/general-c++/func_redef_5.c       |   1 +
 .../sve/acle/general-c++/func_redef_7.c       |   1 +
 .../gcc.target/aarch64/pragma_cpp_predefs_4.c |  38 ++
 .../aarch64/sme/aarch64-sme-acle-asm.exp      |  81 ++++
 .../aarch64/sme/acle-asm/addha_za32.c         |  48 ++
 .../aarch64/sme/acle-asm/addha_za64.c         |  50 ++
 .../aarch64/sme/acle-asm/addva_za32.c         |  48 ++
 .../aarch64/sme/acle-asm/addva_za64.c         |  50 ++
 .../aarch64/sme/acle-asm/arm_has_sme_sc.c     |  25 +
 .../sme/acle-asm/arm_in_streaming_mode_ns.c   |  11 +
 .../sme/acle-asm/arm_in_streaming_mode_s.c    |  11 +
 .../sme/acle-asm/arm_in_streaming_mode_sc.c   |  26 ++
 .../gcc.target/aarch64/sme/acle-asm/cntsb_s.c | 310 +++++++++++++
 .../aarch64/sme/acle-asm/cntsb_sc.c           |  12 +
 .../gcc.target/aarch64/sme/acle-asm/cntsd_s.c | 277 +++++++++++
 .../aarch64/sme/acle-asm/cntsd_sc.c           |  13 +
 .../gcc.target/aarch64/sme/acle-asm/cntsh_s.c | 279 +++++++++++
 .../aarch64/sme/acle-asm/cntsh_sc.c           |  13 +
 .../gcc.target/aarch64/sme/acle-asm/cntsw_s.c | 278 +++++++++++
 .../aarch64/sme/acle-asm/cntsw_sc.c           |  13 +
 .../aarch64/sme/acle-asm/ld1_hor_vnum_za128.c |  77 ++++
 .../aarch64/sme/acle-asm/ld1_hor_vnum_za16.c  | 123 +++++
 .../aarch64/sme/acle-asm/ld1_hor_vnum_za32.c  | 123 +++++
 .../aarch64/sme/acle-asm/ld1_hor_vnum_za64.c  | 112 +++++
 .../aarch64/sme/acle-asm/ld1_hor_vnum_za8.c   | 112 +++++
 .../aarch64/sme/acle-asm/ld1_hor_za128.c      |  83 ++++
 .../aarch64/sme/acle-asm/ld1_hor_za16.c       | 126 +++++
 .../aarch64/sme/acle-asm/ld1_hor_za32.c       | 125 +++++
 .../aarch64/sme/acle-asm/ld1_hor_za64.c       | 105 +++++
 .../aarch64/sme/acle-asm/ld1_hor_za8.c        |  95 ++++
 .../aarch64/sme/acle-asm/ld1_ver_vnum_za128.c |  77 ++++
 .../aarch64/sme/acle-asm/ld1_ver_vnum_za16.c  | 123 +++++
 .../aarch64/sme/acle-asm/ld1_ver_vnum_za32.c  | 123 +++++
 .../aarch64/sme/acle-asm/ld1_ver_vnum_za64.c  | 112 +++++
 .../aarch64/sme/acle-asm/ld1_ver_vnum_za8.c   | 112 +++++
 .../aarch64/sme/acle-asm/ld1_ver_za128.c      |  83 ++++
 .../aarch64/sme/acle-asm/ld1_ver_za16.c       | 126 +++++
 .../aarch64/sme/acle-asm/ld1_ver_za32.c       | 125 +++++
 .../aarch64/sme/acle-asm/ld1_ver_za64.c       | 105 +++++
 .../aarch64/sme/acle-asm/ld1_ver_za8.c        |  95 ++++
 .../aarch64/sme/acle-asm/ldr_vnum_za_s.c      | 147 ++++++
 .../aarch64/sme/acle-asm/ldr_vnum_za_sc.c     | 148 ++++++
 .../aarch64/sme/acle-asm/ldr_za_s.c           | 124 +++++
 .../aarch64/sme/acle-asm/ldr_za_sc.c          |  71 +++
 .../aarch64/sme/acle-asm/mopa_za32.c          | 102 ++++
 .../aarch64/sme/acle-asm/mopa_za64.c          |  70 +++
 .../aarch64/sme/acle-asm/mops_za32.c          | 102 ++++
 .../aarch64/sme/acle-asm/mops_za64.c          |  70 +++
 .../aarch64/sme/acle-asm/read_hor_za128.c     | 435 ++++++++++++++++++
 .../aarch64/sme/acle-asm/read_hor_za16.c      | 207 +++++++++
 .../aarch64/sme/acle-asm/read_hor_za32.c      | 196 ++++++++
 .../aarch64/sme/acle-asm/read_hor_za64.c      | 186 ++++++++
 .../aarch64/sme/acle-asm/read_hor_za8.c       | 125 +++++
 .../aarch64/sme/acle-asm/read_ver_za128.c     | 435 ++++++++++++++++++
 .../aarch64/sme/acle-asm/read_ver_za16.c      | 207 +++++++++
 .../aarch64/sme/acle-asm/read_ver_za32.c      | 196 ++++++++
 .../aarch64/sme/acle-asm/read_ver_za64.c      | 186 ++++++++
 .../aarch64/sme/acle-asm/read_ver_za8.c       | 125 +++++
 .../aarch64/sme/acle-asm/st1_hor_vnum_za128.c |  77 ++++
 .../aarch64/sme/acle-asm/st1_hor_vnum_za16.c  | 123 +++++
 .../aarch64/sme/acle-asm/st1_hor_vnum_za32.c  | 123 +++++
 .../aarch64/sme/acle-asm/st1_hor_vnum_za64.c  | 112 +++++
 .../aarch64/sme/acle-asm/st1_hor_vnum_za8.c   | 112 +++++
 .../aarch64/sme/acle-asm/st1_hor_za128.c      |  83 ++++
 .../aarch64/sme/acle-asm/st1_hor_za16.c       | 126 +++++
 .../aarch64/sme/acle-asm/st1_hor_za32.c       | 125 +++++
 .../aarch64/sme/acle-asm/st1_hor_za64.c       | 105 +++++
 .../aarch64/sme/acle-asm/st1_hor_za8.c        |  95 ++++
 .../aarch64/sme/acle-asm/st1_ver_vnum_za128.c |  77 ++++
 .../aarch64/sme/acle-asm/st1_ver_vnum_za16.c  | 123 +++++
 .../aarch64/sme/acle-asm/st1_ver_vnum_za32.c  | 123 +++++
 .../aarch64/sme/acle-asm/st1_ver_vnum_za64.c  | 112 +++++
 .../aarch64/sme/acle-asm/st1_ver_vnum_za8.c   | 112 +++++
 .../aarch64/sme/acle-asm/st1_ver_za128.c      |  83 ++++
 .../aarch64/sme/acle-asm/st1_ver_za16.c       | 126 +++++
 .../aarch64/sme/acle-asm/st1_ver_za32.c       | 125 +++++
 .../aarch64/sme/acle-asm/st1_ver_za64.c       | 105 +++++
 .../aarch64/sme/acle-asm/st1_ver_za8.c        |  95 ++++
 .../aarch64/sme/acle-asm/str_vnum_za_s.c      | 147 ++++++
 .../aarch64/sme/acle-asm/str_vnum_za_sc.c     | 148 ++++++
 .../aarch64/sme/acle-asm/str_za_s.c           | 124 +++++
 .../aarch64/sme/acle-asm/str_za_sc.c          |  71 +++
 .../aarch64/sme/acle-asm/sumopa_za32.c        |  30 ++
 .../aarch64/sme/acle-asm/sumopa_za64.c        |  32 ++
 .../aarch64/sme/acle-asm/sumops_za32.c        |  30 ++
 .../aarch64/sme/acle-asm/sumops_za64.c        |  32 ++
 .../aarch64/sme/acle-asm/test_sme_acle.h      |  62 +++
 .../aarch64/sme/acle-asm/undef_za.c           |  33 ++
 .../aarch64/sme/acle-asm/usmopa_za32.c        |  30 ++
 .../aarch64/sme/acle-asm/usmopa_za64.c        |  32 ++
 .../aarch64/sme/acle-asm/usmops_za32.c        |  30 ++
 .../aarch64/sme/acle-asm/usmops_za64.c        |  32 ++
 .../aarch64/sme/acle-asm/write_hor_za128.c    | 193 ++++++++
 .../aarch64/sme/acle-asm/write_hor_za16.c     | 133 ++++++
 .../aarch64/sme/acle-asm/write_hor_za32.c     | 143 ++++++
 .../aarch64/sme/acle-asm/write_hor_za64.c     | 133 ++++++
 .../aarch64/sme/acle-asm/write_hor_za8.c      |  93 ++++
 .../aarch64/sme/acle-asm/write_ver_za128.c    | 193 ++++++++
 .../aarch64/sme/acle-asm/write_ver_za16.c     | 133 ++++++
 .../aarch64/sme/acle-asm/write_ver_za32.c     | 143 ++++++
 .../aarch64/sme/acle-asm/write_ver_za64.c     | 133 ++++++
 .../aarch64/sme/acle-asm/write_ver_za8.c      |  93 ++++
 .../aarch64/sme/acle-asm/zero_mask_za.c       | 130 ++++++
 .../gcc.target/aarch64/sme/acle-asm/zero_za.c |  11 +
 .../aarch64/sve/acle/asm/test_sve_acle.h      |  14 +-
 .../sve/acle/general-c/binary_za_int_m_1.c    |  50 ++
 .../sve/acle/general-c/binary_za_m_1.c        |  49 ++
 .../sve/acle/general-c/binary_za_m_2.c        |  11 +
 .../sve/acle/general-c/binary_za_uint_m_1.c   |  50 ++
 .../aarch64/sve/acle/general-c/func_redef_4.c |   3 +-
 .../aarch64/sve/acle/general-c/func_redef_5.c |   1 +
 .../aarch64/sve/acle/general-c/read_za_m_1.c  |  48 ++
 .../aarch64/sve/acle/general-c/unary_za_m_1.c |  49 ++
 .../aarch64/sve/acle/general-c/write_za_m_1.c |  48 ++
 gcc/testsuite/lib/target-supports.exp         |   3 +-
 140 files changed, 13814 insertions(+), 73 deletions(-)
 create mode 100644 gcc/config/aarch64/aarch64-sve-builtins-sme.cc
 create mode 100644 gcc/config/aarch64/aarch64-sve-builtins-sme.def
 create mode 100644 gcc/config/aarch64/aarch64-sve-builtins-sme.h
 create mode 100644 gcc/config/aarch64/arm_sme.h
 create mode 100644 gcc/testsuite/g++.target/aarch64/sme/aarch64-sme-acle-asm.exp
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/aarch64-sme-acle-asm.exp
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/addha_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/addha_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/addva_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/addva_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/arm_has_sme_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/arm_in_streaming_mode_ns.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/arm_in_streaming_mode_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/arm_in_streaming_mode_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/cntsb_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/cntsb_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/cntsd_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/cntsd_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/cntsh_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/cntsh_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/cntsw_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/cntsw_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_hor_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ld1_ver_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ldr_vnum_za_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ldr_vnum_za_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ldr_za_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/ldr_za_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/mopa_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/mopa_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/mops_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/mops_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_hor_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/read_ver_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_hor_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/st1_ver_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/str_vnum_za_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/str_vnum_za_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/str_za_s.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/str_za_sc.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumopa_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumopa_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumops_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/sumops_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/test_sme_acle.h
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/undef_za.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmopa_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmopa_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmops_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/usmops_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_hor_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za128.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/write_ver_za8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_mask_za.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_za.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_int_m_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_m_2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_za_uint_m_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/read_za_m_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_za_m_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/write_za_m_1.c