Home | History | Annotate | Line # | Download | only in aarch64
aarch64-simd-builtins.def revision 1.1.1.2
      1      1.1  mrg /* Machine description for AArch64 architecture.
      2  1.1.1.2  mrg    Copyright (C) 2012-2015 Free Software Foundation, Inc.
      3      1.1  mrg    Contributed by ARM Ltd.
      4      1.1  mrg 
      5      1.1  mrg    This file is part of GCC.
      6      1.1  mrg 
      7      1.1  mrg    GCC is free software; you can redistribute it and/or modify it
      8      1.1  mrg    under the terms of the GNU General Public License as published by
      9      1.1  mrg    the Free Software Foundation; either version 3, or (at your option)
     10      1.1  mrg    any later version.
     11      1.1  mrg 
     12      1.1  mrg    GCC is distributed in the hope that it will be useful, but
     13      1.1  mrg    WITHOUT ANY WARRANTY; without even the implied warranty of
     14      1.1  mrg    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     15      1.1  mrg    General Public License for more details.
     16      1.1  mrg 
     17      1.1  mrg    You should have received a copy of the GNU General Public License
     18      1.1  mrg    along with GCC; see the file COPYING3.  If not see
     19      1.1  mrg    <http://www.gnu.org/licenses/>.  */
     20      1.1  mrg 
     21  1.1.1.2  mrg /* In the list below, the BUILTIN_<ITERATOR> macros expand to create
     22  1.1.1.2  mrg    builtins for each of the modes described by <ITERATOR>.  When adding
     23  1.1.1.2  mrg    new builtins to this list, a helpful idiom to follow is to add
     24  1.1.1.2  mrg    a line for each pattern in the md file.  Thus, ADDP, which has one
     25  1.1.1.2  mrg    pattern defined for the VD_BHSI iterator, and one for DImode, has two
     26  1.1.1.2  mrg    entries below.
     27  1.1.1.2  mrg 
     28  1.1.1.2  mrg    Parameter 1 is the 'type' of the intrinsic.  This is used to
     29  1.1.1.2  mrg    describe the type modifiers (for example; unsigned) applied to
     30  1.1.1.2  mrg    each of the parameters to the intrinsic function.
     31  1.1.1.2  mrg 
     32  1.1.1.2  mrg    Parameter 2 is the name of the intrinsic.  This is appended
     33  1.1.1.2  mrg    to `__builtin_aarch64_<name><mode>` to give the intrinsic name
     34  1.1.1.2  mrg    as exported to the front-ends.
     35  1.1.1.2  mrg 
     36  1.1.1.2  mrg    Parameter 3 describes how to map from the name to the CODE_FOR_
     37  1.1.1.2  mrg    macro holding the RTL pattern for the intrinsic.  This mapping is:
     38  1.1.1.2  mrg    0 - CODE_FOR_aarch64_<name><mode>
     39  1.1.1.2  mrg    1-9 - CODE_FOR_<name><mode><1-9>
     40  1.1.1.2  mrg    10 - CODE_FOR_<name><mode>.  */
     41  1.1.1.2  mrg 
     42  1.1.1.2  mrg   BUILTIN_VDC (COMBINE, combine, 0)
     43  1.1.1.2  mrg   BUILTIN_VB (BINOP, pmul, 0)
     44  1.1.1.2  mrg   BUILTIN_VDQF_DF (UNOP, sqrt, 2)
     45  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, addp, 0)
     46  1.1.1.2  mrg   VAR1 (UNOP, addp, 0, di)
     47  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (UNOP, clrsb, 2)
     48  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (UNOP, clz, 2)
     49  1.1.1.2  mrg   BUILTIN_VS (UNOP, ctz, 2)
     50  1.1.1.2  mrg   BUILTIN_VB (UNOP, popcount, 2)
     51      1.1  mrg 
     52      1.1  mrg   /* Implemented by aarch64_<sur>q<r>shl<mode>.  */
     53  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOP, sqshl, 0)
     54  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOP_UUS, uqshl, 0)
     55  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOP, sqrshl, 0)
     56  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOP_UUS, uqrshl, 0)
     57      1.1  mrg   /* Implemented by aarch64_<su_optab><optab><mode>.  */
     58  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOP, sqadd, 0)
     59  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOPU, uqadd, 0)
     60  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOP, sqsub, 0)
     61  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOPU, uqsub, 0)
     62      1.1  mrg   /* Implemented by aarch64_<sur>qadd<mode>.  */
     63  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOP_SSU, suqadd, 0)
     64  1.1.1.2  mrg   BUILTIN_VSDQ_I (BINOP_UUS, usqadd, 0)
     65      1.1  mrg 
     66      1.1  mrg   /* Implemented by aarch64_get_dreg<VSTRUCT:mode><VDC:mode>.  */
     67  1.1.1.2  mrg   BUILTIN_VDC (GETREG, get_dregoi, 0)
     68  1.1.1.2  mrg   BUILTIN_VDC (GETREG, get_dregci, 0)
     69  1.1.1.2  mrg   BUILTIN_VDC (GETREG, get_dregxi, 0)
     70      1.1  mrg   /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>.  */
     71  1.1.1.2  mrg   BUILTIN_VQ (GETREG, get_qregoi, 0)
     72  1.1.1.2  mrg   BUILTIN_VQ (GETREG, get_qregci, 0)
     73  1.1.1.2  mrg   BUILTIN_VQ (GETREG, get_qregxi, 0)
     74      1.1  mrg   /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>.  */
     75  1.1.1.2  mrg   BUILTIN_VQ (SETREG, set_qregoi, 0)
     76  1.1.1.2  mrg   BUILTIN_VQ (SETREG, set_qregci, 0)
     77  1.1.1.2  mrg   BUILTIN_VQ (SETREG, set_qregxi, 0)
     78      1.1  mrg   /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>.  */
     79  1.1.1.2  mrg   BUILTIN_VDC (LOADSTRUCT, ld2, 0)
     80  1.1.1.2  mrg   BUILTIN_VDC (LOADSTRUCT, ld3, 0)
     81  1.1.1.2  mrg   BUILTIN_VDC (LOADSTRUCT, ld4, 0)
     82      1.1  mrg   /* Implemented by aarch64_ld<VSTRUCT:nregs><VQ:mode>.  */
     83  1.1.1.2  mrg   BUILTIN_VQ (LOADSTRUCT, ld2, 0)
     84  1.1.1.2  mrg   BUILTIN_VQ (LOADSTRUCT, ld3, 0)
     85  1.1.1.2  mrg   BUILTIN_VQ (LOADSTRUCT, ld4, 0)
     86  1.1.1.2  mrg   /* Implemented by aarch64_ld<VSTRUCT:nregs>r<VALLDIF:mode>.  */
     87  1.1.1.2  mrg   BUILTIN_VALLDIF (LOADSTRUCT, ld2r, 0)
     88  1.1.1.2  mrg   BUILTIN_VALLDIF (LOADSTRUCT, ld3r, 0)
     89  1.1.1.2  mrg   BUILTIN_VALLDIF (LOADSTRUCT, ld4r, 0)
     90  1.1.1.2  mrg   /* Implemented by aarch64_ld<VSTRUCT:nregs>_lane<VQ:mode>.  */
     91  1.1.1.2  mrg   BUILTIN_VQ (LOADSTRUCT_LANE, ld2_lane, 0)
     92  1.1.1.2  mrg   BUILTIN_VQ (LOADSTRUCT_LANE, ld3_lane, 0)
     93  1.1.1.2  mrg   BUILTIN_VQ (LOADSTRUCT_LANE, ld4_lane, 0)
     94      1.1  mrg   /* Implemented by aarch64_st<VSTRUCT:nregs><VDC:mode>.  */
     95  1.1.1.2  mrg   BUILTIN_VDC (STORESTRUCT, st2, 0)
     96  1.1.1.2  mrg   BUILTIN_VDC (STORESTRUCT, st3, 0)
     97  1.1.1.2  mrg   BUILTIN_VDC (STORESTRUCT, st4, 0)
     98      1.1  mrg   /* Implemented by aarch64_st<VSTRUCT:nregs><VQ:mode>.  */
     99  1.1.1.2  mrg   BUILTIN_VQ (STORESTRUCT, st2, 0)
    100  1.1.1.2  mrg   BUILTIN_VQ (STORESTRUCT, st3, 0)
    101  1.1.1.2  mrg   BUILTIN_VQ (STORESTRUCT, st4, 0)
    102  1.1.1.2  mrg 
    103  1.1.1.2  mrg   BUILTIN_VQ (STORESTRUCT_LANE, st2_lane, 0)
    104  1.1.1.2  mrg   BUILTIN_VQ (STORESTRUCT_LANE, st3_lane, 0)
    105  1.1.1.2  mrg   BUILTIN_VQ (STORESTRUCT_LANE, st4_lane, 0)
    106  1.1.1.2  mrg 
    107  1.1.1.2  mrg   BUILTIN_VQW (BINOP, saddl2, 0)
    108  1.1.1.2  mrg   BUILTIN_VQW (BINOP, uaddl2, 0)
    109  1.1.1.2  mrg   BUILTIN_VQW (BINOP, ssubl2, 0)
    110  1.1.1.2  mrg   BUILTIN_VQW (BINOP, usubl2, 0)
    111  1.1.1.2  mrg   BUILTIN_VQW (BINOP, saddw2, 0)
    112  1.1.1.2  mrg   BUILTIN_VQW (BINOP, uaddw2, 0)
    113  1.1.1.2  mrg   BUILTIN_VQW (BINOP, ssubw2, 0)
    114  1.1.1.2  mrg   BUILTIN_VQW (BINOP, usubw2, 0)
    115      1.1  mrg   /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>.  */
    116  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, saddl, 0)
    117  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, uaddl, 0)
    118  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, ssubl, 0)
    119  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, usubl, 0)
    120      1.1  mrg   /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>.  */
    121  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, saddw, 0)
    122  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, uaddw, 0)
    123  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, ssubw, 0)
    124  1.1.1.2  mrg   BUILTIN_VD_BHSI (BINOP, usubw, 0)
    125      1.1  mrg   /* Implemented by aarch64_<sur>h<addsub><mode>.  */
    126  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, shadd, 0)
    127  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, shsub, 0)
    128  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, uhadd, 0)
    129  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, uhsub, 0)
    130  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, srhadd, 0)
    131  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, urhadd, 0)
    132      1.1  mrg   /* Implemented by aarch64_<sur><addsub>hn<mode>.  */
    133  1.1.1.2  mrg   BUILTIN_VQN (BINOP, addhn, 0)
    134  1.1.1.2  mrg   BUILTIN_VQN (BINOP, subhn, 0)
    135  1.1.1.2  mrg   BUILTIN_VQN (BINOP, raddhn, 0)
    136  1.1.1.2  mrg   BUILTIN_VQN (BINOP, rsubhn, 0)
    137      1.1  mrg   /* Implemented by aarch64_<sur><addsub>hn2<mode>.  */
    138  1.1.1.2  mrg   BUILTIN_VQN (TERNOP, addhn2, 0)
    139  1.1.1.2  mrg   BUILTIN_VQN (TERNOP, subhn2, 0)
    140  1.1.1.2  mrg   BUILTIN_VQN (TERNOP, raddhn2, 0)
    141  1.1.1.2  mrg   BUILTIN_VQN (TERNOP, rsubhn2, 0)
    142      1.1  mrg 
    143  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (UNOP, sqmovun, 0)
    144      1.1  mrg   /* Implemented by aarch64_<sur>qmovn<mode>.  */
    145  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (UNOP, sqmovn, 0)
    146  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (UNOP, uqmovn, 0)
    147      1.1  mrg   /* Implemented by aarch64_s<optab><mode>.  */
    148  1.1.1.2  mrg   BUILTIN_VSDQ_I (UNOP, sqabs, 0)
    149  1.1.1.2  mrg   BUILTIN_VSDQ_I (UNOP, sqneg, 0)
    150      1.1  mrg 
    151      1.1  mrg   /* Implemented by aarch64_sqdml<SBINQOPS:as>l<mode>.  */
    152  1.1.1.2  mrg   BUILTIN_VSD_HSI (TERNOP, sqdmlal, 0)
    153  1.1.1.2  mrg   BUILTIN_VSD_HSI (TERNOP, sqdmlsl, 0)
    154  1.1.1.2  mrg   /* Implemented by aarch64_sqdml<SBINQOPS:as>l_lane<mode>.  */
    155  1.1.1.2  mrg   BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlal_lane, 0)
    156  1.1.1.2  mrg   BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlsl_lane, 0)
    157  1.1.1.2  mrg   /* Implemented by aarch64_sqdml<SBINQOPS:as>l_laneq<mode>.  */
    158  1.1.1.2  mrg   BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlal_laneq, 0)
    159  1.1.1.2  mrg   BUILTIN_VSD_HSI (QUADOP_LANE, sqdmlsl_laneq, 0)
    160      1.1  mrg   /* Implemented by aarch64_sqdml<SBINQOPS:as>l_n<mode>.  */
    161  1.1.1.2  mrg   BUILTIN_VD_HSI (TERNOP, sqdmlal_n, 0)
    162  1.1.1.2  mrg   BUILTIN_VD_HSI (TERNOP, sqdmlsl_n, 0)
    163      1.1  mrg 
    164  1.1.1.2  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmlal2, 0)
    165  1.1.1.2  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmlsl2, 0)
    166  1.1.1.2  mrg   BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlal2_lane, 0)
    167  1.1.1.2  mrg   BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlsl2_lane, 0)
    168  1.1.1.2  mrg   BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlal2_laneq, 0)
    169  1.1.1.2  mrg   BUILTIN_VQ_HSI (QUADOP_LANE, sqdmlsl2_laneq, 0)
    170  1.1.1.2  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmlal2_n, 0)
    171  1.1.1.2  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmlsl2_n, 0)
    172  1.1.1.2  mrg 
    173  1.1.1.2  mrg   BUILTIN_VSD_HSI (BINOP, sqdmull, 0)
    174  1.1.1.2  mrg   BUILTIN_VSD_HSI (TERNOP_LANE, sqdmull_lane, 0)
    175  1.1.1.2  mrg   BUILTIN_VSD_HSI (TERNOP_LANE, sqdmull_laneq, 0)
    176  1.1.1.2  mrg   BUILTIN_VD_HSI (BINOP, sqdmull_n, 0)
    177  1.1.1.2  mrg   BUILTIN_VQ_HSI (BINOP, sqdmull2, 0)
    178  1.1.1.2  mrg   BUILTIN_VQ_HSI (TERNOP_LANE, sqdmull2_lane, 0)
    179  1.1.1.2  mrg   BUILTIN_VQ_HSI (TERNOP_LANE, sqdmull2_laneq, 0)
    180  1.1.1.2  mrg   BUILTIN_VQ_HSI (BINOP, sqdmull2_n, 0)
    181      1.1  mrg   /* Implemented by aarch64_sq<r>dmulh<mode>.  */
    182  1.1.1.2  mrg   BUILTIN_VSDQ_HSI (BINOP, sqdmulh, 0)
    183  1.1.1.2  mrg   BUILTIN_VSDQ_HSI (BINOP, sqrdmulh, 0)
    184      1.1  mrg   /* Implemented by aarch64_sq<r>dmulh_lane<q><mode>.  */
    185  1.1.1.2  mrg   BUILTIN_VSDQ_HSI (TERNOP_LANE, sqdmulh_lane, 0)
    186  1.1.1.2  mrg   BUILTIN_VSDQ_HSI (TERNOP_LANE, sqdmulh_laneq, 0)
    187  1.1.1.2  mrg   BUILTIN_VSDQ_HSI (TERNOP_LANE, sqrdmulh_lane, 0)
    188  1.1.1.2  mrg   BUILTIN_VSDQ_HSI (TERNOP_LANE, sqrdmulh_laneq, 0)
    189      1.1  mrg 
    190  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (BINOP, ashl, 3)
    191      1.1  mrg   /* Implemented by aarch64_<sur>shl<mode>.  */
    192  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (BINOP, sshl, 0)
    193  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (BINOP_UUS, ushl, 0)
    194  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (BINOP, srshl, 0)
    195  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (BINOP_UUS, urshl, 0)
    196  1.1.1.2  mrg 
    197  1.1.1.2  mrg   BUILTIN_VDQ_I (SHIFTIMM, ashr, 3)
    198  1.1.1.2  mrg   VAR1 (SHIFTIMM, ashr_simd, 0, di)
    199  1.1.1.2  mrg   BUILTIN_VDQ_I (SHIFTIMM, lshr, 3)
    200  1.1.1.2  mrg   VAR1 (USHIFTIMM, lshr_simd, 0, di)
    201      1.1  mrg   /* Implemented by aarch64_<sur>shr_n<mode>.  */
    202  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n, 0)
    203  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (USHIFTIMM, urshr_n, 0)
    204      1.1  mrg   /* Implemented by aarch64_<sur>sra_n<mode>.  */
    205  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n, 0)
    206  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (USHIFTACC, usra_n, 0)
    207  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n, 0)
    208  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (USHIFTACC, ursra_n, 0)
    209      1.1  mrg   /* Implemented by aarch64_<sur>shll_n<mode>.  */
    210  1.1.1.2  mrg   BUILTIN_VD_BHSI (SHIFTIMM, sshll_n, 0)
    211  1.1.1.2  mrg   BUILTIN_VD_BHSI (USHIFTIMM, ushll_n, 0)
    212      1.1  mrg   /* Implemented by aarch64_<sur>shll2_n<mode>.  */
    213  1.1.1.2  mrg   BUILTIN_VQW (SHIFTIMM, sshll2_n, 0)
    214  1.1.1.2  mrg   BUILTIN_VQW (SHIFTIMM, ushll2_n, 0)
    215      1.1  mrg   /* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>.  */
    216  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n, 0)
    217  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n, 0)
    218  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrn_n, 0)
    219  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (USHIFTIMM, uqshrn_n, 0)
    220  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrn_n, 0)
    221  1.1.1.2  mrg   BUILTIN_VSQN_HSDI (USHIFTIMM, uqrshrn_n, 0)
    222      1.1  mrg   /* Implemented by aarch64_<sur>s<lr>i_n<mode>.  */
    223  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n, 0)
    224  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (USHIFTACC, usri_n, 0)
    225  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n, 0)
    226  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (USHIFTACC, usli_n, 0)
    227      1.1  mrg   /* Implemented by aarch64_<sur>qshl<u>_n<mode>.  */
    228  1.1.1.2  mrg   BUILTIN_VSDQ_I (SHIFTIMM_USS, sqshlu_n, 0)
    229  1.1.1.2  mrg   BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n, 0)
    230  1.1.1.2  mrg   BUILTIN_VSDQ_I (USHIFTIMM, uqshl_n, 0)
    231  1.1.1.2  mrg 
    232  1.1.1.2  mrg   /* Implemented by aarch64_reduc_plus_<mode>.  */
    233  1.1.1.2  mrg   BUILTIN_VALL (UNOP, reduc_plus_scal_, 10)
    234  1.1.1.2  mrg 
    235  1.1.1.2  mrg   /* Implemented by reduc_<maxmin_uns>_scal_<mode> (producing scalar).  */
    236  1.1.1.2  mrg   BUILTIN_VDQIF (UNOP, reduc_smax_scal_, 10)
    237  1.1.1.2  mrg   BUILTIN_VDQIF (UNOP, reduc_smin_scal_, 10)
    238  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (UNOPU, reduc_umax_scal_, 10)
    239  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (UNOPU, reduc_umin_scal_, 10)
    240  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, reduc_smax_nan_scal_, 10)
    241  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, reduc_smin_nan_scal_, 10)
    242  1.1.1.2  mrg 
    243  1.1.1.2  mrg   /* Implemented by <maxmin><mode>3.
    244  1.1.1.2  mrg      smax variants map to fmaxnm,
    245  1.1.1.2  mrg      smax_nan variants map to fmax.  */
    246  1.1.1.2  mrg   BUILTIN_VDQIF (BINOP, smax, 3)
    247  1.1.1.2  mrg   BUILTIN_VDQIF (BINOP, smin, 3)
    248  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, umax, 3)
    249  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, umin, 3)
    250  1.1.1.2  mrg   BUILTIN_VDQF (BINOP, smax_nan, 3)
    251  1.1.1.2  mrg   BUILTIN_VDQF (BINOP, smin_nan, 3)
    252  1.1.1.2  mrg 
    253  1.1.1.2  mrg   /* Implemented by aarch64_<maxmin_uns>p<mode>.  */
    254  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, smaxp, 0)
    255  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, sminp, 0)
    256  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, umaxp, 0)
    257  1.1.1.2  mrg   BUILTIN_VDQ_BHSI (BINOP, uminp, 0)
    258  1.1.1.2  mrg   BUILTIN_VDQF (BINOP, smaxp, 0)
    259  1.1.1.2  mrg   BUILTIN_VDQF (BINOP, sminp, 0)
    260  1.1.1.2  mrg   BUILTIN_VDQF (BINOP, smax_nanp, 0)
    261  1.1.1.2  mrg   BUILTIN_VDQF (BINOP, smin_nanp, 0)
    262  1.1.1.2  mrg 
    263  1.1.1.2  mrg   /* Implemented by <frint_pattern><mode>2.  */
    264  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, btrunc, 2)
    265  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, ceil, 2)
    266  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, floor, 2)
    267  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, nearbyint, 2)
    268  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, rint, 2)
    269  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, round, 2)
    270  1.1.1.2  mrg   BUILTIN_VDQF_DF (UNOP, frintn, 2)
    271  1.1.1.2  mrg 
    272  1.1.1.2  mrg   /* Implemented by l<fcvt_pattern><su_optab><VQDF:mode><vcvt_target>2.  */
    273  1.1.1.2  mrg   VAR1 (UNOP, lbtruncv2sf, 2, v2si)
    274  1.1.1.2  mrg   VAR1 (UNOP, lbtruncv4sf, 2, v4si)
    275  1.1.1.2  mrg   VAR1 (UNOP, lbtruncv2df, 2, v2di)
    276  1.1.1.2  mrg 
    277  1.1.1.2  mrg   VAR1 (UNOP, lbtruncuv2sf, 2, v2si)
    278  1.1.1.2  mrg   VAR1 (UNOP, lbtruncuv4sf, 2, v4si)
    279  1.1.1.2  mrg   VAR1 (UNOP, lbtruncuv2df, 2, v2di)
    280  1.1.1.2  mrg 
    281  1.1.1.2  mrg   VAR1 (UNOP, lroundv2sf, 2, v2si)
    282  1.1.1.2  mrg   VAR1 (UNOP, lroundv4sf, 2, v4si)
    283  1.1.1.2  mrg   VAR1 (UNOP, lroundv2df, 2, v2di)
    284  1.1.1.2  mrg   /* Implemented by l<fcvt_pattern><su_optab><GPF:mode><GPI:mode>2.  */
    285  1.1.1.2  mrg   VAR1 (UNOP, lroundsf, 2, si)
    286  1.1.1.2  mrg   VAR1 (UNOP, lrounddf, 2, di)
    287  1.1.1.2  mrg 
    288  1.1.1.2  mrg   VAR1 (UNOP, lrounduv2sf, 2, v2si)
    289  1.1.1.2  mrg   VAR1 (UNOP, lrounduv4sf, 2, v4si)
    290  1.1.1.2  mrg   VAR1 (UNOP, lrounduv2df, 2, v2di)
    291  1.1.1.2  mrg   VAR1 (UNOP, lroundusf, 2, si)
    292  1.1.1.2  mrg   VAR1 (UNOP, lroundudf, 2, di)
    293  1.1.1.2  mrg 
    294  1.1.1.2  mrg   VAR1 (UNOP, lceilv2sf, 2, v2si)
    295  1.1.1.2  mrg   VAR1 (UNOP, lceilv4sf, 2, v4si)
    296  1.1.1.2  mrg   VAR1 (UNOP, lceilv2df, 2, v2di)
    297  1.1.1.2  mrg 
    298  1.1.1.2  mrg   VAR1 (UNOP, lceiluv2sf, 2, v2si)
    299  1.1.1.2  mrg   VAR1 (UNOP, lceiluv4sf, 2, v4si)
    300  1.1.1.2  mrg   VAR1 (UNOP, lceiluv2df, 2, v2di)
    301  1.1.1.2  mrg   VAR1 (UNOP, lceilusf, 2, si)
    302  1.1.1.2  mrg   VAR1 (UNOP, lceiludf, 2, di)
    303  1.1.1.2  mrg 
    304  1.1.1.2  mrg   VAR1 (UNOP, lfloorv2sf, 2, v2si)
    305  1.1.1.2  mrg   VAR1 (UNOP, lfloorv4sf, 2, v4si)
    306  1.1.1.2  mrg   VAR1 (UNOP, lfloorv2df, 2, v2di)
    307  1.1.1.2  mrg 
    308  1.1.1.2  mrg   VAR1 (UNOP, lflooruv2sf, 2, v2si)
    309  1.1.1.2  mrg   VAR1 (UNOP, lflooruv4sf, 2, v4si)
    310  1.1.1.2  mrg   VAR1 (UNOP, lflooruv2df, 2, v2di)
    311  1.1.1.2  mrg   VAR1 (UNOP, lfloorusf, 2, si)
    312  1.1.1.2  mrg   VAR1 (UNOP, lfloorudf, 2, di)
    313  1.1.1.2  mrg 
    314  1.1.1.2  mrg   VAR1 (UNOP, lfrintnv2sf, 2, v2si)
    315  1.1.1.2  mrg   VAR1 (UNOP, lfrintnv4sf, 2, v4si)
    316  1.1.1.2  mrg   VAR1 (UNOP, lfrintnv2df, 2, v2di)
    317  1.1.1.2  mrg   VAR1 (UNOP, lfrintnsf, 2, si)
    318  1.1.1.2  mrg   VAR1 (UNOP, lfrintndf, 2, di)
    319  1.1.1.2  mrg 
    320  1.1.1.2  mrg   VAR1 (UNOP, lfrintnuv2sf, 2, v2si)
    321  1.1.1.2  mrg   VAR1 (UNOP, lfrintnuv4sf, 2, v4si)
    322  1.1.1.2  mrg   VAR1 (UNOP, lfrintnuv2df, 2, v2di)
    323  1.1.1.2  mrg   VAR1 (UNOP, lfrintnusf, 2, si)
    324  1.1.1.2  mrg   VAR1 (UNOP, lfrintnudf, 2, di)
    325  1.1.1.2  mrg 
    326  1.1.1.2  mrg   /* Implemented by <optab><fcvt_target><VDQF:mode>2.  */
    327  1.1.1.2  mrg   VAR1 (UNOP, floatv2si, 2, v2sf)
    328  1.1.1.2  mrg   VAR1 (UNOP, floatv4si, 2, v4sf)
    329  1.1.1.2  mrg   VAR1 (UNOP, floatv2di, 2, v2df)
    330  1.1.1.2  mrg 
    331  1.1.1.2  mrg   VAR1 (UNOP, floatunsv2si, 2, v2sf)
    332  1.1.1.2  mrg   VAR1 (UNOP, floatunsv4si, 2, v4sf)
    333  1.1.1.2  mrg   VAR1 (UNOP, floatunsv2di, 2, v2df)
    334  1.1.1.2  mrg 
    335  1.1.1.2  mrg   VAR5 (UNOPU, bswap, 2, v4hi, v8hi, v2si, v4si, v2di)
    336  1.1.1.2  mrg 
    337  1.1.1.2  mrg   BUILTIN_VB (UNOP, rbit, 0)
    338      1.1  mrg 
    339      1.1  mrg   /* Implemented by
    340      1.1  mrg      aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>.  */
    341  1.1.1.2  mrg   BUILTIN_VALL (BINOP, zip1, 0)
    342  1.1.1.2  mrg   BUILTIN_VALL (BINOP, zip2, 0)
    343  1.1.1.2  mrg   BUILTIN_VALL (BINOP, uzp1, 0)
    344  1.1.1.2  mrg   BUILTIN_VALL (BINOP, uzp2, 0)
    345  1.1.1.2  mrg   BUILTIN_VALL (BINOP, trn1, 0)
    346  1.1.1.2  mrg   BUILTIN_VALL (BINOP, trn2, 0)
    347  1.1.1.2  mrg 
    348  1.1.1.2  mrg   /* Implemented by
    349  1.1.1.2  mrg      aarch64_frecp<FRECP:frecp_suffix><mode>.  */
    350  1.1.1.2  mrg   BUILTIN_GPF (UNOP, frecpe, 0)
    351  1.1.1.2  mrg   BUILTIN_GPF (BINOP, frecps, 0)
    352  1.1.1.2  mrg   BUILTIN_GPF (UNOP, frecpx, 0)
    353  1.1.1.2  mrg 
    354  1.1.1.2  mrg   BUILTIN_VDQ_SI (UNOP, urecpe, 0)
    355  1.1.1.2  mrg 
    356  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, frecpe, 0)
    357  1.1.1.2  mrg   BUILTIN_VDQF (BINOP, frecps, 0)
    358  1.1.1.2  mrg 
    359  1.1.1.2  mrg   /* Implemented by a mixture of abs2 patterns.  Note the DImode builtin is
    360  1.1.1.2  mrg      only ever used for the int64x1_t intrinsic, there is no scalar version.  */
    361  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (UNOP, abs, 0)
    362  1.1.1.2  mrg   BUILTIN_VDQF (UNOP, abs, 2)
    363  1.1.1.2  mrg 
    364  1.1.1.2  mrg   VAR1 (UNOP, vec_unpacks_hi_, 10, v4sf)
    365  1.1.1.2  mrg   VAR1 (BINOP, float_truncate_hi_, 0, v4sf)
    366  1.1.1.2  mrg 
    367  1.1.1.2  mrg   VAR1 (UNOP, float_extend_lo_, 0, v2df)
    368  1.1.1.2  mrg   VAR1 (UNOP, float_truncate_lo_, 0, v2sf)
    369      1.1  mrg 
    370      1.1  mrg   /* Implemented by aarch64_ld1<VALL:mode>.  */
    371  1.1.1.2  mrg   BUILTIN_VALL (LOAD1, ld1, 0)
    372      1.1  mrg 
    373      1.1  mrg   /* Implemented by aarch64_st1<VALL:mode>.  */
    374  1.1.1.2  mrg   BUILTIN_VALL (STORE1, st1, 0)
    375  1.1.1.2  mrg 
    376  1.1.1.2  mrg   /* Implemented by fma<mode>4.  */
    377  1.1.1.2  mrg   BUILTIN_VDQF (TERNOP, fma, 4)
    378  1.1.1.2  mrg 
    379  1.1.1.2  mrg   /* Implemented by aarch64_simd_bsl<mode>.  */
    380  1.1.1.2  mrg   BUILTIN_VDQQH (BSL_P, simd_bsl, 0)
    381  1.1.1.2  mrg   BUILTIN_VSDQ_I_DI (BSL_U, simd_bsl, 0)
    382  1.1.1.2  mrg   BUILTIN_VALLDIF (BSL_S, simd_bsl, 0)
    383  1.1.1.2  mrg 
    384  1.1.1.2  mrg   /* Implemented by aarch64_crypto_aes<op><mode>.  */
    385  1.1.1.2  mrg   VAR1 (BINOPU, crypto_aese, 0, v16qi)
    386  1.1.1.2  mrg   VAR1 (BINOPU, crypto_aesd, 0, v16qi)
    387  1.1.1.2  mrg   VAR1 (UNOPU, crypto_aesmc, 0, v16qi)
    388  1.1.1.2  mrg   VAR1 (UNOPU, crypto_aesimc, 0, v16qi)
    389  1.1.1.2  mrg 
    390  1.1.1.2  mrg   /* Implemented by aarch64_crypto_sha1<op><mode>.  */
    391  1.1.1.2  mrg   VAR1 (UNOPU, crypto_sha1h, 0, si)
    392  1.1.1.2  mrg   VAR1 (BINOPU, crypto_sha1su1, 0, v4si)
    393  1.1.1.2  mrg   VAR1 (TERNOPU, crypto_sha1c, 0, v4si)
    394  1.1.1.2  mrg   VAR1 (TERNOPU, crypto_sha1m, 0, v4si)
    395  1.1.1.2  mrg   VAR1 (TERNOPU, crypto_sha1p, 0, v4si)
    396  1.1.1.2  mrg   VAR1 (TERNOPU, crypto_sha1su0, 0, v4si)
    397  1.1.1.2  mrg 
    398  1.1.1.2  mrg   /* Implemented by aarch64_crypto_sha256<op><mode>.  */
    399  1.1.1.2  mrg   VAR1 (TERNOPU, crypto_sha256h, 0, v4si)
    400  1.1.1.2  mrg   VAR1 (TERNOPU, crypto_sha256h2, 0, v4si)
    401  1.1.1.2  mrg   VAR1 (BINOPU, crypto_sha256su0, 0, v4si)
    402  1.1.1.2  mrg   VAR1 (TERNOPU, crypto_sha256su1, 0, v4si)
    403  1.1.1.2  mrg 
    404  1.1.1.2  mrg   /* Implemented by aarch64_crypto_pmull<mode>.  */
    405  1.1.1.2  mrg   VAR1 (BINOPP, crypto_pmull, 0, di)
    406  1.1.1.2  mrg   VAR1 (BINOPP, crypto_pmull, 0, v2di)
    407      1.1  mrg 
    408