Home | History | Annotate | Line # | Download | only in aarch64
aarch64-simd-builtins.def revision 1.1
      1  1.1  mrg /* Machine description for AArch64 architecture.
      2  1.1  mrg    Copyright (C) 2012-2013 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  mrg /* In the list below, the BUILTIN_<ITERATOR> macros should
     22  1.1  mrg    correspond to the iterator used to construct the instruction's
     23  1.1  mrg    patterns in aarch64-simd.md.  A helpful idiom to follow when
     24  1.1  mrg    adding new builtins is to add a line for each pattern in the md
     25  1.1  mrg    file.  Thus, ADDP, which has one pattern defined for the VD_BHSI
     26  1.1  mrg    iterator, and one for DImode, has two entries below.  */
     27  1.1  mrg 
     28  1.1  mrg   BUILTIN_VD_RE (CREATE, create)
     29  1.1  mrg   BUILTIN_VQ_S (GETLANE, get_lane_signed)
     30  1.1  mrg   BUILTIN_VDQ (GETLANE, get_lane_unsigned)
     31  1.1  mrg   BUILTIN_VDQF (GETLANE, get_lane)
     32  1.1  mrg   VAR1 (GETLANE, get_lane, di)
     33  1.1  mrg   BUILTIN_VDC (COMBINE, combine)
     34  1.1  mrg   BUILTIN_VB (BINOP, pmul)
     35  1.1  mrg   BUILTIN_VDQF (UNOP, sqrt)
     36  1.1  mrg   BUILTIN_VD_BHSI (BINOP, addp)
     37  1.1  mrg   VAR1 (UNOP, addp, di)
     38  1.1  mrg 
     39  1.1  mrg   BUILTIN_VD_RE (REINTERP, reinterpretdi)
     40  1.1  mrg   BUILTIN_VDC (REINTERP, reinterpretv8qi)
     41  1.1  mrg   BUILTIN_VDC (REINTERP, reinterpretv4hi)
     42  1.1  mrg   BUILTIN_VDC (REINTERP, reinterpretv2si)
     43  1.1  mrg   BUILTIN_VDC (REINTERP, reinterpretv2sf)
     44  1.1  mrg   BUILTIN_VQ (REINTERP, reinterpretv16qi)
     45  1.1  mrg   BUILTIN_VQ (REINTERP, reinterpretv8hi)
     46  1.1  mrg   BUILTIN_VQ (REINTERP, reinterpretv4si)
     47  1.1  mrg   BUILTIN_VQ (REINTERP, reinterpretv4sf)
     48  1.1  mrg   BUILTIN_VQ (REINTERP, reinterpretv2di)
     49  1.1  mrg   BUILTIN_VQ (REINTERP, reinterpretv2df)
     50  1.1  mrg 
     51  1.1  mrg   BUILTIN_VDQ_I (BINOP, dup_lane)
     52  1.1  mrg   BUILTIN_SDQ_I (BINOP, dup_lane)
     53  1.1  mrg   /* Implemented by aarch64_<sur>q<r>shl<mode>.  */
     54  1.1  mrg   BUILTIN_VSDQ_I (BINOP, sqshl)
     55  1.1  mrg   BUILTIN_VSDQ_I (BINOP, uqshl)
     56  1.1  mrg   BUILTIN_VSDQ_I (BINOP, sqrshl)
     57  1.1  mrg   BUILTIN_VSDQ_I (BINOP, uqrshl)
     58  1.1  mrg   /* Implemented by aarch64_<su_optab><optab><mode>.  */
     59  1.1  mrg   BUILTIN_VSDQ_I (BINOP, sqadd)
     60  1.1  mrg   BUILTIN_VSDQ_I (BINOP, uqadd)
     61  1.1  mrg   BUILTIN_VSDQ_I (BINOP, sqsub)
     62  1.1  mrg   BUILTIN_VSDQ_I (BINOP, uqsub)
     63  1.1  mrg   /* Implemented by aarch64_<sur>qadd<mode>.  */
     64  1.1  mrg   BUILTIN_VSDQ_I (BINOP, suqadd)
     65  1.1  mrg   BUILTIN_VSDQ_I (BINOP, usqadd)
     66  1.1  mrg 
     67  1.1  mrg   /* Implemented by aarch64_get_dreg<VSTRUCT:mode><VDC:mode>.  */
     68  1.1  mrg   BUILTIN_VDC (GETLANE, get_dregoi)
     69  1.1  mrg   BUILTIN_VDC (GETLANE, get_dregci)
     70  1.1  mrg   BUILTIN_VDC (GETLANE, get_dregxi)
     71  1.1  mrg   /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>.  */
     72  1.1  mrg   BUILTIN_VQ (GETLANE, get_qregoi)
     73  1.1  mrg   BUILTIN_VQ (GETLANE, get_qregci)
     74  1.1  mrg   BUILTIN_VQ (GETLANE, get_qregxi)
     75  1.1  mrg   /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>.  */
     76  1.1  mrg   BUILTIN_VQ (SETLANE, set_qregoi)
     77  1.1  mrg   BUILTIN_VQ (SETLANE, set_qregci)
     78  1.1  mrg   BUILTIN_VQ (SETLANE, set_qregxi)
     79  1.1  mrg   /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>.  */
     80  1.1  mrg   BUILTIN_VDC (LOADSTRUCT, ld2)
     81  1.1  mrg   BUILTIN_VDC (LOADSTRUCT, ld3)
     82  1.1  mrg   BUILTIN_VDC (LOADSTRUCT, ld4)
     83  1.1  mrg   /* Implemented by aarch64_ld<VSTRUCT:nregs><VQ:mode>.  */
     84  1.1  mrg   BUILTIN_VQ (LOADSTRUCT, ld2)
     85  1.1  mrg   BUILTIN_VQ (LOADSTRUCT, ld3)
     86  1.1  mrg   BUILTIN_VQ (LOADSTRUCT, ld4)
     87  1.1  mrg   /* Implemented by aarch64_st<VSTRUCT:nregs><VDC:mode>.  */
     88  1.1  mrg   BUILTIN_VDC (STORESTRUCT, st2)
     89  1.1  mrg   BUILTIN_VDC (STORESTRUCT, st3)
     90  1.1  mrg   BUILTIN_VDC (STORESTRUCT, st4)
     91  1.1  mrg   /* Implemented by aarch64_st<VSTRUCT:nregs><VQ:mode>.  */
     92  1.1  mrg   BUILTIN_VQ (STORESTRUCT, st2)
     93  1.1  mrg   BUILTIN_VQ (STORESTRUCT, st3)
     94  1.1  mrg   BUILTIN_VQ (STORESTRUCT, st4)
     95  1.1  mrg 
     96  1.1  mrg   BUILTIN_VQW (BINOP, saddl2)
     97  1.1  mrg   BUILTIN_VQW (BINOP, uaddl2)
     98  1.1  mrg   BUILTIN_VQW (BINOP, ssubl2)
     99  1.1  mrg   BUILTIN_VQW (BINOP, usubl2)
    100  1.1  mrg   BUILTIN_VQW (BINOP, saddw2)
    101  1.1  mrg   BUILTIN_VQW (BINOP, uaddw2)
    102  1.1  mrg   BUILTIN_VQW (BINOP, ssubw2)
    103  1.1  mrg   BUILTIN_VQW (BINOP, usubw2)
    104  1.1  mrg   /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>.  */
    105  1.1  mrg   BUILTIN_VDW (BINOP, saddl)
    106  1.1  mrg   BUILTIN_VDW (BINOP, uaddl)
    107  1.1  mrg   BUILTIN_VDW (BINOP, ssubl)
    108  1.1  mrg   BUILTIN_VDW (BINOP, usubl)
    109  1.1  mrg   /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>.  */
    110  1.1  mrg   BUILTIN_VDW (BINOP, saddw)
    111  1.1  mrg   BUILTIN_VDW (BINOP, uaddw)
    112  1.1  mrg   BUILTIN_VDW (BINOP, ssubw)
    113  1.1  mrg   BUILTIN_VDW (BINOP, usubw)
    114  1.1  mrg   /* Implemented by aarch64_<sur>h<addsub><mode>.  */
    115  1.1  mrg   BUILTIN_VQ_S (BINOP, shadd)
    116  1.1  mrg   BUILTIN_VQ_S (BINOP, uhadd)
    117  1.1  mrg   BUILTIN_VQ_S (BINOP, srhadd)
    118  1.1  mrg   BUILTIN_VQ_S (BINOP, urhadd)
    119  1.1  mrg   /* Implemented by aarch64_<sur><addsub>hn<mode>.  */
    120  1.1  mrg   BUILTIN_VQN (BINOP, addhn)
    121  1.1  mrg   BUILTIN_VQN (BINOP, raddhn)
    122  1.1  mrg   /* Implemented by aarch64_<sur><addsub>hn2<mode>.  */
    123  1.1  mrg   BUILTIN_VQN (TERNOP, addhn2)
    124  1.1  mrg   BUILTIN_VQN (TERNOP, raddhn2)
    125  1.1  mrg 
    126  1.1  mrg   BUILTIN_VSQN_HSDI (UNOP, sqmovun)
    127  1.1  mrg   /* Implemented by aarch64_<sur>qmovn<mode>.  */
    128  1.1  mrg   BUILTIN_VSQN_HSDI (UNOP, sqmovn)
    129  1.1  mrg   BUILTIN_VSQN_HSDI (UNOP, uqmovn)
    130  1.1  mrg   /* Implemented by aarch64_s<optab><mode>.  */
    131  1.1  mrg   BUILTIN_VSDQ_I_BHSI (UNOP, sqabs)
    132  1.1  mrg   BUILTIN_VSDQ_I_BHSI (UNOP, sqneg)
    133  1.1  mrg 
    134  1.1  mrg   BUILTIN_VSD_HSI (QUADOP, sqdmlal_lane)
    135  1.1  mrg   BUILTIN_VSD_HSI (QUADOP, sqdmlsl_lane)
    136  1.1  mrg   BUILTIN_VSD_HSI (QUADOP, sqdmlal_laneq)
    137  1.1  mrg   BUILTIN_VSD_HSI (QUADOP, sqdmlsl_laneq)
    138  1.1  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmlal2)
    139  1.1  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmlsl2)
    140  1.1  mrg   BUILTIN_VQ_HSI (QUADOP, sqdmlal2_lane)
    141  1.1  mrg   BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_lane)
    142  1.1  mrg   BUILTIN_VQ_HSI (QUADOP, sqdmlal2_laneq)
    143  1.1  mrg   BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_laneq)
    144  1.1  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmlal2_n)
    145  1.1  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmlsl2_n)
    146  1.1  mrg   /* Implemented by aarch64_sqdml<SBINQOPS:as>l<mode>.  */
    147  1.1  mrg   BUILTIN_VSD_HSI (TERNOP, sqdmlal)
    148  1.1  mrg   BUILTIN_VSD_HSI (TERNOP, sqdmlsl)
    149  1.1  mrg   /* Implemented by aarch64_sqdml<SBINQOPS:as>l_n<mode>.  */
    150  1.1  mrg   BUILTIN_VD_HSI (TERNOP, sqdmlal_n)
    151  1.1  mrg   BUILTIN_VD_HSI (TERNOP, sqdmlsl_n)
    152  1.1  mrg 
    153  1.1  mrg   BUILTIN_VSD_HSI (BINOP, sqdmull)
    154  1.1  mrg   BUILTIN_VSD_HSI (TERNOP, sqdmull_lane)
    155  1.1  mrg   BUILTIN_VD_HSI (TERNOP, sqdmull_laneq)
    156  1.1  mrg   BUILTIN_VD_HSI (BINOP, sqdmull_n)
    157  1.1  mrg   BUILTIN_VQ_HSI (BINOP, sqdmull2)
    158  1.1  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmull2_lane)
    159  1.1  mrg   BUILTIN_VQ_HSI (TERNOP, sqdmull2_laneq)
    160  1.1  mrg   BUILTIN_VQ_HSI (BINOP, sqdmull2_n)
    161  1.1  mrg   /* Implemented by aarch64_sq<r>dmulh<mode>.  */
    162  1.1  mrg   BUILTIN_VSDQ_HSI (BINOP, sqdmulh)
    163  1.1  mrg   BUILTIN_VSDQ_HSI (BINOP, sqrdmulh)
    164  1.1  mrg   /* Implemented by aarch64_sq<r>dmulh_lane<q><mode>.  */
    165  1.1  mrg   BUILTIN_VDQHS (TERNOP, sqdmulh_lane)
    166  1.1  mrg   BUILTIN_VDQHS (TERNOP, sqdmulh_laneq)
    167  1.1  mrg   BUILTIN_VDQHS (TERNOP, sqrdmulh_lane)
    168  1.1  mrg   BUILTIN_VDQHS (TERNOP, sqrdmulh_laneq)
    169  1.1  mrg   BUILTIN_SD_HSI (TERNOP, sqdmulh_lane)
    170  1.1  mrg   BUILTIN_SD_HSI (TERNOP, sqrdmulh_lane)
    171  1.1  mrg 
    172  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, sshl_n)
    173  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, ushl_n)
    174  1.1  mrg   /* Implemented by aarch64_<sur>shl<mode>.  */
    175  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, sshl)
    176  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, ushl)
    177  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, srshl)
    178  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, urshl)
    179  1.1  mrg 
    180  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTIMM, sshr_n)
    181  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTIMM, ushr_n)
    182  1.1  mrg   /* Implemented by aarch64_<sur>shr_n<mode>.  */
    183  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n)
    184  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTIMM, urshr_n)
    185  1.1  mrg   /* Implemented by aarch64_<sur>sra_n<mode>.  */
    186  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n)
    187  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTACC, usra_n)
    188  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n)
    189  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTACC, ursra_n)
    190  1.1  mrg   /* Implemented by aarch64_<sur>shll_n<mode>.  */
    191  1.1  mrg   BUILTIN_VDW (SHIFTIMM, sshll_n)
    192  1.1  mrg   BUILTIN_VDW (SHIFTIMM, ushll_n)
    193  1.1  mrg   /* Implemented by aarch64_<sur>shll2_n<mode>.  */
    194  1.1  mrg   BUILTIN_VQW (SHIFTIMM, sshll2_n)
    195  1.1  mrg   BUILTIN_VQW (SHIFTIMM, ushll2_n)
    196  1.1  mrg   /* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>.  */
    197  1.1  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n)
    198  1.1  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n)
    199  1.1  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrn_n)
    200  1.1  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, uqshrn_n)
    201  1.1  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrn_n)
    202  1.1  mrg   BUILTIN_VSQN_HSDI (SHIFTIMM, uqrshrn_n)
    203  1.1  mrg   /* Implemented by aarch64_<sur>s<lr>i_n<mode>.  */
    204  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n)
    205  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTINSERT, usri_n)
    206  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n)
    207  1.1  mrg   BUILTIN_VSDQ_I_DI (SHIFTINSERT, usli_n)
    208  1.1  mrg   /* Implemented by aarch64_<sur>qshl<u>_n<mode>.  */
    209  1.1  mrg   BUILTIN_VSDQ_I (SHIFTIMM, sqshlu_n)
    210  1.1  mrg   BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n)
    211  1.1  mrg   BUILTIN_VSDQ_I (SHIFTIMM, uqshl_n)
    212  1.1  mrg 
    213  1.1  mrg   /* Implemented by aarch64_cm<cmp><mode>.  */
    214  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, cmeq)
    215  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, cmge)
    216  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, cmgt)
    217  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, cmle)
    218  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, cmlt)
    219  1.1  mrg   /* Implemented by aarch64_cm<cmp><mode>.  */
    220  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, cmgeu)
    221  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, cmgtu)
    222  1.1  mrg   BUILTIN_VSDQ_I_DI (BINOP, cmtst)
    223  1.1  mrg 
    224  1.1  mrg   /* Implemented by aarch64_<fmaxmin><mode>.  */
    225  1.1  mrg   BUILTIN_VDQF (BINOP, fmax)
    226  1.1  mrg   BUILTIN_VDQF (BINOP, fmin)
    227  1.1  mrg   /* Implemented by aarch64_<maxmin><mode>.  */
    228  1.1  mrg   BUILTIN_VDQ_BHSI (BINOP, smax)
    229  1.1  mrg   BUILTIN_VDQ_BHSI (BINOP, smin)
    230  1.1  mrg   BUILTIN_VDQ_BHSI (BINOP, umax)
    231  1.1  mrg   BUILTIN_VDQ_BHSI (BINOP, umin)
    232  1.1  mrg 
    233  1.1  mrg   /* Implemented by aarch64_frint<frint_suffix><mode>.  */
    234  1.1  mrg   BUILTIN_VDQF (UNOP, frintz)
    235  1.1  mrg   BUILTIN_VDQF (UNOP, frintp)
    236  1.1  mrg   BUILTIN_VDQF (UNOP, frintm)
    237  1.1  mrg   BUILTIN_VDQF (UNOP, frinti)
    238  1.1  mrg   BUILTIN_VDQF (UNOP, frintx)
    239  1.1  mrg   BUILTIN_VDQF (UNOP, frinta)
    240  1.1  mrg 
    241  1.1  mrg   /* Implemented by aarch64_fcvt<frint_suffix><su><mode>.  */
    242  1.1  mrg   BUILTIN_VDQF (UNOP, fcvtzs)
    243  1.1  mrg   BUILTIN_VDQF (UNOP, fcvtzu)
    244  1.1  mrg   BUILTIN_VDQF (UNOP, fcvtas)
    245  1.1  mrg   BUILTIN_VDQF (UNOP, fcvtau)
    246  1.1  mrg   BUILTIN_VDQF (UNOP, fcvtps)
    247  1.1  mrg   BUILTIN_VDQF (UNOP, fcvtpu)
    248  1.1  mrg   BUILTIN_VDQF (UNOP, fcvtms)
    249  1.1  mrg   BUILTIN_VDQF (UNOP, fcvtmu)
    250  1.1  mrg 
    251  1.1  mrg   /* Implemented by
    252  1.1  mrg      aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>.  */
    253  1.1  mrg   BUILTIN_VALL (BINOP, zip1)
    254  1.1  mrg   BUILTIN_VALL (BINOP, zip2)
    255  1.1  mrg   BUILTIN_VALL (BINOP, uzp1)
    256  1.1  mrg   BUILTIN_VALL (BINOP, uzp2)
    257  1.1  mrg   BUILTIN_VALL (BINOP, trn1)
    258  1.1  mrg   BUILTIN_VALL (BINOP, trn2)
    259  1.1  mrg 
    260  1.1  mrg   /* Implemented by aarch64_ld1<VALL:mode>.  */
    261  1.1  mrg   BUILTIN_VALL (LOAD1, ld1)
    262  1.1  mrg 
    263  1.1  mrg   /* Implemented by aarch64_st1<VALL:mode>.  */
    264  1.1  mrg   BUILTIN_VALL (STORE1, st1)
    265  1.1  mrg 
    266