]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Daily bump.
authorGCC Administrator <gccadmin@gcc.gnu.org>
Wed, 6 Dec 2023 00:17:50 +0000 (00:17 +0000)
committerGCC Administrator <gccadmin@gcc.gnu.org>
Wed, 6 Dec 2023 00:17:50 +0000 (00:17 +0000)
16 files changed:
gcc/ChangeLog
gcc/DATESTAMP
gcc/ada/ChangeLog
gcc/c-family/ChangeLog
gcc/c/ChangeLog
gcc/cp/ChangeLog
gcc/d/ChangeLog
gcc/fortran/ChangeLog
gcc/jit/ChangeLog
gcc/lto/ChangeLog
gcc/m2/ChangeLog
gcc/testsuite/ChangeLog
libgcc/ChangeLog
libgfortran/ChangeLog
libiberty/ChangeLog
libstdc++-v3/ChangeLog

index 632072f55a06813aed37dfbc629108aa2bf26fb9..23c65f471eb6de4587fe94783d3f2cdd4ec7539b 100644 (file)
+2023-12-06  Alexandre Oliva  <oliva@adacore.com>
+
+       * Makefile.in (OBJS): Add ipa-strub.o.
+       (GTFILES): Add ipa-strub.cc.
+       * builtins.def (BUILT_IN_STACK_ADDRESS): New.
+       (BUILT_IN___STRUB_ENTER): New.
+       (BUILT_IN___STRUB_UPDATE): New.
+       (BUILT_IN___STRUB_LEAVE): New.
+       * builtins.cc: Include ipa-strub.h.
+       (STACK_STOPS, STACK_UNSIGNED): Define.
+       (expand_builtin_stack_address): New.
+       (expand_builtin_strub_enter): New.
+       (expand_builtin_strub_update): New.
+       (expand_builtin_strub_leave): New.
+       (expand_builtin): Call them.
+       * common.opt (fstrub=*): New options.
+       * doc/extend.texi (strub): New type attribute.
+       (__builtin_stack_address): New function.
+       (Stack Scrubbing): New section.
+       * doc/invoke.texi (-fstrub=*): New options.
+       (-fdump-ipa-*): New passes.
+       * gengtype-lex.l: Ignore multi-line pp-directives.
+       * ipa-inline.cc: Include ipa-strub.h.
+       (can_inline_edge_p): Test strub_inlinable_to_p.
+       * ipa-split.cc: Include ipa-strub.h.
+       (execute_split_functions): Test strub_splittable_p.
+       * ipa-strub.cc, ipa-strub.h: New.
+       * passes.def: Add strub_mode and strub passes.
+       * tree-cfg.cc (gimple_verify_flow_info): Note on debug stmts.
+       * tree-pass.h (make_pass_ipa_strub_mode): Declare.
+       (make_pass_ipa_strub): Declare.
+       (make_pass_ipa_function_and_variable_visibility): Fix
+       formatting.
+       * tree-ssa-ccp.cc (optimize_stack_restore): Keep restores
+       before strub leave.
+       * attribs.cc: Include ipa-strub.h.
+       (decl_attributes): Support applying attributes to function
+       type, rather than pointer type, at handler's request.
+       (comp_type_attributes): Combine strub_comptypes and target
+       comp_type results.
+       * doc/tm.texi.in (TARGET_STRUB_USE_DYNAMIC_ARRAY): New.
+       (TARGET_STRUB_MAY_USE_MEMSET): New.
+       * doc/tm.texi: Rebuilt.
+       * cgraph.h (symtab_node::reset): Add preserve_comdat_group
+       param, with a default.
+       * cgraphunit.cc (symtab_node::reset): Use it.
+
+2023-12-05  Juzhe-Zhong  <juzhe.zhong@rivai.ai>
+
+       PR target/112851
+       PR target/112852
+       * config/riscv/riscv-v.cc (vls_mode_valid_p): Block VLSmodes according
+       TARGET_MAX_LMUL and BITS_PER_RISCV_VECTOR.
+
+2023-12-05  David Faust  <david.faust@oracle.com>
+
+       PR debug/112849
+       * btfout.cc (btf_collect_datasec): Avoid incorrectly creating an
+       entry in a BTF_KIND_DATASEC record for extern variable decls without
+       a known section.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/112606
+       * config/rs6000/rs6000.md (copysign<mode>3): Change predicate
+       of the last argument from gpc_reg_operand to any_operand.  If
+       operands[2] is CONST_DOUBLE, emit abs or neg abs depending on
+       its sign, otherwise if it doesn't satisfy gpc_reg_operand,
+       force it to REG using copy_to_mode_reg.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * attribs.cc (handle_ignored_attributes_option): Add extra
+       braces to work around PR 16333 in older compilers.
+       * config/aarch64/aarch64.cc (aarch64_gnu_attribute_table): Likewise.
+       (aarch64_arm_attribute_table): Likewise.
+       * config/arm/arm.cc (arm_gnu_attribute_table): Likewise.
+       * config/i386/i386-options.cc (ix86_gnu_attribute_table): Likewise.
+       * config/ia64/ia64.cc (ia64_gnu_attribute_table): Likewise.
+       * config/rs6000/rs6000.cc (rs6000_gnu_attribute_table): Likewise.
+       * target-def.h (TARGET_GNU_ATTRIBUTES): Likewise.
+       * genhooks.cc (emit_init_macros): Likewise, when emitting the
+       instantiation of TARGET_ATTRIBUTE_TABLE.
+       * langhooks-def.h (LANG_HOOKS_INITIALIZER): Likewise, when
+       instantiating LANG_HOOKS_ATTRIBUTE_TABLE.
+       (LANG_HOOKS_ATTRIBUTE_TABLE): Define to be empty by default.
+       * target.def (attribute_table): Likewise.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/112860
+       * passes.cc (should_skip_pass_p): Do not skip ISEL.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR sanitizer/111736
+       * asan.cc (asan_protect_global): Do not protect globals
+       in non-generic address-space.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/92606
+       * ipa-icf.cc (sem_variable::equals_wpa): Compare address-spaces.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/112830
+       * gimplify.cc (gimplify_modify_expr): Avoid turning aggregate
+       copy of non-generic address-spaces to memcpy.
+       (gimplify_modify_expr_to_memcpy): Assert we are dealing with
+       a copy inside the generic address-space.
+       (gimplify_modify_expr_to_memset): Likewise.
+       * tree-cfg.cc (verify_gimple_assign_single): Allow
+       WITH_SIZE_EXPR as part of the RHS of an assignment.
+       * builtins.cc (get_memory_address): Assert we are dealing
+       with the generic address-space.
+       * tree-ssa-dce.cc (ref_may_be_aliased): Handle WITH_SIZE_EXPR.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/109689
+       PR tree-optimization/112856
+       * cfgloopmanip.h (unloop_loops): Adjust API.
+       * tree-ssa-loop-ivcanon.cc (unloop_loops): Take edges_to_remove
+       as parameter.
+       (canonicalize_induction_variables): Adjust.
+       (tree_unroll_loops_completely): Likewise.
+       * tree-ssa-loop-ch.cc (ch_base::copy_headers): Rewrite into
+       LC SSA if we unlooped some loops and we are in LC SSA.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/112845
+       * config/i386/i386.md (movabsq $(i32 << shift), r64 peephole2): FAIL
+       if the new immediate is ix86_endbr_immediate_operand.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.h (TARGET_STREAMING_SME2): New macro.
+       (P_ALIASES): Likewise.
+       (REGISTER_NAMES): Add pn aliases of the predicate registers.
+       (W8_W11_REGNUM_P): New macro.
+       (W8_W11_REGS): New register class.
+       (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Update accordingly.
+       * config/aarch64/aarch64.cc (aarch64_print_operand): Add support
+       for %K, which prints a predicate as a counter.  Handle tuples of
+       predicates.
+       (aarch64_regno_regclass): Handle W8_W11_REGS.
+       (aarch64_class_max_nregs): Likewise.
+       * config/aarch64/constraints.md (Uci, Uw2, Uw4): New constraints.
+       (x, y): Move further up file.
+       (Uph): Redefine as the high predicate registers, renaming the old
+       constraint to...
+       (Uih): ...this.
+       * config/aarch64/predicates.md (const_0_to_7_operand): New predicate.
+       (const_0_to_4_step_4_operand, const_0_to_6_step_2_operand): Likewise.
+       (const_0_to_12_step_4_operand, const_0_to_14_step_2_operand): Likewise.
+       (aarch64_simd_shift_imm_qi): Use const_0_to_7_operand.
+       * config/aarch64/iterators.md (VNx16SI_ONLY, VNx8SI_ONLY)
+       (VNx8DI_ONLY, SVE_FULL_BHSIx2, SVE_FULL_HF, SVE_FULL_SIx2_SDIx4)
+       (SVE_FULL_BHS, SVE_FULLx24, SVE_DIx24, SVE_BHSx24, SVE_Ix24)
+       (SVE_Fx24, SVE_SFx24, SME_ZA_BIx24, SME_ZA_BHIx124, SME_ZA_BHIx24)
+       (SME_ZA_HFx124, SME_ZA_HFx24, SME_ZA_HIx124, SME_ZA_HIx24)
+       (SME_ZA_SDIx24, SME_ZA_SDFx24): New mode iterators.
+       (UNSPEC_REVD, UNSPEC_CNTP_C, UNSPEC_PEXT, UNSPEC_PEXTx2): New unspecs.
+       (UNSPEC_PSEL, UNSPEC_PTRUE_C, UNSPEC_SQRSHR, UNSPEC_SQRSHRN)
+       (UNSPEC_SQRSHRU, UNSPEC_SQRSHRUN, UNSPEC_UQRSHR, UNSPEC_UQRSHRN)
+       (UNSPEC_UZP, UNSPEC_UZPQ, UNSPEC_ZIP, UNSPEC_ZIPQ, UNSPEC_BFMLSLB)
+       (UNSPEC_BFMLSLT, UNSPEC_FCVTN, UNSPEC_FDOT, UNSPEC_SQCVT): Likewise.
+       (UNSPEC_SQCVTN, UNSPEC_SQCVTU, UNSPEC_SQCVTUN, UNSPEC_UQCVT): Likewise.
+       (UNSPEC_SME_ADD, UNSPEC_SME_ADD_WRITE, UNSPEC_SME_BMOPA): Likewise.
+       (UNSPEC_SME_BMOPS, UNSPEC_SME_FADD, UNSPEC_SME_FDOT, UNSPEC_SME_FVDOT)
+       (UNSPEC_SME_FMLA, UNSPEC_SME_FMLS, UNSPEC_SME_FSUB, UNSPEC_SME_READ)
+       (UNSPEC_SME_SDOT, UNSPEC_SME_SVDOT, UNSPEC_SME_SMLA, UNSPEC_SME_SMLS)
+       (UNSPEC_SME_SUB, UNSPEC_SME_SUB_WRITE, UNSPEC_SME_SUDOT): Likewise.
+       (UNSPEC_SME_SUVDOT, UNSPEC_SME_UDOT, UNSPEC_SME_UVDOT): Likewise.
+       (UNSPEC_SME_UMLA, UNSPEC_SME_UMLS, UNSPEC_SME_USDOT): Likewise.
+       (UNSPEC_SME_USVDOT, UNSPEC_SME_WRITE): Likewise.
+       (Vetype, VNARROW, V2XWIDE, Ventype, V_INT_EQUIV, v_int_equiv)
+       (VSINGLE, vsingle, b): Add tuple modes.
+       (v2xwide, za32_offset_range, za64_offset_range, za32_long)
+       (za32_last_offset, vg_modifier, z_suffix, aligned_operand)
+       (aligned_fpr): New mode attributes.
+       (SVE_INT_BINARY_MULTI, SVE_INT_BINARY_SINGLE, SVE_INT_BINARY_MULTI)
+       (SVE_FP_BINARY_MULTI): New int iterators.
+       (SVE_BFLOAT_TERNARY_LONG): Add UNSPEC_BFMLSLB and UNSPEC_BFMLSLT.
+       (SVE_BFLOAT_TERNARY_LONG_LANE): Likewise.
+       (SVE_WHILE_ORDER, SVE2_INT_SHIFT_IMM_NARROWxN, SVE_QCVTxN)
+       (SVE2_SFx24_UNARY, SVE2_x24_PERMUTE, SVE2_x24_PERMUTEQ)
+       (UNSPEC_REVD_ONLY, SME2_INT_MOP, SME2_BMOP, SME_BINARY_SLICE_SDI)
+       (SME_BINARY_SLICE_SDF, SME_BINARY_WRITE_SLICE_SDI, SME_INT_DOTPROD)
+       (SME_INT_DOTPROD_LANE, SME_FP_DOTPROD, SME_FP_DOTPROD_LANE)
+       (SME_INT_TERNARY_SLICE, SME_FP_TERNARY_SLICE, BHSD_BITS)
+       (LUTI_BITS): New int iterators.
+       (optab, sve_int_op): Handle the new unspecs.
+       (sme_int_op, has_16bit_form): New int attributes.
+       (bits_etype): Handle 64.
+       * config/aarch64/aarch64.md (UNSPEC_LD1_SVE_COUNT): New unspec.
+       (UNSPEC_ST1_SVE_COUNT, UNSPEC_LDNT1_SVE_COUNT): Likewise.
+       (UNSPEC_STNT1_SVE_COUNT): Likewise.
+       * config/aarch64/atomics.md (cas_short_expected_imm): Use Uhi
+       rather than Uph for HImode immediates.
+       * config/aarch64/aarch64-sve.md (@aarch64_ld1<SVE_FULLx24:mode>)
+       (@aarch64_ldnt1<SVE_FULLx24:mode>, @aarch64_st1<SVE_FULLx24:mode>)
+       (@aarch64_stnt1<SVE_FULLx24:mode>): New patterns.
+       (@aarch64_<sur>dot_prod_lane<vsi2qi>): Extend to...
+       (@aarch64_<sur>dot_prod_lane<SVE_FULL_SDI:mode><SVE_FULL_BHI:mode>)
+       (@aarch64_<sur>dot_prod_lane<VNx4SI_ONLY:mode><VNx16QI_ONLY:mode>):
+       ...these new patterns.
+       (SVE_WHILE_B, SVE_WHILE_B_X2, SVE_WHILE_C): New constants.  Add
+       SVE_WHILE_B to existing while patterns.
+       * config/aarch64/aarch64-sve2.md (@aarch64_sve_ptrue_c<BHSD_BITS>)
+       (@aarch64_sve_pext<BHSD_BITS>, @aarch64_sve_pext<BHSD_BITS>x2)
+       (@aarch64_sve_psel<BHSD_BITS>, *aarch64_sve_psel<BHSD_BITS>_plus)
+       (@aarch64_sve_cntp_c<BHSD_BITS>, <frint_pattern><mode>2)
+       (<optab><mode>3, *<optab><mode>3, @aarch64_sve_single_<optab><mode>)
+       (@aarch64_sve_<sve_int_op><mode>): New patterns.
+       (@aarch64_sve_single_<sve_int_op><mode>, @aarch64_sve_<su>clamp<mode>)
+       (*aarch64_sve_<su>clamp<mode>_x, @aarch64_sve_<su>clamp_single<mode>)
+       (@aarch64_sve_fclamp<mode>, *aarch64_sve_fclamp<mode>_x)
+       (@aarch64_sve_fclamp_single<mode>, <optab><mode><v2xwide>2)
+       (@aarch64_sve_<sur>dotvnx4sivnx8hi): New patterns.
+       (@aarch64_sve_<maxmin_uns_op><mode>): Likewise.
+       (*aarch64_sve_<maxmin_uns_op><mode>): Likewise.
+       (@aarch64_sve_single_<maxmin_uns_op><mode>): Likewise.
+       (aarch64_sve_fdotvnx4sfvnx8hf): Likewise.
+       (aarch64_fdot_prod_lanevnx4sfvnx8hf): Likewise.
+       (@aarch64_sve_<optab><VNx16QI_ONLY:mode><VNx16SI_ONLY:mode>): Likewise.
+       (@aarch64_sve_<optab><VNx8HI_ONLY:mode><VNx8SI_ONLY:mode>): Likewise.
+       (@aarch64_sve_<optab><VNx8HI_ONLY:mode><VNx8DI_ONLY:mode>): Likewise.
+       (truncvnx8sf<mode>2, @aarch64_sve_cvtn<mode>): Likewise.
+       (<optab><v_int_equiv><mode>2, <optab><mode><v_int_equiv>2): Likewise.
+       (@aarch64_sve_sel<mode>): Likewise.
+       (@aarch64_sve_while<while_optab_cmp>_b<BHSD_BITS>_x2): Likewise.
+       (@aarch64_sve_while<while_optab_cmp>_c<BHSD_BITS>): Likewise.
+       (@aarch64_pred_<optab><mode>, @cond_<optab><mode>): Likewise.
+       (@aarch64_sve_<optab><mode>): Likewise.
+       * config/aarch64/aarch64-sme.md (@aarch64_sme_<optab><mode><mode>)
+       (*aarch64_sme_<optab><mode><mode>_plus, @aarch64_sme_read<mode>)
+       (*aarch64_sme_read<mode>_plus, @aarch64_sme_write<mode>): New patterns.
+       (*aarch64_sme_write<mode>_plus aarch64_sme_zero_zt0): Likewise.
+       (@aarch64_sme_<optab><mode>, *aarch64_sme_<optab><mode>_plus)
+       (@aarch64_sme_single_<optab><mode>): Likewise.
+       (*aarch64_sme_single_<optab><mode>_plus): Likewise.
+       (@aarch64_sme_<optab><SME_ZA_SDI:mode><SME_ZA_BHIx24:mode>)
+       (*aarch64_sme_<optab><SME_ZA_SDI:mode><SME_ZA_BHIx24:mode>_plus)
+       (@aarch64_sme_single_<optab><SME_ZA_SDI:mode><SME_ZA_BHIx24:mode>)
+       (*aarch64_sme_single_<optab><SME_ZA_SDI:mode><SME_ZA_BHIx24:mode>_plus)
+       (@aarch64_sme_single_sudot<VNx4SI_ONLY:mode><SME_ZA_BIx24:mode>)
+       (*aarch64_sme_single_sudot<VNx4SI_ONLY:mode><SME_ZA_BIx24:mode>_plus)
+       (@aarch64_sme_lane_<optab><SME_ZA_SDI:mode><SME_ZA_BHIx24:mode>)
+       (*aarch64_sme_lane_<optab><SME_ZA_SDI:mode><SME_ZA_BHIx24:mode>_plus)
+       (@aarch64_sme_<optab><VNx4SI_ONLY:mode><SVE_FULL_BHI:mode>)
+       (*aarch64_sme_<optab><VNx4SI_ONLY:mode><SVE_FULL_BHI:mode>_plus)
+       (@aarch64_sme_<optab><VNx4SI_ONLY:mode><SME_ZA_BHIx24:mode>)
+       (*aarch64_sme_<optab><VNx4SI_ONLY:mode><SME_ZA_BHIx24:mode>_plus)
+       (@aarch64_sme_single_<optab><VNx4SI_ONLY:mode><SME_ZA_BHIx24:mode>)
+       (*aarch64_sme_single_<optab><VNx4SI_ONLY:mode><SME_ZA_BHIx24:mode>_plus)
+       (@aarch64_sme_lane_<optab><VNx4SI_ONLY:mode><SME_ZA_BHIx124:mode>)
+       (*aarch64_sme_lane_<optab><VNx4SI_ONLY:mode><SME_ZA_BHIx124:mode>)
+       (@aarch64_sme_<optab><VNx2DI_ONLY:mode><VNx8HI_ONLY:mode>)
+       (*aarch64_sme_<optab><VNx2DI_ONLY:mode><VNx8HI_ONLY:mode>_plus)
+       (@aarch64_sme_<optab><VNx2DI_ONLY:mode><SME_ZA_HIx24:mode>)
+       (*aarch64_sme_<optab><VNx2DI_ONLY:mode><SME_ZA_HIx24:mode>_plus)
+       (@aarch64_sme_single_<optab><VNx2DI_ONLY:mode><SME_ZA_HIx24:mode>)
+       (*aarch64_sme_single_<optab><VNx2DI_ONLY:mode><SME_ZA_HIx24:mode>_plus)
+       (@aarch64_sme_lane_<optab><VNx2DI_ONLY:mode><SME_ZA_HIx124:mode>)
+       (*aarch64_sme_lane_<optab><VNx2DI_ONLY:mode><SME_ZA_HIx124:mode>)
+       (@aarch64_sme_<optab><VNx4SI_ONLY:mode><VNx8HI_ONLY:mode>)
+       (@aarch64_sme_<optab><VNx4SI_ONLY:mode><VNx4SI_ONLY:mode>)
+       (@aarch64_sme_<optab><VNx4SI_ONLY:mode><SME_ZA_HFx24:mode>)
+       (*aarch64_sme_<optab><VNx4SI_ONLY:mode><SME_ZA_HFx24:mode>_plus)
+       (@aarch64_sme_single_<optab><VNx4SI_ONLY:mode><SME_ZA_HFx24:mode>)
+       (*aarch64_sme_single_<optab><VNx4SI_ONLY:mode><SME_ZA_HFx24:mode>_plus)
+       (@aarch64_sme_lane_<optab><VNx4SI_ONLY:mode><SME_ZA_HFx24:mode>)
+       (*aarch64_sme_lane_<optab><VNx4SI_ONLY:mode><SME_ZA_HFx24:mode>_plus)
+       (@aarch64_sme_<optab><SME_ZA_SDF_I:mode><SME_ZA_SDFx24:mode>)
+       (*aarch64_sme_<optab><SME_ZA_SDF_I:mode><SME_ZA_SDFx24:mode>_plus)
+       (@aarch64_sme_single_<optab><SME_ZA_SDF_I:mode><SME_ZA_SDFx24:mode>)
+       (*aarch64_sme_single_<optab><SME_ZA_SDF_I:mode><SME_ZA_SDFx24:mode>_plus)
+       (@aarch64_sme_lane_<optab><SME_ZA_SDF_I:mode><SME_ZA_SDFx24:mode>)
+       (*aarch64_sme_lane_<optab><SME_ZA_SDF_I:mode><SME_ZA_SDFx24:mode>)
+       (@aarch64_sme_<optab><VNx4SI_ONLY:mode><SVE_FULL_HF:mode>)
+       (*aarch64_sme_<optab><VNx4SI_ONLY:mode><SVE_FULL_HF:mode>_plus)
+       (@aarch64_sme_lane_<optab><VNx4SI_ONLY:mode><SME_ZA_HFx124:mode>)
+       (*aarch64_sme_lane_<optab><VNx4SI_ONLY:mode><SME_ZA_HFx124:mode>)
+       (@aarch64_sme_lut<LUTI_BITS><mode>): Likewise.
+       (UNSPEC_SME_LUTI): New unspec.
+       * config/aarch64/aarch64-sve-builtins.def (single): New mode suffix.
+       (c8, c16, c32, c64): New type suffixes.
+       (vg1x2, vg1x4, vg2, vg2x1, vg2x2, vg2x4, vg4, vg4x1, vg4x2)
+       (vg4x4): New group suffixes.
+       * config/aarch64/aarch64-sve-builtins.h (CP_READ_ZT0)
+       (CP_WRITE_ZT0): New constants.
+       (get_svbool_t): Delete.
+       (function_resolver::report_mismatched_num_vectors): New member
+       function.
+       (function_resolver::resolve_conversion): Likewise.
+       (function_resolver::infer_predicate_type): Likewise.
+       (function_resolver::infer_64bit_scalar_integer_pair): Likewise.
+       (function_resolver::require_matching_predicate_type): Likewise.
+       (function_resolver::require_nonscalar_type): Likewise.
+       (function_resolver::finish_opt_single_resolution): Likewise.
+       (function_resolver::require_derived_vector_type): Add an
+       expected_num_vectors parameter.
+       (function_expander::map_to_rtx_codes): Add an extra parameter
+       for unconditional FP unspecs.
+       (function_instance::gp_type_index): New member function.
+       (function_instance::gp_type): Likewise.
+       (function_instance::gp_mode): Handle multi-vector operations.
+       * config/aarch64/aarch64-sve-builtins.cc (TYPES_all_count)
+       (TYPES_all_pred_count, TYPES_c, TYPES_bhs_data, TYPES_bhs_widen)
+       (TYPES_hs_data, TYPES_cvt_h_s_float, TYPES_cvt_s_s, TYPES_qcvt_x2)
+       (TYPES_qcvt_x4, TYPES_qrshr_x2, TYPES_qrshru_x2, TYPES_qrshr_x4)
+       (TYPES_qrshru_x4, TYPES_while_x, TYPES_while_x_c, TYPES_s_narrow_fsu)
+       (TYPES_za_s_b_signed, TYPES_za_s_b_unsigned, TYPES_za_s_b_integer)
+       (TYPES_za_s_h_integer, TYPES_za_s_h_data, TYPES_za_s_unsigned)
+       (TYPES_za_s_float, TYPES_za_s_data, TYPES_za_d_h_integer): New type
+       macros.
+       (groups_x2, groups_x12, groups_x4, groups_x24, groups_x124)
+       (groups_vg1x2, groups_vg1x4, groups_vg1x24, groups_vg2, groups_vg4)
+       (groups_vg24): New group arrays.
+       (function_instance::reads_global_state_p): Handle CP_READ_ZT0.
+       (function_instance::modifies_global_state_p): Handle CP_WRITE_ZT0.
+       (add_shared_state_attribute): Handle zt0 state.
+       (function_builder::add_overloaded_functions): Skip MODE_single
+       for non-tuple groups.
+       (function_resolver::report_mismatched_num_vectors): New function.
+       (function_resolver::resolve_to): Add a fallback error message for
+       the general two-type case.
+       (function_resolver::resolve_conversion): New function.
+       (function_resolver::infer_predicate_type): Likewise.
+       (function_resolver::infer_64bit_scalar_integer_pair): Likewise.
+       (function_resolver::require_matching_predicate_type): Likewise.
+       (function_resolver::require_matching_vector_type): Specifically
+       diagnose mismatched vector counts.
+       (function_resolver::require_derived_vector_type): Add an
+       expected_num_vectors parameter.  Extend to handle cases where
+       tuples are expected.
+       (function_resolver::require_nonscalar_type): New function.
+       (function_resolver::check_gp_argument): Use gp_type_index rather
+       than hard-coding VECTOR_TYPE_svbool_t.
+       (function_resolver::finish_opt_single_resolution): New function.
+       (function_checker::require_immediate_either_or): Remove hard-coded
+       constants.
+       (function_expander::direct_optab_handler): New function.
+       (function_expander::use_pred_x_insn): Only add a strictness flag
+       is the insn has an operand for it.
+       (function_expander::map_to_rtx_codes): Take an unconditional
+       FP unspec as an extra parameter.  Handle tuples and MODE_single.
+       (function_expander::map_to_unspecs): Handle tuples and MODE_single.
+       * config/aarch64/aarch64-sve-builtins-functions.h (read_zt0)
+       (write_zt0): New typedefs.
+       (full_width_access::memory_vector): Use the function's
+       vectors_per_tuple.
+       (rtx_code_function_base): Add an optional unconditional FP unspec.
+       (rtx_code_function::expand): Update accordingly.
+       (rtx_code_function_rotated::expand): Likewise.
+       (unspec_based_function_exact_insn::expand): Use tuple_mode instead
+       of vector_mode.
+       (unspec_based_uncond_function): New typedef.
+       (cond_or_uncond_unspec_function): New class.
+       (sme_1mode_function::expand): Handle single forms.
+       (sme_2mode_function_t): Likewise, adding a template parameter for them.
+       (sme_2mode_function): Update accordingly.
+       (sme_2mode_lane_function): New typedef.
+       (multireg_permute): New class.
+       (class integer_conversion): Likewise.
+       (while_comparison::expand): Handle svcount_t and svboolx2_t results.
+       * config/aarch64/aarch64-sve-builtins-shapes.h
+       (binary_int_opt_single_n, binary_opt_single_n, binary_single)
+       (binary_za_slice_lane, binary_za_slice_int_opt_single)
+       (binary_za_slice_opt_single, binary_za_slice_uint_opt_single)
+       (binaryx, clamp, compare_scalar_count, count_pred_c)
+       (dot_za_slice_int_lane, dot_za_slice_lane, dot_za_slice_uint_lane)
+       (extract_pred, inherent_zt, ldr_zt, read_za, read_za_slice)
+       (select_pred, shift_right_imm_narrowxn, storexn, str_zt)
+       (unary_convertxn, unary_za_slice, unaryxn, write_za)
+       (write_za_slice): Declare.
+       * config/aarch64/aarch64-sve-builtins-shapes.cc
+       (za_group_is_pure_overload): New function.
+       (apply_predication): Use the function's gp_type for the predicate,
+       instead of hard-coding the use of svbool_t.
+       (parse_element_type): Add support for "c" (svcount_t).
+       (parse_type): Add support for "c0" and "c1" (conversion destination
+       and source types).
+       (binary_za_slice_lane_base): New class.
+       (binary_za_slice_opt_single_base): Likewise.
+       (load_contiguous_base::resolve): Pass the group suffix to r.resolve.
+       (luti_lane_zt_base): New class.
+       (binary_int_opt_single_n, binary_opt_single_n, binary_single)
+       (binary_za_slice_lane, binary_za_slice_int_opt_single)
+       (binary_za_slice_opt_single, binary_za_slice_uint_opt_single)
+       (binaryx, clamp): New shapes.
+       (compare_scalar_def::build): Allow the return type to be a tuple.
+       (compare_scalar_def::expand): Pass the group suffix to r.resolve.
+       (compare_scalar_count, count_pred_c, dot_za_slice_int_lane)
+       (dot_za_slice_lane, dot_za_slice_uint_lane, extract_pred, inherent_zt)
+       (ldr_zt, read_za, read_za_slice, select_pred, shift_right_imm_narrowxn)
+       (storexn, str_zt): New shapes.
+       (ternary_qq_lane_def, ternary_qq_opt_n_def): Replace with...
+       (ternary_qq_or_011_lane_def, ternary_qq_opt_n_or_011_def): ...these
+       new classes.  Allow a second suffix that specifies the type of the
+       second vector argument, and that is used to derive the third.
+       (unary_def::build): Extend to handle tuple types.
+       (unary_convert_def::build): Use the new c0 and c1 format specifiers.
+       (unary_convertxn, unary_za_slice, unaryxn, write_za): New shapes.
+       (write_za_slice): Likewise.
+       * config/aarch64/aarch64-sve-builtins-base.cc (svbic_impl::expand)
+       (svext_bhw_impl::expand): Update call to map_to_rtx_costs.
+       (svcntp_impl::expand): Handle svcount_t variants.
+       (svcvt_impl::expand): Handle unpredicated conversions separately,
+       dealing with tuples.
+       (svdot_impl::expand): Handle 2-way dot products.
+       (svdotprod_lane_impl::expand): Likewise.
+       (svld1_impl::fold): Punt on tuple loads.
+       (svld1_impl::expand): Handle tuple loads.
+       (svldnt1_impl::expand): Likewise.
+       (svpfalse_impl::fold): Punt on svcount_t forms.
+       (svptrue_impl::fold): Likewise.
+       (svptrue_impl::expand): Handle svcount_t forms.
+       (svrint_impl): New class.
+       (svsel_impl::fold): Punt on tuple forms.
+       (svsel_impl::expand): Handle tuple forms.
+       (svst1_impl::fold): Punt on tuple loads.
+       (svst1_impl::expand): Handle tuple loads.
+       (svstnt1_impl::expand): Likewise.
+       (svwhilelx_impl::fold): Punt on tuple forms.
+       (svdot_lane): Use UNSPEC_FDOT.
+       (svmax, svmaxnm, svmin, svminmm): Add unconditional FP unspecs.
+       (rinta, rinti, rintm, rintn, rintp, rintx, rintz): Use svrint_impl.
+       * config/aarch64/aarch64-sve-builtins-base.def (svcreate2, svget2)
+       (svset2, svundef2): Add _b variants.
+       (svcvt): Use unary_convertxn.
+       (svdot): Use ternary_qq_opt_n_or_011.
+       (svdot_lane): Use ternary_qq_or_011_lane.
+       (svmax, svmaxnm, svmin, svminnm): Use binary_opt_single_n.
+       (svpfalse): Add a form that returns svcount_t results.
+       (svrinta, svrintm, svrintn, svrintp): Use unaryxn.
+       (svsel): Use binaryxn.
+       (svst1, svstnt1): Use storexn.
+       * config/aarch64/aarch64-sve-builtins-sme.h
+       (svadd_za, svadd_write_za, svbmopa_za, svbmops_za, svdot_za)
+       (svdot_lane_za, svldr_zt, svluti2_lane_zt, svluti4_lane_zt)
+       (svmla_za, svmla_lane_za, svmls_za, svmls_lane_za, svread_za)
+       (svstr_zt, svsub_za, svsub_write_za, svsudot_za, svsudot_lane_za)
+       (svsuvdot_lane_za, svusdot_za, svusdot_lane_za, svusvdot_lane_za)
+       (svvdot_lane_za, svwrite_za, svzero_zt): Declare.
+       * config/aarch64/aarch64-sve-builtins-sme.cc (load_store_za_base):
+       Rename to...
+       (load_store_za_zt0_base): ...this and extend to tuples.
+       (load_za_base, store_za_base): Update accordingly.
+       (expand_ldr_str_zt0): New function.
+       (svldr_zt_impl, svluti_lane_zt_impl, svread_za_impl, svstr_zt_impl)
+       (svsudot_za_impl, svwrite_za_impl, svzero_zt_impl): New classes.
+       (svadd_za, svadd_write_za, svbmopa_za, svbmops_za, svdot_za)
+       (svdot_lane_za, svldr_zt, svluti2_lane_zt, svluti4_lane_zt)
+       (svmla_za, svmla_lane_za, svmls_za, svmls_lane_za, svread_za)
+       (svstr_zt, svsub_za, svsub_write_za, svsudot_za, svsudot_lane_za)
+       (svsuvdot_lane_za, svusdot_za, svusdot_lane_za, svusvdot_lane_za)
+       (svvdot_lane_za, svwrite_za, svzero_zt): New functions.
+       * config/aarch64/aarch64-sve-builtins-sme.def: Add SME2 intrinsics.
+       * config/aarch64/aarch64-sve-builtins-sve2.h
+       (svbfmlslb, svbfmlslb_lane, svbfmlslt, svbfmlslt_lane, svclamp)
+       (svcvtn, svpext, svpsel, svqcvt, svqcvtn, svqrshr, svqrshrn)
+       (svqrshru, svqrshrun, svrevd, svunpk, svuzp, svuzpq, svzip)
+       (svzipq): Declare.
+       * config/aarch64/aarch64-sve-builtins-sve2.cc (svclamp_impl)
+       (svcvtn_impl, svpext_impl, svpsel_impl): New classes.
+       (svqrshl_impl::fold): Update for change to svrshl shape.
+       (svrshl_impl::fold): Punt on tuple forms.
+       (svsqadd_impl::expand): Update call to map_to_rtx_codes.
+       (svunpk_impl): New class.
+       (svbfmlslb, svbfmlslb_lane, svbfmlslt, svbfmlslt_lane, svclamp)
+       (svcvtn, svpext, svpsel, svqcvt, svqcvtn, svqrshr, svqrshrn)
+       (svqrshru, svqrshrun, svrevd, svunpk, svuzp, svuzpq, svzip)
+       (svzipq): New functions.
+       * config/aarch64/aarch64-sve-builtins-sve2.def: Add SME2 intrinsics.
+       * config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Define
+       or undefine __ARM_FEATURE_SME2.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.md (ZT0_REGNUM): New constant.
+       (LAST_FAKE_REGNUM): Bump to include it.
+       * config/aarch64/aarch64.h (FIXED_REGISTERS): Add an entry for ZT0.
+       (CALL_REALLY_USED_REGISTERS, REGISTER_NAMES): Likewise.
+       (REG_CLASS_CONTENTS): Likewise.
+       (machine_function): Add zt0_save_buffer.
+       (CUMULATIVE_ARGS): Add shared_zt0_flags;
+       * config/aarch64/aarch64.cc (aarch64_check_state_string): Handle zt0.
+       (aarch64_fntype_pstate_za, aarch64_fndecl_pstate_za): Likewise.
+       (aarch64_function_arg): Add the shared ZT0 flags as an extra
+       limb of the parallel.
+       (aarch64_init_cumulative_args): Initialize shared_zt0_flags.
+       (aarch64_extra_live_on_entry): Handle ZT0_REGNUM.
+       (aarch64_epilogue_uses): Likewise.
+       (aarch64_get_zt0_save_buffer, aarch64_save_zt0): New functions.
+       (aarch64_restore_zt0): Likewise.
+       (aarch64_start_call_args): Reject calls to functions that share
+       ZT0 from functions that have no ZT0 state.  Save ZT0 around shared-ZA
+       calls that do not share ZT0.
+       (aarch64_expand_call): Handle ZT0.  Reject calls to functions that
+       share ZT0 but not ZA from functions with ZA state.
+       (aarch64_end_call_args): Restore ZT0 after calls to shared-ZA functions
+       that do not share ZT0.
+       (aarch64_set_current_function): Require +sme2 for functions that
+       have ZT0 state.
+       (aarch64_function_attribute_inlinable_p): Don't allow functions to
+       be inlined if they have local zt0 state.
+       (AARCH64_IPA_CLOBBERS_ZT0): New constant.
+       (aarch64_update_ipa_fn_target_info): Record asms that clobber ZT0.
+       (aarch64_can_inline_p): Don't inline callees that clobber ZT0
+       into functions that have ZT0 state.
+       (aarch64_comp_type_attributes): Check for compatible ZT0 sharing.
+       (aarch64_optimize_mode_switching): Use mode switching if the
+       function has ZT0 state.
+       (aarch64_mode_emit_local_sme_state): Save and restore ZT0 around
+       calls to private-ZA functions.
+       (aarch64_mode_needed_local_sme_state): Require ZA to be active
+       for instructions that access ZT0.
+       (aarch64_mode_entry): Mark ZA as dead on entry if the function
+       only shares state other than "za" itself.
+       (aarch64_mode_exit): Likewise mark ZA as dead on return.
+       (aarch64_md_asm_adjust): Extend handling of ZA clobbers to ZT0.
+       * config/aarch64/aarch64-c.cc (aarch64_define_unconditional_macros):
+       Define __ARM_STATE_ZT0.
+       * config/aarch64/aarch64-sme.md (UNSPECV_ASM_UPDATE_ZT0): New unspecv.
+       (aarch64_asm_update_zt0): New insn.
+       (UNSPEC_RESTORE_ZT0): New unspec.
+       (aarch64_sme_ldr_zt0, aarch64_restore_zt0): New insns.
+       (aarch64_sme_str_zt0): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-modes.def (VNx32BI): New mode.
+       * config/aarch64/aarch64-protos.h (aarch64_split_double_move): Declare.
+       * config/aarch64/aarch64-sve-builtins.cc
+       (register_tuple_type): Handle tuples of predicates.
+       (handle_arm_sve_h): Define svboolx2_t as a pair of two svbool_ts.
+       * config/aarch64/aarch64-sve.md (movvnx32bi): New insn.
+       * config/aarch64/aarch64.cc
+       (pure_scalable_type_info::piece::get_rtx): Use VNx32BI for pairs
+       of predicates.
+       (pure_scalable_type_info::add_piece): Don't try to form pairs of
+       predicates.
+       (VEC_STRUCT): Generalize comment.
+       (aarch64_classify_vector_mode): Handle VNx32BI.
+       (aarch64_array_mode): Likewise.  Return BLKmode for arrays of
+       predicates that have no associated mode, rather than allowing
+       an integer mode to be chosen.
+       (aarch64_hard_regno_nregs): Handle VNx32BI.
+       (aarch64_hard_regno_mode_ok): Likewise.
+       (aarch64_split_double_move): New function, split out from...
+       (aarch64_split_128bit_move): ...here.
+       (aarch64_ptrue_reg): Tighten assert to aarch64_sve_pred_mode_p.
+       (aarch64_pfalse_reg): Likewise.
+       (aarch64_sve_same_pred_for_ptest_p): Likewise.
+       (aarch64_sme_mode_switch_regs::add_reg): Handle VNx32BI.
+       (aarch64_expand_mov_immediate): Restrict handling of boolean vector
+       constants to single-predicate modes.
+       (aarch64_classify_address): Handle VNx32BI, ensuring that both halves
+       can be addressed.
+       (aarch64_class_max_nregs): Handle VNx32BI.
+       (aarch64_member_type_forces_blk): Don't for BLKmode for svboolx2_t.
+       (aarch64_simd_valid_immediate): Allow all-zeros and all-ones for
+       VNx32BI.
+       (aarch64_mov_operand_p): Restrict predicate constant canonicalization
+       to single-predicate modes.
+       (aarch64_evpc_ext): Generalize exclusion to all predicate modes.
+       (aarch64_evpc_rev_local, aarch64_evpc_dup): Likewise.
+       * config/aarch64/constraints.md (PR_REGS): New predicate.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins-base.cc
+       (svreinterpret_impl::fold): Handle reinterprets between svbool_t
+       and svcount_t.
+       (svreinterpret_impl::expand): Likewise.
+       * config/aarch64/aarch64-sve-builtins-base.def (svreinterpret): Add
+       b<->c forms.
+       * config/aarch64/aarch64-sve-builtins.cc (TYPES_reinterpret_b): New
+       type suffix list.
+       (wrap_type_in_struct, register_type_decl): New functions, split out
+       from...
+       (register_tuple_type): ...here.
+       (register_builtin_types): Handle svcount_t.
+       (handle_arm_sve_h): Don't create tuples of svcount_t.
+       * config/aarch64/aarch64-sve-builtins.def (svcount_t): New type.
+       (c): New type suffix.
+       * config/aarch64/aarch64-sve-builtins.h (TYPE_count): New type class.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * doc/invoke.texi: Document +sme2.
+       * doc/sourcebuild.texi: Document aarch64_sme2.
+       * config/aarch64/aarch64-option-extensions.def (AARCH64_OPT_EXTENSION):
+       Add sme2.
+       * config/aarch64/aarch64.h (AARCH64_ISA_SME2, TARGET_SME2): New macros.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.cc (aarch64_function_ok_for_sibcall):
+       Enforce PSTATE.SM and PSTATE.ZA restrictions.
+       (aarch64_expand_epilogue): Save and restore the arguments
+       to a sibcall around any change to PSTATE.SM.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.cc: Include symbol-summary.h, ipa-prop.h,
+       and ipa-fnsummary.h
+       (aarch64_function_attribute_inlinable_p): New function.
+       (AARCH64_IPA_SM_FIXED, AARCH64_IPA_CLOBBERS_ZA): New constants.
+       (aarch64_need_ipa_fn_target_info): New function.
+       (aarch64_update_ipa_fn_target_info): Likewise.
+       (aarch64_can_inline_p): Restrict the previous ISA flag checks
+       to non-modal features.  Prevent callees that require a particular
+       PSTATE.SM state from being inlined into callers that can't guarantee
+       that state.  Also prevent callees that have ZA state from being
+       inlined into callers that don't.  Finally, prevent callees that
+       clobber ZA from being inlined into callers that have ZA state.
+       (TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P): Define.
+       (TARGET_NEED_IPA_FN_TARGET_INFO): Likewise.
+       (TARGET_UPDATE_IPA_FN_TARGET_INFO): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.cc: Include except.h
+       (aarch64_sme_mode_switch_regs::add_call_preserved_reg): New function.
+       (aarch64_sme_mode_switch_regs::add_call_preserved_regs): Likewise.
+       (aarch64_need_old_pstate_sm): Return true if the function has
+       a nonlocal-goto or exception receiver.
+       (aarch64_switch_pstate_sm_for_landing_pad): New function.
+       (aarch64_switch_pstate_sm_for_jump): Likewise.
+       (pass_switch_pstate_sm::gate): Enable the pass for all
+       streaming and streaming-compatible functions.
+       (pass_switch_pstate_sm::execute): Handle non-local gotos and their
+       receivers.  Handle exception handler entry points.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.cc (aarch64_arm_attribute_table): Add
+       arm::locally_streaming.
+       (aarch64_fndecl_is_locally_streaming): New function.
+       (aarch64_fndecl_sm_state): Handle locally-streaming functions.
+       (aarch64_cfun_enables_pstate_sm): New function.
+       (aarch64_add_offset): Add an argument that specifies whether
+       the streaming vector length should be used instead of the
+       prevailing one.
+       (aarch64_split_add_offset, aarch64_add_sp, aarch64_sub_sp): Likewise.
+       (aarch64_allocate_and_probe_stack_space): Likewise.
+       (aarch64_expand_mov_immediate): Update calls accordingly.
+       (aarch64_need_old_pstate_sm): Return true for locally-streaming
+       streaming-compatible functions.
+       (aarch64_layout_frame): Force all call-preserved Z and P registers
+       to be saved and restored if the function switches PSTATE.SM in the
+       prologue.
+       (aarch64_get_separate_components): Disable shrink-wrapping of
+       such Z and P saves and restores.
+       (aarch64_use_late_prologue_epilogue): New function.
+       (aarch64_expand_prologue): Measure SVE lengths in the streaming
+       vector length for locally-streaming functions, then emit code
+       to enable streaming mode.
+       (aarch64_expand_epilogue): Likewise in reverse.
+       (TARGET_USE_LATE_PROLOGUE_EPILOGUE): Define.
+       * config/aarch64/aarch64-c.cc (aarch64_define_unconditional_macros):
+       Define __arm_locally_streaming.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * 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_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.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins.h
+       (function_shape::has_merge_argument_p): New member function.
+       * config/aarch64/aarch64-sve-builtins.cc:
+       (function_resolver::check_gp_argument): Use it.
+       (function_expander::get_fallback_value): Likewise.
+       * config/aarch64/aarch64-sve-builtins-shapes.cc
+       (apply_predication): Likewise.
+       (unary_convert_narrowt_def::has_merge_argument_p): New function.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins-functions.h
+       (unspec_based_function_base): Allow type suffix 1 to determine
+       the mode of the operation.
+       (unspec_based_function): Update accordingly.
+       (unspec_based_fused_function): Likewise.
+       (unspec_based_fused_lane_function): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-modes.def: Add VNx1TI.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.h (W12_W15_REGNUM_P): New macro.
+       (W12_W15_REGS): New register class.
+       (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Add entries for it.
+       * config/aarch64/aarch64.cc (aarch64_regno_regclass)
+       (aarch64_class_max_nregs, aarch64_register_move_cost): Handle
+       W12_W15_REGS.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-isa-modes.def (ZA_ON): New ISA mode.
+       * config/aarch64/aarch64-protos.h (aarch64_rdsvl_immediate_p)
+       (aarch64_output_rdsvl, aarch64_optimize_mode_switching)
+       (aarch64_restore_za): Declare.
+       * config/aarch64/constraints.md (UsR): New constraint.
+       * config/aarch64/aarch64.md (LOWERING_REGNUM, TPIDR_BLOCK_REGNUM)
+       (SME_STATE_REGNUM, TPIDR2_SETUP_REGNUM, ZA_FREE_REGNUM)
+       (ZA_SAVED_REGNUM, ZA_REGNUM, FIRST_FAKE_REGNUM): New constants.
+       (LAST_FAKE_REGNUM): Likewise.
+       (UNSPEC_SAVE_NZCV, UNSPEC_RESTORE_NZCV, UNSPEC_SME_VQ): New unspecs.
+       (arches): Add sme.
+       (arch_enabled): Handle it.
+       (*cb<optab><mode>1): Rename to...
+       (aarch64_cb<optab><mode>1): ...this.
+       (*movsi_aarch64): Add an alternative for RDSVL.
+       (*movdi_aarch64): Likewise.
+       (aarch64_save_nzcv, aarch64_restore_nzcv): New insns.
+       * config/aarch64/aarch64-sme.md (UNSPEC_SMSTOP_ZA)
+       (UNSPEC_INITIAL_ZERO_ZA, UNSPEC_TPIDR2_SAVE, UNSPEC_TPIDR2_RESTORE)
+       (UNSPEC_READ_TPIDR2, UNSPEC_WRITE_TPIDR2, UNSPEC_SETUP_LOCAL_TPIDR2)
+       (UNSPEC_RESTORE_ZA, UNSPEC_START_PRIVATE_ZA_CALL): New unspecs.
+       (UNSPEC_END_PRIVATE_ZA_CALL, UNSPEC_COMMIT_LAZY_SAVE): Likewise.
+       (UNSPECV_ASM_UPDATE_ZA): New unspecv.
+       (aarch64_tpidr2_save, aarch64_smstart_za, aarch64_smstop_za)
+       (aarch64_initial_zero_za, aarch64_setup_local_tpidr2)
+       (aarch64_clear_tpidr2, aarch64_write_tpidr2, aarch64_read_tpidr2)
+       (aarch64_tpidr2_restore, aarch64_restore_za, aarch64_asm_update_za)
+       (aarch64_start_private_za_call, aarch64_end_private_za_call)
+       (aarch64_commit_lazy_save): New patterns.
+       * config/aarch64/aarch64.h (AARCH64_ISA_ZA_ON, TARGET_ZA): New macros.
+       (FIXED_REGISTERS, REGISTER_NAMES): Add the new fake ZA registers.
+       (CALL_USED_REGISTERS): Replace with...
+       (CALL_REALLY_USED_REGISTERS): ...this and add the fake ZA registers.
+       (FIRST_PSEUDO_REGISTER): Bump to include the fake ZA registers.
+       (FAKE_REGS): New register class.
+       (REG_CLASS_NAMES): Update accordingly.
+       (REG_CLASS_CONTENTS): Likewise.
+       (machine_function::tpidr2_block): New member variable.
+       (machine_function::tpidr2_block_ptr): Likewise.
+       (machine_function::za_save_buffer): Likewise.
+       (machine_function::next_asm_update_za_id): Likewise.
+       (CUMULATIVE_ARGS::shared_za_flags): Likewise.
+       (aarch64_mode_entity, aarch64_local_sme_state): New enums.
+       (aarch64_tristate_mode): Likewise.
+       (OPTIMIZE_MODE_SWITCHING, NUM_MODES_FOR_MODE_SWITCHING): Define.
+       * config/aarch64/aarch64.cc (AARCH64_STATE_SHARED, AARCH64_STATE_IN)
+       (AARCH64_STATE_OUT): New constants.
+       (aarch64_attribute_shared_state_flags): New function.
+       (aarch64_lookup_shared_state_flags, aarch64_fndecl_has_new_state)
+       (aarch64_check_state_string, cmp_string_csts): Likewise.
+       (aarch64_merge_string_arguments, aarch64_check_arm_new_against_type)
+       (handle_arm_new, handle_arm_shared): Likewise.
+       (handle_arm_new_za_attribute): New
+       (aarch64_arm_attribute_table): Add new, preserves, in, out, and inout.
+       (aarch64_hard_regno_nregs): Handle FAKE_REGS.
+       (aarch64_hard_regno_mode_ok): Likewise.
+       (aarch64_fntype_shared_flags, aarch64_fntype_pstate_za): New functions.
+       (aarch64_fntype_isa_mode): Include aarch64_fntype_pstate_za.
+       (aarch64_fndecl_has_state, aarch64_fndecl_pstate_za): New functions.
+       (aarch64_fndecl_isa_mode): Include aarch64_fndecl_pstate_za.
+       (aarch64_cfun_incoming_pstate_za, aarch64_cfun_shared_flags)
+       (aarch64_cfun_has_new_state, aarch64_cfun_has_state): New functions.
+       (aarch64_sme_vq_immediate, aarch64_sme_vq_unspec_p): Likewise.
+       (aarch64_rdsvl_immediate_p, aarch64_output_rdsvl): Likewise.
+       (aarch64_expand_mov_immediate): Handle RDSVL immediates.
+       (aarch64_function_arg): Add the ZA sharing flags as a third limb
+       of the PARALLEL.
+       (aarch64_init_cumulative_args): Record the ZA sharing flags.
+       (aarch64_extra_live_on_entry): New function.  Handle the new
+       ZA-related fake registers.
+       (aarch64_epilogue_uses): Handle the new ZA-related fake registers.
+       (aarch64_cannot_force_const_mem): Handle UNSPEC_SME_VQ constants.
+       (aarch64_get_tpidr2_block, aarch64_get_tpidr2_ptr): New functions.
+       (aarch64_init_tpidr2_block, aarch64_restore_za): Likewise.
+       (aarch64_layout_frame): Check whether the current function creates
+       new ZA state.  Record that it clobbers LR if so.
+       (aarch64_expand_prologue): Handle functions that create new ZA state.
+       (aarch64_expand_epilogue): Likewise.
+       (aarch64_create_tpidr2_block): New function.
+       (aarch64_restore_za): Likewise.
+       (aarch64_start_call_args): Disallow calls to shared-ZA functions
+       from functions that have no ZA state.  Emit a marker instruction
+       before calls to private-ZA functions from functions that have
+       SME state.
+       (aarch64_expand_call): Add return registers for state that is
+       managed via attributes.  Record the use and clobber information
+       for the ZA registers.
+       (aarch64_end_call_args): New function.
+       (aarch64_regno_regclass): Handle FAKE_REGS.
+       (aarch64_class_max_nregs): Likewise.
+       (aarch64_override_options_internal): Require TARGET_SME for
+       functions that have ZA state.
+       (aarch64_conditional_register_usage): Handle FAKE_REGS.
+       (aarch64_mov_operand_p): Handle RDSVL immediates.
+       (aarch64_comp_type_attributes): Check that the ZA sharing flags
+       are equal.
+       (aarch64_merge_decl_attributes): New function.
+       (aarch64_optimize_mode_switching, aarch64_mode_emit_za_save_buffer)
+       (aarch64_mode_emit_local_sme_state, aarch64_mode_emit):  Likewise.
+       (aarch64_insn_references_sme_state_p): Likewise.
+       (aarch64_mode_needed_local_sme_state): Likewise.
+       (aarch64_mode_needed_za_save_buffer, aarch64_mode_needed): Likewise.
+       (aarch64_mode_after_local_sme_state, aarch64_mode_after): Likewise.
+       (aarch64_local_sme_confluence, aarch64_mode_confluence): Likewise.
+       (aarch64_one_shot_backprop, aarch64_local_sme_backprop): Likewise.
+       (aarch64_mode_backprop, aarch64_mode_entry): Likewise.
+       (aarch64_mode_exit, aarch64_mode_eh_handler): Likewise.
+       (aarch64_mode_priority, aarch64_md_asm_adjust): Likewise.
+       (TARGET_END_CALL_ARGS, TARGET_MERGE_DECL_ATTRIBUTES): Define.
+       (TARGET_MODE_EMIT, TARGET_MODE_NEEDED, TARGET_MODE_AFTER): Likewise.
+       (TARGET_MODE_CONFLUENCE, TARGET_MODE_BACKPROP): Likewise.
+       (TARGET_MODE_ENTRY, TARGET_MODE_EXIT): Likewise.
+       (TARGET_MODE_EH_HANDLER, TARGET_MODE_PRIORITY): Likewise.
+       (TARGET_EXTRA_LIVE_ON_ENTRY): Likewise.
+       (TARGET_MD_ASM_ADJUST): Use aarch64_md_asm_adjust.
+       * config/aarch64/aarch64-c.cc (aarch64_define_unconditional_macros):
+       Define __arm_new, __arm_preserves,__arm_in, __arm_out, and __arm_inout.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-passes.def
+       (pass_late_thread_prologue_and_epilogue): New pass.
+       * config/aarch64/aarch64-sme.md: New file.
+       * config/aarch64/aarch64.md: Include it.
+       (*tb<optab><mode>1): Rename to...
+       (@aarch64_tb<optab><mode>): ...this.
+       (call, call_value, sibcall, sibcall_value): Don't require operand 2
+       to be a CONST_INT.
+       * config/aarch64/aarch64-protos.h (aarch64_emit_call_insn): Return
+       the insn.
+       (make_pass_switch_sm_state): Declare.
+       * config/aarch64/aarch64.h (TARGET_STREAMING_COMPATIBLE): New macro.
+       (CALL_USED_REGISTER): Mark VG as call-preserved.
+       (aarch64_frame::old_svcr_offset): New member variable.
+       (machine_function::call_switches_sm_state): Likewise.
+       (CUMULATIVE_ARGS::num_sme_mode_switch_args): Likewise.
+       (CUMULATIVE_ARGS::sme_mode_switch_args): Likewise.
+       * config/aarch64/aarch64.cc: Include tree-pass.h and cfgbuild.h.
+       (aarch64_cfun_incoming_pstate_sm): New function.
+       (aarch64_call_switches_pstate_sm): Likewise.
+       (aarch64_reg_save_mode): Return DImode for VG_REGNUM.
+       (aarch64_callee_isa_mode): New function.
+       (aarch64_insn_callee_isa_mode): Likewise.
+       (aarch64_guard_switch_pstate_sm): Likewise.
+       (aarch64_switch_pstate_sm): Likewise.
+       (aarch64_sme_mode_switch_regs): New class.
+       (aarch64_record_sme_mode_switch_args): New function.
+       (aarch64_finish_sme_mode_switch_args): Likewise.
+       (aarch64_function_arg): Handle the end marker by returning a
+       PARALLEL that contains the ABI cookie that we used previously
+       alongside the result of aarch64_finish_sme_mode_switch_args.
+       (aarch64_init_cumulative_args): Initialize num_sme_mode_switch_args.
+       (aarch64_function_arg_advance): If a call would switch SM state,
+       record all argument registers that would need to be saved around
+       the mode switch.
+       (aarch64_need_old_pstate_sm): New function.
+       (aarch64_layout_frame): Decide whether the frame needs to store the
+       incoming value of PSTATE.SM and allocate a save slot for it if so.
+       If a function switches SME state, arrange to save the old value
+       of the DWARF VG register.  Handle the case where this is the only
+       register save slot above the FP.
+       (aarch64_save_callee_saves): Handles saves of the DWARF VG register.
+       (aarch64_get_separate_components): Prevent such saves from being
+       shrink-wrapped.
+       (aarch64_old_svcr_mem): New function.
+       (aarch64_read_old_svcr): Likewise.
+       (aarch64_guard_switch_pstate_sm): Likewise.
+       (aarch64_expand_prologue): Handle saves of the DWARF VG register.
+       Initialize any SVCR save slot.
+       (aarch64_expand_call): Allow the cookie to be PARALLEL that contains
+       both the UNSPEC_CALLEE_ABI value and a list of registers that need
+       to be preserved across a change to PSTATE.SM.  If the call does
+       involve such a change to PSTATE.SM, record the registers that
+       would be clobbered by this process.  Also emit an instruction
+       to mark the temporary change in VG.  Update call_switches_pstate_sm.
+       (aarch64_emit_call_insn): Return the emitted instruction.
+       (aarch64_frame_pointer_required): New function.
+       (aarch64_conditional_register_usage): Prevent VG_REGNUM from being
+       treated as a register operand.
+       (aarch64_switch_pstate_sm_for_call): New function.
+       (pass_data_switch_pstate_sm): New pass variable.
+       (pass_switch_pstate_sm): New pass class.
+       (make_pass_switch_pstate_sm): New function.
+       (TARGET_FRAME_POINTER_REQUIRED): Define.
+       * config/aarch64/t-aarch64 (s-check-sve-md): Add aarch64-sme.md.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.h (TARGET_NON_STREAMING): New macro.
+       (TARGET_SVE2_AES, TARGET_SVE2_BITPERM): Use it.
+       (TARGET_SVE2_SHA3, TARGET_SVE2_SM4): Likewise.
+       * config/aarch64/aarch64-sve-builtins-base.def: Separate out
+       the functions that require PSTATE.SM to be 0 and guard them
+       with AARCH64_FL_SM_OFF.
+       * config/aarch64/aarch64-sve-builtins-sve2.def: Likewise.
+       * config/aarch64/aarch64-sve-builtins.cc (check_required_extensions):
+       Enforce AARCH64_FL_SM_OFF requirements.
+       * config/aarch64/aarch64-sve.md (aarch64_wrffr): Require
+       TARGET_NON_STREAMING
+       (aarch64_rdffr, aarch64_rdffr_z, *aarch64_rdffr_z_ptest): Likewise.
+       (*aarch64_rdffr_ptest, *aarch64_rdffr_z_cc, *aarch64_rdffr_cc)
+       (@aarch64_ld<fn>f1<mode>): Likewise.
+       (@aarch64_ld<fn>f1_<ANY_EXTEND:optab><SVE_HSDI:mode><SVE_PARTIAL_I:mode>)
+       (gather_load<mode><v_int_container>): Likewise
+       (mask_gather_load<mode><v_int_container>): Likewise.
+       (mask_gather_load<mode><v_int_container>): Likewise.
+       (*mask_gather_load<mode><v_int_container>_<su>xtw_unpacked): Likewise.
+       (*mask_gather_load<mode><v_int_container>_sxtw): Likewise.
+       (*mask_gather_load<mode><v_int_container>_uxtw): Likewise.
+       (@aarch64_gather_load_<ANY_EXTEND:optab><SVE_4HSI:mode><SVE_4BHI:mode>)
+       (@aarch64_gather_load_<ANY_EXTEND:optab><SVE_2HSDI:mode>
+       <SVE_2BHSI:mode>): Likewise.
+       (*aarch64_gather_load_<ANY_EXTEND:optab><SVE_2HSDI:mode>
+       <SVE_2BHSI:mode>_<ANY_EXTEND2:su>xtw_unpacked)
+       (*aarch64_gather_load_<ANY_EXTEND:optab><SVE_2HSDI:mode>
+       <SVE_2BHSI:mode>_sxtw): Likewise.
+       (*aarch64_gather_load_<ANY_EXTEND:optab><SVE_2HSDI:mode>
+       <SVE_2BHSI:mode>_uxtw): Likewise.
+       (@aarch64_ldff1_gather<mode>, @aarch64_ldff1_gather<mode>): Likewise.
+       (*aarch64_ldff1_gather<mode>_sxtw): Likewise.
+       (*aarch64_ldff1_gather<mode>_uxtw): Likewise.
+       (@aarch64_ldff1_gather_<ANY_EXTEND:optab><VNx4_WIDE:mode>
+       <VNx4_NARROW:mode>): Likewise.
+       (@aarch64_ldff1_gather_<ANY_EXTEND:optab><VNx2_WIDE:mode>
+       <VNx2_NARROW:mode>): Likewise.
+       (*aarch64_ldff1_gather_<ANY_EXTEND:optab><VNx2_WIDE:mode>
+       <VNx2_NARROW:mode>_sxtw): Likewise.
+       (*aarch64_ldff1_gather_<ANY_EXTEND:optab><VNx2_WIDE:mode>
+       <VNx2_NARROW:mode>_uxtw): Likewise.
+       (@aarch64_sve_gather_prefetch<SVE_FULL_I:mode><VNx4SI_ONLY:mode>)
+       (@aarch64_sve_gather_prefetch<SVE_FULL_I:mode><VNx2DI_ONLY:mode>)
+       (*aarch64_sve_gather_prefetch<SVE_FULL_I:mode><VNx2DI_ONLY:mode>_sxtw)
+       (*aarch64_sve_gather_prefetch<SVE_FULL_I:mode><VNx2DI_ONLY:mode>_uxtw)
+       (scatter_store<mode><v_int_container>): Likewise.
+       (mask_scatter_store<mode><v_int_container>): Likewise.
+       (*mask_scatter_store<mode><v_int_container>_<su>xtw_unpacked)
+       (*mask_scatter_store<mode><v_int_container>_sxtw): Likewise.
+       (*mask_scatter_store<mode><v_int_container>_uxtw): Likewise.
+       (@aarch64_scatter_store_trunc<VNx4_NARROW:mode><VNx4_WIDE:mode>)
+       (@aarch64_scatter_store_trunc<VNx2_NARROW:mode><VNx2_WIDE:mode>)
+       (*aarch64_scatter_store_trunc<VNx2_NARROW:mode><VNx2_WIDE:mode>_sxtw)
+       (*aarch64_scatter_store_trunc<VNx2_NARROW:mode><VNx2_WIDE:mode>_uxtw)
+       (@aarch64_sve_ld1ro<mode>, @aarch64_adr<mode>): Likewise.
+       (*aarch64_adr_sxtw, *aarch64_adr_uxtw_unspec): Likewise.
+       (*aarch64_adr_uxtw_and, @aarch64_adr<mode>_shift): Likewise.
+       (*aarch64_adr<mode>_shift, *aarch64_adr_shift_sxtw): Likewise.
+       (*aarch64_adr_shift_uxtw, @aarch64_sve_add_<optab><vsi2qi>): Likewise.
+       (@aarch64_sve_<sve_fp_op><mode>, fold_left_plus_<mode>): Likewise.
+       (mask_fold_left_plus_<mode>, @aarch64_sve_compact<mode>): Likewise.
+       * config/aarch64/aarch64-sve2.md (@aarch64_gather_ldnt<mode>)
+       (@aarch64_gather_ldnt_<ANY_EXTEND:optab><SVE_FULL_SDI:mode>
+       <SVE_PARTIAL_I:mode>): Likewise.
+       (@aarch64_sve2_histcnt<mode>, @aarch64_sve2_histseg<mode>): Likewise.
+       (@aarch64_pred_<SVE2_MATCH:sve_int_op><mode>): Likewise.
+       (*aarch64_pred_<SVE2_MATCH:sve_int_op><mode>_cc): Likewise.
+       (*aarch64_pred_<SVE2_MATCH:sve_int_op><mode>_ptest): Likewise.
+       * config/aarch64/iterators.md (SVE_FP_UNARY_INT): Make FEXPA
+       depend on TARGET_NON_STREAMING.
+       (SVE_BFLOAT_TERNARY_LONG): Likewise BFMMLA.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64.h (TARGET_BASE_SIMD): New macro.
+       (TARGET_SIMD): Require PSTATE.SM to be 0.
+       (AARCH64_ISA_SM_OFF): New macro.
+       * config/aarch64/aarch64.cc (aarch64_array_mode_supported_p):
+       Allow Advanced SIMD structure modes for TARGET_BASE_SIMD.
+       (aarch64_print_operand): Support '%Z'.
+       (aarch64_secondary_reload): Expect SVE moves to be used for
+       Advanced SIMD modes if SVE is enabled and non-streaming
+       Advanced SIMD isn't.
+       (aarch64_register_move_cost): Likewise.
+       (aarch64_simd_container_mode): Extend Advanced SIMD mode
+       handling to TARGET_BASE_SIMD.
+       (aarch64_expand_cpymem): Expand commentary.
+       * config/aarch64/aarch64.md (arches): Add base_simd and nobase_simd.
+       (arch_enabled): Handle it.
+       (*mov<mode>_aarch64): Extend UMOV alternative to TARGET_BASE_SIMD.
+       (*movti_aarch64): Use an SVE move instruction if non-streaming
+       SIMD isn't available.
+       (*mov<TFD:mode>_aarch64): Likewise.
+       (load_pair_dw_tftf): Extend to TARGET_BASE_SIMD.
+       (store_pair_dw_tftf): Likewise.
+       (loadwb_pair<TX:mode>_<P:mode>): Likewise.
+       (storewb_pair<TX:mode>_<P:mode>): Likewise.
+       * config/aarch64/aarch64-simd.md (*aarch64_simd_mov<VDMOV:mode>):
+       Allow UMOV in streaming mode.
+       (*aarch64_simd_mov<VQMOV:mode>): Use an SVE move instruction
+       if non-streaming SIMD isn't available.
+       (aarch64_store_lane0<mode>): Depend on TARGET_FLOAT rather than
+       TARGET_SIMD.
+       (aarch64_simd_mov_from_<mode>low): Likewise.  Use fmov if
+       Advanced SIMD is completely disabled.
+       (aarch64_simd_mov_from_<mode>high): Use SVE EXT instructions if
+       non-streaming SIMD isn't available.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * doc/invoke.texi: Document SME.
+       * doc/sourcebuild.texi: Document aarch64_sve.
+       * config/aarch64/aarch64-option-extensions.def (sme): Define.
+       * config/aarch64/aarch64.h (AARCH64_ISA_SME): New macro.
+       (TARGET_SME): Likewise.
+       * config/aarch64/aarch64.cc (aarch64_override_options_internal):
+       Ensure that SME is present when compiling streaming code.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-isa-modes.def: New file.
+       * config/aarch64/aarch64.h: Include it in the feature enumerations.
+       (AARCH64_FL_SM_STATE, AARCH64_FL_ISA_MODES): New constants.
+       (AARCH64_FL_DEFAULT_ISA_MODE): Likewise.
+       (AARCH64_ISA_MODE): New macro.
+       (CUMULATIVE_ARGS): Add an isa_mode field.
+       * config/aarch64/aarch64-protos.h (aarch64_gen_callee_cookie): Declare.
+       (aarch64_tlsdesc_abi_id): Return an arm_pcs.
+       * config/aarch64/aarch64.cc (attr_streaming_exclusions)
+       (aarch64_gnu_attributes, aarch64_gnu_attribute_table)
+       (aarch64_arm_attributes, aarch64_arm_attribute_table): New tables.
+       (aarch64_attribute_table): Redefine to include the gnu and arm
+       attributes.
+       (aarch64_fntype_pstate_sm, aarch64_fntype_isa_mode): New functions.
+       (aarch64_fndecl_pstate_sm, aarch64_fndecl_isa_mode): Likewise.
+       (aarch64_gen_callee_cookie, aarch64_callee_abi): Likewise.
+       (aarch64_insn_callee_cookie, aarch64_insn_callee_abi): Use them.
+       (aarch64_function_arg, aarch64_output_mi_thunk): Likewise.
+       (aarch64_init_cumulative_args): Initialize the isa_mode field.
+       (aarch64_output_mi_thunk): Use aarch64_gen_callee_cookie to get
+       the ABI cookie.
+       (aarch64_override_options): Add the ISA mode to the feature set.
+       (aarch64_temporary_target::copy_from_fndecl): Likewise.
+       (aarch64_fndecl_options, aarch64_handle_attr_arch): Likewise.
+       (aarch64_set_current_function): Maintain the correct ISA mode.
+       (aarch64_tlsdesc_abi_id): Return an arm_pcs.
+       (aarch64_comp_type_attributes): Handle arm::streaming and
+       arm::streaming_compatible.
+       * config/aarch64/aarch64-c.cc (aarch64_define_unconditional_macros):
+       Define __arm_streaming and __arm_streaming_compatible.
+       * config/aarch64/aarch64.md (tlsdesc_small_<mode>): Use
+       aarch64_gen_callee_cookie to get the ABI cookie.
+       * config/aarch64/t-aarch64 (TM_H): Add all feature-related .def files.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins-base.cc
+       (svreinterpret_impl::fold): Punt on tuple forms.
+       (svreinterpret_impl::expand): Use tuple_mode instead of vector_mode.
+       * config/aarch64/aarch64-sve-builtins-base.def (svreinterpret):
+       Extend to x1234 groups.
+       * config/aarch64/aarch64-sve-builtins-functions.h
+       (multi_vector_function::vectors_per_tuple): If the function has
+       a group suffix, get the number of vectors from there.
+       * config/aarch64/aarch64-sve-builtins-shapes.h (reinterpret): Declare.
+       * config/aarch64/aarch64-sve-builtins-shapes.cc (reinterpret_def)
+       (reinterpret): New function shape.
+       * config/aarch64/aarch64-sve-builtins.cc (function_groups): Handle
+       DEF_SVE_FUNCTION_GS.
+       * config/aarch64/aarch64-sve-builtins.def (DEF_SVE_FUNCTION_GS): New
+       macro.
+       (DEF_SVE_FUNCTION): Forward to DEF_SVE_FUNCTION_GS by default.
+       * config/aarch64/aarch64-sve-builtins.h
+       (function_instance::tuple_mode): New member function.
+       (function_base::vectors_per_tuple): Take the function instance
+       as argument and get the number from the group suffix.
+       (function_instance::vectors_per_tuple): Update accordingly.
+       * config/aarch64/iterators.md (SVE_FULLx2, SVE_FULLx3, SVE_FULLx4)
+       (SVE_ALL_STRUCT): New mode iterators.
+       (SVE_STRUCT): Redefine in terms of SVE_FULL*.
+       * config/aarch64/aarch64-sve.md (@aarch64_sve_reinterpret<mode>)
+       (*aarch64_sve_reinterpret<mode>): Extend to SVE structure modes.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins.cc
+       (function_resolver::require_derived_vector_type): Add a specific
+       error message for the case in which the caller wants a single
+       vector whose element type matches a previous tuyple argument.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins.h
+       (function_resolver::lookup_form): Add an overload that takes
+       an sve_type rather than type and group suffixes.
+       (function_resolver::resolve_to): Likewise.
+       (function_resolver::infer_vector_or_tuple_type): Return an sve_type.
+       (function_resolver::infer_tuple_type): Likewise.
+       (function_resolver::require_matching_vector_type): Take an sve_type
+       rather than a type_suffix_index.
+       (function_resolver::require_derived_vector_type): Likewise.
+       * config/aarch64/aarch64-sve-builtins.cc (num_vectors_to_group):
+       New function.
+       (function_resolver::lookup_form): Add an overload that takes
+       an sve_type rather than type and group suffixes.
+       (function_resolver::resolve_to): Likewise.
+       (function_resolver::infer_vector_or_tuple_type): Return an sve_type.
+       (function_resolver::infer_tuple_type): Likewise.
+       (function_resolver::infer_vector_type): Update accordingly.
+       (function_resolver::require_matching_vector_type): Take an sve_type
+       rather than a type_suffix_index.
+       (function_resolver::require_derived_vector_type): Likewise.
+       * config/aarch64/aarch64-sve-builtins-shapes.cc (get_def::resolve)
+       (set_def::resolve, store_def::resolve, tbl_tuple_def::resolve): Update
+       calls accordingly.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins.h
+       (function_resolver::require_matching_vector_type): Add a parameter
+       that specifies the number of the earlier argument that is being
+       matched against.
+       * config/aarch64/aarch64-sve-builtins.cc
+       (function_resolver::require_matching_vector_type): Likewise.
+       (require_derived_vector_type): Update calls accordingly.
+       (function_resolver::resolve_unary): Likewise.
+       (function_resolver::resolve_uniform): Likewise.
+       (function_resolver::resolve_uniform_opt_n): Likewise.
+       * config/aarch64/aarch64-sve-builtins-shapes.cc
+       (binary_long_lane_def::resolve): Likewise.
+       (clast_def::resolve, ternary_uint_def::resolve): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins.h
+       (function_resolver::infer_sve_type): New member function.
+       (function_resolver::report_incorrect_num_vectors): Likewise.
+       * config/aarch64/aarch64-sve-builtins.cc
+       (function_resolver::infer_sve_type): New function,.
+       (function_resolver::report_incorrect_num_vectors): New function,
+       split out from...
+       (function_resolver::infer_vector_or_tuple_type): ...here.  Use
+       infer_sve_type.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins.h (sve_type): New struct.
+       (sve_type::operator==): New function.
+       (function_resolver::get_vector_type): Delete.
+       (function_resolver::report_no_such_form): Take an sve_type rather
+       than a type_suffix_index.
+       * config/aarch64/aarch64-sve-builtins.cc (get_vector_type): New
+       function.
+       (function_resolver::get_vector_type): Delete.
+       (function_resolver::report_no_such_form): Take an sve_type rather
+       than a type_suffix_index.
+       (find_sve_type): New function, split out from...
+       (function_resolver::infer_vector_or_tuple_type): ...here.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins-shapes.cc (build_one): Take
+       a group suffix index parameter.
+       (build_32_64, build_all): Update accordingly.  Iterate over all
+       group suffixes.
+       * config/aarch64/aarch64-sve-builtins-sve2.cc (svqrshl_impl::fold)
+       (svqshl_impl::fold, svrshl_impl::fold): Update function_instance
+       constructors.
+       * config/aarch64/aarch64-sve-builtins.cc (group_suffixes): New array.
+       (groups_none): New constant.
+       (function_groups): Initialize the groups field.
+       (function_instance::hash): Hash the group index.
+       (function_builder::get_name): Add the group suffix.
+       (function_builder::add_overloaded_functions): Iterate over all
+       group suffixes.
+       (function_resolver::lookup_form): Take a group suffix parameter.
+       (function_resolver::resolve_to): Likewise.
+       * config/aarch64/aarch64-sve-builtins.def (DEF_SVE_GROUP_SUFFIX): New
+       macro.
+       (x2, x3, x4): New group suffixes.
+       * config/aarch64/aarch64-sve-builtins.h (group_suffix_index): New enum.
+       (group_suffix_info): New structure.
+       (function_group_info::groups): New member variable.
+       (function_instance::group_suffix_id): Likewise.
+       (group_suffixes): New array.
+       (function_instance::operator==): Compare the group suffixes.
+       (function_instance::group_suffix): New function.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins.cc (function_groups): Remove
+       implied requirement on SVE.
+       * config/aarch64/aarch64-sve-builtins-base.def: Explicitly require SVE.
+       * config/aarch64/aarch64-sve-builtins-sve2.def: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-protos.h (aarch64_sve_rdvl_immediate_p)
+       (aarch64_output_sve_rdvl): Declare.
+       * config/aarch64/aarch64.cc (aarch64_sve_cnt_factor_p): New
+       function, split out from...
+       (aarch64_sve_cnt_immediate_p): ...here.
+       (aarch64_sve_rdvl_factor_p): New function.
+       (aarch64_sve_rdvl_immediate_p): Likewise.
+       (aarch64_output_sve_rdvl): Likewise.
+       (aarch64_offset_temporaries): Rewrite the SVE handling to use RDVL
+       for some cases.
+       (aarch64_expand_mov_immediate): Handle RDVL immediates.
+       (aarch64_mov_operand_p): Likewise.
+       * config/aarch64/constraints.md (Usr): New constraint.
+       * config/aarch64/aarch64.md (*mov<SHORT:mode>_aarch64): Add an RDVL
+       alternative.
+       (*movsi_aarch64, *movdi_aarch64): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/aarch64/aarch64-sve-builtins.h:
+       (function_checker::require_immediate_lane_index): Add an argument
+       for the index of the indexed vector argument.
+       * config/aarch64/aarch64-sve-builtins.cc
+       (function_checker::require_immediate_lane_index): Likewise.
+       * config/aarch64/aarch64-sve-builtins-shapes.cc
+       (ternary_bfloat_lane_base::check): Update accordingly.
+       (ternary_qq_lane_base::check): Likewise.
+       (binary_lane_def::check): Likewise.
+       (binary_long_lane_def::check): Likewise.
+       (ternary_lane_def::check): Likewise.
+       (ternary_lane_rotate_def::check): Likewise.
+       (ternary_long_lane_def::check): Likewise.
+       (ternary_qq_lane_rotate_def::check): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * target.def (md_asm_adjust): Add a uses parameter.
+       * doc/tm.texi: Regenerate.
+       * cfgexpand.cc (expand_asm_loc): Update call to md_asm_adjust.
+       Handle any USEs created by the target.
+       (expand_asm_stmt): Likewise.
+       * recog.cc (asm_noperands): Handle asms with USEs.
+       (decode_asm_operands): Likewise.
+       * config/arm/aarch-common-protos.h (arm_md_asm_adjust): Add uses
+       parameter.
+       * config/arm/aarch-common.cc (arm_md_asm_adjust): Likewise.
+       * config/arm/arm.cc (thumb1_md_asm_adjust): Likewise.
+       * config/avr/avr.cc (avr_md_asm_adjust): Likewise.
+       * config/cris/cris.cc (cris_md_asm_adjust): Likewise.
+       * config/i386/i386.cc (ix86_md_asm_adjust): Likewise.
+       * config/mn10300/mn10300.cc (mn10300_md_asm_adjust): Likewise.
+       * config/nds32/nds32.cc (nds32_md_asm_adjust): Likewise.
+       * config/pdp11/pdp11.cc (pdp11_md_asm_adjust): Likewise.
+       * config/rs6000/rs6000.cc (rs6000_md_asm_adjust): Likewise.
+       * config/s390/s390.cc (s390_md_asm_adjust): Likewise.
+       * config/vax/vax.cc (vax_md_asm_adjust): Likewise.
+       * config/visium/visium.cc (visium_md_asm_adjust): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * doc/tm.texi.in: Add TARGET_START_CALL_ARGS.
+       * doc/tm.texi: Regenerate.
+       * target.def (start_call_args): New hook.
+       (call_args, end_call_args): Add a parameter for the cumulative
+       argument information.
+       * hooks.h (hook_void_rtx_tree): Delete.
+       * hooks.cc (hook_void_rtx_tree): Likewise.
+       * targhooks.h (hook_void_CUMULATIVE_ARGS): Declare.
+       (hook_void_CUMULATIVE_ARGS_rtx_tree): Likewise.
+       * targhooks.cc (hook_void_CUMULATIVE_ARGS): New function.
+       (hook_void_CUMULATIVE_ARGS_rtx_tree): Likewise.
+       * calls.cc (expand_call): Call start_call_args before computing
+       and storing stack parameters.  Pass the cumulative argument
+       information to call_args and end_call_args.
+       (emit_library_call_value_1): Likewise.
+       * config/nvptx/nvptx.cc (nvptx_call_args): Add a cumulative
+       argument parameter.
+       (nvptx_end_call_args): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * doc/tm.texi.in: Add TARGET_EMIT_EPILOGUE_FOR_SIBCALL.
+       * doc/tm.texi: Regenerate.
+       * target.def (emit_epilogue_for_sibcall): New hook.
+       * calls.cc (can_implement_as_sibling_call_p): Use it.
+       * function.cc (thread_prologue_and_epilogue_insns): Likewise.
+       (reposition_prologue_and_epilogue_notes): Likewise.
+       * config/aarch64/aarch64-protos.h (aarch64_expand_epilogue): Take
+       an rtx_call_insn * rather than a bool.
+       * config/aarch64/aarch64.cc (aarch64_expand_epilogue): Likewise.
+       (TARGET_EMIT_EPILOGUE_FOR_SIBCALL): Define.
+       * config/aarch64/aarch64.md (epilogue): Update call.
+       (sibcall_epilogue): Delete.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * target.def (use_late_prologue_epilogue): New hook.
+       * doc/tm.texi.in: Add TARGET_USE_LATE_PROLOGUE_EPILOGUE.
+       * doc/tm.texi: Regenerate.
+       * passes.def (pass_late_thread_prologue_and_epilogue): New pass.
+       * tree-pass.h (make_pass_late_thread_prologue_and_epilogue): Declare.
+       * function.cc (pass_thread_prologue_and_epilogue::gate): New function.
+       (pass_data_late_thread_prologue_and_epilogue): New pass variable.
+       (pass_late_thread_prologue_and_epilogue): New pass class.
+       (make_pass_late_thread_prologue_and_epilogue): New function.
+
+2023-12-05  Kito Cheng  <kito.cheng@sifive.com>
+
+       * common/config/riscv/riscv-common.cc
+       (riscv_subset_list::check_conflict_ext): Check zcd conflicts
+       with zcmt and zcmp.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       PR rtl-optimization/112278
+       * lra-int.h (lra_update_biggest_mode): New function.
+       * lra-coalesce.cc (merge_pseudos): Use it.
+       * lra-lives.cc (process_bb_lives): Likewise.
+       * lra.cc (new_insn_reg): Likewise.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/112843
+       * gimple-lower-bitint.cc (gimple_lower_bitint): Change lhs of stmt
+       to lhs2 before building and inserting lhs = (cast) lhs2; assignment.
+       Adjust stmt operands before adjusting lhs.
+
+2023-12-05  xuli  <xuli1@eswincomputing.com>
+
+       * config/riscv/riscv-v.cc (sew64_scalar_helper): Bugfix.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/112816
+       * config/i386/sse.md ((eq (eq (lshiftrt x elt_bits-1) 0) 0)): New
+       splitter to turn psrld $31; pcmpeq; pcmpeq into psrad $31.
+
+2023-12-05  Juzhe-Zhong  <juzhe.zhong@rivai.ai>
+
+       * config/riscv/autovec.md: Add blocker.
+       * config/riscv/riscv-protos.h (gather_scatter_valid_offset_p): New function.
+       * config/riscv/riscv-v.cc (gather_scatter_valid_offset_p): Ditto.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/112827
+       PR tree-optimization/112848
+       * tree-scalar-evolution.cc (final_value_replacement_loop):
+       Compute the insert location for each insert.
+
+2023-12-05  liuhongt  <hongtao.liu@intel.com>
+
+       * config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
+       Count sse_reg/gpr_regs for components not loaded from memory.
+       (ix86_vector_costs:ix86_vector_costs): New constructor.
+       (ix86_vector_costs::m_num_gpr_needed[3]): New private memeber.
+       (ix86_vector_costs::m_num_sse_needed[3]): Ditto.
+       (ix86_vector_costs::finish_cost): Estimate overall register
+       pressure cost.
+       (ix86_vector_costs::ix86_vect_estimate_reg_pressure): New
+       function.
+
+2023-12-05  liuhongt  <hongtao.liu@intel.com>
+
+       * config/i386/sse.md (udot_prodv64qi): New expander.
+       (udot_prod<mode>): Emulates with VEC_UNPACKU_EXPR +
+       DOT_PROD (short, int).
+
+2023-12-05  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/107687
+       PR c++/110997
+       * doc/invoke.texi: Document -fno-immediate-escalation.
+
 2023-12-04  Andrew Pinski  <quic_apinski@quicinc.com>
 
        * match.pd (zero_one_valued_p): For convert
index 6f4231ffb41216d8fda089535e6b4ba60e96c4dd..76ff872532c3a56726418e264edfd68e6324507b 100644 (file)
@@ -1 +1 @@
-20231205
+20231206
index 9c4ec217df96ba14d7e6ce02242bced98b62f7eb..48a5bb74253603a67e97e127eb31a794d6078e73 100644 (file)
@@ -1,3 +1,23 @@
+2023-12-06  Alexandre Oliva  <oliva@adacore.com>
+
+       * gcc-interface/trans.cc: Include ipa-strub.h.
+       (gigi): Make internal decls for targets of compiler-generated
+       calls strub-callable too.
+       (build_raise_check): Likewise.
+       * gcc-interface/utils.cc: Include ipa-strub.h.
+       (handle_strub_attribute): New.
+       (gnat_internal_attribute_table): Add strub.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc-interface/utils.cc (gnat_internal_attribute_table): Add extra
+       braces to work around PR 16333 in older compilers.
+
+2023-12-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * adaint.c: Include <signal.h>.
+       * expect.c: Include <string.h>.
+
 2023-12-02  Richard Sandiford  <richard.sandiford@arm.com>
 
        * gcc-interface/gigi.h (gnat_internal_attribute_table): Change
index c7265b8613823bf98742c97575b12aad9ddd2833..3dc8cbc7da0e5a65b79391008b7f2be82df611b0 100644 (file)
@@ -1,3 +1,29 @@
+2023-12-06  Alexandre Oliva  <oliva@adacore.com>
+
+       * c-attribs.cc: Include ipa-strub.h.
+       (handle_strub_attribute): New.
+       (c_common_attribute_table): Add strub.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * c-attribs.cc (c_common_gnu_attribute_table): Add extra
+       braces to work around PR 16333 in older compilers.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR c/89270
+       * c-common.cc (c_common_type_for_size): Consider
+       registered_builtin_types.
+
+2023-12-05  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/107687
+       PR c++/110997
+       * c-cppbuiltin.cc (c_cpp_builtins): Update __cpp_consteval.
+       * c-opts.cc (c_common_post_options): Pre-C++20, unset
+       flag_immediate_escalation.
+       * c.opt (fimmediate-escalation): New option.
+
 2023-12-02  Richard Sandiford  <richard.sandiford@arm.com>
 
        * c-common.h (c_common_attribute_table): Replace with...
index 20c97d05381fc6312ebf0095e929beeab10e7d53..f6175775c20d517888531442ad3eb2c89816ca11 100644 (file)
@@ -1,3 +1,14 @@
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * c-decl.cc (std_attribute_table): Add extra braces to work
+       around PR 16333 in older compilers.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR c/86869
+       * c-typeck.cc (c_build_qualified_type): Preserve address-space
+       info for ARRAY_TYPE.
+
 2023-12-02  Richard Sandiford  <richard.sandiford@arm.com>
 
        * c-tree.h (std_attribute_table): Declare.
index b7167519dc6d6f6270cac8b7a16c8ad900710c59..308d02b95aeb9c73d4ee126f082b7357e94baed7 100644 (file)
@@ -1,3 +1,68 @@
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/112795
+       * cp-tree.h (cp_check_pragma_unroll): Declare.
+       * semantics.cc (cp_check_pragma_unroll): New function.
+       * parser.cc (cp_parser_pragma_unroll): Use cp_check_pragma_unroll.
+       * pt.cc (tsubst_expr) <case ANNOTATE_EXPR>: Likewise.
+       (tsubst_stmt) <case RANGE_FOR_STMT>: Likwsie.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * tree.cc (cxx_gnu_attribute_table): Add extra braces to work
+       around PR 16333 in older compilers.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/110734
+       * parser.cc (cp_parser_block_declaration): Implement C++ DR 2262
+       - Attributes for asm-definition.  Call cp_parser_asm_definition
+       even if RID_ASM token is only seen after sequence of standard
+       attributes.
+       (cp_parser_asm_definition): Parse standard attributes before
+       RID_ASM token and warn for them with -Wattributes.
+
+2023-12-05  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/107687
+       PR c++/110997
+       * call.cc (in_immediate_context): No longer static.
+       * constexpr.cc (cxx_eval_call_expression): Adjust assert.
+       * cp-gimplify.cc (deferred_escalating_exprs): New vec.
+       (remember_escalating_expr): New.
+       (enum fold_flags): Remove ff_fold_immediate.
+       (immediate_escalating_function_p): New.
+       (unchecked_immediate_escalating_function_p): New.
+       (promote_function_to_consteval): New.
+       (cp_fold_immediate): Move above.  Return non-null if any errors were
+       emitted.
+       (maybe_explain_promoted_consteval): New.
+       (cp_gimplify_expr) <case CALL_EXPR>: Assert we've handled all
+       immediate invocations.
+       (taking_address_of_imm_fn_error): New.
+       (cp_fold_immediate_r): Merge ADDR_EXPR and PTRMEM_CST cases.  Implement
+       P2564 - promoting functions to consteval.
+       <case CALL_EXPR>: Implement P2564 - promoting functions to consteval.
+       (cp_fold_r): If an expression turns into a CALL_EXPR after cp_fold,
+       call cp_fold_immediate_r on the CALL_EXPR.
+       (cp_fold_function): Set DECL_ESCALATION_CHECKED_P if
+       deferred_escalating_exprs does not contain current_function_decl.
+       (process_and_check_pending_immediate_escalating_fns): New.
+       * cp-tree.h (struct lang_decl_fn): Add escalated_p bit-field.
+       (DECL_ESCALATION_CHECKED_P): New.
+       (immediate_invocation_p): Declare.
+       (process_pending_immediate_escalating_fns): Likewise.
+       * decl2.cc (c_parse_final_cleanups): Set at_eof to 2 after all
+       templates have been instantiated; and to 3 at the end of the function.
+       Call process_pending_immediate_escalating_fns.
+       * error.cc (dump_template_bindings): Check at_eof against an updated
+       value.
+       * module.cc (trees_out::lang_decl_bools): Stream escalated_p.
+       (trees_in::lang_decl_bools): Likewise.
+       * pt.cc (push_tinst_level_loc): Set at_eof to 3, not 2.
+       * typeck.cc (cp_build_addr_expr_1): Don't check
+       DECL_IMMEDIATE_FUNCTION_P.
+
 2023-12-04  Jason Merrill  <jason@redhat.com>
 
        * constexpr.cc (potential_constant_expression_1): Fix
index 04a9199d6c5d6d9564737bb4f7eb7e2893758fd2..b002b459adc4eeac5af65b8457af7bf3b68c795e 100644 (file)
@@ -1,3 +1,9 @@
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * d-attribs.cc (d_langhook_common_attribute_table): Add extra braces
+       to work around PR 16333 in older compilers.
+       (d_langhook_gnu_attribute_table): Likewise.
+
 2023-12-02  Richard Sandiford  <richard.sandiford@arm.com>
 
        * d-tree.h (d_langhook_attribute_table): Replace with...
index 3cc25c541df0597e71701391cc1aae7f13b226dc..be4fe9afa6997cb9bb05646d052c36801c14fa4b 100644 (file)
@@ -1,3 +1,18 @@
+2023-12-05  Harald Anlauf  <anlauf@gmx.de>
+           Tobias Burnus   <tobias@codesourcery.com>
+
+       PR fortran/100988
+       * gfortran.h (IS_PROC_POINTER): New macro.
+       * trans-types.cc (gfc_sym_type): Use macro in determination if the
+       restrict qualifier can be used for a dummy variable.  Fix logic to
+       allow the restrict qualifier also for optional arguments, and to
+       not apply it to pointer or proc_pointer arguments.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * f95-lang.cc (gfc_gnu_attribute_table): Add extra braces to work
+       around PR 16333 in older compilers.
+
 2023-12-02  Harald Anlauf  <anlauf@gmx.de>
 
        PR fortran/93762
index af2c09d07d30a47b68e79354bb10628750f3eab6..11a0cb1fb02f17b5c0147985b0267f2ff10fb33a 100644 (file)
@@ -1,3 +1,9 @@
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * dummy-frontend.cc (jit_gnu_attribute_table): Add extra braces
+       to work around PR 16333 in older compilers.
+       (jit_format_attribute_table): Likewise.
+
 2023-12-02  Richard Sandiford  <richard.sandiford@arm.com>
 
        * dummy-frontend.cc (jit_format_attribute_table): Change type to
index aa301266c346c6b866b012f19f448957d3199fc1..71727d0fca882134c89474aa3f65ac7cf4fdf666 100644 (file)
@@ -1,3 +1,9 @@
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * lto-lang.cc (lto_gnu_attribute_table): Add extra braces to work
+       around PR 16333 in older compilers.
+       (lto_format_attribute_table): Likewise.
+
 2023-12-02  Richard Sandiford  <richard.sandiford@arm.com>
 
        * lto-lang.cc (lto_format_attribute_table): Change type to
index 26f7614286b5f54bc5e08f81b6cc17cb426f305f..a1b339208ca37f4ed8bcc1e2b8b71921893f5e94 100644 (file)
@@ -1,3 +1,18 @@
+2023-12-05  Gaius Mulley  <gaiusmod2@gmail.com>
+
+       PR modula2/112865
+       * gm2-compiler/M2Quads.mod (BuildReFunction): Use
+       GetDType to retrieve the type of the operand when
+       converting the complex type to its scalar equivalent.
+       (BuildImFunction): Use GetDType to retrieve the type of the
+       operand when converting the complex type to its scalar
+       equivalent.
+
+2023-12-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * mc/mc.flex [__GNUC__]: Define alloca as __builtin_alloca.
+       (handleDate): Use strchr instead of index.
+
 2023-12-04  Gaius Mulley  <gaiusmod2@gmail.com>
 
        PR modula2/112825
index 66e3c6e8d993a90962486bdffadbf5ef84d7ed24..b5162970262eb6ada7e978e9e6ab06512f265cc0 100644 (file)
+2023-12-06  Alexandre Oliva  <oliva@adacore.com>
+
+       * c-c++-common/strub-O0.c: New.
+       * c-c++-common/strub-O1.c: New.
+       * c-c++-common/strub-O2.c: New.
+       * c-c++-common/strub-O2fni.c: New.
+       * c-c++-common/strub-O3.c: New.
+       * c-c++-common/strub-O3fni.c: New.
+       * c-c++-common/strub-Og.c: New.
+       * c-c++-common/strub-Os.c: New.
+       * c-c++-common/strub-all1.c: New.
+       * c-c++-common/strub-all2.c: New.
+       * c-c++-common/strub-apply1.c: New.
+       * c-c++-common/strub-apply2.c: New.
+       * c-c++-common/strub-apply3.c: New.
+       * c-c++-common/strub-apply4.c: New.
+       * c-c++-common/strub-at-calls1.c: New.
+       * c-c++-common/strub-at-calls2.c: New.
+       * c-c++-common/strub-defer-O1.c: New.
+       * c-c++-common/strub-defer-O2.c: New.
+       * c-c++-common/strub-defer-O3.c: New.
+       * c-c++-common/strub-defer-Os.c: New.
+       * c-c++-common/strub-internal1.c: New.
+       * c-c++-common/strub-internal2.c: New.
+       * c-c++-common/strub-parms1.c: New.
+       * c-c++-common/strub-parms2.c: New.
+       * c-c++-common/strub-parms3.c: New.
+       * c-c++-common/strub-relaxed1.c: New.
+       * c-c++-common/strub-relaxed2.c: New.
+       * c-c++-common/strub-short-O0-exc.c: New.
+       * c-c++-common/strub-short-O0.c: New.
+       * c-c++-common/strub-short-O1.c: New.
+       * c-c++-common/strub-short-O2.c: New.
+       * c-c++-common/strub-short-O3.c: New.
+       * c-c++-common/strub-short-Os.c: New.
+       * c-c++-common/strub-strict1.c: New.
+       * c-c++-common/strub-strict2.c: New.
+       * c-c++-common/strub-tail-O1.c: New.
+       * c-c++-common/strub-tail-O2.c: New.
+       * c-c++-common/torture/strub-callable1.c: New.
+       * c-c++-common/torture/strub-callable2.c: New.
+       * c-c++-common/torture/strub-const1.c: New.
+       * c-c++-common/torture/strub-const2.c: New.
+       * c-c++-common/torture/strub-const3.c: New.
+       * c-c++-common/torture/strub-const4.c: New.
+       * c-c++-common/torture/strub-data1.c: New.
+       * c-c++-common/torture/strub-data2.c: New.
+       * c-c++-common/torture/strub-data3.c: New.
+       * c-c++-common/torture/strub-data4.c: New.
+       * c-c++-common/torture/strub-data5.c: New.
+       * c-c++-common/torture/strub-indcall1.c: New.
+       * c-c++-common/torture/strub-indcall2.c: New.
+       * c-c++-common/torture/strub-indcall3.c: New.
+       * c-c++-common/torture/strub-inlinable1.c: New.
+       * c-c++-common/torture/strub-inlinable2.c: New.
+       * c-c++-common/torture/strub-ptrfn1.c: New.
+       * c-c++-common/torture/strub-ptrfn2.c: New.
+       * c-c++-common/torture/strub-ptrfn3.c: New.
+       * c-c++-common/torture/strub-ptrfn4.c: New.
+       * c-c++-common/torture/strub-pure1.c: New.
+       * c-c++-common/torture/strub-pure2.c: New.
+       * c-c++-common/torture/strub-pure3.c: New.
+       * c-c++-common/torture/strub-pure4.c: New.
+       * c-c++-common/torture/strub-run1.c: New.
+       * c-c++-common/torture/strub-run2.c: New.
+       * c-c++-common/torture/strub-run3.c: New.
+       * c-c++-common/torture/strub-run4.c: New.
+       * c-c++-common/torture/strub-run4c.c: New.
+       * c-c++-common/torture/strub-run4d.c: New.
+       * c-c++-common/torture/strub-run4i.c: New.
+       * g++.dg/strub-run1.C: New.
+       * g++.dg/torture/strub-init1.C: New.
+       * g++.dg/torture/strub-init2.C: New.
+       * g++.dg/torture/strub-init3.C: New.
+       * gnat.dg/strub_attr.adb, gnat.dg/strub_attr.ads: New.
+       * gnat.dg/strub_ind.adb, gnat.dg/strub_ind.ads: New.
+       * c-c++-common/strub-var1.c: New file.
+       * gnat.dg/strub_access.adb: New file.
+       * gnat.dg/strub_access1.adb: New file.
+       * gnat.dg/strub_disp.adb: New file.
+       * gnat.dg/strub_disp1.adb: New file.
+       * gnat.dg/strub_ind1.adb: New file.
+       * gnat.dg/strub_ind1.ads: New file.
+       * gnat.dg/strub_ind2.adb: New file.
+       * gnat.dg/strub_ind2.ads: New file.
+       * gnat.dg/strub_intf.adb: New file.
+       * gnat.dg/strub_intf1.adb: New file.
+       * gnat.dg/strub_intf2.adb: New file.
+       * gnat.dg/strub_renm.adb: New file.
+       * gnat.dg/strub_renm1.adb: New file.
+       * gnat.dg/strub_renm2.adb: New file.
+       * gnat.dg/strub_var.adb: New file.
+       * gnat.dg/strub_var1.adb: New file.
+
+2023-12-05  Juzhe-Zhong  <juzhe.zhong@rivai.ai>
+
+       PR target/112851
+       PR target/112852
+       * gcc.target/riscv/rvv/autovec/vls/consecutive-1.c: Add LMUL = 8 option.
+       * gcc.target/riscv/rvv/autovec/vls/consecutive-2.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mod-1.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-1.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-10.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-11.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-12.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-13.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-14.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-15.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-16.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-17.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-3.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-5.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-7.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-8.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/mov-9.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/spill-1.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/spill-2.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/spill-3.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/spill-5.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/vls/spill-6.c: Ditto.
+       * gcc.target/riscv/rvv/autovec/zve32f-1.c: Adapt test.
+       * gcc.target/riscv/rvv/autovec/pr112851.c: New test.
+       * gcc.target/riscv/rvv/autovec/pr112852.c: New test.
+
+2023-12-05  David Faust  <david.faust@oracle.com>
+
+       PR debug/112849
+       * gcc.dg/debug/btf/btf-datasec-3.c: New test.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/112795
+       * g++.dg/ext/unroll-2.C: Use { target c++11 } instead of dg-skip-if for
+       -std=gnu++98.
+       * g++.dg/ext/unroll-3.C: Likewise.
+       * g++.dg/ext/unroll-7.C: New test.
+       * g++.dg/ext/unroll-8.C: New test.
+
+2023-12-05  Harald Anlauf  <anlauf@gmx.de>
+           Tobias Burnus   <tobias@codesourcery.com>
+
+       PR fortran/100988
+       * gfortran.dg/coarray_poly_6.f90: Adjust pattern.
+       * gfortran.dg/coarray_poly_7.f90: Likewise.
+       * gfortran.dg/coarray_poly_8.f90: Likewise.
+       * gfortran.dg/missing_optional_dummy_6a.f90: Likewise.
+       * gfortran.dg/pr100988.f90: New test.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/110734
+       * g++.dg/DRs/dr2262.C: New test.
+       * g++.dg/cpp0x/gen-attrs-76.C (foo, bar): Don't expect errors
+       on attributes on asm definitions.
+       * g++.dg/gomp/attrs-11.C: Remove 2 expected errors.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/112830
+       * gcc.target/avr/pr112830.c: New testcase.
+       * gcc.target/i386/pr112830.c: Likewise.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/109689
+       PR tree-optimization/112856
+       * gcc.dg/torture/pr109689.c: New testcase.
+       * gcc.dg/torture/pr112856.c: Likewise.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/112845
+       * gcc.dg/pr112845.c: New file.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sve/acle/asm/test_sve_acle.h: Provide a way
+       for test functions to share ZT0.
+       (ATTR): Update accordingly.
+       (TEST_LOAD_COUNT, TEST_STORE_COUNT, TEST_PN, TEST_COUNT_PN)
+       (TEST_EXTRACT_PN, TEST_SELECT_P, TEST_COMPARE_S_X2, TEST_COMPARE_S_C)
+       (TEST_CREATE_B, TEST_GET_B, TEST_SET_B, TEST_XN, TEST_XN_SINGLE)
+       (TEST_XN_SINGLE_Z15, TEST_XN_SINGLE_AWKWARD, TEST_X2_NARROW)
+       (TEST_X4_NARROW): New macros.
+       * gcc.target/aarch64/sve/acle/asm/create2_1.c: Add _b tests.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_m_1.c: Remove
+       test for svmopa that becomes valid with SME2.
+       * gcc.target/aarch64/sve/acle/general-c/create_1.c: Adjust for
+       existence of svboolx2_t version of svcreate2.
+       * gcc.target/aarch64/sve/acle/general-c/store_1.c: Adjust error
+       messages to account for svcount_t predication.
+       * gcc.target/aarch64/sve/acle/general-c/store_2.c: Likewise.
+       * gcc.target/aarch64/sve/acle/general-c/ternary_qq_lane_1.c: Adjust
+       error messages to account for new SME2 variants.
+       * gcc.target/aarch64/sve/acle/general-c/ternary_qq_opt_n_2.c: Likewise.
+       * g++.target/aarch64/sme2/aarch64-sme2-acle-asm.exp: New file.
+       * gcc.target/aarch64/sme/acle-asm/clamp_s16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/clamp_s32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/clamp_s64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/clamp_s8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/clamp_u16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/clamp_u32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/clamp_u64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/clamp_u8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_bf16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_f16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_f32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_f64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_s16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_s32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_s64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_s8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_u16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_u32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_u64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/revd_u8.c: New file.
+       * gcc.target/aarch64/sme/clamp_1.c: New file.
+       * gcc.target/aarch64/sme/clamp_2.c: New file.
+       * gcc.target/aarch64/sme/clamp_3.c: New file.
+       * gcc.target/aarch64/sme/clamp_4.c: New file.
+       * gcc.target/aarch64/sme2/aarch64-sme2-acle-asm.exp: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_write_za32_s32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_write_za32_s32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_write_za32_u32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_write_za32_u32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_write_za64_s64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_write_za64_s64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_write_za64_u64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_write_za64_u64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za32_f32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za32_f32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za32_s32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za32_s32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za32_u32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za32_u32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za64_f64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za64_f64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za64_s64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za64_s64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za64_u64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/add_za64_u64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/bfmlslb_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/bfmlslb_lane_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/bfmlslt_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/bfmlslt_lane_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/bmopa_za32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/bmops_za32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/clamp_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cntp_c16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cntp_c32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cntp_c64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cntp_c8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_bf16_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_f16_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_f32_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_f32_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_f32_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_f32_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_s32_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_s32_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_u32_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvt_u32_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvtn_bf16_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/cvtn_f16_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_s32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_u32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_bf16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_bf16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_f16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_f16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_s16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_s16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_s8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_s8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_u16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_u16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_u8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za32_u8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za64_s16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za64_s16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za64_u16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_lane_za64_u16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_s32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_u32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_bf16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_bf16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_f16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_f16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_s16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_s16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_s8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_s8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_u16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_u16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_u8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za32_u8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za64_s16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za64_s16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za64_u16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/dot_za64_u16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ld1_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldnt1_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ldr_zt.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_bf16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_f16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti2_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_bf16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_f16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_f32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_s16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_s32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_s8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_u16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_u32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_u8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/luti4_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/max_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/maxnm_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/maxnm_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/maxnm_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/maxnm_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/maxnm_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/maxnm_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/min_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/minnm_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/minnm_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/minnm_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/minnm_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/minnm_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/minnm_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_bf16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_bf16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_bf16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_f16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_f16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_f16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_f32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_f32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s8_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s8_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_s8_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_u16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_u16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_u16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_u8_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_u8_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za32_u8_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za64_f64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za64_f64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za64_s16_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za64_s16_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za64_s16_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za64_u16_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za64_u16_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_lane_za64_u16_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_bf16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_bf16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_bf16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_f16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_f16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_f16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_f32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_f32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_s16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_s16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_s16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_s8_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_s8_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_s8_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_u16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_u16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_u16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_u8_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_u8_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za32_u8_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za64_f64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za64_f64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za64_s16_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za64_s16_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za64_s16_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za64_u16_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za64_u16_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mla_za64_u16_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_bf16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_bf16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_bf16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_f16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_f16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_f16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_f32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_f32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_s16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_s16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_s16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_s8_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_s8_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_s8_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_u16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_u16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_u16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_u8_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_u8_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za32_u8_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za64_f64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za64_f64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za64_s16_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za64_s16_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za64_s16_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za64_u16_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za64_u16_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_lane_za64_u16_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_bf16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_bf16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_bf16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_f16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_f16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_f16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_f32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_f32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_s16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_s16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_s16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_s8_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_s8_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_s8_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_u16_vg2x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_u16_vg2x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_u16_vg2x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_u8_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_u8_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za32_u8_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za64_f64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za64_f64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za64_s16_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za64_s16_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za64_s16_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za64_u16_vg4x1.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za64_u16_vg4x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mls_za64_u16_vg4x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mopa_za32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/mops_za32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pext_c16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pext_c16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pext_c32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pext_c32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pext_c64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pext_c64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pext_c8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pext_c8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/pfalse_c.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/psel_b16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/psel_b32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/psel_b64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/psel_b8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/psel_c16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/psel_c32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/psel_c64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/psel_c8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ptrue_c16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ptrue_c32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ptrue_c64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/ptrue_c8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_s16_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_s16_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_s8_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_u16_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_u16_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_u16_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_u16_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_u8_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvt_u8_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_s16_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_s16_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_s8_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_u16_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_u16_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_u16_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_u16_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_u8_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qcvtn_u8_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qdmulh_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qdmulh_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qdmulh_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qdmulh_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qdmulh_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qdmulh_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qdmulh_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qdmulh_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshr_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshr_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshr_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshr_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshr_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshr_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrn_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrn_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrn_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrn_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrn_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrn_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshru_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshru_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshru_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrun_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrun_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/qrshrun_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_hor_za16_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_hor_za16_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_hor_za32_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_hor_za32_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_hor_za64_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_hor_za64_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_hor_za8_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_ver_za16_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_ver_za16_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_ver_za32_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_ver_za32_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_ver_za64_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_ver_za64_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_ver_za8_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_za16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_za16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_za32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_za32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_za64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_za64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/read_za8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rinta_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rinta_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rintm_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rintm_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rintn_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rintn_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rintp_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rintp_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/rshl_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sel_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/st1_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/stnt1_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/str_zt.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_write_za32_s32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_write_za32_s32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_write_za32_u32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_write_za32_u32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_write_za64_s64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_write_za64_s64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_write_za64_u64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_write_za64_u64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za32_f32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za32_f32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za32_s32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za32_s32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za32_u32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za32_u32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za64_f64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za64_f64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za64_s64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za64_s64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za64_u64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sub_za64_u64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sudot_lane_za32_s8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sudot_lane_za32_s8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sudot_za32_s8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/sudot_za32_s8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/suvdot_lane_za32_s8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/test_sme2_acle.h: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/unpk_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/usdot_lane_za32_u8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/usdot_lane_za32_u8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/usdot_za32_u8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/usdot_za32_u8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/usvdot_lane_za32_u8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzp_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/uzpq_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_bf16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_f16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_s16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_s8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_u16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/vdot_lane_za32_u8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/vdot_lane_za64_s16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/vdot_lane_za64_u16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilege_b16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilege_b32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilege_b64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilege_b8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilege_c16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilege_c32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilege_c64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilege_c8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilegt_b16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilegt_b32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilegt_b64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilegt_b8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilegt_c16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilegt_c32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilegt_c64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilegt_c8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilele_b16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilele_b32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilele_b64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilele_b8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilele_c16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilele_c32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilele_c64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilele_c8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilelt_b16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilelt_b32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilelt_b64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilelt_b8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilelt_c16.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilelt_c32.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilelt_c64.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/whilelt_c8.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_hor_za16_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_hor_za16_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_hor_za32_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_hor_za32_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_hor_za64_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_hor_za64_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_hor_za8_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_ver_za16_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_ver_za16_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_ver_za32_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_ver_za32_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_ver_za64_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_ver_za64_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_ver_za8_vg4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_za16_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_za16_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_za32_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_za32_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_za64_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_za64_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/write_za8_vg1x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zero_zt.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zip_u8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_bf16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_bf16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_f16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_f16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_f32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_f32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_f64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_f64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_s16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_s16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_s32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_s32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_s64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_s64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_s8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_s8_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_u16_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_u16_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_u32_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_u32_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_u64_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_u64_x4.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_u8_x2.c: New file.
+       * gcc.target/aarch64/sme2/acle-asm/zipq_u8_x4.c: New file.
+       * gcc.target/aarch64/sve/acle/asm/get2_b.c: New file.
+       * gcc.target/aarch64/sve/acle/asm/set2_b.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_int_opt_single_n_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_int_opt_single_n_2.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_opt_single_n_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_opt_single_n_2.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_single_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_int_opt_single_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_2.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_3.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_lane_4.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_2.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_opt_single_3.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binary_za_slice_uint_opt_single_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binaryxn_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/binaryxn_2.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/clamp_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/compare_scalar_count_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/dot_za_slice_int_lane_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/dot_za_slice_lane_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/dot_za_slice_lane_2.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/dot_za_slice_uint_lane_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowxn_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/storexn_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/ternary_qq_or_011_lane_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/unary_convertxn_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/unary_za_slice_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/unary_za_slice_2.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/unary_za_slice_3.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/unaryxn_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/write_za_1.c: New file.
+       * gcc.target/aarch64/sve/acle/general-c/write_za_slice_1.c: New file.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sme/zt0_state_1.c: New test.
+       * gcc.target/aarch64/sme/zt0_state_2.c: Likewise.
+       * gcc.target/aarch64/sme/zt0_state_3.c: Likewise.
+       * gcc.target/aarch64/sme/zt0_state_4.c: Likewise.
+       * gcc.target/aarch64/sme/zt0_state_5.c: Likewise.
+       * gcc.target/aarch64/sme/zt0_state_6.c: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sve/pcs/struct_3_128.c (test_nonpst3): Adjust
+       stack offsets.
+       (ret_nonpst3): Remove XFAIL.
+       * gcc.target/aarch64/sve/acle/general-c/svboolx2_1.c: New test.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * g++.target/aarch64/sve/acle/general-c++/mangle_1.C: Add test
+       for svcount_t.
+       * g++.target/aarch64/sve/acle/general-c++/mangle_2.C: Likewise.
+       * g++.target/aarch64/sve/acle/general-c++/svcount_1.C: New test.
+       * gcc.target/aarch64/sve/acle/asm/test_sve_acle.h (TEST_DUAL_P)
+       (TEST_DUAL_P_REV): New macros.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_b.c: New test.
+       * gcc.target/aarch64/sve/acle/general-c/load_1.c: Test passing
+       an svcount_t.
+       * gcc.target/aarch64/sve/acle/general-c/svcount_1.c: New test.
+       * gcc.target/aarch64/sve/acle/general-c/unary_convert_1.c: Test
+       reinterprets involving svcount_t.
+       * gcc.target/aarch64/sve/acle/general/attributes_7.c: Test svcount_t.
+       * gcc.target/aarch64/sve/pcs/annotate_1.c: Likewise.
+       * gcc.target/aarch64/sve/pcs/annotate_2.c: Likewise.
+       * gcc.target/aarch64/sve/pcs/args_12.c: New test.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * lib/target-supports.exp (check_effective_target_aarch64_sme2): New
+       target test.
+       (check_effective_target_aarch64_asm_sme2_ok): Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sme/sibcall_1.c: New test.
+       * gcc.target/aarch64/sme/sibcall_2.c: Likewise.
+       * gcc.target/aarch64/sme/sibcall_3.c: Likewise.
+       * gcc.target/aarch64/sme/sibcall_4.c: Likewise.
+       * gcc.target/aarch64/sme/sibcall_5.c: Likewise.
+       * gcc.target/aarch64/sme/sibcall_6.c: Likewise.
+       * gcc.target/aarch64/sme/sibcall_7.c: Likewise.
+       * gcc.target/aarch64/sme/sibcall_8.c: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sme/inlining_1.c: New test.
+       * gcc.target/aarch64/sme/inlining_2.c: Likewise.
+       * gcc.target/aarch64/sme/inlining_3.c: Likewise.
+       * gcc.target/aarch64/sme/inlining_4.c: Likewise.
+       * gcc.target/aarch64/sme/inlining_5.c: Likewise.
+       * gcc.target/aarch64/sme/inlining_6.c: Likewise.
+       * gcc.target/aarch64/sme/inlining_7.c: Likewise.
+       * gcc.target/aarch64/sme/inlining_8.c: Likewise.
+       * gcc.target/aarch64/sme/inlining_10.c: New file.
+       * gcc.target/aarch64/sme/inlining_11.c: New file.
+       * gcc.target/aarch64/sme/inlining_12.c: New file.
+       * gcc.target/aarch64/sme/inlining_13.c: New file.
+       * gcc.target/aarch64/sme/inlining_14.c: New file.
+       * gcc.target/aarch64/sme/inlining_15.c: New file.
+       * gcc.target/aarch64/sme/inlining_9.c: New file.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * g++.target/aarch64/sme/exceptions_2.C: New test.
+       * gcc.target/aarch64/sme/nonlocal_goto_1.c: Likewise.
+       * gcc.target/aarch64/sme/nonlocal_goto_2.c: Likewise.
+       * gcc.target/aarch64/sme/nonlocal_goto_3.c: Likewise.
+       * gcc.target/aarch64/sme/nonlocal_goto_4.c: Likewise.
+       * gcc.target/aarch64/sme/nonlocal_goto_5.c: Likewise.
+       * gcc.target/aarch64/sme/nonlocal_goto_6.c: Likewise.
+       * gcc.target/aarch64/sme/nonlocal_goto_7.c: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sme/locally_streaming_1.c: New test.
+       * gcc.target/aarch64/sme/locally_streaming_2.c: Likewise.
+       * gcc.target/aarch64/sme/locally_streaming_3.c: Likewise.
+       * gcc.target/aarch64/sme/locally_streaming_4.c: Likewise.
+       * gcc.target/aarch64/sme/keyword_macros_1.c: Add
+       __arm_locally_streaming.
+       * g++.target/aarch64/sme/keyword_macros_1.C: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * 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.target/aarch64/sme/acle-asm/addha_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/addha_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/addva_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/addva_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/arm_has_sme_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/arm_in_streaming_mode_ns.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/arm_in_streaming_mode_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/arm_in_streaming_mode_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/cntsb_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/cntsb_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/cntsd_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/cntsd_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/cntsh_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/cntsh_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/cntsw_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/cntsw_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_vnum_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_hor_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_vnum_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ld1_ver_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ldr_vnum_za_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ldr_vnum_za_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ldr_za_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/ldr_za_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/mopa_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/mopa_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/mops_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/mops_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_hor_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_hor_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_hor_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_hor_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_hor_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_ver_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_ver_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_ver_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_ver_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/read_ver_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_vnum_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_hor_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_vnum_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/st1_ver_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/str_vnum_za_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/str_vnum_za_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/str_za_s.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/str_za_sc.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/sumopa_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/sumopa_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/sumops_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/sumops_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/test_sme_acle.h: New file.
+       * gcc.target/aarch64/sme/acle-asm/undef_za.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/usmopa_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/usmopa_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/usmops_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/usmops_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_hor_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_hor_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_hor_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_hor_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_hor_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_ver_za128.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_ver_za16.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_ver_za32.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_ver_za64.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/write_ver_za8.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/zero_mask_za.c: New file.
+       * gcc.target/aarch64/sme/acle-asm/zero_za.c: New file.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sme/za_state_1.c: New test.
+       * gcc.target/aarch64/sme/za_state_2.c: Likewise.
+       * gcc.target/aarch64/sme/za_state_3.c: Likewise.
+       * gcc.target/aarch64/sme/za_state_4.c: Likewise.
+       * gcc.target/aarch64/sme/za_state_5.c: Likewise.
+       * gcc.target/aarch64/sme/za_state_6.c: Likewise.
+       * g++.target/aarch64/sme/exceptions_1.C: Likewise.
+       * gcc.target/aarch64/sme/keyword_macros_1.c: Add ZA macros.
+       * g++.target/aarch64/sme/keyword_macros_1.C: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sme/call_sm_switch_1.c: New test.
+       * gcc.target/aarch64/sme/call_sm_switch_2.c: Likewise.
+       * gcc.target/aarch64/sme/call_sm_switch_3.c: Likewise.
+       * gcc.target/aarch64/sme/call_sm_switch_4.c: Likewise.
+       * gcc.target/aarch64/sme/call_sm_switch_5.c: Likewise.
+       * gcc.target/aarch64/sme/call_sm_switch_6.c: Likewise.
+       * gcc.target/aarch64/sme/call_sm_switch_7.c: Likewise.
+       * gcc.target/aarch64/sme/call_sm_switch_8.c: Likewise.
+       * gcc.target/aarch64/sme/call_sm_switch_9.c: Likewise.
+       * gcc.target/aarch64/sme/call_sm_switch_10.c: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * g++.target/aarch64/sve/aarch64-ssve.exp: New harness.
+       * g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp: Add
+       -DSTREAMING_COMPATIBLE to the list of options.
+       * g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp: Likewise.
+       * gcc.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp: Likewise.
+       * gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp: Likewise.
+       Fix pasto in variable name.
+       * gcc.target/aarch64/sve/acle/asm/test_sve_acle.h: Mark functions
+       as streaming-compatible if STREAMING_COMPATIBLE is defined.
+       * gcc.target/aarch64/sve/acle/asm/adda_f16.c: Disable for
+       streaming-compatible code.
+       * gcc.target/aarch64/sve/acle/asm/adda_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/adda_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/adrb.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/adrd.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/adrh.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/adrw.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/bfmmla_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/compact_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/compact_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/compact_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/compact_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/compact_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/compact_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/expa_f16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/expa_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/expa_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1_gather_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1_gather_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_bf16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_f16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_s16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_s8.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_u16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ro_u8.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sb_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sb_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sb_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sb_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sh_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sh_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sh_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sh_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sw_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1sw_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ub_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ub_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ub_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1ub_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1uh_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1uh_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1uh_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1uh_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1uw_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ld1uw_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_bf16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_f16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_gather_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_gather_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_s16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_s8.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_u16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1_u8.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_s16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_u16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sb_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sh_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sh_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sh_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sh_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sh_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sh_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sh_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sh_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sw_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sw_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sw_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1sw_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_s16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_u16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1ub_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uh_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uh_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uh_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uh_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uh_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uh_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uh_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uh_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uw_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uw_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uw_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldff1uw_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_bf16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_f16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_s16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_s8.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_u16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1_u8.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sb_s16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sb_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sb_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sb_u16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sb_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sb_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sh_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sh_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sh_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sh_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sw_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1sw_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1ub_s16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1ub_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1ub_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1ub_u16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1ub_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1ub_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1uh_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1uh_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1uh_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1uh_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1uw_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/ldnf1uw_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/mmla_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/mmla_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/mmla_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/mmla_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/prfb_gather.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/prfd_gather.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/prfh_gather.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/prfw_gather.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/rdffr_1.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1_scatter_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1_scatter_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1_scatter_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1_scatter_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1_scatter_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1_scatter_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1b_scatter_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1b_scatter_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1b_scatter_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1b_scatter_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1h_scatter_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1h_scatter_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1h_scatter_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1h_scatter_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1w_scatter_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/st1w_scatter_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tmad_f16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tmad_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tmad_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tsmul_f16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tsmul_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tsmul_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tssel_f16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tssel_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/tssel_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/usmmla_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/aesd_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/aese_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bdep_u16.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bdep_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bdep_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bdep_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bext_u16.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bext_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bext_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bext_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bgrp_u16.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bgrp_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bgrp_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/bgrp_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/histcnt_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/histcnt_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/histcnt_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/histcnt_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/histseg_s8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/histseg_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/match_s16.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/match_s8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/match_u16.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/match_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/nmatch_s16.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/nmatch_s8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/nmatch_u16.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/nmatch_u8.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/rax1_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/rax1_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/sm4e_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/sm4ekey_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u32.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_s64.c: Likewise.
+       * gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_u64.c: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/movdf_2.c: New test.
+       * gcc.target/aarch64/movdi_3.c: Likewise.
+       * gcc.target/aarch64/movhf_2.c: Likewise.
+       * gcc.target/aarch64/movhi_2.c: Likewise.
+       * gcc.target/aarch64/movqi_2.c: Likewise.
+       * gcc.target/aarch64/movsf_2.c: Likewise.
+       * gcc.target/aarch64/movsi_2.c: Likewise.
+       * gcc.target/aarch64/movtf_3.c: Likewise.
+       * gcc.target/aarch64/movtf_4.c: Likewise.
+       * gcc.target/aarch64/movti_3.c: Likewise.
+       * gcc.target/aarch64/movti_4.c: Likewise.
+       * gcc.target/aarch64/movv16qi_4.c: Likewise.
+       * gcc.target/aarch64/movv16qi_5.c: Likewise.
+       * gcc.target/aarch64/movv8qi_4.c: Likewise.
+       * gcc.target/aarch64/sme/arm_neon_1.c: Likewise.
+       * gcc.target/aarch64/sme/arm_neon_2.c: Likewise.
+       * gcc.target/aarch64/sme/arm_neon_3.c: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * lib/target-supports.exp (check_effective_target_aarch64_sme): New
+       target test.
+       * gcc.target/aarch64/sme/aarch64-sme.exp: Force SME to be enabled
+       if it isn't by default.
+       * g++.target/aarch64/sme/aarch64-sme.exp: Likewise.
+       * gcc.target/aarch64/sme/streaming_mode_3.c: New test.
+       * gcc.target/aarch64/sme/streaming_mode_4.c: New file.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sme/aarch64-sme.exp: New harness.
+       * gcc.target/aarch64/sme/streaming_mode_1.c: New test.
+       * gcc.target/aarch64/sme/streaming_mode_2.c: Likewise.
+       * gcc.target/aarch64/sme/keyword_macros_1.c: Likewise.
+       * g++.target/aarch64/sme/aarch64-sme.exp: New harness.
+       * g++.target/aarch64/sme/streaming_mode_1.C: New test.
+       * g++.target/aarch64/sme/streaming_mode_2.C: Likewise.
+       * g++.target/aarch64/sme/keyword_macros_1.C: Likewise.
+       * gcc.target/aarch64/auto-init-1.c: Only expect the call insn
+       to contain 1 (const_int 0), not 2.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sve/acle/asm/test_sve_acle.h (TEST_DUAL_XN):
+       New macro.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_bf16.c: Add tests for
+       tuple forms.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_f16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_f32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_f64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_s16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_s32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_s64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_s8.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_u16.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_u32.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_u64.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/reinterpret_u8.c: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sve/acle/general-c/set_1.c: Tweak expected
+       error message.
+       * gcc.target/aarch64/sve/acle/general-c/set_3.c: Likewise.
+       * gcc.target/aarch64/sve/acle/general-c/set_5.c: Likewise.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sve/acle/general-c/*: Replace "but previous
+       arguments had" with "but argument N had".
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sve/acle/general-c/*: Update expected error
+       messages.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * gcc.target/aarch64/sve/acle/asm/cntb.c: Tweak expected output.
+       * gcc.target/aarch64/sve/acle/asm/cnth.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/cntw.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/cntd.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/prfb.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/prfh.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/prfw.c: Likewise.
+       * gcc.target/aarch64/sve/acle/asm/prfd.c: Likewise.
+       * gcc.target/aarch64/sve/loop_add_4.c: Expect RDVL to be used
+       to calculate the -17 and 17 factors.
+       * gcc.target/aarch64/sve/pcs/stack_clash_1.c: Likewise the 18 factor.
+
+2023-12-05  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+       * gcc.target/aarch64/eh_return-3.c: Fix when retaa is available.
+
+2023-12-05  Thomas Schwinge  <thomas@codesourcery.com>
+
+       * gcc.dg/gnu23-builtins-no-dfp-1.c: Remove '-fpermissive'.
+       'dg-error "implicit"' instead of 'dg-warning "implicit"'.
+
+2023-12-05  Kito Cheng  <kito.cheng@sifive.com>
+
+       * gcc.target/riscv/arch-29.c: New test.
+       * gcc.target/riscv/arch-30.c: New test.
+
+2023-12-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       PR rtl-optimization/112278
+       * gcc.target/aarch64/sve/pr112278.c: New test.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/112843
+       * gcc.dg/bitint-47.c: New test.
+
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/112816
+       * gcc.target/i386/pr112816.c: New test.
+
+2023-12-05  Juzhe-Zhong  <juzhe.zhong@rivai.ai>
+
+       * g++.target/riscv/rvv/autovec/bug-2.C: New test.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR c/89270
+       * gcc.target/avr/pr89270.c: New testcase.
+
+2023-12-05  Richard Biener  <rguenther@suse.de>
+
+       PR c/86869
+       * gcc.target/avr/pr86869.c: New testcase.
+
+2023-12-05  liuhongt  <hongtao.liu@intel.com>
+
+       * gcc.target/i386/udotprodint8_emulate.c: New test.
+
+2023-12-05  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/107687
+       PR c++/110997
+       * g++.dg/cpp23/consteval-if10.C: Remove dg-error.
+       * g++.dg/cpp23/consteval-if2.C: Likewise.
+       * g++.dg/cpp23/feat-cxx2b.C: Adjust expected value of __cpp_consteval.
+       * g++.dg/cpp26/feat-cxx26.C: Likewise.
+       * g++.dg/cpp2a/consteval-memfn1.C: Add dg-error.
+       * g++.dg/cpp2a/consteval11.C: Likewise.
+       * g++.dg/cpp2a/consteval3.C: Adjust dg-error.
+       * g++.dg/cpp2a/consteval34.C: Add dg-error.
+       * g++.dg/cpp2a/consteval36.C: Likewise.
+       * g++.dg/cpp2a/consteval9.C: Likewise.
+       * g++.dg/cpp2a/feat-cxx2a.C: Adjust expected value of __cpp_consteval.
+       * g++.dg/cpp2a/spaceship-synth9.C: Adjust dg-error.
+       * g++.dg/cpp2a/consteval-prop1.C: New test.
+       * g++.dg/cpp2a/consteval-prop10.C: New test.
+       * g++.dg/cpp2a/consteval-prop11.C: New test.
+       * g++.dg/cpp2a/consteval-prop12.C: New test.
+       * g++.dg/cpp2a/consteval-prop13.C: New test.
+       * g++.dg/cpp2a/consteval-prop14.C: New test.
+       * g++.dg/cpp2a/consteval-prop15.C: New test.
+       * g++.dg/cpp2a/consteval-prop16.C: New test.
+       * g++.dg/cpp2a/consteval-prop17.C: New test.
+       * g++.dg/cpp2a/consteval-prop18.C: New test.
+       * g++.dg/cpp2a/consteval-prop19.C: New test.
+       * g++.dg/cpp2a/consteval-prop20.C: New test.
+       * g++.dg/cpp2a/consteval-prop2.C: New test.
+       * g++.dg/cpp2a/consteval-prop3.C: New test.
+       * g++.dg/cpp2a/consteval-prop4.C: New test.
+       * g++.dg/cpp2a/consteval-prop5.C: New test.
+       * g++.dg/cpp2a/consteval-prop6.C: New test.
+       * g++.dg/cpp2a/consteval-prop7.C: New test.
+       * g++.dg/cpp2a/consteval-prop8.C: New test.
+       * g++.dg/cpp2a/consteval-prop9.C: New test.
+
 2023-12-04  Jason Merrill  <jason@redhat.com>
 
        * g++.dg/cpp0x/constexpr-noreturn1.C: New test.
index 6b3451200a0a78434724ed323adda995c1222f3d..542cfe5aa4eadf561b30e4173f87b88c7d6cc8da 100644 (file)
@@ -1,3 +1,12 @@
+2023-12-06  Alexandre Oliva  <oliva@adacore.com>
+
+       * Makefile.in (LIB2ADD): Add strub.c.
+       * libgcc2.h (__strub_enter, __strub_update, __strub_leave):
+       Declare.
+       * strub.c: New.
+       * libgcc-std.ver.in (__strub_enter): Add to GCC_14.0.0.
+       (__strub_update, __strub_leave): Likewise.
+
 2023-12-03  Jeff Law  <jlaw@ventanamicro.com>
 
        * unwind-pe.h (_Unwind_gnu_Find_got): Add prototype.
index 613db7854713d55c2779b3e84265c1ece9d01195..2393305a8649b0f89778ee62fcf98b26fdffa10a 100644 (file)
@@ -1,3 +1,15 @@
+2023-12-05  Florian Weimer  <fweimer@redhat.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       * io/list_read.c (list_formatted_read_scalar) <case BT_CLASS>:
+       Change types of unit and noiostat to GFC_INTEGER_4 from int, change
+       type of child_iostat from to GFC_INTEGER_4 * from int *, formatting
+       fixes.
+       (nml_read_obj): Likewise.
+       * io/write.c (list_formatted_write_scalar) <case BT_CLASS>: Likewise.
+       (nml_write_obj): Likewise.
+       * io/transfer.c (unformatted_read, unformatted_write): Likewise.
+
 2023-11-08  Mikael Morin  <mikael@gcc.gnu.org>
 
        PR fortran/112371
index 1005bf8a974bdceb64e47fc018b5858165230a1b..884c8b70f875489e77f13ecc728860dbd693f041 100644 (file)
@@ -1,3 +1,13 @@
+2023-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       * configure.ac (HAVE_X86_SHA1_HW_SUPPORT): Verify __get_cpuid and
+       __get_cpuid_count are not implicitly declared.
+       * configure: Regenerated.
+
+2023-12-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * pex-unix.c (pex_unix_wait): Change return type to pid_t.
+
 2023-12-01  Jason Merrill  <jason@redhat.com>
 
        * cp-demangle.c (d_make_comp): Handle
index c471773cf428e1f62ffe663b73ad846287f3030a..c2e220ee6c388a871ad905e91db5fb7dd133b711 100644 (file)
@@ -1,3 +1,70 @@
+2023-12-05  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/111948
+       * include/bits/ranges_util.h (subrange): Add constructor to
+       _Size to aoid setting member in constructor.
+       * testsuite/std/ranges/subrange/111948.cc: New test.
+
+2023-12-05  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/std/ranges (__detail::__container_insertable): Remove.
+       (__detail::__container_inserter): Remove.
+       (ranges::to): Use emplace_back or emplace, as per LWG 4016.
+       * testsuite/std/ranges/conv/1.cc (Cont4, test_2_1_4): Check for
+       use of emplace_back and emplace.
+
+2023-12-05  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/c++config (__glibcxx_assert_fail): Declare even
+       when assertions are not enabled.
+       (__glibcxx_constexpr_assert): Remove macro.
+       (__glibcxx_assert_impl): Remove macro.
+       (_GLIBCXX_ASSERT_FAIL): New macro.
+       (_GLIBCXX_DO_ASSERT): New macro.
+       (__glibcxx_assert): Simplify to a single definition that works
+       at runtime and during constant evaluation.
+       * testsuite/21_strings/basic_string_view/element_access/char/back_constexpr_neg.cc:
+       Adjust expected errors.
+       * testsuite/21_strings/basic_string_view/element_access/char/constexpr_neg.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string_view/element_access/char/front_constexpr_neg.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string_view/element_access/wchar_t/back_constexpr_neg.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr_neg.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string_view/element_access/wchar_t/front_constexpr_neg.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string_view/modifiers/remove_prefix/debug.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string_view/modifiers/remove_suffix/debug.cc:
+       Likewise.
+       * testsuite/23_containers/span/back_neg.cc: Likewise.
+       * testsuite/23_containers/span/front_neg.cc: Likewise.
+       * testsuite/23_containers/span/index_op_neg.cc: Likewise.
+       * testsuite/26_numerics/lcm/105844.cc: Likewise.
+
+2023-12-05  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/112832
+       * include/std/format (formatter::set_debug_format): Ensure this
+       member is defined conditionally for all specializations.
+       * testsuite/std/format/formatter/112832.cc: New test.
+
+2023-12-05  Will Hawkins  <hawkinsw@obs.cr>
+           Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/20_util/smartptr.adapt/inout_ptr/2.cc: Add check
+       for LWG Issue 3897.
+
+2023-12-05  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/107687
+       PR c++/110997
+       * testsuite/18_support/comparisons/categories/zero_neg.cc: Add
+       dg-prune-output.
+       * testsuite/std/format/string_neg.cc: Add dg-error.
+
 2023-12-02  Alexandre Oliva  <oliva@adacore.com>
 
        * libsupc++/atexit_thread.cc [__GXX_WEAK__]: Add dynamic