Home | History | Annotate | Download | only in Hexagon
      1 //==- HexagonInstrFormatsV60.td - Hexagon Instruction Formats -*- tablegen -==//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file describes the Hexagon V60 instruction classes in TableGen format.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 //----------------------------------------------------------------------------//
     15 //                         Hexagon Intruction Flags +
     16 //
     17 //                        *** Must match BaseInfo.h ***
     18 //----------------------------------------------------------------------------//
     19 
     20 def TypeCVI_VA         : IType<13>;
     21 def TypeCVI_VA_DV      : IType<14>;
     22 def TypeCVI_VX         : IType<15>;
     23 def TypeCVI_VX_DV      : IType<16>;
     24 def TypeCVI_VP         : IType<17>;
     25 def TypeCVI_VP_VS      : IType<18>;
     26 def TypeCVI_VS         : IType<19>;
     27 def TypeCVI_VINLANESAT : IType<20>;
     28 def TypeCVI_VM_LD      : IType<21>;
     29 def TypeCVI_VM_TMP_LD  : IType<22>;
     30 def TypeCVI_VM_CUR_LD  : IType<23>;
     31 def TypeCVI_VM_VP_LDU  : IType<24>;
     32 def TypeCVI_VM_ST      : IType<25>;
     33 def TypeCVI_VM_NEW_ST  : IType<26>;
     34 def TypeCVI_VM_STU     : IType<27>;
     35 def TypeCVI_HIST       : IType<28>;
     36 //----------------------------------------------------------------------------//
     37 //                         Intruction Classes Definitions +
     38 //----------------------------------------------------------------------------//
     39 
     40 let validSubTargets = HasV60SubT in
     41 {
     42 class CVI_VA_Resource<dag outs, dag ins, string asmstr,
     43                        list<dag> pattern = [], string cstr = "",
     44                        InstrItinClass itin = CVI_VA>
     45    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA>,
     46      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
     47 
     48 class CVI_VA_DV_Resource<dag outs, dag ins, string asmstr,
     49                          list<dag> pattern = [], string cstr = "",
     50                          InstrItinClass itin = CVI_VA_DV>
     51    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA_DV>,
     52      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
     53 
     54 class CVI_VX_Resource_long<dag outs, dag ins, string asmstr,
     55                        list<dag> pattern = [], string cstr = "",
     56                        InstrItinClass itin = CVI_VX_LONG>
     57    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>,
     58      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
     59 
     60 class CVI_VX_Resource_late<dag outs, dag ins, string asmstr,
     61                        list<dag> pattern = [], string cstr = "",
     62                        InstrItinClass itin = CVI_VX_LATE>
     63    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>,
     64      Requires<[HasV60T, UseHVX]>;
     65 
     66 class CVI_VX_Resource<dag outs, dag ins, string asmstr,
     67                        list<dag> pattern = [], string cstr = "",
     68                        InstrItinClass itin = CVI_VX>
     69    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>,
     70      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
     71 
     72 class CVI_VX_DV_Resource<dag outs, dag ins, string asmstr,
     73                        list<dag> pattern = [], string cstr = "",
     74                        InstrItinClass itin = CVI_VX_DV>
     75    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>,
     76      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
     77 
     78 class CVI_VX_DV_Slot2_Resource<dag outs, dag ins, string asmstr,
     79                        list<dag> pattern = [], string cstr = "",
     80                        InstrItinClass itin = CVI_VX_DV_SLOT2>
     81    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>,
     82      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
     83 
     84 class CVI_VX_DV_Resource_long<dag outs, dag ins, string asmstr,
     85                          list<dag> pattern = [], string cstr = "",
     86                          InstrItinClass itin = CVI_VX_DV_LONG>
     87    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>,
     88      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
     89 
     90 class CVI_VP_Resource_long<dag outs, dag ins, string asmstr,
     91                          list<dag> pattern = [], string cstr = "",
     92                          InstrItinClass itin = CVI_VP_LONG>
     93    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP>,
     94      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
     95 
     96 class CVI_VP_VS_Resource_early<dag outs, dag ins, string asmstr,
     97                          list<dag> pattern = [], string cstr = "",
     98                          InstrItinClass itin = CVI_VP_VS_EARLY>
     99    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>,
    100      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    101 
    102 class CVI_VP_VS_Resource_long<dag outs, dag ins, string asmstr,
    103                          list<dag> pattern = [], string cstr = "",
    104                          InstrItinClass itin = CVI_VP_VS_LONG>
    105    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>,
    106      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    107 
    108 class CVI_VP_VS_Resource_long_early<dag outs, dag ins, string asmstr,
    109                          list<dag> pattern = [], string cstr = "",
    110                          InstrItinClass itin = CVI_VP_VS_LONG_EARLY>
    111    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>,
    112      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    113 
    114 class CVI_VS_Resource<dag outs, dag ins, string asmstr,
    115                          list<dag> pattern = [], string cstr = "",
    116                          InstrItinClass itin = CVI_VS>
    117    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VS>,
    118      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    119 
    120 class CVI_VINLANESAT_Resource<dag outs, dag ins, string asmstr,
    121                          list<dag> pattern = [], string cstr = "",
    122                          InstrItinClass itin = CVI_VINLANESAT>
    123    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VINLANESAT>,
    124      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    125 
    126 class CVI_VS_Resource_long<dag outs, dag ins, string asmstr,
    127                            list<dag> pattern = [], string cstr = "",
    128                            InstrItinClass itin = CVI_VS>
    129   : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VS>,
    130      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    131 
    132 class CVI_VM_LD_Resource<dag outs, dag ins, string asmstr,
    133                          list<dag> pattern = [], string cstr = "",
    134                          InstrItinClass itin = CVI_VM_LD>
    135    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_LD>,
    136      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    137 
    138 class CVI_VM_LD_Resource_long<dag outs, dag ins, string asmstr,
    139                               list<dag> pattern = [], string cstr = "",
    140                          InstrItinClass itin = CVI_VM_LD>
    141    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_LD>,
    142      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    143 
    144 class CVI_VM_TMP_LD_Resource<dag outs, dag ins, string asmstr,
    145                              list<dag> pattern = [], string cstr = "",
    146                              InstrItinClass itin = CVI_VM_TMP_LD>
    147    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_TMP_LD>,
    148      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    149 
    150 class CVI_VM_TMP_LD_Resource_long<dag outs, dag ins, string asmstr,
    151                                   list<dag> pattern = [], string cstr = "",
    152                                   InstrItinClass itin = CVI_VM_TMP_LD>
    153    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_TMP_LD>,
    154      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    155 
    156 class CVI_VM_CUR_LD_Resource<dag outs, dag ins, string asmstr,
    157                              list<dag> pattern = [], string cstr = "",
    158                              InstrItinClass itin = CVI_VM_CUR_LD>
    159    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_CUR_LD>,
    160      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    161 
    162 class CVI_VM_VP_LDU_Resource<dag outs, dag ins, string asmstr,
    163                              list<dag> pattern = [], string cstr = "",
    164                              InstrItinClass itin = CVI_VM_VP_LDU>
    165    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_VP_LDU>,
    166      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    167 
    168 class CVI_VM_VP_LDU_Resource_long<dag outs, dag ins, string asmstr,
    169                                   list<dag> pattern = [], string cstr = "",
    170                                   InstrItinClass itin = CVI_VM_VP_LDU>
    171    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_VP_LDU>,
    172      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    173 
    174 class CVI_VM_ST_Resource<dag outs, dag ins, string asmstr,
    175                          list<dag> pattern = [], string cstr = "",
    176                          InstrItinClass itin = CVI_VM_ST>
    177    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_ST>,
    178      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    179 
    180 class CVI_VM_ST_Resource_long<dag outs, dag ins, string asmstr,
    181                               list<dag> pattern = [], string cstr = "",
    182                               InstrItinClass itin = CVI_VM_ST>
    183    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_ST>,
    184      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    185 
    186 class CVI_VM_NEW_ST_Resource<dag outs, dag ins, string asmstr,
    187                              list<dag> pattern = [], string cstr = "",
    188                              InstrItinClass itin = CVI_VM_NEW_ST>
    189    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_NEW_ST>,
    190      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    191 
    192 class CVI_VM_NEW_ST_Resource_long<dag outs, dag ins, string asmstr,
    193                                   list<dag> pattern = [], string cstr = "",
    194                                   InstrItinClass itin = CVI_VM_NEW_ST>
    195    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_NEW_ST>,
    196      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    197 
    198 class CVI_VM_STU_Resource<dag outs, dag ins, string asmstr,
    199                           list<dag> pattern = [], string cstr = "",
    200                           InstrItinClass itin = CVI_VM_STU>
    201    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_STU>,
    202      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    203 
    204 class CVI_VM_STU_Resource_long<dag outs, dag ins, string asmstr,
    205                                list<dag> pattern = [], string cstr = "",
    206                                InstrItinClass itin = CVI_VM_STU>
    207    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_STU>,
    208      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    209 
    210 class CVI_HIST_Resource<dag outs, dag ins, string asmstr,
    211                         list<dag> pattern = [], string cstr = "",
    212                         InstrItinClass itin = CVI_HIST>
    213    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_HIST>,
    214      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
    215 }
    216 
    217 let validSubTargets = HasV60SubT in
    218 {
    219 class CVI_VA_Resource1<dag outs, dag ins, string asmstr,
    220                        list<dag> pattern = [], string cstr = "",
    221                        InstrItinClass itin = CVI_VA>
    222    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA>,
    223      Requires<[HasV60T, UseHVX]>;
    224 
    225 class CVI_VX_DV_Resource1<dag outs, dag ins, string asmstr,
    226                          list<dag> pattern = [], string cstr = "",
    227                          InstrItinClass itin = CVI_VX_DV>
    228    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>,
    229      Requires<[HasV60T, UseHVX]>;
    230 
    231 class CVI_HIST_Resource1<dag outs, dag ins, string asmstr,
    232                         list<dag> pattern = [], string cstr = "",
    233                         InstrItinClass itin = CVI_HIST>
    234    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_HIST>,
    235      Requires<[HasV60T, UseHVX]>;
    236 }
    237 
    238 
    239