Hi gcc-patches mailing list, Karl Meakin <[email protected]> has requested that the following forgejo pull request be published on the mailing list.
Created on: 2025-10-02 16:30:31+00:00 Latest update: 2025-12-11 15:27:19+00:00 Changes: 15 changed files, 568 additions, 511 deletions Head revision: karmea01/gcc-TEST ref km/aarch64-intrinsics-refactors/v1 commit ccda394d17cf4e1f00de0dcb2514a32993d0d4d7 Base revision: gcc/gcc-TEST ref trunk commit 9748d369e2cfc2b8edca9fa81127601aada23a23 r16-6010-g9748d369e2cfc2 Merge base: 9748d369e2cfc2b8edca9fa81127601aada23a23 Full diff url: https://forge.sourceware.org/gcc/gcc-TEST/pulls/90.diff Discussion: https://forge.sourceware.org/gcc/gcc-TEST/pulls/90 Requested Reviewers: Minor refactors and documentation improvements. NFCI Testing done: `make check-gcc` and `make check-target` ChangeLog: * v1: Initial revision * v2: * Squash "aarch64: Remove redundant const from constexpr variables" and "aarch64: Reformat array initializers to be more readable" into "aarch64: Reformat array initializers" * v3: * Add "aarch64: Rename `ENTRY` to `DEF_SIMD_TYPE`" * Squash "aarch64: Delete duplicate enum aarch64_simd_type definition" into "aarch64: Rename `ENTRY` to `DEF_SIMD_TYPE`" * Add "aarch64: Make `NUM_VECTOR_TYPES` an enum member" * Add "aarch64: Use shifts in `aarch64_type_qualifiers` enum " * v4: Rebase against master * v5: Rebase against master * v6: Fix compile error in "aarch64: Reformat array initializers" * v7: remove `clang-format` directives * v8: rebase against master, add "aarch64: use `enum unspec` rather than `int`" Changed files: - M: gcc/config/aarch64/aarch64-builtins.cc - M: gcc/config/aarch64/aarch64-builtins.h - M: gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def - M: gcc/config/aarch64/aarch64-simd-builtin-types.def - M: gcc/config/aarch64/aarch64-sve-builtins-base.cc - M: gcc/config/aarch64/aarch64-sve-builtins-base.def - M: gcc/config/aarch64/aarch64-sve-builtins-functions.h - M: gcc/config/aarch64/aarch64-sve-builtins-sme.cc - M: gcc/config/aarch64/aarch64-sve-builtins-sme.def - M: gcc/config/aarch64/aarch64-sve-builtins-sve2.cc - M: gcc/config/aarch64/aarch64-sve-builtins.cc - M: gcc/config/aarch64/aarch64-sve-builtins.def - M: gcc/config/aarch64/aarch64-sve-builtins.h - M: gcc/config/aarch64/aarch64.cc - M: gcc/config/aarch64/aarch64.md Karl Meakin (9): aarch64: Rename `ENTRY` to `DEF_SIMD_TYPE` aarch64: Document `DEF_*` macros aarch64: Define `DEF_SVE_TYPE_SUFFIX` in terms of `DEF_SVE_NEON_TYPE_SUFFIX` aarch64: Use variadic arguments aarch64: Reformat array initializers aarch64: Make `NUM_VECTOR_TYPES` an enum member aarch64: Use shifts in `aarch64_type_qualifiers` enum aarch64: use `unspec` type for unspec codes aarch64: Replace `UNSPEC_NONE` with optional arguments where possible gcc/config/aarch64/aarch64-builtins.cc | 22 +- gcc/config/aarch64/aarch64-builtins.h | 38 ++- .../aarch64-neon-sve-bridge-builtins.def | 4 +- .../aarch64/aarch64-simd-builtin-types.def | 80 ++--- .../aarch64/aarch64-sve-builtins-base.cc | 157 +++++----- .../aarch64/aarch64-sve-builtins-base.def | 18 ++ .../aarch64/aarch64-sve-builtins-functions.h | 129 ++++---- .../aarch64/aarch64-sve-builtins-sme.cc | 46 ++- .../aarch64/aarch64-sve-builtins-sme.def | 20 +- .../aarch64/aarch64-sve-builtins-sve2.cc | 292 ++++++++---------- gcc/config/aarch64/aarch64-sve-builtins.cc | 170 +++++----- gcc/config/aarch64/aarch64-sve-builtins.def | 47 ++- gcc/config/aarch64/aarch64-sve-builtins.h | 25 +- gcc/config/aarch64/aarch64.cc | 8 +- gcc/config/aarch64/aarch64.md | 1 + 15 files changed, 557 insertions(+), 500 deletions(-) Range-diff against v8: 1: 5226bc847c99 = 1: 4184b9cec319 aarch64: Rename `ENTRY` to `DEF_SIMD_TYPE` 2: b24c26105958 = 2: 92a115819741 aarch64: Document `DEF_*` macros 3: 090989d0fb00 = 3: e698e4d68ca5 aarch64: Define `DEF_SVE_TYPE_SUFFIX` in terms of `DEF_SVE_NEON_TYPE_SUFFIX` 4: 9d3dac67cbf5 = 4: 7aafe3ea2961 aarch64: Use variadic arguments 5: 97a9e64e195b = 5: ee472c1c57e0 aarch64: Reformat array initializers 6: f21108006bc2 = 6: 2b67386a06f5 aarch64: Make `NUM_VECTOR_TYPES` an enum member 7: 77fa87015196 = 7: a880de64a791 aarch64: Use shifts in `aarch64_type_qualifiers` enum 8: 45a81dda181c ! 8: 964f070c6fe3 aarch64: use `enum unspec` rather than `int` @@ Metadata Author: Karl Meakin <[email protected]> ## Commit message ## - aarch64: use `enum unspec` rather than `int` + aarch64: use `unspec` type for unspec codes - Use `enum unspec` rather than `int` for unspec codes. - This makes inspecting unspecs in GDB easier: unspec - values will print as their enum names rather than - their raw numeric values. + Change the type of variables/parameters/data members that are used to hold + unspec codes from `int` to `unspec`. This makes GDB print their symbolic names + rather than their integer value. gcc/ChangeLog: - * config/aarch64/aarch64-builtins.cc (aarch64_pragma_builtins_data): - change type of local variable `unspec` to `enum unspec`. - (aarch64_get_low_unspec): change return type to `enum unspec`. - (aarch64_get_low_unspec): change type of `unspec` parameter to `enum - unspec`. - (aarch64_expand_tbl_tbx): change type of `unspec` parameter to - `enum unspec`. - (aarch64_expand_pragma_builtin): Add `default` switch branch to silence - compiler warning. - (aarch64_expand_fpsr_fpcr_setter): change type of `unspec` parameter to - `enum unspecv`. - * config/aarch64/aarch64-sve-builtins-base.cc - (unspec_cmla): change return type to `enum unspec`. - (unspec_fcmla): likewise. - (unspec_cond_fcmla): likewise. - (expand_mla_mls_lane): change type of `unspec` parameter to `enum - unspec`. - (svac_impl::svac_impl): change type of `unspec` parameter to `enum - unspec`. - (svac_impl::m_unspec): change type of `m_unspec` member to `enum - unspec`. - (svbic_impl::expand): delete trailing `-1` arguments to - `map_to_rtx_codes`. - (svbrk_binary_impl::svbrk_binary_impl): change type of `unspec` - parameter to `enum unspec`. - (svbrk_binary_impl::m_unspec): change type of `m_unspec` member to `enum - unspec`. - (svbrk_unary_impl::svbrk_unary_impl): change type of `unspec` parameter - to `enum unspec`. - (svbrk_unary_impl::m_unspec): change type of `m_unspec` member to `enum - unspec`. - (svclast_impl::svclast_impl): change type of `unspec` parameter to `enum - unspec`. - (svclast_impl::m_unspec): change type of `m_unspec` member to `enum - unspec`. - (svcmla_impl::expand): change `-1` arguments to `map_to_unspecs` to - `UNSPEC_NONE`, and change type of `unspec` local variable to `enum - unspec`. - (svcmp_impl::svcmp_impl): change type of `unspec_for_fp` parameter to - `enum unspec`. - (svcmp_impl::m_unspec_for_fp): change type of `m_unspec_for_fp` member - to `enum unspec`. - (svcmp_wide_impl::svcmp_wide_impl): change type of `unspec_for_fp` - parameter to `enum unspec`. - (svcmp_wide_impl): change type of members to `enum unspec`. - (svcvt_impl::expand): change type of `unspec` local variable to `enum - unspec`. - (svdotprod_lane_impl::expand): change type of `unspec` local variable to - `enum unspec`. - (svext_bhw_impl::expand): change `-1` arguments to `map_to_rtx_codes` to - `UNSPEC_NONE`. - (svlast_impl::svlast_impl): change type of `unspec` parameter to `enum - unspec`. - (svlast_impl::m_unspec): change type of `m_unspec` member to `enum - unspec`. - (svldxf1_impl::svldxf1_impl): change type of `unspec` parameter to `enum - unspec`. - (svldxf1_impl::m_unspec): change type of `m_unspec` member to `enum - unspec`. - (svldxf1_extend_impl::svldxf1_impl): change type of `unspec` parameter - to `enum unspec`. - (svldxf1_extend_impl::m_unspec): change type of `m_unspec` member to - `enum unspec`. - (svnot_impl): delete trailing `-1` argument to `map_to_rtx_codes`. - (svpfirst_svpnext_impl::svpfirst_svpnext_impl): change type of `unspec` - parameter to `enum unspec`. - (svpfirst_svpnext_impl::m_unspec): change type of `m_unspec` - member to `enum unspec`. - (svrint_impl::svrint_impl): change type of `cond_unspec` parameter to - `enum unspec`. - (svrint_impl::expand): change `-1` arguments to `map_to_unspecs` to - `UNSPEC_NONE`. - (svrint_impl::m_cond_unspec): change type of `m_cond_unspec` parameter - to `enum unspec`. - (svsub_impl::svsub_impl): delete trailing `-1` argument to `map_to_rtx_codes`. - (svunpk_impl::expand): change type of local variables `unpacku`, - `unpacks` and `unspec` to `enum unspec`. - (svwhilelx_impl::svwhilelx_impl): change type of parameters - `unspec_for_sint` and `unspec_for_uint` to `enum unspec`. - (svasrd): delete trailing `-1` arguments. - (sveor): delete trailing `-1` arguments. - (svexpa): change `-1` arguments to `UNSPEC_NONE`. - (svmulh): change `-1` arguments to `UNSPEC_NONE` and delete trailing - trailing `-1` argument. - (svmulx): change `-1` arguments to `UNSPEC_NONE`. - (svnmad): change `-1` arguments to `UNSPEC_NONE`. - (svnmla): change `-1` arguments to `UNSPEC_NONE`. - (svnmls): change `-1` arguments to `UNSPEC_NONE`. - (svnmsb): change `-1` arguments to `UNSPEC_NONE`. - (svqadd): delete trailing `-1` arguments. - (svqsub): delete trailing `-1` arguments. - (svrbit): delete trailing `-1` arguments. - (svrecpe): change `-1` arguments to `UNSPEC_NONE`. - (svrecps): change `-1` arguments to `UNSPEC_NONE`. - (svrecpx): change `-1` arguments to `UNSPEC_NONE`. - (svrevb): delete trailing `-1` arguments. - (svrevh): delete trailing `-1` arguments. - (svrevw): delete trailing `-1` arguments. - (svrsqrte): change `-1` arguments to `UNSPEC_NONE`. - (svrsqrts): change `-1` arguments to `UNSPEC_NONE`. - (svscale): change `-1` arguments to `UNSPEC_NONE`. - (svsudot_lane): delete trailing `-1` arguments. - (svtsmul): change `-1` arguments to `UNSPEC_NONE`. - (svtssel): change `-1` arguments to `UNSPEC_NONE`. - (svsudot_lane): delete trailing `-1` arguments. - (svusmmla): delete trailing `-1` arguments. - * config/aarch64/aarch64-sve-builtins-functions.h: - (rtx_code_function_base::rtx_code_function_base): change type of - `unspec_for_cond_fp` and `unspec_for_uncond_fp` parameters to `enum - unspec`. - (rtx_code_function_base): change type of `m_unspec_for_cond_fp` and - `m_unspec_for_uncond_fp` members to `enum unspec`. - (unspec_based_function_base::unspec_based_function_base): change type of - `unspec_for_sint`, `unspec_for_uint`, `unspec_for_fp`, and - `unspec_for_mfp8` parameters to `enum unspec`. - (unspec_based_function_base::unspec_for): change return type to `enum - unspec`. - (unspec_based_function_base): change type of `m_unspec_for_sint`, - `m_unspec_for_uint`, `m_unspec_for_fp`, and `m_unspec_for_mfp8` members - to `enum unspec`. - (cond_or_uncond_unspec_function::cond_or_uncond_unspec_function): change - type of `cond_unspec` and `uncond_unspec` parameters to `enum unspec`. - (cond_or_uncond_unspec_function): change type of `m_cond_unspec` and - `m_uncond_unspec` members to `enum unspec`. - (sme_1mode_function::sme_1mode_function): change type of - `unspec_for_sint`, `unspec_for_uint` and `unspec_for_fp` parameters to - `enum unspec`. - (sme_2mode_function_t::sme_2mode_function_t): change type of - `unspec_for_sint`, `unspec_for_uint` and `unspec_for_fp` parameters to - `enum unspec`. - (unspec_based_fused_function::expand): change type of local variable - `unspec` to `enum unspec`. - (unspec_based_fused_lane_function::expand): change type of local - variable `unspec` to `enum unspec`. - (binary_permute::binary_permute): change type of `unspec` parameter to - `enum unspec unspec`. - (binary_permute): change type of `m_unspec` member to `enum unspec`. - (multireg_permute::multireg_permute): change type of `unspec` parameter - to `enum unspec`. - (multireg_permute): change type of `m_unspec` member to `enum unspec`. - (integer_conversion): change type of `unspec_for_sint`, - `unspec_for_sintu`, `unspec_for_uint` and `unspec_for_uints` parameters - to `enum unspec`. - (integer_conversion): change type of `m_unspec_for_sint`, - `m_unspec_for_sintu`, `m_unspec_for_uint` and `m_unspec_for_uints` - members to `enum unspec`. - (integer_conversion::integer_conversion): change type of - `unspec_for_sint`, `unspec_for_sintu`, `unspec_for_uint` and - `unspec_for_uints` parameters to `enum unspec`. - (integer_conversion::expand): change type of `unspec` local variable to - `enum unspec`. - (integer_conversion): change type of `m_unspec_for_sint`, - `m_unspec_for_sintu`, `m_unspec_for_uint` and `m_unspec_for_uints` - members to `enum unspec`. - (reduction::reduction): change type of parameter `unspec` to `enum - unspec`. (reduction::reduction): change type of parameters - `unspec_for_sint`, `unspec_for_uint` and `unspec_for_fp` to `enum - unspec`. - (reduction::expand): change type of local variable `unspec` to `enum - unspec`. - (reduction): change type of members `m_unspec_for_sint`, - `m_unspec_for_uint` and `m_unspec_for_fp` to `enum unspec`. - (shift_wide::expand): remove trailing `-1` arguments to - `map_to_rtx_codes`. - (while_comparison::while_comparison): change type of parameters - `unspec_for_sint` and `unspec_for_uint` to `enum unspec`. - (while_comparison::expand): change type of local variable `unspec`. - (while_comparison): change type of members `m_unspec_for_sint` and - `m_unspec_for_uint` to `enum unspec`. - * config/aarch64/aarch64-sve-builtins-sme.cc - (read_write_za_base::read_write_za_base): change type of `unspec` - parameter to `enum unspec`. - (expand_ld1_st1): change type of `unspec` parameter to `enum unspec`. - (svld1_za_impl::svld1_za_impl): change type of `unspec` parameter to - `enum unspec`. - (svld1_za_impl): change type of `m_unspec` member to - `enum unspec`. - (svst1_za_impl::svst1_za_impl): change type of `unspec` parameter to - `enum unspec`. - (svst1_za_impl): change type of `m_unspec` member to - `enum unspec`. - (svadd_write_za): remove trailing `-1` arguments. - (svaddha_za): likewise. - (svaddva_za): likewise. - (svbmopa_za): likewise. - (svbmops_za): likewise. - (svsub_write_za): likewise. - (svsudot_lane_za): likewise. - (svsuvdot_lane_za): likewise. - (svsumopa_za): likewise. - (svsumops_za): likewise. - (svusdot_za): likewise - (svusdot_lane_za): likewise. - (svusvdot_lane_za): likwise. - (svusmopa_za): change `-1` argument to `UNSPEC_NONE` and remove trailing - `-1` arguments. - (svusmops_za): likewise. - * config/aarch64/aarch64-sve-builtins-sve2.cc - (svcvt_fp8_impl::svcvt_fp8_impl): change type of parameter `unspec` to - `enum unspec`. - (svmatch_svnmatch_impl::svmatch_svnmatch_impl): likewise. - (svqcadd_impl::expand): delete trailing `-1` arguments to - `map_to_unspecs`. - (svqrshl_impl::svqrshl_impl): delete trailing `-1` argument to - `unspec_based_function`. - (svqshl_impl::svqshl_impl): delete trailing `-1` argument to - `unspec_based_function`. - (svrshl_impl::svrshl_impl): delete trailing `-1` argument to - `unspec_based_function`. - (svsqadd_impl::expand): delete trailing `-1` arguments to - `map_to_rtx_codes` and change `-1` arguments to `map_to_unspecs` to - `UNSPEC_NONE`. - (svuqadd_impl::expand): delete trailing `-1` arguments to - `map_to_unspecs`. - (svwhilerw_svwhilewr_impl::svwhilerw_svwhilewr_impl): change type of - parameter `unspec` to `enum unspec`. - (svwhilerw_svwhilewr_impl): change type of member `m_unspec` to `enum - unspec`. - (faminmaximpl::faminmaximpl): change type of parameters `cond_unspec` - and `uncond_unspec` to `enum unspec`. - (faminmaximpl): change type of members `m_cond_unspec` and - `m_uncond_unspec` to `enum unspec`. - (svabalb): remove trailing `-1` arguments. - (svabalt): likewise. - (svabdlb): likewise. - (svabdlt): likewise. - (svabdlp): likewise. - (svabclb): change `-1` arguments to `UNSPEC_NONE` and remove trailing - `-1` arguments. - (svabclt): likewise. - (svaddhnb): remove trailing `-1` arguments.. - (svaddhnt): likewise. - (svaddlb): likewise. - (svaddlbt): likewise. - (svaddlt): likewise. - (svaddwb): likewise. - (svaddwt): likewise. - (svandqv): likewise. - (svbdep): likewise. - (svbdep): likewise. - (svbext): likewise. - (svbgrp): likewise. - (svcvtlt): change `-1` arguments to `UNSPEC_NONE`. - (svcvtx): likewise. - (sveorbt): remove trailing `-1` arguments. - (sveorqv): likewise. - (sveortb): likewise. - (svhadd): likewise. - (svhsub): likewise. - (svhsubr): likewise. - (svlogb): change `-1` arguments to `UNSPEC_NONE`. - (svmaxnmp): likewise. - (svmaxnmqv): likewise. - (svminnmp): likewise. - (svminnmqv): likewise. - (svmlallbb_lane): likewise. - (svmlallbb): likewise. - (svmlallbt_lane): likewise. - (svmlallbt): likewise. - (svmlalltb_lane): likewise. - (svmlalltb): likewise. - (svmlalltt_lane): likewise. - (svmlalltt): likewise. - (svmovlb): delete trailing `-1` arguments. - (svmovlt): likewise. - (svmullb): likewise. - (svmullb_lane): likewise. - (svmullt): likewise. - (svmullt_lane): likewise. - (svorqv): likewise. - (svpmullb): change `-1` arguments to `UNSPEC_NONE` and delete trailing - `-1` arguments. - (svpmullb_pair): likewise. - (svpmullt): likewise. - (svpmullt_pair): likewise. - (svqcvt): delete trailing `-1` arguments. - (svqcvtn): likewise. - (svqdmlalb): likewise. - (svqdmlalb_lane): likewise. - (svqdmlalbt): likewise. - (svqdmlalt): likewise. - (svqdmlalt_lane): likewise. - (svqdmlslb): likewise. - (svqdmlslb_lane): likewise. - (svqdmlslt): likewise. - (svqdmlslt_lane): likewise. - (svqdmulh): likewise. - (svqdmulh_lane): likewise. - (svqdmullb): likewise. - (svqdmullb_lane): likewise. - (svqdmullt): likewise. - (svqdmullt_lane): likewise. - (svqneg): likewise. - (svqrdmlah): likewise. - (svqrdmlah_lane): likewise. - (svqrdmlsh): likewise. - (svqrdmlsh_lane): likewise. - (svqrdmulh): likewise. - (svqrdmulh_lane): likewise. - (svqrshr): likewise. - (svqrshrn): likewise. - (svqrshrnb): likewise. - (svqrshrnt): likewise. - (svqrshru): likewise. - (svqrshrun): likewise. - (svqrshrunb): likewise. - (svqrshrunt): likewise. - (svqshlu): likewise. - (svqshrnb): likewise. - (svqshrnt): likewise. - (svqshrunb): likewise. - (svqshrunt): likewise. - (svqsubr): likewise. - (svqxtnb): likewise. - (svqxtnt): likewise. - (svqxtunb): likewise. - (svqxtunt): likewise. - (svraddhnb): likewise. - (svraddhnt): likewise. - (svrhadd): likewise. - (svrshr): likewise. - (svrshrnb): likewise. - (svrshrnt): likewise. - (svrsra): likewise. - (svrsubhnb): likewise. - (svrsubhnt): likewise. - (svsbclb): change `-1` arguments to `UNSPEC_NONE` and delete trailing - `-1` arguments. - (svsbclt): likewise. - (svshllb): delete trailing `-1` arguments. - (svshllt): likewise. - (svshrnb): likewise. - (svshrnt): likewise. - (svsli): likewise. - (svsri): likewise. - (svsubhnb): likewise. - (svsubhnt): likewise. - (svsublb): likewise. - (svsublbt): likewise. - (svsublt): likewise. - (svsubltb): likewise. - (svsubwb): likewise. - (svsubwt): likewise. - * config/aarch64/aarch64-sve-builtins.cc - (function_expander::map_to_rtx_codes): change type of - `unspec_for_cond_fp` and `unspec_for_uncond_fp` parameters to `enum - unspec`. - (function_expander::map_to_unspecs): change type of `unspec_for_sint` - and `unspec_for_uint`, `unspec_for_fp` parameters to `enum unspec`. - (function_expander::map_to_unspecs): change type local variable `unspec` - to `enum unspec`. - * config/aarch64/aarch64-sve-builtins.h - (function_expander::map_to_rtx_codes): change type of parameters to - `enum unspec`. - (function_expander::map_to_unspecs): change type of parameters to `enum - unspec`. - * config/aarch64/aarch64.cc (aarch64_split_sve_subreg_move): change - return type to `enum unspec` and change type of local variable `unspec` - to `enum unspec`. - (aarch64_evpc_tbl): change type of parameter `unspec.` - * config/aarch64/aarch64.md(UNSPEC_NONE): New enum member. + * config/aarch64/aarch64-builtins.cc (struct + aarch64_pragma_builtins_data): Change type to `unspec`. + (aarch64_get_low_unspec): Likewise. + (aarch64_expand_fpsr_fpcr_setter): Likewise. + (aarch64_expand_tbl_tbx): Add `default` case to `switch` statement to silence warning. + * config/aarch64/aarch64-sve-builtins-base.cc (unspec_cmla): Change type to `unspec`. + (unspec_fcmla): Likewise. + (unspec_cond_fcmla): Likewise. + (expand_mla_mls_lane): Likewise. + (svac_impl): Likewise. + (svbrk_binary_impl): Likewise. + (svbrk_unary_impl): Likewise. + (svclast_impl): Likewise. + (svcmla_impl): Likewise. + (svcmp_impl): Likewise. + (svcmp_wide_impl): Likewise. + (svcvt_impl): Likewise. + (svlast_impl): Likewise. + (svldxf1_impl): Likewise. + (svldxf1_extend_impl): Likewise. + (svnot_impl): Likewise. + (svpfirst_svpnext_impl): Likewise. + (svrint_impl): Likewise. + (svsel_impl): Likewise. + (svwhilelx_impl): Likewise. + * config/aarch64/aarch64-sve-builtins-functions.h(rtx_code_function_base): Likewise. + * config/aarch64/aarch64-sve-builtins-sme.cc (expand_ld1_st1): Likewise. + * config/aarch64/aarch64-sve-builtins-sve2.cc (expand_ld1_st1): Likewise. + * config/aarch64/aarch64-sve-builtins.cc (function_expander::map_to_rtx_codes): Likewise. + (function_expander::map_to_unspecs): Likewise. + * config/aarch64/aarch64-sve-builtins.h: Likewise. + * config/aarch64/aarch64.cc (aarch64_replace_reg_mode): Likewise. + (aarch64_split_sve_subreg_move): Likewise. + (aarch_pac_insn_p): Likewise. + (aarch64_evpc_hvla): Likewise. + * config/aarch64/aarch64.md: Add `UNSPEC_NONE` enum member. ## gcc/config/aarch64/aarch64-builtins.cc ## @@ gcc/config/aarch64/aarch64-builtins.cc: struct aarch64_pragma_builtins_data @@ gcc/config/aarch64/aarch64-builtins.cc: struct aarch64_pragma_builtins_data unsigned int flags; }; @@ gcc/config/aarch64/aarch64-builtins.cc: aarch64_pack_into_v128s (expand_operand *op) - /* UNSPEC is a high unspec, indicated by "2" in mnemonics and "_high" in intrinsic names. Return the equivalent low unspec. */ --static int + static int -aarch64_get_low_unspec (int unspec) -+static enum unspec -+aarch64_get_low_unspec (enum unspec unspec) ++aarch64_get_low_unspec (unspec unspec) { switch (unspec) { @@ gcc/config/aarch64/aarch64-builtins.cc: aarch64_expand_permute_pair (vec<expand_ registers. */ static rtx -aarch64_expand_tbl_tbx (vec<rtx> &inputs, int unspec, machine_mode mode) -+aarch64_expand_tbl_tbx (vec<rtx> &inputs, enum unspec unspec, machine_mode mode) ++aarch64_expand_tbl_tbx (vec<rtx> &inputs, unspec unspec, machine_mode mode) { rtx result = gen_reg_rtx (mode); rtvec vec = gen_rtvec_v (inputs.length (), inputs.address ()); @@ gcc/config/aarch64/aarch64-builtins.cc: aarch64_expand_tbl_tbx (vec<rtx> &inputs UNSPEC is either UNSPEC_TBL or UNSPEC_TBX. */ static rtx -aarch64_expand_tbl_tbx (vec<expand_operand> &ops, int unspec) -+aarch64_expand_tbl_tbx (vec<expand_operand> &ops, enum unspec unspec) ++aarch64_expand_tbl_tbx (vec<expand_operand> &ops, unspec unspec) { for (unsigned int i = 1; i < ops.length (); ++i) ops[i].value = force_reg (ops[i].mode, ops[i].value); @@ gcc/config/aarch64/aarch64-builtins.cc: aarch64_expand_pragma_builtin (tree exp, halves don't actually matter. */ aarch64_convert_to_v64 (&ops[1]); break; -+ default:; ++ default: ++ break; } insn_code icode; @@ gcc/config/aarch64/aarch64-builtins.cc: aarch64_expand_pragma_builtin (tree exp, UNSPEC) using MODE. */ static void -aarch64_expand_fpsr_fpcr_setter (int unspec, machine_mode mode, tree exp) -+aarch64_expand_fpsr_fpcr_setter (enum unspecv unspec, machine_mode mode, -+ tree exp) ++aarch64_expand_fpsr_fpcr_setter (unspecv unspec, machine_mode mode, tree exp) { tree arg = CALL_EXPR_ARG (exp, 0); rtx op = force_reg (mode, expand_normal (arg)); @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: is_undef (tree val) /* Return the UNSPEC_CMLA* unspec for rotation amount ROT. */ -static int -+static enum unspec ++static unspec unspec_cmla (int rot) { switch (rot) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: unspec_cmla (int rot) /* Return the UNSPEC_FCMLA* unspec for rotation amount ROT. */ -static int -+static enum unspec ++static unspec unspec_fcmla (int rot) { switch (rot) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: unspec_fcmla (int rot) /* Return the UNSPEC_COND_FCMLA* unspec for rotation amount ROT. */ -static int -+static enum unspec ++static unspec unspec_cond_fcmla (int rot) { switch (rot) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: expand_mad (function_expander & UNSPEC. */ static rtx -expand_mla_mls_lane (function_expander &e, int unspec) -+expand_mla_mls_lane (function_expander &e, enum unspec unspec) ++expand_mla_mls_lane (function_expander &e, unspec unspec) { /* Put the operands in the normal (fma ...) order, with the accumulator last. This fits naturally since that's also the unprinted operand @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svac_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svac_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svac_impl (unspec unspec) : m_unspec (unspec) {} gimple * fold (gimple_folder &f) const override @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec code for the underlying comparison. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; class svadda_impl : public function_base @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: machine_mode mode = GET_MODE_INNER (e.vector_mode (0)); e.args[2] = simplify_unary_operation (NOT, mode, e.args[2], mode); - return e.map_to_rtx_codes (AND, AND, -1, -1); -+ return e.map_to_rtx_codes (AND, AND); ++ return e.map_to_rtx_codes (AND, AND, UNSPEC_NONE, UNSPEC_NONE); } if (e.type_suffix_ids[0] == TYPE_SUFFIX_b) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svbrk_binary_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svbrk_binary_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svbrk_binary_impl (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec code associated with the operation. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; /* Implements svbrka and svbrkb. */ @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svbrk_unary_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svbrk_unary_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svbrk_unary_impl (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec code associated with the operation. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; class svcadd_impl : public function_base @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svclast_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svclast_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svclast_impl (unspec unspec) : m_unspec (unspec) {} gimple * fold (gimple_folder &f) const override @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec code associated with the operation. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; class svcmla_impl : public function_base @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: with the accumulator last. */ e.rotate_inputs_left (1, 4); - return e.map_to_unspecs (-1, -1, unspec_cond_fcmla (rot), 3); -+ return e.map_to_unspecs (UNSPEC_NONE, UNSPEC_NONE, -+ unspec_cond_fcmla (rot), 3); ++ return e.map_to_unspecs (UNSPEC_NONE, UNSPEC_NONE, unspec_cond_fcmla (rot), 3); } else { - int cmla = unspec_cmla (rot); - return e.map_to_unspecs (cmla, cmla, -1); -+ enum unspec cmla = unspec_cmla (rot); -+ return e.map_to_unspecs (cmla, cmla); ++ unspec cmla = unspec_cmla (rot); ++ return e.map_to_unspecs (cmla, cmla, UNSPEC_NONE); } } }; @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: public: - CONSTEXPR svcmp_impl (tree_code code, int unspec_for_fp) - : m_code (code), m_unspec_for_fp (unspec_for_fp) {} -+ CONSTEXPR svcmp_impl (tree_code code, enum unspec unspec_for_fp) ++ CONSTEXPR svcmp_impl (tree_code code, unspec unspec_for_fp) + : m_code (code), m_unspec_for_fp (unspec_for_fp) + {} @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec code to use for floating-point comparisons. */ - int m_unspec_for_fp; -+ enum unspec m_unspec_for_fp; ++ unspec m_unspec_for_fp; }; /* Implements svcmp<cc>_wide. */ @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: public: - CONSTEXPR svcmp_wide_impl (tree_code code, int unspec_for_sint, - int unspec_for_uint) -+ CONSTEXPR svcmp_wide_impl (tree_code code, enum unspec unspec_for_sint, -+ enum unspec unspec_for_uint) ++ CONSTEXPR svcmp_wide_impl (tree_code code, unspec unspec_for_sint, ++ unspec unspec_for_uint) : m_code (code), m_unspec_for_sint (unspec_for_sint), - m_unspec_for_uint (unspec_for_uint) {} + m_unspec_for_uint (unspec_for_uint) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: } - int unspec = (unsigned_p ? m_unspec_for_uint : m_unspec_for_sint); -+ enum unspec unspec = (unsigned_p ? m_unspec_for_uint : m_unspec_for_sint); ++ unspec unspec = (unsigned_p ? m_unspec_for_uint : m_unspec_for_sint); return e.use_exact_insn (code_for_aarch64_pred_cmp_wide (unspec, mode)); } @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: respectively. */ - int m_unspec_for_sint; - int m_unspec_for_uint; -+ enum unspec m_unspec_for_sint; -+ enum unspec m_unspec_for_uint; ++ unspec m_unspec_for_sint; ++ unspec m_unspec_for_uint; }; class svcmpuo_impl : public quiet<function_base> @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: - int unspec = (e.type_suffix (1).unsigned_p - ? UNSPEC_COND_UCVTF - : UNSPEC_COND_SCVTF); -+ enum unspec unspec = (e.type_suffix (1).unsigned_p -+ ? UNSPEC_COND_UCVTF -+ : UNSPEC_COND_SCVTF); ++ unspec unspec = (e.type_suffix (1).unsigned_p ? UNSPEC_COND_UCVTF ++ : UNSPEC_COND_SCVTF); if (e.type_suffix (0).element_bytes <= e.type_suffix (1).element_bytes) icode = (e.pred == PRED_x ? code_for_aarch64_sve_nonextend (unspec, mode1, mode0) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: - int unspec = (!e.type_suffix (0).integer_p ? UNSPEC_COND_FCVT - : e.type_suffix (0).unsigned_p ? UNSPEC_COND_FCVTZU - : UNSPEC_COND_FCVTZS); -+ enum unspec unspec -+ = (!e.type_suffix (0).integer_p ? UNSPEC_COND_FCVT -+ : e.type_suffix (0).unsigned_p ? UNSPEC_COND_FCVTZU -+ : UNSPEC_COND_FCVTZS); ++ unspec unspec = (!e.type_suffix (0).integer_p ? UNSPEC_COND_FCVT ++ : e.type_suffix (0).unsigned_p ? UNSPEC_COND_FCVTZU ++ : UNSPEC_COND_FCVTZS); if (e.type_suffix (0).element_bytes >= e.type_suffix (1).element_bytes) icode = (e.pred == PRED_x ? code_for_aarch64_sve_nontrunc (unspec, mode1, mode0) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: accumulator last. */ e.rotate_inputs_left (0, 4); - int unspec = unspec_for (e); -+ enum unspec unspec = unspec_for (e); ++ unspec unspec = unspec_for (e); if (unspec == UNSPEC_FDOT) icode = CODE_FOR_aarch64_fdot_prod_lanevnx4sfvnx8hf; else @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svlast_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svlast_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svlast_impl (unspec unspec) : m_unspec (unspec) {} bool is_lasta () const { return m_unspec == UNSPEC_LASTA; } bool is_lastb () const { return m_unspec == UNSPEC_LASTB; } @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec code associated with the operation. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; class svld1_impl : public full_width_access @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svldxf1_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svldxf1_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svldxf1_impl (unspec unspec) : m_unspec (unspec) {} unsigned int call_properties (const function_instance &) const override @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec associated with the load. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; /* Implements extending contiguous forms of svldff1 and svldnf1. */ @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: public: - CONSTEXPR svldxf1_extend_impl (type_suffix_index memory_type, int unspec) - : extending_load (memory_type), m_unspec (unspec) {} -+ CONSTEXPR svldxf1_extend_impl (type_suffix_index memory_type, -+ enum unspec unspec) ++ CONSTEXPR svldxf1_extend_impl (type_suffix_index memory_type, unspec unspec) + : extending_load (memory_type), m_unspec (unspec) + {} @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec associated with the load. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; class svlen_impl : public quiet<function_base> @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svnot_impl () : rtx_code_function (NOT, NOT, -1) {} -+ CONSTEXPR svnot_impl () : rtx_code_function (NOT, NOT) -+ {} ++ CONSTEXPR svnot_impl () : rtx_code_function (NOT, NOT, UNSPEC_NONE) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svpfirst_svpnext_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svpfirst_svpnext_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svpfirst_svpnext_impl (unspec unspec) : m_unspec (unspec) {} gimple * fold (gimple_folder &f) const override { @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: /* The unspec associated with the operation. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; /* Implements contiguous forms of svprf[bhwd]. */ @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svrint_impl (optab_tag optab, int cond_unspec) -+ CONSTEXPR svrint_impl (optab_tag optab, enum unspec cond_unspec) ++ CONSTEXPR svrint_impl (optab_tag optab, unspec cond_unspec) : m_optab (optab), m_cond_unspec (cond_unspec) {} @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: optab_tag m_optab; - int m_cond_unspec; -+ enum unspec m_cond_unspec; ++ unspec m_cond_unspec; }; class svsel_impl : public quiet<function_base> @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: machine_mode mode = e.vector_mode (0); if (e.try_negating_argument (2, mode)) - return e.map_to_rtx_codes (PLUS, PLUS, UNSPEC_COND_FADD, -1); -+ return e.map_to_rtx_codes (PLUS, PLUS, UNSPEC_COND_FADD); ++ return e.map_to_rtx_codes (PLUS, PLUS, UNSPEC_COND_FADD, UNSPEC_NONE); return rtx_code_function::expand (e); } @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: machine_mode mode = GET_MODE (e.args[0]); - unsigned int unpacku = m_high_p ? UNSPEC_UNPACKUHI : UNSPEC_UNPACKULO; - unsigned int unpacks = m_high_p ? UNSPEC_UNPACKSHI : UNSPEC_UNPACKSLO; -+ enum unspec unpacku = m_high_p ? UNSPEC_UNPACKUHI : UNSPEC_UNPACKULO; -+ enum unspec unpacks = m_high_p ? UNSPEC_UNPACKSHI : UNSPEC_UNPACKSLO; ++ unspec unpacku = m_high_p ? UNSPEC_UNPACKUHI : UNSPEC_UNPACKULO; ++ unspec unpacks = m_high_p ? UNSPEC_UNPACKSHI : UNSPEC_UNPACKSLO; insn_code icode; if (GET_MODE_CLASS (mode) == MODE_VECTOR_BOOL) icode = code_for_aarch64_sve_punpk_acle (unpacku); else { - int unspec = e.type_suffix (0).unsigned_p ? unpacku : unpacks; -+ enum unspec unspec = e.type_suffix (0).unsigned_p ? unpacku : unpacks; ++ unspec unspec = e.type_suffix (0).unsigned_p ? unpacku : unpacks; icode = code_for_aarch64_sve_unpk (unspec, unspec, mode); } return e.use_exact_insn (icode); @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: public: { public: - CONSTEXPR svwhilelx_impl (int unspec_for_sint, int unspec_for_uint, bool eq_p) -+ CONSTEXPR svwhilelx_impl (enum unspec unspec_for_sint, -+ enum unspec unspec_for_uint, bool eq_p) ++ CONSTEXPR svwhilelx_impl (unspec unspec_for_sint, unspec unspec_for_uint, ++ bool eq_p) : while_comparison (unspec_for_sint, unspec_for_uint), m_eq_p (eq_p) {} @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svand, rtx_code_funct FUNCTION (svasr, rtx_code_function, (ASHIFTRT, ASHIFTRT)) FUNCTION (svasr_wide, shift_wide, (ASHIFTRT, UNSPEC_ASHIFTRT_WIDE)) -FUNCTION (svasrd, unspec_based_function, (UNSPEC_ASRD, -1, -1)) -+FUNCTION (svasrd, unspec_based_function, (UNSPEC_ASRD)) ++FUNCTION (svasrd, unspec_based_function, (UNSPEC_ASRD, UNSPEC_NONE, UNSPEC_NONE)) FUNCTION (svbfdot, fixed_insn_function, (CODE_FOR_aarch64_sve_bfdotvnx4sf)) FUNCTION (svbfdot_lane, fixed_insn_function, (CODE_FOR_aarch64_sve_bfdot_lanevnx4sf)) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svdup, svdup_impl,) FUNCTION (svdupq, svdupq_impl,) FUNCTION (svdupq_lane, svdupq_lane_impl,) -FUNCTION (sveor, rtx_code_function, (XOR, XOR, -1)) -+FUNCTION (sveor, rtx_code_function, (XOR, XOR)) ++FUNCTION (sveor, rtx_code_function, (XOR, XOR, UNSPEC_NONE)) FUNCTION (sveorv, sveorv_impl,) -FUNCTION (svexpa, unspec_based_function, (-1, -1, UNSPEC_FEXPA)) -+FUNCTION (svexpa, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FEXPA)) ++FUNCTION (svexpa, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FEXPA)) FUNCTION (svext, QUIET_CODE_FOR_MODE0 (aarch64_sve_ext),) FUNCTION (svextb, svext_bhw_impl, (QImode)) FUNCTION (svexth, svext_bhw_impl, (HImode)) -@@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svmov, svmov_impl,) - FUNCTION (svmsb, svmsb_impl,) +@@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svmsb, svmsb_impl,) FUNCTION (svmul, svmul_impl,) FUNCTION (svmul_lane, CODE_FOR_MODE0 (aarch64_mul_lane),) --FUNCTION (svmulh, unspec_based_function, (UNSPEC_SMUL_HIGHPART, + FUNCTION (svmulh, unspec_based_function, (UNSPEC_SMUL_HIGHPART, - UNSPEC_UMUL_HIGHPART, -1)) -FUNCTION (svmulx, unspec_based_function, (-1, -1, UNSPEC_COND_FMULX)) -+FUNCTION (svmulh, unspec_based_function, -+ (UNSPEC_SMUL_HIGHPART, UNSPEC_UMUL_HIGHPART)) -+FUNCTION (svmulx, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FMULX)) ++ UNSPEC_UMUL_HIGHPART, UNSPEC_NONE)) ++FUNCTION (svmulx, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FMULX)) FUNCTION (svnand, svnand_impl,) FUNCTION (svneg, quiet<rtx_code_function>, (NEG, NEG, UNSPEC_COND_FNEG)) -FUNCTION (svnmad, unspec_based_function, (-1, -1, UNSPEC_COND_FNMLA)) -FUNCTION (svnmla, unspec_based_function_rotated, (-1, -1, UNSPEC_COND_FNMLA)) -FUNCTION (svnmls, unspec_based_function_rotated, (-1, -1, UNSPEC_COND_FNMLS)) -FUNCTION (svnmsb, unspec_based_function, (-1, -1, UNSPEC_COND_FNMLS)) -+FUNCTION (svnmad, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FNMLA)) -+FUNCTION (svnmla, unspec_based_function_rotated, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FNMLA)) -+FUNCTION (svnmls, unspec_based_function_rotated, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FNMLS)) -+FUNCTION (svnmsb, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FNMLS)) ++FUNCTION (svnmad, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FNMLA)) ++FUNCTION (svnmla, unspec_based_function_rotated, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FNMLA)) ++FUNCTION (svnmls, unspec_based_function_rotated, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FNMLS)) ++FUNCTION (svnmsb, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FNMLS)) FUNCTION (svnor, svnor_impl,) FUNCTION (svnot, svnot_impl,) FUNCTION (svorn, svorn_impl,) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svptest_first, svptes FUNCTION (svptrue, svptrue_impl,) FUNCTION (svptrue_pat, svptrue_pat_impl,) -FUNCTION (svqadd, rtx_code_function, (SS_PLUS, US_PLUS, -1)) -+FUNCTION (svqadd, rtx_code_function, (SS_PLUS, US_PLUS)) ++FUNCTION (svqadd, rtx_code_function, (SS_PLUS, US_PLUS, UNSPEC_NONE)) FUNCTION (svqdecb, svqdec_bhwd_impl, (QImode)) FUNCTION (svqdecb_pat, svqdec_bhwd_impl, (QImode)) FUNCTION (svqdecd, svqdec_bhwd_impl, (DImode)) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svqinch_pat, svqinc_b FUNCTION (svqincw_pat, svqinc_bhwd_impl, (SImode)) -FUNCTION (svqsub, rtx_code_function, (SS_MINUS, US_MINUS, -1)) -FUNCTION (svrbit, rtx_code_function, (BITREVERSE, BITREVERSE, -1)) -+FUNCTION (svqsub, rtx_code_function, (SS_MINUS, US_MINUS)) -+FUNCTION (svrbit, rtx_code_function, (BITREVERSE, BITREVERSE)) ++FUNCTION (svqsub, rtx_code_function, (SS_MINUS, US_MINUS, UNSPEC_NONE)) ++FUNCTION (svrbit, rtx_code_function, (BITREVERSE, BITREVERSE, UNSPEC_NONE)) FUNCTION (svrdffr, svrdffr_impl,) -FUNCTION (svrecpe, unspec_based_function, (-1, UNSPEC_URECPE, UNSPEC_FRECPE)) -FUNCTION (svrecps, unspec_based_function, (-1, -1, UNSPEC_FRECPS)) -FUNCTION (svrecpx, unspec_based_function, (-1, -1, UNSPEC_COND_FRECPX)) -+FUNCTION (svrecpe, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_URECPE, UNSPEC_FRECPE)) -+FUNCTION (svrecps, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FRECPS)) -+FUNCTION (svrecpx, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FRECPX)) ++FUNCTION (svrecpe, unspec_based_function, (UNSPEC_NONE, UNSPEC_URECPE, UNSPEC_FRECPE)) ++FUNCTION (svrecps, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FRECPS)) ++FUNCTION (svrecpx, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FRECPX)) FUNCTION (svreinterpret, svreinterpret_impl,) FUNCTION (svrev, svrev_impl,) -FUNCTION (svrevb, unspec_based_function, (UNSPEC_REVB, UNSPEC_REVB, -1)) -FUNCTION (svrevh, unspec_based_function, (UNSPEC_REVH, UNSPEC_REVH, -1)) -FUNCTION (svrevw, unspec_based_function, (UNSPEC_REVW, UNSPEC_REVW, -1)) -+FUNCTION (svrevb, unspec_based_function, (UNSPEC_REVB, UNSPEC_REVB)) -+FUNCTION (svrevh, unspec_based_function, (UNSPEC_REVH, UNSPEC_REVH)) -+FUNCTION (svrevw, unspec_based_function, (UNSPEC_REVW, UNSPEC_REVW)) ++FUNCTION (svrevb, unspec_based_function, (UNSPEC_REVB, UNSPEC_REVB, UNSPEC_NONE)) ++FUNCTION (svrevh, unspec_based_function, (UNSPEC_REVH, UNSPEC_REVH, UNSPEC_NONE)) ++FUNCTION (svrevw, unspec_based_function, (UNSPEC_REVW, UNSPEC_REVW, UNSPEC_NONE)) FUNCTION (svrinta, svrint_impl, (round_optab, UNSPEC_COND_FRINTA)) FUNCTION (svrinti, svrint_impl, (nearbyint_optab, UNSPEC_COND_FRINTI)) FUNCTION (svrintm, svrint_impl, (floor_optab, UNSPEC_COND_FRINTM)) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svrintn, svrint_impl, -FUNCTION (svrsqrte, unspec_based_function, (-1, UNSPEC_RSQRTE, UNSPEC_RSQRTE)) -FUNCTION (svrsqrts, unspec_based_function, (-1, -1, UNSPEC_RSQRTS)) -FUNCTION (svscale, unspec_based_function, (-1, -1, UNSPEC_COND_FSCALE)) -+FUNCTION (svrsqrte, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_RSQRTE, UNSPEC_RSQRTE)) -+FUNCTION (svrsqrts, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_RSQRTS)) -+FUNCTION (svscale, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FSCALE)) ++FUNCTION (svrsqrte, unspec_based_function, (UNSPEC_NONE, UNSPEC_RSQRTE, UNSPEC_RSQRTE)) ++FUNCTION (svrsqrts, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_RSQRTS)) ++FUNCTION (svscale, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FSCALE)) FUNCTION (svsel, svsel_impl,) FUNCTION (svset2, svset_impl, (2)) FUNCTION (svset3, svset_impl, (3)) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svstnt1, svstnt1_impl FUNCTION (svsubr, rtx_code_function_rotated, (MINUS, MINUS, UNSPEC_COND_FSUB)) FUNCTION (svsudot, svusdot_impl, (true)) -FUNCTION (svsudot_lane, svdotprod_lane_impl, (UNSPEC_SUDOT, -1, -1)) -+FUNCTION (svsudot_lane, svdotprod_lane_impl, (UNSPEC_SUDOT)) ++FUNCTION (svsudot_lane, svdotprod_lane_impl, (UNSPEC_SUDOT, UNSPEC_NONE, UNSPEC_NONE)) FUNCTION (svtbl, quiet<unspec_based_uncond_function>, (UNSPEC_TBL, UNSPEC_TBL, UNSPEC_TBL)) FUNCTION (svtmad, CODE_FOR_MODE0 (aarch64_sve_tmad),) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svtrn1q, unspec_based UNSPEC_TRN2Q)) -FUNCTION (svtsmul, unspec_based_function, (-1, -1, UNSPEC_FTSMUL)) -FUNCTION (svtssel, unspec_based_function, (-1, -1, UNSPEC_FTSSEL)) -+FUNCTION (svtsmul, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FTSMUL)) -+FUNCTION (svtssel, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FTSSEL)) ++FUNCTION (svtsmul, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FTSMUL)) ++FUNCTION (svtssel, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FTSSEL)) FUNCTION (svundef, svundef_impl, (1)) FUNCTION (svundef2, svundef_impl, (2)) FUNCTION (svundef3, svundef_impl, (3)) @@ gcc/config/aarch64/aarch64-sve-builtins-base.cc: FUNCTION (svundef4, svundef_imp FUNCTION (svusdot, svusdot_impl, (false)) -FUNCTION (svusdot_lane, svdotprod_lane_impl, (UNSPEC_USDOT, -1, -1)) -FUNCTION (svusmmla, unspec_based_add_function, (UNSPEC_USMATMUL, -1, -1)) -+FUNCTION (svusdot_lane, svdotprod_lane_impl, (UNSPEC_USDOT)) -+FUNCTION (svusmmla, unspec_based_add_function, (UNSPEC_USMATMUL)) ++FUNCTION (svusdot_lane, svdotprod_lane_impl, (UNSPEC_USDOT, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svusmmla, unspec_based_add_function, (UNSPEC_USMATMUL, UNSPEC_NONE, UNSPEC_NONE)) FUNCTION (svuzp1, svuzp_impl, (0)) FUNCTION (svuzp1q, unspec_based_function, (UNSPEC_UZP1Q, UNSPEC_UZP1Q, UNSPEC_UZP1Q)) ## gcc/config/aarch64/aarch64-sve-builtins-functions.h ## -@@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: - class rtx_code_function_base : public function_base - { +@@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: class rtx_code_function_base : public function_base public: -- CONSTEXPR rtx_code_function_base (rtx_code code_for_sint, -- rtx_code code_for_uint, + CONSTEXPR rtx_code_function_base (rtx_code code_for_sint, + rtx_code code_for_uint, - int unspec_for_cond_fp = -1, - int unspec_for_uncond_fp = -1) -+ CONSTEXPR -+ rtx_code_function_base (rtx_code code_for_sint, -+ rtx_code code_for_uint, -+ enum unspec unspec_for_cond_fp = UNSPEC_NONE, -+ enum unspec unspec_for_uncond_fp = UNSPEC_NONE) ++ unspec unspec_for_cond_fp = UNSPEC_NONE, ++ unspec unspec_for_uncond_fp = UNSPEC_NONE) : m_code_for_sint (code_for_sint), m_code_for_uint (code_for_uint), m_unspec_for_cond_fp (unspec_for_cond_fp), - m_unspec_for_uncond_fp (unspec_for_uncond_fp) {} @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: /* The UNSPEC_COND_* to use for floating-point operations. Can be -1 for functions that only operate on integers. */ - int m_unspec_for_cond_fp; -+ enum unspec m_unspec_for_cond_fp; ++ unspec m_unspec_for_cond_fp; /* The UNSPEC_* to use for unpredicated floating-point operations. Can be -1 if there is no such operation. */ - int m_unspec_for_uncond_fp; -+ enum unspec m_unspec_for_uncond_fp; ++ unspec m_unspec_for_uncond_fp; }; /* A function_base for functions that have an associated rtx code. @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: - m_unspec_for_uint (unspec_for_uint), - m_unspec_for_fp (unspec_for_fp), - m_unspec_for_mfp8 (unspec_for_mfp8), -+ CONSTEXPR unspec_based_function_base ( -+ enum unspec unspec_for_sint, -+ enum unspec unspec_for_uint = UNSPEC_NONE, -+ enum unspec unspec_for_fp = UNSPEC_NONE, -+ enum unspec unspec_for_mfp8 = UNSPEC_NONE, -+ unsigned int suffix_index = 0) ++ CONSTEXPR ++ unspec_based_function_base (unspec unspec_for_sint, unspec unspec_for_uint, ++ unspec unspec_for_fp, unspec unspec_for_mfp8 = UNSPEC_NONE, ++ unsigned int suffix_index = 0) + : m_unspec_for_sint (unspec_for_sint), m_unspec_for_uint (unspec_for_uint), + m_unspec_for_fp (unspec_for_fp), m_unspec_for_mfp8 (unspec_for_mfp8), m_suffix_index (suffix_index) @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: /* Return the unspec code to use for INSTANCE, based on type suffix 0. */ - int -- unspec_for (const function_instance &instance) const -+ enum unspec unspec_for (const function_instance &instance) const ++ unspec + unspec_for (const function_instance &instance) const { if (instance.fpm_mode == FPM_set) - return m_unspec_for_mfp8; @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: /* The unspec code associated with signed-integer, unsigned-integer @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: - int m_unspec_for_uint; - int m_unspec_for_fp; - int m_unspec_for_mfp8; -+ enum unspec m_unspec_for_sint; -+ enum unspec m_unspec_for_uint; -+ enum unspec m_unspec_for_fp; -+ enum unspec m_unspec_for_mfp8; ++ unspec m_unspec_for_sint; ++ unspec m_unspec_for_uint; ++ unspec m_unspec_for_fp; ++ unspec m_unspec_for_mfp8; /* Which type suffix is used to choose between the unspecs. */ unsigned int m_suffix_index; @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: typedef unspec_based_functi { public: - CONSTEXPR cond_or_uncond_unspec_function (int cond_unspec, int uncond_unspec) -- : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec) {} -+ CONSTEXPR cond_or_uncond_unspec_function (enum unspec cond_unspec, -+ enum unspec uncond_unspec) -+ : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec) -+ {} ++ CONSTEXPR cond_or_uncond_unspec_function (unspec cond_unspec, unspec uncond_unspec) + : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec) {} rtx - expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: /* The unspecs for the conditional and unconditional instructions, respectively. */ - int m_cond_unspec; - int m_uncond_unspec; -+ enum unspec m_cond_unspec; -+ enum unspec m_uncond_unspec; ++ unspec m_cond_unspec; ++ unspec m_uncond_unspec; }; /* General SME unspec-based functions, parameterized on the vector mode. */ @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: class sme_1mode_function : - CONSTEXPR sme_1mode_function (int unspec_for_sint, int unspec_for_uint, - int unspec_for_fp) - : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, -1, 1) -+ CONSTEXPR sme_1mode_function (enum unspec unspec_for_sint, -+ enum unspec unspec_for_uint = UNSPEC_NONE, -+ enum unspec unspec_for_fp = UNSPEC_NONE) -+ : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp) ++ CONSTEXPR sme_1mode_function (unspec unspec_for_sint, unspec unspec_for_uint, ++ unspec unspec_for_fp) ++ : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, UNSPEC_NONE, 1) {} rtx @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: class sme_2mode_function_t - CONSTEXPR sme_2mode_function_t (int unspec_for_sint, int unspec_for_uint, - int unspec_for_fp) - : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, -1, 1) -+ CONSTEXPR sme_2mode_function_t (enum unspec unspec_for_sint, -+ enum unspec unspec_for_uint = UNSPEC_NONE, -+ enum unspec unspec_for_fp = UNSPEC_NONE) ++ CONSTEXPR sme_2mode_function_t (unspec unspec_for_sint, ++ unspec unspec_for_uint, unspec unspec_for_fp) + : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, UNSPEC_NONE, 1) {} @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: expand (function_expander &e) const override { - int unspec = unspec_for (e); -+ enum unspec unspec = unspec_for (e); ++ unspec unspec = unspec_for (e); insn_code icode; if (e.type_suffix (m_suffix_index).float_p && e.fpm_mode != FPM_set) @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: expand (function_expander &e) const override { - int unspec = unspec_for (e); -+ enum unspec unspec = unspec_for (e); ++ unspec unspec = unspec_for (e); insn_code icode; if (e.type_suffix (m_suffix_index).float_p && e.fpm_mode != FPM_set) @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: { public: - CONSTEXPR binary_permute (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR binary_permute (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR binary_permute (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: /* The unspec code associated with the operation. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; /* A function that implements a x2 or x4 permute instruction. Both forms @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: { public: - CONSTEXPR multireg_permute (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR multireg_permute (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR multireg_permute (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: /* The unspec associated with the permutation. */ - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; /* A function that has two type integer type suffixes, which might agree @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: public: - CONSTEXPR integer_conversion (int unspec_for_sint, int unspec_for_sintu, - int unspec_for_uint, int unspec_for_uints) -+ CONSTEXPR -+ integer_conversion (enum unspec unspec_for_sint, -+ enum unspec unspec_for_sintu, -+ enum unspec unspec_for_uint, -+ enum unspec unspec_for_uints = UNSPEC_NONE) ++ CONSTEXPR integer_conversion (unspec unspec_for_sint, unspec unspec_for_sintu, ++ unspec unspec_for_uint, unspec unspec_for_uints) : m_unspec_for_sint (unspec_for_sint), m_unspec_for_sintu (unspec_for_sintu), - m_unspec_for_uint (unspec_for_uint), +- m_unspec_for_uint (unspec_for_uint), - m_unspec_for_uints (unspec_for_uints) -+ m_unspec_for_uints (unspec_for_uints) ++ m_unspec_for_uint (unspec_for_uint), m_unspec_for_uints (unspec_for_uints) {} rtx @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: machine_mode mode0 = e.vector_mode (0); machine_mode mode1 = GET_MODE (e.args[0]); - int unspec; -+ enum unspec unspec; ++ unspec unspec; if (e.type_suffix (0).unsigned_p == e.type_suffix (1).unsigned_p) unspec = (e.type_suffix (0).unsigned_p ? m_unspec_for_uint @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: /* The unspec for signed -> signed. */ - int m_unspec_for_sint; -+ enum unspec m_unspec_for_sint; ++ unspec m_unspec_for_sint; /* The unspec for signed -> unsigned. */ - int m_unspec_for_sintu; -+ enum unspec m_unspec_for_sintu; ++ unspec m_unspec_for_sintu; /* The unspec for unsigned -> signed. */ - int m_unspec_for_uint; -+ enum unspec m_unspec_for_uint; ++ unspec m_unspec_for_uint; /* The unspec for unsigned -> unsigned. */ - int m_unspec_for_uints; -+ enum unspec m_unspec_for_uints; ++ unspec m_unspec_for_uints; }; /* A function_base for functions that reduce a vector to a scalar. */ @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: { public: - CONSTEXPR reduction (int unspec) -+ CONSTEXPR reduction (enum unspec unspec) - : m_unspec_for_sint (unspec), - m_unspec_for_uint (unspec), +- : m_unspec_for_sint (unspec), +- m_unspec_for_uint (unspec), ++ CONSTEXPR reduction (unspec unspec) ++ : m_unspec_for_sint (unspec), m_unspec_for_uint (unspec), m_unspec_for_fp (unspec) {} - CONSTEXPR reduction (int unspec_for_sint, int unspec_for_uint, - int unspec_for_fp) -+ CONSTEXPR reduction (enum unspec unspec_for_sint, -+ enum unspec unspec_for_uint, -+ enum unspec unspec_for_fp = UNSPEC_NONE) - : m_unspec_for_sint (unspec_for_sint), - m_unspec_for_uint (unspec_for_uint), +- : m_unspec_for_sint (unspec_for_sint), +- m_unspec_for_uint (unspec_for_uint), ++ CONSTEXPR reduction (unspec unspec_for_sint, unspec unspec_for_uint, ++ unspec unspec_for_fp) ++ : m_unspec_for_sint (unspec_for_sint), m_unspec_for_uint (unspec_for_uint), m_unspec_for_fp (unspec_for_fp) + {} + @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: expand (function_expander &e) const override { @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: - int unspec = (!e.type_suffix (0).integer_p ? m_unspec_for_fp - : e.type_suffix (0).unsigned_p ? m_unspec_for_uint - : m_unspec_for_sint); -+ enum unspec unspec = (!e.type_suffix (0).integer_p ? m_unspec_for_fp -+ : e.type_suffix (0).unsigned_p ? m_unspec_for_uint -+ : m_unspec_for_sint); ++ unspec unspec = (!e.type_suffix (0).integer_p ? m_unspec_for_fp ++ : e.type_suffix (0).unsigned_p ? m_unspec_for_uint ++ : m_unspec_for_sint); /* There's no distinction between SADDV and UADDV for 64-bit elements; the signed versions only exist for narrower elements. */ if (GET_MODE_UNIT_BITSIZE (mode) == 64 && unspec == UNSPEC_SADDV) @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: - int m_unspec_for_sint; - int m_unspec_for_uint; - int m_unspec_for_fp; -+ enum unspec m_unspec_for_sint; -+ enum unspec m_unspec_for_uint; -+ enum unspec m_unspec_for_fp; ++ unspec m_unspec_for_sint; ++ unspec m_unspec_for_uint; ++ unspec m_unspec_for_fp; }; /* A function_base for functions that shift narrower-than-64-bit values @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: { e.args.last () = shift; - return e.map_to_rtx_codes (m_code, m_code, -1, -1); -+ return e.map_to_rtx_codes (m_code, m_code); ++ return e.map_to_rtx_codes (m_code, m_code, UNSPEC_NONE, UNSPEC_NONE); } if (e.pred == PRED_x) @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: - CONSTEXPR while_comparison (int unspec_for_sint, int unspec_for_uint) - : m_unspec_for_sint (unspec_for_sint), - m_unspec_for_uint (unspec_for_uint) -+ CONSTEXPR while_comparison (enum unspec unspec_for_sint, -+ enum unspec unspec_for_uint) ++ CONSTEXPR while_comparison (unspec unspec_for_sint, unspec unspec_for_uint) + : m_unspec_for_sint (unspec_for_sint), m_unspec_for_uint (unspec_for_uint) {} @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: - int unspec = (e.type_suffix (1).unsigned_p - ? m_unspec_for_uint - : m_unspec_for_sint); -+ enum unspec unspec = (e.type_suffix (1).unsigned_p -+ ? m_unspec_for_uint -+ : m_unspec_for_sint); ++ unspec unspec ++ = (e.type_suffix (1).unsigned_p ? m_unspec_for_uint : m_unspec_for_sint); if (e.vectors_per_tuple () > 1) { auto bits = e.type_suffix (0).element_bits; @@ gcc/config/aarch64/aarch64-sve-builtins-functions.h: public: respectively. */ - int m_unspec_for_sint; - int m_unspec_for_uint; -+ enum unspec m_unspec_for_sint; -+ enum unspec m_unspec_for_uint; ++ unspec m_unspec_for_sint; ++ unspec m_unspec_for_uint; }; } @@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: public: { public: - constexpr read_write_za_base (int unspec) : m_unspec (unspec) {} -+ constexpr read_write_za_base (enum unspec unspec) : m_unspec (unspec) -+ {} ++ constexpr read_write_za_base (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override +@@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: public: + return e.use_exact_insn (icode); + } + +- int m_unspec; ++ unspec m_unspec; + }; + + using load_za_base = add_call_properties<load_store_za_zt0_base, @@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: expand_ldr_str_zt0 (function_expander &e, insn_code icode) IS_LOAD is true if E is a load, false if it is a store. */ static rtx -expand_ld1_st1 (function_expander &e, int unspec, bool is_load) -+expand_ld1_st1 (function_expander &e, enum unspec unspec, bool is_load) ++expand_ld1_st1 (function_expander &e, unspec unspec, bool is_load) { bool is_vnum = has_in_range_vnum_arg (e, e.vector_mode (0), 4); auto icode = (is_vnum @@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: public: { public: - constexpr svld1_za_impl (int unspec) : m_unspec (unspec) {} -+ constexpr svld1_za_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ constexpr svld1_za_impl (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: public: } - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; class svldr_za_impl : public load_za_base @@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: using svreadz_za_tile_impl = add { public: - constexpr svst1_za_impl (int unspec) : m_unspec (unspec) {} -+ constexpr svst1_za_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ constexpr svst1_za_impl (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: public: } - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; class svstr_za_impl : public store_za_base -@@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: FUNCTION (arm_has_sme, arm_has_sme_impl, ) - FUNCTION (arm_in_streaming_mode, arm_in_streaming_mode_impl, ) +@@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: FUNCTION (arm_in_streaming_mode, arm_in_streaming_mode_impl, ) FUNCTION (svadd_za, sme_1mode_function, (UNSPEC_SME_ADD, UNSPEC_SME_ADD, UNSPEC_SME_FADD)) --FUNCTION (svadd_write_za, sme_1mode_function, (UNSPEC_SME_ADD_WRITE, + FUNCTION (svadd_write_za, sme_1mode_function, (UNSPEC_SME_ADD_WRITE, - UNSPEC_SME_ADD_WRITE, -1)) --FUNCTION (svaddha_za, sme_1mode_function, (UNSPEC_SME_ADDHA, ++ UNSPEC_SME_ADD_WRITE, UNSPEC_NONE)) + FUNCTION (svaddha_za, sme_1mode_function, (UNSPEC_SME_ADDHA, - UNSPEC_SME_ADDHA, -1)) --FUNCTION (svaddva_za, sme_1mode_function, (UNSPEC_SME_ADDVA, ++ UNSPEC_SME_ADDHA, UNSPEC_NONE)) + FUNCTION (svaddva_za, sme_1mode_function, (UNSPEC_SME_ADDVA, - UNSPEC_SME_ADDVA, -1)) -FUNCTION (svbmopa_za, sme_2mode_function, (-1, UNSPEC_SME_BMOPA, -1)) -FUNCTION (svbmops_za, sme_2mode_function, (-1, UNSPEC_SME_BMOPS, -1)) -+FUNCTION (svadd_write_za, sme_1mode_function, -+ (UNSPEC_SME_ADD_WRITE, UNSPEC_SME_ADD_WRITE)) -+FUNCTION (svaddha_za, sme_1mode_function, (UNSPEC_SME_ADDHA, UNSPEC_SME_ADDHA)) -+FUNCTION (svaddva_za, sme_1mode_function, (UNSPEC_SME_ADDVA, UNSPEC_SME_ADDVA)) -+FUNCTION (svbmopa_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_BMOPA)) -+FUNCTION (svbmops_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_BMOPS)) ++ UNSPEC_SME_ADDVA, UNSPEC_NONE)) ++FUNCTION (svbmopa_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_BMOPA, UNSPEC_NONE)) ++FUNCTION (svbmops_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_BMOPS, UNSPEC_NONE)) FUNCTION (svcntsb, svcnts_bhwd_impl, (VNx16QImode)) FUNCTION (svcntsd, svcnts_bhwd_impl, (VNx2DImode)) FUNCTION (svcntsh, svcnts_bhwd_impl, (VNx8HImode)) -@@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: FUNCTION (svstr_za, svstr_za_impl, ) - FUNCTION (svstr_zt, svstr_zt_impl, ) +@@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: FUNCTION (svstr_zt, svstr_zt_impl, ) FUNCTION (svsub_za, sme_1mode_function, (UNSPEC_SME_SUB, UNSPEC_SME_SUB, UNSPEC_SME_FSUB)) --FUNCTION (svsub_write_za, sme_1mode_function, (UNSPEC_SME_SUB_WRITE, + FUNCTION (svsub_write_za, sme_1mode_function, (UNSPEC_SME_SUB_WRITE, - UNSPEC_SME_SUB_WRITE, -1)) -+FUNCTION (svsub_write_za, sme_1mode_function, -+ (UNSPEC_SME_SUB_WRITE, UNSPEC_SME_SUB_WRITE)) ++ UNSPEC_SME_SUB_WRITE, UNSPEC_NONE)) FUNCTION (svsudot_za, svsudot_za_impl,) -FUNCTION (svsudot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUDOT, -1, -1)) --FUNCTION (svsuvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUVDOT, ++FUNCTION (svsudot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUDOT, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svsuvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUVDOT, - -1, -1)) -FUNCTION (svsumopa_za, sme_2mode_function, (UNSPEC_SME_SUMOPA, -1, -1)) -FUNCTION (svsumops_za, sme_2mode_function, (UNSPEC_SME_SUMOPS, -1, -1)) -+FUNCTION (svsudot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUDOT)) -+FUNCTION (svsuvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUVDOT)) -+FUNCTION (svsumopa_za, sme_2mode_function, (UNSPEC_SME_SUMOPA)) -+FUNCTION (svsumops_za, sme_2mode_function, (UNSPEC_SME_SUMOPS)) ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svsumopa_za, sme_2mode_function, (UNSPEC_SME_SUMOPA, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svsumops_za, sme_2mode_function, (UNSPEC_SME_SUMOPS, UNSPEC_NONE, UNSPEC_NONE)) FUNCTION (svundef_za, svundef_za_impl, ) -FUNCTION (svusdot_za, sme_2mode_function, (-1, UNSPEC_SME_USDOT, -1)) -FUNCTION (svusdot_lane_za, sme_2mode_lane_function, (-1, UNSPEC_SME_USDOT, -1)) @@ gcc/config/aarch64/aarch64-sve-builtins-sme.cc: FUNCTION (svstr_za, svstr_za_imp - -1)) -FUNCTION (svusmopa_za, sme_2mode_function, (-1, UNSPEC_SME_USMOPA, -1)) -FUNCTION (svusmops_za, sme_2mode_function, (-1, UNSPEC_SME_USMOPS, -1)) -+FUNCTION (svusdot_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USDOT)) -+FUNCTION (svusdot_lane_za, sme_2mode_lane_function, -+ (UNSPEC_NONE, UNSPEC_SME_USDOT)) -+FUNCTION (svusvdot_lane_za, sme_2mode_lane_function, -+ (UNSPEC_NONE, UNSPEC_SME_USVDOT)) -+FUNCTION (svusmopa_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USMOPA)) -+FUNCTION (svusmops_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USMOPS)) ++FUNCTION (svusdot_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USDOT, UNSPEC_NONE)) ++FUNCTION (svusdot_lane_za, sme_2mode_lane_function, (UNSPEC_NONE, UNSPEC_SME_USDOT, UNSPEC_NONE)) ++FUNCTION (svusvdot_lane_za, sme_2mode_lane_function, (UNSPEC_NONE, UNSPEC_SME_USVDOT, ++ UNSPEC_NONE)) ++FUNCTION (svusmopa_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USMOPA, UNSPEC_NONE)) ++FUNCTION (svusmops_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USMOPS, UNSPEC_NONE)) FUNCTION (svvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SVDOT, UNSPEC_SME_UVDOT, UNSPEC_SME_FVDOT)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: class svcvt_fp8_impl : public f public: CONSTEXPR - svcvt_fp8_impl (int unspec) : m_unspec (unspec) {} -+ svcvt_fp8_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ svcvt_fp8_impl (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: } - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; class svcvtn_impl : public function_base @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: { public: - CONSTEXPR svmatch_svnmatch_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svmatch_svnmatch_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svmatch_svnmatch_impl (unspec unspec) : m_unspec (unspec) {} gimple * fold (gimple_folder &f) const override { +@@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: + e.vector_mode (0))); + } + +- int m_unspec; ++ unspec m_unspec; + }; + + /* Implements both svmovlb and svmovlt; the unspec parameters decide @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: /* Convert the rotation amount into a specific unspec. */ int rot = INTVAL (e.args.pop ()); if (rot == 90) - return e.map_to_unspecs (UNSPEC_SQCADD90, -1, -1); -+ return e.map_to_unspecs (UNSPEC_SQCADD90); ++ return e.map_to_unspecs (UNSPEC_SQCADD90, UNSPEC_NONE, UNSPEC_NONE); if (rot == 270) - return e.map_to_unspecs (UNSPEC_SQCADD270, -1, -1); -+ return e.map_to_unspecs (UNSPEC_SQCADD270); ++ return e.map_to_unspecs (UNSPEC_SQCADD270, UNSPEC_NONE, UNSPEC_NONE); gcc_unreachable (); } }; @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: class svqrshl_impl : public uns public: CONSTEXPR svqrshl_impl () - : unspec_based_function (UNSPEC_SQRSHL, UNSPEC_UQRSHL, -1) {} -+ : unspec_based_function (UNSPEC_SQRSHL, UNSPEC_UQRSHL) -+ {} ++ : unspec_based_function (UNSPEC_SQRSHL, UNSPEC_UQRSHL, UNSPEC_NONE) {} gimple * fold (gimple_folder &f) const override -@@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: - class svqshl_impl : public unspec_based_function +@@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: class svqshl_impl : public unspec_based_function { public: -- CONSTEXPR svqshl_impl () + CONSTEXPR svqshl_impl () - : unspec_based_function (UNSPEC_SQSHL, UNSPEC_UQSHL, -1) {} -+ CONSTEXPR svqshl_impl () : unspec_based_function (UNSPEC_SQSHL, UNSPEC_UQSHL) -+ {} ++ : unspec_based_function (UNSPEC_SQSHL, UNSPEC_UQSHL, UNSPEC_NONE) {} gimple * fold (gimple_folder &f) const override -@@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: - class svrshl_impl : public unspec_based_function +@@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: class svrshl_impl : public unspec_based_function { public: -- CONSTEXPR svrshl_impl () + CONSTEXPR svrshl_impl () - : unspec_based_function (UNSPEC_SRSHL, UNSPEC_URSHL, -1) {} -+ CONSTEXPR svrshl_impl () : unspec_based_function (UNSPEC_SRSHL, UNSPEC_URSHL) -+ {} ++ : unspec_based_function (UNSPEC_SRSHL, UNSPEC_URSHL, UNSPEC_NONE) {} gimple * fold (gimple_folder &f) const override @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: && aarch64_sve_sqadd_sqsub_immediate_p (mode, e.args[2], false)) - return e.map_to_rtx_codes (UNKNOWN, US_PLUS, -1, -1); - return e.map_to_unspecs (-1, UNSPEC_USQADD, -1); -+ return e.map_to_rtx_codes (UNKNOWN, US_PLUS); -+ return e.map_to_unspecs (UNSPEC_NONE, UNSPEC_USQADD); ++ return e.map_to_rtx_codes (UNKNOWN, US_PLUS, UNSPEC_NONE, UNSPEC_NONE); ++ return e.map_to_unspecs (UNSPEC_NONE, UNSPEC_USQADD, UNSPEC_NONE); } }; @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: && aarch64_sve_arith_immediate_p (mode, e.args[2], false)) return e.use_unpred_insn (code_for_aarch64_sve_suqadd_const (mode)); - return e.map_to_unspecs (UNSPEC_SUQADD, -1, -1); -+ return e.map_to_unspecs (UNSPEC_SUQADD); ++ return e.map_to_unspecs (UNSPEC_SUQADD, UNSPEC_NONE, UNSPEC_NONE); } }; @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: { public: - CONSTEXPR svwhilerw_svwhilewr_impl (int unspec) : m_unspec (unspec) {} -+ CONSTEXPR svwhilerw_svwhilewr_impl (enum unspec unspec) : m_unspec (unspec) -+ {} ++ CONSTEXPR svwhilerw_svwhilewr_impl (unspec unspec) : m_unspec (unspec) {} rtx expand (function_expander &e) const override @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: } - int m_unspec; -+ enum unspec m_unspec; ++ unspec m_unspec; }; /* Implements svzipq1 and svzipq2. */ @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: { public: - CONSTEXPR faminmaximpl (int cond_unspec, int uncond_unspec) -+ CONSTEXPR faminmaximpl (enum unspec cond_unspec, enum unspec uncond_unspec) ++ CONSTEXPR faminmaximpl (unspec cond_unspec, unspec uncond_unspec) : m_cond_unspec (cond_unspec), m_uncond_unspec (uncond_unspec) {} @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: respectively. */ - int m_cond_unspec; - int m_uncond_unspec; -+ enum unspec m_cond_unspec; -+ enum unspec m_uncond_unspec; ++ unspec m_cond_unspec; ++ unspec m_uncond_unspec; }; } /* end anonymous namespace */ -@@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: - namespace aarch64_sve { +@@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: namespace aarch64_sve { FUNCTION (svaba, svaba_impl,) --FUNCTION (svabalb, unspec_based_add_function, (UNSPEC_SABDLB, + FUNCTION (svabalb, unspec_based_add_function, (UNSPEC_SABDLB, - UNSPEC_UABDLB, -1)) --FUNCTION (svabalt, unspec_based_add_function, (UNSPEC_SABDLT, ++ UNSPEC_UABDLB, UNSPEC_NONE)) + FUNCTION (svabalt, unspec_based_add_function, (UNSPEC_SABDLT, - UNSPEC_UABDLT, -1)) -FUNCTION (svabdlb, unspec_based_function, (UNSPEC_SABDLB, UNSPEC_UABDLB, -1)) -FUNCTION (svabdlt, unspec_based_function, (UNSPEC_SABDLT, UNSPEC_UABDLT, -1)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: -FUNCTION (svaddlb, unspec_based_function, (UNSPEC_SADDLB, UNSPEC_UADDLB, -1)) -FUNCTION (svaddlbt, unspec_based_function, (UNSPEC_SADDLBT, -1, -1)) -FUNCTION (svaddlt, unspec_based_function, (UNSPEC_SADDLT, UNSPEC_UADDLT, -1)) -+FUNCTION (svabalb, unspec_based_add_function, (UNSPEC_SABDLB, UNSPEC_UABDLB)) -+FUNCTION (svabalt, unspec_based_add_function, (UNSPEC_SABDLT, UNSPEC_UABDLT)) -+FUNCTION (svabdlb, unspec_based_function, (UNSPEC_SABDLB, UNSPEC_UABDLB)) -+FUNCTION (svabdlt, unspec_based_function, (UNSPEC_SABDLT, UNSPEC_UABDLT)) -+FUNCTION (svadalp, unspec_based_function, (UNSPEC_SADALP, UNSPEC_UADALP)) -+FUNCTION (svadclb, unspec_based_function, (UNSPEC_NONE, UNSPEC_ADCLB)) -+FUNCTION (svadclt, unspec_based_function, (UNSPEC_NONE, UNSPEC_ADCLT)) -+FUNCTION (svaddhnb, unspec_based_function, (UNSPEC_ADDHNB, UNSPEC_ADDHNB)) -+FUNCTION (svaddhnt, unspec_based_function, (UNSPEC_ADDHNT, UNSPEC_ADDHNT)) -+FUNCTION (svaddlb, unspec_based_function, (UNSPEC_SADDLB, UNSPEC_UADDLB)) -+FUNCTION (svaddlbt, unspec_based_function, (UNSPEC_SADDLBT)) -+FUNCTION (svaddlt, unspec_based_function, (UNSPEC_SADDLT, UNSPEC_UADDLT)) ++ UNSPEC_UABDLT, UNSPEC_NONE)) ++FUNCTION (svabdlb, unspec_based_function, (UNSPEC_SABDLB, UNSPEC_UABDLB, UNSPEC_NONE)) ++FUNCTION (svabdlt, unspec_based_function, (UNSPEC_SABDLT, UNSPEC_UABDLT, UNSPEC_NONE)) ++FUNCTION (svadalp, unspec_based_function, (UNSPEC_SADALP, UNSPEC_UADALP, UNSPEC_NONE)) ++FUNCTION (svadclb, unspec_based_function, (UNSPEC_NONE, UNSPEC_ADCLB, UNSPEC_NONE)) ++FUNCTION (svadclt, unspec_based_function, (UNSPEC_NONE, UNSPEC_ADCLT, UNSPEC_NONE)) ++FUNCTION (svaddhnb, unspec_based_function, (UNSPEC_ADDHNB, UNSPEC_ADDHNB, UNSPEC_NONE)) ++FUNCTION (svaddhnt, unspec_based_function, (UNSPEC_ADDHNT, UNSPEC_ADDHNT, UNSPEC_NONE)) ++FUNCTION (svaddlb, unspec_based_function, (UNSPEC_SADDLB, UNSPEC_UADDLB, UNSPEC_NONE)) ++FUNCTION (svaddlbt, unspec_based_function, (UNSPEC_SADDLBT, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svaddlt, unspec_based_function, (UNSPEC_SADDLT, UNSPEC_UADDLT, UNSPEC_NONE)) FUNCTION (svaddp, unspec_based_pred_function, (UNSPEC_ADDP, UNSPEC_ADDP, UNSPEC_FADDP)) FUNCTION (svaddqv, reduction, (UNSPEC_ADDQV, UNSPEC_ADDQV, UNSPEC_FADDQV)) -FUNCTION (svaddwb, unspec_based_function, (UNSPEC_SADDWB, UNSPEC_UADDWB, -1)) -FUNCTION (svaddwt, unspec_based_function, (UNSPEC_SADDWT, UNSPEC_UADDWT, -1)) -+FUNCTION (svaddwb, unspec_based_function, (UNSPEC_SADDWB, UNSPEC_UADDWB)) -+FUNCTION (svaddwt, unspec_based_function, (UNSPEC_SADDWT, UNSPEC_UADDWT)) ++FUNCTION (svaddwb, unspec_based_function, (UNSPEC_SADDWB, UNSPEC_UADDWB, UNSPEC_NONE)) ++FUNCTION (svaddwt, unspec_based_function, (UNSPEC_SADDWT, UNSPEC_UADDWT, UNSPEC_NONE)) FUNCTION (svaesd, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesd)) FUNCTION (svaese, fixed_insn_function, (CODE_FOR_aarch64_sve2_aese)) FUNCTION (svaesimc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesimc)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: FUNCTION (svamax, faminmaximpl, (UNSPEC_COND_FAMAX, UNSPEC_FAMAX)) FUNCTION (svamin, faminmaximpl, (UNSPEC_COND_FAMIN, UNSPEC_FAMIN)) -FUNCTION (svandqv, reduction, (UNSPEC_ANDQV, UNSPEC_ANDQV, -1)) -+FUNCTION (svandqv, reduction, (UNSPEC_ANDQV, UNSPEC_ANDQV)) ++FUNCTION (svandqv, reduction, (UNSPEC_ANDQV, UNSPEC_ANDQV, UNSPEC_NONE)) FUNCTION (svbcax, CODE_FOR_MODE0 (aarch64_sve2_bcax),) -FUNCTION (svbdep, unspec_based_function, (UNSPEC_BDEP, UNSPEC_BDEP, -1)) -FUNCTION (svbext, unspec_based_function, (UNSPEC_BEXT, UNSPEC_BEXT, -1)) -+FUNCTION (svbdep, unspec_based_function, (UNSPEC_BDEP, UNSPEC_BDEP)) -+FUNCTION (svbext, unspec_based_function, (UNSPEC_BEXT, UNSPEC_BEXT)) ++FUNCTION (svbdep, unspec_based_function, (UNSPEC_BDEP, UNSPEC_BDEP, UNSPEC_NONE)) ++FUNCTION (svbext, unspec_based_function, (UNSPEC_BEXT, UNSPEC_BEXT, UNSPEC_NONE)) FUNCTION (svbfmlslb, fixed_insn_function, (CODE_FOR_aarch64_sve_bfmlslbvnx4sf)) FUNCTION (svbfmlslb_lane, fixed_insn_function, (CODE_FOR_aarch64_sve_bfmlslb_lanevnx4sf)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: public: FUNCTION (svbfmlslt_lane, fixed_insn_function, (CODE_FOR_aarch64_sve_bfmlslt_lanevnx4sf)) -FUNCTION (svbgrp, unspec_based_function, (UNSPEC_BGRP, UNSPEC_BGRP, -1)) -+FUNCTION (svbgrp, unspec_based_function, (UNSPEC_BGRP, UNSPEC_BGRP)) ++FUNCTION (svbgrp, unspec_based_function, (UNSPEC_BGRP, UNSPEC_BGRP, UNSPEC_NONE)) FUNCTION (svbsl, CODE_FOR_MODE0 (aarch64_sve2_bsl),) FUNCTION (svbsl1n, CODE_FOR_MODE0 (aarch64_sve2_bsl1n),) FUNCTION (svbsl2n, CODE_FOR_MODE0 (aarch64_sve2_bsl2n),) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: FUNCTION (svcvt2, svcvt_fp8_imp FUNCTION (svcvtlt1, svcvt_fp8_impl, (UNSPEC_F1CVTLT)) FUNCTION (svcvtlt2, svcvt_fp8_impl, (UNSPEC_F2CVTLT)) -FUNCTION (svcvtlt, unspec_based_function, (-1, -1, UNSPEC_COND_FCVTLT)) -+FUNCTION (svcvtlt, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FCVTLT)) ++FUNCTION (svcvtlt, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FCVTLT)) FUNCTION (svcvtn, svcvtn_impl,) FUNCTION (svcvtnb, fixed_insn_function, (CODE_FOR_aarch64_sve2_fp8_cvtnbvnx16qi)) -FUNCTION (svcvtx, unspec_based_function, (-1, -1, UNSPEC_COND_FCVTX)) -+FUNCTION (svcvtx, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FCVTX)) ++FUNCTION (svcvtx, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FCVTX)) FUNCTION (svcvtxnt, svcvtxnt_impl,) FUNCTION (svdup_laneq, svdup_laneq_impl,) FUNCTION (sveor3, CODE_FOR_MODE0 (aarch64_sve2_eor3),) -FUNCTION (sveorbt, unspec_based_function, (UNSPEC_EORBT, UNSPEC_EORBT, -1)) -FUNCTION (sveorqv, reduction, (UNSPEC_EORQV, UNSPEC_EORQV, -1)) -FUNCTION (sveortb, unspec_based_function, (UNSPEC_EORTB, UNSPEC_EORTB, -1)) -+FUNCTION (sveorbt, unspec_based_function, (UNSPEC_EORBT, UNSPEC_EORBT)) -+FUNCTION (sveorqv, reduction, (UNSPEC_EORQV, UNSPEC_EORQV)) -+FUNCTION (sveortb, unspec_based_function, (UNSPEC_EORTB, UNSPEC_EORTB)) ++FUNCTION (sveorbt, unspec_based_function, (UNSPEC_EORBT, UNSPEC_EORBT, UNSPEC_NONE)) ++FUNCTION (sveorqv, reduction, (UNSPEC_EORQV, UNSPEC_EORQV, UNSPEC_NONE)) ++FUNCTION (sveortb, unspec_based_function, (UNSPEC_EORTB, UNSPEC_EORTB, UNSPEC_NONE)) FUNCTION (svextq, svextq_impl,) -FUNCTION (svhadd, unspec_based_function, (UNSPEC_SHADD, UNSPEC_UHADD, -1)) -FUNCTION (svhsub, unspec_based_function, (UNSPEC_SHSUB, UNSPEC_UHSUB, -1)) -+FUNCTION (svhadd, unspec_based_function, (UNSPEC_SHADD, UNSPEC_UHADD)) -+FUNCTION (svhsub, unspec_based_function, (UNSPEC_SHSUB, UNSPEC_UHSUB)) ++FUNCTION (svhadd, unspec_based_function, (UNSPEC_SHADD, UNSPEC_UHADD, UNSPEC_NONE)) ++FUNCTION (svhsub, unspec_based_function, (UNSPEC_SHSUB, UNSPEC_UHSUB, UNSPEC_NONE)) FUNCTION (svhistcnt, CODE_FOR_MODE0 (aarch64_sve2_histcnt),) FUNCTION (svhistseg, CODE_FOR_MODE0 (aarch64_sve2_histseg),) --FUNCTION (svhsubr, unspec_based_function_rotated, (UNSPEC_SHSUB, + FUNCTION (svhsubr, unspec_based_function_rotated, (UNSPEC_SHSUB, - UNSPEC_UHSUB, -1)) -+FUNCTION (svhsubr, unspec_based_function_rotated, (UNSPEC_SHSUB, UNSPEC_UHSUB)) ++ UNSPEC_UHSUB, UNSPEC_NONE)) FUNCTION (svld1q_gather, svld1q_gather_impl,) FUNCTION (svld1udq, svld1uxq_impl, (VNx1DImode)) FUNCTION (svld1uwq, svld1uxq_impl, (VNx1SImode)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: FUNCTION (svldnt1sw_gather, svl FUNCTION (svldnt1uh_gather, svldnt1_gather_extend_impl, (TYPE_SUFFIX_u16)) FUNCTION (svldnt1uw_gather, svldnt1_gather_extend_impl, (TYPE_SUFFIX_u32)) -FUNCTION (svlogb, unspec_based_function, (-1, -1, UNSPEC_COND_FLOGB)) -+FUNCTION (svlogb, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FLOGB)) ++FUNCTION (svlogb, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FLOGB)) FUNCTION (svmatch, svmatch_svnmatch_impl, (UNSPEC_MATCH)) -FUNCTION (svmaxnmp, unspec_based_pred_function, (-1, -1, UNSPEC_FMAXNMP)) -FUNCTION (svmaxnmqv, reduction, (-1, -1, UNSPEC_FMAXNMQV)) -+FUNCTION (svmaxnmp, unspec_based_pred_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FMAXNMP)) ++FUNCTION (svmaxnmp, unspec_based_pred_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FMAXNMP)) +FUNCTION (svmaxnmqv, reduction, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FMAXNMQV)) FUNCTION (svmaxp, unspec_based_pred_function, (UNSPEC_SMAXP, UNSPEC_UMAXP, UNSPEC_FMAXP)) FUNCTION (svmaxqv, reduction, (UNSPEC_SMAXQV, UNSPEC_UMAXQV, UNSPEC_FMAXQV)) -FUNCTION (svminnmp, unspec_based_pred_function, (-1, -1, UNSPEC_FMINNMP)) -FUNCTION (svminnmqv, reduction, (-1, -1, UNSPEC_FMINNMQV)) -+FUNCTION (svminnmp, unspec_based_pred_function, -+ (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FMINNMP)) ++FUNCTION (svminnmp, unspec_based_pred_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FMINNMP)) +FUNCTION (svminnmqv, reduction, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FMINNMQV)) FUNCTION (svminp, unspec_based_pred_function, (UNSPEC_SMINP, UNSPEC_UMINP, UNSPEC_FMINP)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: FUNCTION (svmlslt, unspec_based -FUNCTION (svmovlb, svmovl_lb_impl, (UNSPEC_SSHLLB, UNSPEC_USHLLB, -1)) -FUNCTION (svmovlt, svmovl_lb_impl, (UNSPEC_SSHLLT, UNSPEC_USHLLT, -1)) -FUNCTION (svmullb, unspec_based_function, (UNSPEC_SMULLB, UNSPEC_UMULLB, -1)) --FUNCTION (svmullb_lane, unspec_based_lane_function, (UNSPEC_SMULLB, ++FUNCTION (svmovlb, svmovl_lb_impl, (UNSPEC_SSHLLB, UNSPEC_USHLLB, UNSPEC_NONE)) ++FUNCTION (svmovlt, svmovl_lb_impl, (UNSPEC_SSHLLT, UNSPEC_USHLLT, UNSPEC_NONE)) ++FUNCTION (svmullb, unspec_based_function, (UNSPEC_SMULLB, UNSPEC_UMULLB, UNSPEC_NONE)) + FUNCTION (svmullb_lane, unspec_based_lane_function, (UNSPEC_SMULLB, - UNSPEC_UMULLB, -1)) -FUNCTION (svmullt, unspec_based_function, (UNSPEC_SMULLT, UNSPEC_UMULLT, -1)) --FUNCTION (svmullt_lane, unspec_based_lane_function, (UNSPEC_SMULLT, ++ UNSPEC_UMULLB, UNSPEC_NONE)) ++FUNCTION (svmullt, unspec_based_function, (UNSPEC_SMULLT, UNSPEC_UMULLT, UNSPEC_NONE)) + FUNCTION (svmullt_lane, unspec_based_lane_function, (UNSPEC_SMULLT, - UNSPEC_UMULLT, -1)) -+FUNCTION (svmovlb, svmovl_lb_impl, (UNSPEC_SSHLLB, UNSPEC_USHLLB)) -+FUNCTION (svmovlt, svmovl_lb_impl, (UNSPEC_SSHLLT, UNSPEC_USHLLT)) -+FUNCTION (svmullb, unspec_based_function, (UNSPEC_SMULLB, UNSPEC_UMULLB)) -+FUNCTION (svmullb_lane, unspec_based_lane_function, -+ (UNSPEC_SMULLB, UNSPEC_UMULLB)) -+FUNCTION (svmullt, unspec_based_function, (UNSPEC_SMULLT, UNSPEC_UMULLT)) -+FUNCTION (svmullt_lane, unspec_based_lane_function, -+ (UNSPEC_SMULLT, UNSPEC_UMULLT)) ++ UNSPEC_UMULLT, UNSPEC_NONE)) FUNCTION (svnbsl, CODE_FOR_MODE0 (aarch64_sve2_nbsl),) FUNCTION (svnmatch, svmatch_svnmatch_impl, (UNSPEC_NMATCH)) -FUNCTION (svorqv, reduction, (UNSPEC_ORQV, UNSPEC_ORQV, -1)) -+FUNCTION (svorqv, reduction, (UNSPEC_ORQV, UNSPEC_ORQV)) ++FUNCTION (svorqv, reduction, (UNSPEC_ORQV, UNSPEC_ORQV, UNSPEC_NONE)) FUNCTION (svpext_lane, svpext_lane_impl,) FUNCTION (svpmov, svpmov_impl,) FUNCTION (svpmov_lane, svpmov_lane_impl,) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: FUNCTION (svmlslt, unspec_based -FUNCTION (svpmullb_pair, unspec_based_function, (-1, UNSPEC_PMULLB_PAIR, -1)) -FUNCTION (svpmullt, unspec_based_function, (-1, UNSPEC_PMULLT, -1)) -FUNCTION (svpmullt_pair, unspec_based_function, (-1, UNSPEC_PMULLT_PAIR, -1)) -+FUNCTION (svpmullb, unspec_based_function, (UNSPEC_PMULLB)) -+FUNCTION (svpmullb_pair, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_PMULLB_PAIR)) -+FUNCTION (svpmullt, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLT)) -+FUNCTION (svpmullt_pair, unspec_based_function, -+ (UNSPEC_NONE, UNSPEC_PMULLT_PAIR)) ++FUNCTION (svpmullb, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLB, UNSPEC_NONE)) ++FUNCTION (svpmullb_pair, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLB_PAIR, UNSPEC_NONE)) ++FUNCTION (svpmullt, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLT, UNSPEC_NONE)) ++FUNCTION (svpmullt_pair, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLT_PAIR, UNSPEC_NONE)) FUNCTION (svpsel_lane, svpsel_lane_impl,) -FUNCTION (svqabs, rtx_code_function, (SS_ABS, UNKNOWN, UNKNOWN)) -+FUNCTION (svqabs, rtx_code_function, (SS_ABS,UNKNOWN)) ++FUNCTION (svqabs, rtx_code_function, (SS_ABS, UNKNOWN, UNSPEC_NONE)) FUNCTION (svqcadd, svqcadd_impl,) --FUNCTION (svqcvt, integer_conversion, (UNSPEC_SQCVT, UNSPEC_SQCVTU, + FUNCTION (svqcvt, integer_conversion, (UNSPEC_SQCVT, UNSPEC_SQCVTU, - UNSPEC_UQCVT, -1)) --FUNCTION (svqcvtn, integer_conversion, (UNSPEC_SQCVTN, UNSPEC_SQCVTUN, ++ UNSPEC_UQCVT, UNSPEC_NONE)) + FUNCTION (svqcvtn, integer_conversion, (UNSPEC_SQCVTN, UNSPEC_SQCVTUN, - UNSPEC_UQCVTN, -1)) -FUNCTION (svqdmlalb, unspec_based_qadd_function, (UNSPEC_SQDMULLB, -1, -1)) --FUNCTION (svqdmlalb_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLB, ++ UNSPEC_UQCVTN, UNSPEC_NONE)) ++FUNCTION (svqdmlalb, unspec_based_qadd_function, (UNSPEC_SQDMULLB, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqdmlalb_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLB, - -1, -1)) -FUNCTION (svqdmlalbt, unspec_based_qadd_function, (UNSPEC_SQDMULLBT, -1, -1)) -FUNCTION (svqdmlalt, unspec_based_qadd_function, (UNSPEC_SQDMULLT, -1, -1)) --FUNCTION (svqdmlalt_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLT, ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmlalbt, unspec_based_qadd_function, (UNSPEC_SQDMULLBT, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmlalt, unspec_based_qadd_function, (UNSPEC_SQDMULLT, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqdmlalt_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLT, - -1, -1)) -FUNCTION (svqdmlslb, unspec_based_qsub_function, (UNSPEC_SQDMULLB, -1, -1)) --FUNCTION (svqdmlslb_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLB, ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmlslb, unspec_based_qsub_function, (UNSPEC_SQDMULLB, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqdmlslb_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLB, - -1, -1)) -FUNCTION (svqdmlslbt, unspec_based_qsub_function, (UNSPEC_SQDMULLBT, -1, -1)) -FUNCTION (svqdmlslt, unspec_based_qsub_function, (UNSPEC_SQDMULLT, -1, -1)) --FUNCTION (svqdmlslt_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLT, ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmlslbt, unspec_based_qsub_function, (UNSPEC_SQDMULLBT, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmlslt, unspec_based_qsub_function, (UNSPEC_SQDMULLT, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqdmlslt_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLT, - -1, -1)) -FUNCTION (svqdmulh, unspec_based_function, (UNSPEC_SQDMULH, -1, -1)) -FUNCTION (svqdmulh_lane, unspec_based_lane_function, (UNSPEC_SQDMULH, -1, -1)) -FUNCTION (svqdmullb, unspec_based_function, (UNSPEC_SQDMULLB, -1, -1)) --FUNCTION (svqdmullb_lane, unspec_based_lane_function, (UNSPEC_SQDMULLB, ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmulh, unspec_based_function, (UNSPEC_SQDMULH, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmulh_lane, unspec_based_lane_function, (UNSPEC_SQDMULH, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmullb, unspec_based_function, (UNSPEC_SQDMULLB, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqdmullb_lane, unspec_based_lane_function, (UNSPEC_SQDMULLB, - -1, -1)) -FUNCTION (svqdmullt, unspec_based_function, (UNSPEC_SQDMULLT, -1, -1)) --FUNCTION (svqdmullt_lane, unspec_based_lane_function, (UNSPEC_SQDMULLT, ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqdmullt, unspec_based_function, (UNSPEC_SQDMULLT, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqdmullt_lane, unspec_based_lane_function, (UNSPEC_SQDMULLT, - -1, -1)) -FUNCTION (svqneg, rtx_code_function, (SS_NEG, UNKNOWN, UNKNOWN)) -+FUNCTION (svqcvt, integer_conversion, -+ (UNSPEC_SQCVT, UNSPEC_SQCVTU, UNSPEC_UQCVT)) -+FUNCTION (svqcvtn, integer_conversion, -+ (UNSPEC_SQCVTN, UNSPEC_SQCVTUN, UNSPEC_UQCVTN)) -+FUNCTION (svqdmlalb, unspec_based_qadd_function, (UNSPEC_SQDMULLB)) -+FUNCTION (svqdmlalb_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLB)) -+FUNCTION (svqdmlalbt, unspec_based_qadd_function, (UNSPEC_SQDMULLBT)) -+FUNCTION (svqdmlalt, unspec_based_qadd_function, (UNSPEC_SQDMULLT)) -+FUNCTION (svqdmlalt_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLT)) -+FUNCTION (svqdmlslb, unspec_based_qsub_function, (UNSPEC_SQDMULLB)) -+FUNCTION (svqdmlslb_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLB)) -+FUNCTION (svqdmlslbt, unspec_based_qsub_function, (UNSPEC_SQDMULLBT)) -+FUNCTION (svqdmlslt, unspec_based_qsub_function, (UNSPEC_SQDMULLT)) -+FUNCTION (svqdmlslt_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLT)) -+FUNCTION (svqdmulh, unspec_based_function, (UNSPEC_SQDMULH)) -+FUNCTION (svqdmulh_lane, unspec_based_lane_function, (UNSPEC_SQDMULH)) -+FUNCTION (svqdmullb, unspec_based_function, (UNSPEC_SQDMULLB)) -+FUNCTION (svqdmullb_lane, unspec_based_lane_function, (UNSPEC_SQDMULLB)) -+FUNCTION (svqdmullt, unspec_based_function, (UNSPEC_SQDMULLT)) -+FUNCTION (svqdmullt_lane, unspec_based_lane_function, (UNSPEC_SQDMULLT)) -+FUNCTION (svqneg, rtx_code_function, (SS_NEG, UNKNOWN)) ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqneg, rtx_code_function, (SS_NEG, UNKNOWN, UNSPEC_NONE)) FUNCTION (svqrdcmlah, svqrdcmlah_impl,) FUNCTION (svqrdcmlah_lane, svqrdcmlah_lane_impl,) -FUNCTION (svqrdmlah, unspec_based_function, (UNSPEC_SQRDMLAH, -1, -1)) --FUNCTION (svqrdmlah_lane, unspec_based_lane_function, (UNSPEC_SQRDMLAH, ++FUNCTION (svqrdmlah, unspec_based_function, (UNSPEC_SQRDMLAH, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqrdmlah_lane, unspec_based_lane_function, (UNSPEC_SQRDMLAH, - -1, -1)) -FUNCTION (svqrdmlsh, unspec_based_function, (UNSPEC_SQRDMLSH, -1, -1)) --FUNCTION (svqrdmlsh_lane, unspec_based_lane_function, (UNSPEC_SQRDMLSH, ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqrdmlsh, unspec_based_function, (UNSPEC_SQRDMLSH, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqrdmlsh_lane, unspec_based_lane_function, (UNSPEC_SQRDMLSH, - -1, -1)) -FUNCTION (svqrdmulh, unspec_based_function, (UNSPEC_SQRDMULH, -1, -1)) --FUNCTION (svqrdmulh_lane, unspec_based_lane_function, (UNSPEC_SQRDMULH, ++ UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqrdmulh, unspec_based_function, (UNSPEC_SQRDMULH, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqrdmulh_lane, unspec_based_lane_function, (UNSPEC_SQRDMULH, - -1, -1)) -+FUNCTION (svqrdmlah, unspec_based_function, (UNSPEC_SQRDMLAH)) -+FUNCTION (svqrdmlah_lane, unspec_based_lane_function, (UNSPEC_SQRDMLAH)) -+FUNCTION (svqrdmlsh, unspec_based_function, (UNSPEC_SQRDMLSH)) -+FUNCTION (svqrdmlsh_lane, unspec_based_lane_function, (UNSPEC_SQRDMLSH)) -+FUNCTION (svqrdmulh, unspec_based_function, (UNSPEC_SQRDMULH)) -+FUNCTION (svqrdmulh_lane, unspec_based_lane_function, (UNSPEC_SQRDMULH)) ++ UNSPEC_NONE, UNSPEC_NONE)) FUNCTION (svqrshl, svqrshl_impl,) --FUNCTION (svqrshr, unspec_based_uncond_function, (UNSPEC_SQRSHR, + FUNCTION (svqrshr, unspec_based_uncond_function, (UNSPEC_SQRSHR, - UNSPEC_UQRSHR, -1, -1, 1)) --FUNCTION (svqrshrn, unspec_based_uncond_function, (UNSPEC_SQRSHRN, ++ UNSPEC_UQRSHR, UNSPEC_NONE, UNSPEC_NONE, 1)) + FUNCTION (svqrshrn, unspec_based_uncond_function, (UNSPEC_SQRSHRN, - UNSPEC_UQRSHRN, -1, -1, 1)) --FUNCTION (svqrshrnb, unspec_based_function, (UNSPEC_SQRSHRNB, ++ UNSPEC_UQRSHRN, UNSPEC_NONE, UNSPEC_NONE, 1)) + FUNCTION (svqrshrnb, unspec_based_function, (UNSPEC_SQRSHRNB, - UNSPEC_UQRSHRNB, -1)) --FUNCTION (svqrshrnt, unspec_based_function, (UNSPEC_SQRSHRNT, ++ UNSPEC_UQRSHRNB, UNSPEC_NONE)) + FUNCTION (svqrshrnt, unspec_based_function, (UNSPEC_SQRSHRNT, - UNSPEC_UQRSHRNT, -1)) -FUNCTION (svqrshru, unspec_based_uncond_function, (UNSPEC_SQRSHRU, -1, -1, -1, 1)) -FUNCTION (svqrshrun, unspec_based_uncond_function, (UNSPEC_SQRSHRUN, -1, -1, -1, 1)) -FUNCTION (svqrshrunb, unspec_based_function, (UNSPEC_SQRSHRUNB, -1, -1)) -FUNCTION (svqrshrunt, unspec_based_function, (UNSPEC_SQRSHRUNT, -1, -1)) -+FUNCTION (svqrshr, unspec_based_uncond_function, (UNSPEC_SQRSHR, UNSPEC_UQRSHR)) -+FUNCTION (svqrshrn, unspec_based_uncond_function, -+ (UNSPEC_SQRSHRN, UNSPEC_UQRSHRN)) -+FUNCTION (svqrshrnb, unspec_based_function, (UNSPEC_SQRSHRNB, UNSPEC_UQRSHRNB)) -+FUNCTION (svqrshrnt, unspec_based_function, (UNSPEC_SQRSHRNT, UNSPEC_UQRSHRNT)) -+FUNCTION (svqrshru, unspec_based_uncond_function, (UNSPEC_SQRSHRU)) -+FUNCTION (svqrshrun, unspec_based_uncond_function, (UNSPEC_SQRSHRUN)) -+FUNCTION (svqrshrunb, unspec_based_function, (UNSPEC_SQRSHRUNB)) -+FUNCTION (svqrshrunt, unspec_based_function, (UNSPEC_SQRSHRUNT)) ++ UNSPEC_UQRSHRNT, UNSPEC_NONE)) ++FUNCTION (svqrshru, unspec_based_uncond_function, (UNSPEC_SQRSHRU, UNSPEC_NONE, UNSPEC_NONE, UNSPEC_NONE, 1)) ++FUNCTION (svqrshrun, unspec_based_uncond_function, (UNSPEC_SQRSHRUN, UNSPEC_NONE, UNSPEC_NONE, UNSPEC_NONE, 1)) ++FUNCTION (svqrshrunb, unspec_based_function, (UNSPEC_SQRSHRUNB, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqrshrunt, unspec_based_function, (UNSPEC_SQRSHRUNT, UNSPEC_NONE, UNSPEC_NONE)) FUNCTION (svqshl, svqshl_impl,) -FUNCTION (svqshlu, unspec_based_function, (UNSPEC_SQSHLU, -1, -1)) --FUNCTION (svqshrnb, unspec_based_function, (UNSPEC_SQSHRNB, ++FUNCTION (svqshlu, unspec_based_function, (UNSPEC_SQSHLU, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svqshrnb, unspec_based_function, (UNSPEC_SQSHRNB, - UNSPEC_UQSHRNB, -1)) --FUNCTION (svqshrnt, unspec_based_function, (UNSPEC_SQSHRNT, ++ UNSPEC_UQSHRNB, UNSPEC_NONE)) + FUNCTION (svqshrnt, unspec_based_function, (UNSPEC_SQSHRNT, - UNSPEC_UQSHRNT, -1)) -FUNCTION (svqshrunb, unspec_based_function, (UNSPEC_SQSHRUNB, -1, -1)) -FUNCTION (svqshrunt, unspec_based_function, (UNSPEC_SQSHRUNT, -1, -1)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: FUNCTION (svmlslt, unspec_based -FUNCTION (svqxtnt, unspec_based_function, (UNSPEC_SQXTNT, UNSPEC_UQXTNT, -1)) -FUNCTION (svqxtunb, unspec_based_function, (UNSPEC_SQXTUNB, -1, -1)) -FUNCTION (svqxtunt, unspec_based_function, (UNSPEC_SQXTUNT, -1, -1)) --FUNCTION (svraddhnb, unspec_based_function, (UNSPEC_RADDHNB, ++ UNSPEC_UQSHRNT, UNSPEC_NONE)) ++FUNCTION (svqshrunb, unspec_based_function, (UNSPEC_SQSHRUNB, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqshrunt, unspec_based_function, (UNSPEC_SQSHRUNT, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqsubr, rtx_code_function_rotated, (SS_MINUS, US_MINUS, UNSPEC_NONE)) ++FUNCTION (svqxtnb, unspec_based_function, (UNSPEC_SQXTNB, UNSPEC_UQXTNB, UNSPEC_NONE)) ++FUNCTION (svqxtnt, unspec_based_function, (UNSPEC_SQXTNT, UNSPEC_UQXTNT, UNSPEC_NONE)) ++FUNCTION (svqxtunb, unspec_based_function, (UNSPEC_SQXTUNB, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svqxtunt, unspec_based_function, (UNSPEC_SQXTUNT, UNSPEC_NONE, UNSPEC_NONE)) + FUNCTION (svraddhnb, unspec_based_function, (UNSPEC_RADDHNB, - UNSPEC_RADDHNB, -1)) --FUNCTION (svraddhnt, unspec_based_function, (UNSPEC_RADDHNT, ++ UNSPEC_RADDHNB, UNSPEC_NONE)) + FUNCTION (svraddhnt, unspec_based_function, (UNSPEC_RADDHNT, - UNSPEC_RADDHNT, -1)) -+FUNCTION (svqshlu, unspec_based_function, (UNSPEC_SQSHLU)) -+FUNCTION (svqshrnb, unspec_based_function, (UNSPEC_SQSHRNB, UNSPEC_UQSHRNB)) -+FUNCTION (svqshrnt, unspec_based_function, (UNSPEC_SQSHRNT, UNSPEC_UQSHRNT)) -+FUNCTION (svqshrunb, unspec_based_function, (UNSPEC_SQSHRUNB)) -+FUNCTION (svqshrunt, unspec_based_function, (UNSPEC_SQSHRUNT)) -+FUNCTION (svqsubr, rtx_code_function_rotated, (SS_MINUS, US_MINUS)) -+FUNCTION (svqxtnb, unspec_based_function, (UNSPEC_SQXTNB, UNSPEC_UQXTNB)) -+FUNCTION (svqxtnt, unspec_based_function, (UNSPEC_SQXTNT, UNSPEC_UQXTNT)) -+FUNCTION (svqxtunb, unspec_based_function, (UNSPEC_SQXTUNB)) -+FUNCTION (svqxtunt, unspec_based_function, (UNSPEC_SQXTUNT)) -+FUNCTION (svraddhnb, unspec_based_function, (UNSPEC_RADDHNB, UNSPEC_RADDHNB)) -+FUNCTION (svraddhnt, unspec_based_function, (UNSPEC_RADDHNT, UNSPEC_RADDHNT)) ++ UNSPEC_RADDHNT, UNSPEC_NONE)) FUNCTION (svrax1, fixed_insn_function, (CODE_FOR_aarch64_sve2_rax1)) FUNCTION (svrevd, unspec_based_function, (UNSPEC_REVD, UNSPEC_REVD, UNSPEC_REVD)) -FUNCTION (svrhadd, unspec_based_function, (UNSPEC_SRHADD, UNSPEC_URHADD, -1)) -+FUNCTION (svrhadd, unspec_based_function, (UNSPEC_SRHADD, UNSPEC_URHADD)) ++FUNCTION (svrhadd, unspec_based_function, (UNSPEC_SRHADD, UNSPEC_URHADD, UNSPEC_NONE)) FUNCTION (svrshl, svrshl_impl,) -FUNCTION (svrshr, unspec_based_function, (UNSPEC_SRSHR, UNSPEC_URSHR, -1)) -FUNCTION (svrshrnb, unspec_based_function, (UNSPEC_RSHRNB, UNSPEC_RSHRNB, -1)) -FUNCTION (svrshrnt, unspec_based_function, (UNSPEC_RSHRNT, UNSPEC_RSHRNT, -1)) -FUNCTION (svrsra, unspec_based_add_function, (UNSPEC_SRSHR, UNSPEC_URSHR, -1)) --FUNCTION (svrsubhnb, unspec_based_function, (UNSPEC_RSUBHNB, ++FUNCTION (svrshr, unspec_based_function, (UNSPEC_SRSHR, UNSPEC_URSHR, UNSPEC_NONE)) ++FUNCTION (svrshrnb, unspec_based_function, (UNSPEC_RSHRNB, UNSPEC_RSHRNB, UNSPEC_NONE)) ++FUNCTION (svrshrnt, unspec_based_function, (UNSPEC_RSHRNT, UNSPEC_RSHRNT, UNSPEC_NONE)) ++FUNCTION (svrsra, unspec_based_add_function, (UNSPEC_SRSHR, UNSPEC_URSHR, UNSPEC_NONE)) + FUNCTION (svrsubhnb, unspec_based_function, (UNSPEC_RSUBHNB, - UNSPEC_RSUBHNB, -1)) --FUNCTION (svrsubhnt, unspec_based_function, (UNSPEC_RSUBHNT, ++ UNSPEC_RSUBHNB, UNSPEC_NONE)) + FUNCTION (svrsubhnt, unspec_based_function, (UNSPEC_RSUBHNT, - UNSPEC_RSUBHNT, -1)) -FUNCTION (svsbclb, unspec_based_function, (-1, UNSPEC_SBCLB, -1)) -FUNCTION (svsbclt, unspec_based_function, (-1, UNSPEC_SBCLT, -1)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: FUNCTION (svmlslt, unspec_based -FUNCTION (svshrnb, unspec_based_function, (UNSPEC_SHRNB, UNSPEC_SHRNB, -1)) -FUNCTION (svshrnt, unspec_based_function, (UNSPEC_SHRNT, UNSPEC_SHRNT, -1)) -FUNCTION (svsli, unspec_based_function, (UNSPEC_SLI, UNSPEC_SLI, -1)) -+FUNCTION (svrshr, unspec_based_function, (UNSPEC_SRSHR, UNSPEC_URSHR)) -+FUNCTION (svrshrnb, unspec_based_function, (UNSPEC_RSHRNB, UNSPEC_RSHRNB)) -+FUNCTION (svrshrnt, unspec_based_function, (UNSPEC_RSHRNT, UNSPEC_RSHRNT)) -+FUNCTION (svrsra, unspec_based_add_function, (UNSPEC_SRSHR, UNSPEC_URSHR)) -+FUNCTION (svrsubhnb, unspec_based_function, (UNSPEC_RSUBHNB, UNSPEC_RSUBHNB)) -+FUNCTION (svrsubhnt, unspec_based_function, (UNSPEC_RSUBHNT, UNSPEC_RSUBHNT)) -+FUNCTION (svsbclb, unspec_based_function, (UNSPEC_NONE, UNSPEC_SBCLB)) -+FUNCTION (svsbclt, unspec_based_function, (UNSPEC_NONE, UNSPEC_SBCLT)) -+FUNCTION (svshllb, unspec_based_function, (UNSPEC_SSHLLB, UNSPEC_USHLLB)) -+FUNCTION (svshllt, unspec_based_function, (UNSPEC_SSHLLT, UNSPEC_USHLLT)) -+FUNCTION (svshrnb, unspec_based_function, (UNSPEC_SHRNB, UNSPEC_SHRNB)) -+FUNCTION (svshrnt, unspec_based_function, (UNSPEC_SHRNT, UNSPEC_SHRNT)) -+FUNCTION (svsli, unspec_based_function, (UNSPEC_SLI, UNSPEC_SLI)) ++ UNSPEC_RSUBHNT, UNSPEC_NONE)) ++FUNCTION (svsbclb, unspec_based_function, (UNSPEC_NONE, UNSPEC_SBCLB, UNSPEC_NONE)) ++FUNCTION (svsbclt, unspec_based_function, (UNSPEC_NONE, UNSPEC_SBCLT, UNSPEC_NONE)) ++FUNCTION (svshllb, unspec_based_function, (UNSPEC_SSHLLB, UNSPEC_USHLLB, UNSPEC_NONE)) ++FUNCTION (svshllt, unspec_based_function, (UNSPEC_SSHLLT, UNSPEC_USHLLT, UNSPEC_NONE)) ++FUNCTION (svshrnb, unspec_based_function, (UNSPEC_SHRNB, UNSPEC_SHRNB, UNSPEC_NONE)) ++FUNCTION (svshrnt, unspec_based_function, (UNSPEC_SHRNT, UNSPEC_SHRNT, UNSPEC_NONE)) ++FUNCTION (svsli, unspec_based_function, (UNSPEC_SLI, UNSPEC_SLI, UNSPEC_NONE)) FUNCTION (svsm4e, fixed_insn_function, (CODE_FOR_aarch64_sve2_sm4e)) FUNCTION (svsm4ekey, fixed_insn_function, (CODE_FOR_aarch64_sve2_sm4ekey)) FUNCTION (svsqadd, svsqadd_impl,) FUNCTION (svsra, svsra_impl,) -FUNCTION (svsri, unspec_based_function, (UNSPEC_SRI, UNSPEC_SRI, -1)) -+FUNCTION (svsri, unspec_based_function, (UNSPEC_SRI, UNSPEC_SRI)) ++FUNCTION (svsri, unspec_based_function, (UNSPEC_SRI, UNSPEC_SRI, UNSPEC_NONE)) FUNCTION (svst1dq, svst1xq_impl, (VNx1DImode)) FUNCTION (svst1q_scatter, svst1q_scatter_impl,) FUNCTION (svst1wq, svst1xq_impl, (VNx1SImode)) @@ gcc/config/aarch64/aarch64-sve-builtins-sve2.cc: FUNCTION (svstnt1_scatter, svst -FUNCTION (svsubltb, unspec_based_function, (UNSPEC_SSUBLTB, -1, -1)) -FUNCTION (svsubwb, unspec_based_function, (UNSPEC_SSUBWB, UNSPEC_USUBWB, -1)) -FUNCTION (svsubwt, unspec_based_function, (UNSPEC_SSUBWT, UNSPEC_USUBWT, -1)) -+FUNCTION (svsubhnb, unspec_based_function, (UNSPEC_SUBHNB, UNSPEC_SUBHNB)) -+FUNCTION (svsubhnt, unspec_based_function, (UNSPEC_SUBHNT, UNSPEC_SUBHNT)) -+FUNCTION (svsublb, unspec_based_function, (UNSPEC_SSUBLB, UNSPEC_USUBLB)) -+FUNCTION (svsublbt, unspec_based_function, (UNSPEC_SSUBLBT)) -+FUNCTION (svsublt, unspec_based_function, (UNSPEC_SSUBLT, UNSPEC_USUBLT)) -+FUNCTION (svsubltb, unspec_based_function, (UNSPEC_SSUBLTB)) -+FUNCTION (svsubwb, unspec_based_function, (UNSPEC_SSUBWB, UNSPEC_USUBWB)) -+FUNCTION (svsubwt, unspec_based_function, (UNSPEC_SSUBWT, UNSPEC_USUBWT)) ++FUNCTION (svsubhnb, unspec_based_function, (UNSPEC_SUBHNB, UNSPEC_SUBHNB, UNSPEC_NONE)) ++FUNCTION (svsubhnt, unspec_based_function, (UNSPEC_SUBHNT, UNSPEC_SUBHNT, UNSPEC_NONE)) ++FUNCTION (svsublb, unspec_based_function, (UNSPEC_SSUBLB, UNSPEC_USUBLB, UNSPEC_NONE)) ++FUNCTION (svsublbt, unspec_based_function, (UNSPEC_SSUBLBT, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svsublt, unspec_based_function, (UNSPEC_SSUBLT, UNSPEC_USUBLT, UNSPEC_NONE)) ++FUNCTION (svsubltb, unspec_based_function, (UNSPEC_SSUBLTB, UNSPEC_NONE, UNSPEC_NONE)) ++FUNCTION (svsubwb, unspec_based_function, (UNSPEC_SSUBWB, UNSPEC_USUBWB, UNSPEC_NONE)) ++FUNCTION (svsubwt, unspec_based_function, (UNSPEC_SSUBWT, UNSPEC_USUBWT, UNSPEC_NONE)) FUNCTION (svtbl2, svtbl2_impl,) FUNCTION (svtblq, quiet<unspec_based_uncond_function>, (UNSPEC_TBLQ, UNSPEC_TBLQ, @@ gcc/config/aarch64/aarch64-sve-builtins.cc: function_expander::use_contiguous_st rtx_code code_for_uint, - int unspec_for_cond_fp, - int unspec_for_uncond_fp, -+ enum unspec unspec_for_cond_fp, -+ enum unspec unspec_for_uncond_fp, ++ unspec unspec_for_cond_fp, ++ unspec unspec_for_uncond_fp, unsigned int merge_argno) { machine_mode mode = tuple_mode (0); @@ gcc/config/aarch64/aarch64-sve-builtins.cc: function_expander::map_to_rtx_codes rtx -function_expander::map_to_unspecs (int unspec_for_sint, int unspec_for_uint, - int unspec_for_fp, unsigned int merge_argno) -+function_expander::map_to_unspecs (enum unspec unspec_for_sint, -+ enum unspec unspec_for_uint, -+ enum unspec unspec_for_fp, ++function_expander::map_to_unspecs (unspec unspec_for_sint, ++ unspec unspec_for_uint, unspec unspec_for_fp, + unsigned int merge_argno) { machine_mode mode = tuple_mode (0); - int unspec = (!type_suffix (0).integer_p ? unspec_for_fp - : type_suffix (0).unsigned_p ? unspec_for_uint - : unspec_for_sint); -+ enum unspec unspec = (!type_suffix (0).integer_p ? unspec_for_fp -+ : type_suffix (0).unsigned_p ? unspec_for_uint -+ : unspec_for_sint); ++ unspec unspec = (!type_suffix (0).integer_p ? unspec_for_fp ++ : type_suffix (0).unsigned_p ? unspec_for_uint ++ : unspec_for_sint); if (mode_suffix_id == MODE_single) { @@ gcc/config/aarch64/aarch64-sve-builtins.h: public: rtx use_contiguous_store_insn (insn_code); - rtx map_to_rtx_codes (rtx_code, rtx_code, int, int, -+ rtx map_to_rtx_codes (rtx_code, rtx_code, -+ enum unspec = UNSPEC_NONE, -+ enum unspec = UNSPEC_NONE, ++ rtx map_to_rtx_codes (rtx_code, rtx_code, unspec, unspec, unsigned int = DEFAULT_MERGE_ARGNO); - rtx map_to_unspecs (int, int, int, unsigned int = DEFAULT_MERGE_ARGNO); -+ rtx map_to_unspecs (enum unspec, -+ enum unspec = UNSPEC_NONE, -+ enum unspec = UNSPEC_NONE, -+ unsigned int = DEFAULT_MERGE_ARGNO); ++ rtx map_to_unspecs (unspec, unspec, unspec, unsigned int = DEFAULT_MERGE_ARGNO); /* The function call expression. */ tree call_expr; @@ gcc/config/aarch64/aarch64.cc: aarch64_replace_reg_mode (rtx x, machine_mode mod stored in wider integer containers. */ -static unsigned int -+static enum unspec ++static unspec aarch64_sve_rev_unspec (machine_mode mode) { switch (GET_MODE_UNIT_SIZE (mode)) @@ gcc/config/aarch64/aarch64.cc: aarch64_split_sve_subreg_move (rtx dest, rtx ptru std::swap (mode_with_wider_elts, mode_with_narrower_elts); - unsigned int unspec = aarch64_sve_rev_unspec (mode_with_narrower_elts); -+ enum unspec unspec = aarch64_sve_rev_unspec (mode_with_narrower_elts); ++ unspec unspec = aarch64_sve_rev_unspec (mode_with_narrower_elts); machine_mode pred_mode = aarch64_sve_pred_mode (mode_with_wider_elts); /* Get the operands in the appropriate modes and emit the instruction. */ @@ gcc/config/aarch64/aarch64.cc: aarch_pac_insn_p (rtx x) if (sub && GET_CODE (sub) == UNSPEC) { - int unspec_val = XINT (sub, 1); -+ enum unspec unspec_val = (enum unspec)XINT (sub, 1); ++ unspec unspec_val = (unspec) XINT (sub, 1); switch (unspec_val) { case UNSPEC_PACIASP: @@ gcc/config/aarch64/aarch64.cc: aarch64_evpc_hvla (struct expand_vec_perm_d *d) /* Used once we have verified that we can use UNSPEC to do the operation. */ - auto use_binary = [&](int unspec) -> bool -+ auto use_binary = [&](enum unspec unspec) -> bool ++ auto use_binary = [&](unspec unspec) -> bool { if (!d->testing_p) { -: ------------ > 9: ccda394d17cf aarch64: Replace `UNSPEC_NONE` with optional arguments where possible -- 2.52.0
