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

Reply via email to