1 //==- HexagonInstrFormatsV60.td - Hexagon Instruction Formats -*- tablegen -==//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file describes the Hexagon V60 instruction classes in TableGen format.
12 //===----------------------------------------------------------------------===//
14 //----------------------------------------------------------------------------//
15 // Hexagon Intruction Flags +
17 // *** Must match BaseInfo.h ***
18 //----------------------------------------------------------------------------//
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 //----------------------------------------------------------------------------//
40 let validSubTargets = HasV60SubT in
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
217 let validSubTargets = HasV60SubT in
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]>;
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]>;
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]>;