blob: d463d60354c144fb72fb1262509d32c2d072cd69 [file] [log] [blame]
Jack Carter3a2c2d42013-08-13 20:54:07 +00001//===- MipsMSAInstrFormats.td - Mips 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
10def HasMSA : Predicate<"Subtarget.hasMSA()">,
11 AssemblerPredicate<"FeatureMSA">;
12
13class MSAInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> {
14 let Predicates = [HasMSA];
15 let Inst{31-26} = 0b011110;
16}
17
Matheus Almeida74070322014-01-29 14:05:28 +000018class MSA64Inst : MSAInst {
19 let Predicates = [HasMSA, HasMips64];
20}
21
Matheus Almeidaeb68d9d2013-10-22 09:43:32 +000022class MSACBranch : MSAInst {
23 let Inst{31-26} = 0b010001;
24}
25
Matheus Almeidabe8681b2013-10-23 13:20:07 +000026class MSASpecial : MSAInst {
27 let Inst{31-26} = 0b000000;
28}
29
Daniel Sandersf93e8152013-11-20 14:32:28 +000030class MSAPseudo<dag outs, dag ins, list<dag> pattern,
Jack Carter3a2c2d42013-08-13 20:54:07 +000031 InstrItinClass itin = IIPseudo>:
32 MipsPseudo<outs, ins, pattern, itin> {
33 let Predicates = [HasMSA];
34}
35
Jack Carterbabdcc82013-08-15 12:24:57 +000036class MSA_BIT_B_FMT<bits<3> major, bits<6> minor>: MSAInst {
Matheus Almeida21021882013-10-14 13:07:39 +000037 bits<5> ws;
38 bits<5> wd;
39 bits<3> m;
40
Jack Carterbabdcc82013-08-15 12:24:57 +000041 let Inst{25-23} = major;
42 let Inst{22-19} = 0b1110;
Matheus Almeida21021882013-10-14 13:07:39 +000043 let Inst{18-16} = m;
44 let Inst{15-11} = ws;
45 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000046 let Inst{5-0} = minor;
47}
48
49class MSA_BIT_H_FMT<bits<3> major, bits<6> minor>: MSAInst {
Matheus Almeida21021882013-10-14 13:07:39 +000050 bits<5> ws;
51 bits<5> wd;
52 bits<4> m;
53
Jack Carterbabdcc82013-08-15 12:24:57 +000054 let Inst{25-23} = major;
55 let Inst{22-20} = 0b110;
Matheus Almeida21021882013-10-14 13:07:39 +000056 let Inst{19-16} = m;
57 let Inst{15-11} = ws;
58 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000059 let Inst{5-0} = minor;
60}
61
62class MSA_BIT_W_FMT<bits<3> major, bits<6> minor>: MSAInst {
Matheus Almeida21021882013-10-14 13:07:39 +000063 bits<5> ws;
64 bits<5> wd;
65 bits<5> m;
66
Jack Carterbabdcc82013-08-15 12:24:57 +000067 let Inst{25-23} = major;
68 let Inst{22-21} = 0b10;
Matheus Almeida21021882013-10-14 13:07:39 +000069 let Inst{20-16} = m;
70 let Inst{15-11} = ws;
71 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000072 let Inst{5-0} = minor;
73}
74
75class MSA_BIT_D_FMT<bits<3> major, bits<6> minor>: MSAInst {
Matheus Almeida21021882013-10-14 13:07:39 +000076 bits<5> ws;
77 bits<5> wd;
78 bits<6> m;
79
Jack Carterbabdcc82013-08-15 12:24:57 +000080 let Inst{25-23} = major;
81 let Inst{22} = 0b0;
Matheus Almeida21021882013-10-14 13:07:39 +000082 let Inst{21-16} = m;
83 let Inst{15-11} = ws;
84 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000085 let Inst{5-0} = minor;
86}
87
Jack Carter6eed9cc2013-09-30 17:43:04 +000088class MSA_2R_FILL_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
89 bits<5> rs;
90 bits<5> wd;
91
92 let Inst{25-18} = major;
93 let Inst{17-16} = df;
94 let Inst{15-11} = rs;
95 let Inst{10-6} = wd;
96 let Inst{5-0} = minor;
97}
98
Jack Carterbabdcc82013-08-15 12:24:57 +000099class MSA_2R_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carter92e6e0f2013-09-30 17:52:33 +0000100 bits<5> ws;
101 bits<5> wd;
102
Jack Carterbabdcc82013-08-15 12:24:57 +0000103 let Inst{25-18} = major;
104 let Inst{17-16} = df;
Jack Carter92e6e0f2013-09-30 17:52:33 +0000105 let Inst{15-11} = ws;
106 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000107 let Inst{5-0} = minor;
108}
109
110class MSA_2RF_FMT<bits<9> major, bits<1> df, bits<6> minor>: MSAInst {
Jack Carter5dc8ac92013-09-25 23:50:44 +0000111 bits<5> ws;
112 bits<5> wd;
113
Jack Carterbabdcc82013-08-15 12:24:57 +0000114 let Inst{25-17} = major;
115 let Inst{16} = df;
Jack Carter5dc8ac92013-09-25 23:50:44 +0000116 let Inst{15-11} = ws;
117 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000118 let Inst{5-0} = minor;
119}
120
Jack Carter3a2c2d42013-08-13 20:54:07 +0000121class MSA_3R_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carter3eb663b2013-09-26 00:09:46 +0000122 bits<5> wt;
123 bits<5> ws;
124 bits<5> wd;
125
Jack Carter3a2c2d42013-08-13 20:54:07 +0000126 let Inst{25-23} = major;
127 let Inst{22-21} = df;
Jack Carter3eb663b2013-09-26 00:09:46 +0000128 let Inst{20-16} = wt;
129 let Inst{15-11} = ws;
130 let Inst{10-6} = wd;
Jack Carter3a2c2d42013-08-13 20:54:07 +0000131 let Inst{5-0} = minor;
132}
133
Jack Carterbabdcc82013-08-15 12:24:57 +0000134class MSA_3RF_FMT<bits<4> major, bits<1> df, bits<6> minor>: MSAInst {
Jack Cartercb8b40b2013-09-26 21:31:43 +0000135 bits<5> wt;
136 bits<5> ws;
137 bits<5> wd;
138
Jack Carterbabdcc82013-08-15 12:24:57 +0000139 let Inst{25-22} = major;
140 let Inst{21} = df;
Jack Cartercb8b40b2013-09-26 21:31:43 +0000141 let Inst{20-16} = wt;
142 let Inst{15-11} = ws;
143 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000144 let Inst{5-0} = minor;
145}
146
Matheus Almeida70fbf772013-10-21 11:47:56 +0000147class MSA_3R_INDEX_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
148 bits<5> rt;
149 bits<5> ws;
150 bits<5> wd;
151
152 let Inst{25-23} = major;
153 let Inst{22-21} = df;
154 let Inst{20-16} = rt;
155 let Inst{15-11} = ws;
156 let Inst{10-6} = wd;
157 let Inst{5-0} = minor;
158}
159
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000160class MSA_ELM_FMT<bits<10> major, bits<6> minor>: MSAInst {
Matheus Almeida83d797d2013-10-21 12:43:54 +0000161 bits<5> ws;
162 bits<5> wd;
163
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000164 let Inst{25-16} = major;
Matheus Almeida83d797d2013-10-21 12:43:54 +0000165 let Inst{15-11} = ws;
166 let Inst{10-6} = wd;
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000167 let Inst{5-0} = minor;
168}
169
Matheus Almeidaa591fdc2013-10-21 12:26:50 +0000170class MSA_ELM_CFCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
171 bits<5> rd;
172 bits<5> cs;
173
174 let Inst{25-16} = major;
175 let Inst{15-11} = cs;
176 let Inst{10-6} = rd;
177 let Inst{5-0} = minor;
178}
179
180class MSA_ELM_CTCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
181 bits<5> rs;
182 bits<5> cd;
183
184 let Inst{25-16} = major;
185 let Inst{15-11} = rs;
186 let Inst{10-6} = cd;
187 let Inst{5-0} = minor;
188}
189
Jack Carterbabdcc82013-08-15 12:24:57 +0000190class MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000191 bits<4> n;
192 bits<5> ws;
193 bits<5> wd;
194
Jack Carterbabdcc82013-08-15 12:24:57 +0000195 let Inst{25-22} = major;
196 let Inst{21-20} = 0b00;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000197 let Inst{19-16} = n{3-0};
198 let Inst{15-11} = ws;
199 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000200 let Inst{5-0} = minor;
201}
202
203class MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000204 bits<4> n;
205 bits<5> ws;
206 bits<5> wd;
207
Jack Carterbabdcc82013-08-15 12:24:57 +0000208 let Inst{25-22} = major;
209 let Inst{21-19} = 0b100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000210 let Inst{18-16} = n{2-0};
211 let Inst{15-11} = ws;
212 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000213 let Inst{5-0} = minor;
214}
215
216class MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000217 bits<4> n;
218 bits<5> ws;
219 bits<5> wd;
220
Jack Carterbabdcc82013-08-15 12:24:57 +0000221 let Inst{25-22} = major;
222 let Inst{21-18} = 0b1100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000223 let Inst{17-16} = n{1-0};
224 let Inst{15-11} = ws;
225 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000226 let Inst{5-0} = minor;
227}
228
229class MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000230 bits<4> n;
231 bits<5> ws;
232 bits<5> wd;
233
Jack Carterbabdcc82013-08-15 12:24:57 +0000234 let Inst{25-22} = major;
235 let Inst{21-17} = 0b11100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000236 let Inst{16} = n{0};
237 let Inst{15-11} = ws;
238 let Inst{10-6} = wd;
239 let Inst{5-0} = minor;
240}
241
242class MSA_ELM_COPY_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
243 bits<4> n;
244 bits<5> ws;
245 bits<5> rd;
246
247 let Inst{25-22} = major;
248 let Inst{21-20} = 0b00;
249 let Inst{19-16} = n{3-0};
250 let Inst{15-11} = ws;
251 let Inst{10-6} = rd;
252 let Inst{5-0} = minor;
253}
254
255class MSA_ELM_COPY_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
256 bits<4> n;
257 bits<5> ws;
258 bits<5> rd;
259
260 let Inst{25-22} = major;
261 let Inst{21-19} = 0b100;
262 let Inst{18-16} = n{2-0};
263 let Inst{15-11} = ws;
264 let Inst{10-6} = rd;
265 let Inst{5-0} = minor;
266}
267
268class MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
269 bits<4> n;
270 bits<5> ws;
271 bits<5> rd;
272
273 let Inst{25-22} = major;
274 let Inst{21-18} = 0b1100;
275 let Inst{17-16} = n{1-0};
276 let Inst{15-11} = ws;
277 let Inst{10-6} = rd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000278 let Inst{5-0} = minor;
279}
280
Matheus Almeida74070322014-01-29 14:05:28 +0000281class MSA_ELM_COPY_D_FMT<bits<4> major, bits<6> minor>: MSA64Inst {
282 bits<4> n;
283 bits<5> ws;
284 bits<5> rd;
285
286 let Inst{25-22} = major;
287 let Inst{21-17} = 0b11100;
288 let Inst{16} = n{0};
289 let Inst{15-11} = ws;
290 let Inst{10-6} = rd;
291 let Inst{5-0} = minor;
292}
293
Matheus Almeidab74293d2013-10-14 11:49:30 +0000294class MSA_ELM_INSERT_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
295 bits<6> n;
296 bits<5> rs;
297 bits<5> wd;
298
299 let Inst{25-22} = major;
300 let Inst{21-20} = 0b00;
301 let Inst{19-16} = n{3-0};
302 let Inst{15-11} = rs;
303 let Inst{10-6} = wd;
304 let Inst{5-0} = minor;
305}
306
307class MSA_ELM_INSERT_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
308 bits<6> n;
309 bits<5> rs;
310 bits<5> wd;
311
312 let Inst{25-22} = major;
313 let Inst{21-19} = 0b100;
314 let Inst{18-16} = n{2-0};
315 let Inst{15-11} = rs;
316 let Inst{10-6} = wd;
317 let Inst{5-0} = minor;
318}
319
320class MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
321 bits<6> n;
322 bits<5> rs;
323 bits<5> wd;
324
325 let Inst{25-22} = major;
326 let Inst{21-18} = 0b1100;
327 let Inst{17-16} = n{1-0};
328 let Inst{15-11} = rs;
329 let Inst{10-6} = wd;
330 let Inst{5-0} = minor;
331}
332
Jack Carter3a2c2d42013-08-13 20:54:07 +0000333class MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carterc3b25682013-09-30 17:58:07 +0000334 bits<5> imm;
335 bits<5> ws;
336 bits<5> wd;
337
Jack Carter3a2c2d42013-08-13 20:54:07 +0000338 let Inst{25-23} = major;
339 let Inst{22-21} = df;
Jack Carterc3b25682013-09-30 17:58:07 +0000340 let Inst{20-16} = imm;
341 let Inst{15-11} = ws;
342 let Inst{10-6} = wd;
Jack Carter3a2c2d42013-08-13 20:54:07 +0000343 let Inst{5-0} = minor;
344}
Jack Carterbabdcc82013-08-15 12:24:57 +0000345
346class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst {
Jack Carter8ff70e32013-09-30 18:05:18 +0000347 bits<8> u8;
348 bits<5> ws;
349 bits<5> wd;
350
Jack Carterbabdcc82013-08-15 12:24:57 +0000351 let Inst{25-24} = major;
Jack Carter8ff70e32013-09-30 18:05:18 +0000352 let Inst{23-16} = u8;
353 let Inst{15-11} = ws;
354 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000355 let Inst{5-0} = minor;
356}
357
358class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Matheus Almeida8ddad152013-10-21 12:56:20 +0000359 bits<10> s10;
360 bits<5> wd;
361
Jack Carterbabdcc82013-08-15 12:24:57 +0000362 let Inst{25-23} = major;
363 let Inst{22-21} = df;
Matheus Almeida8ddad152013-10-21 12:56:20 +0000364 let Inst{20-11} = s10;
365 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000366 let Inst{5-0} = minor;
367}
Daniel Sanders869bdad2013-08-20 08:38:21 +0000368
Matheus Almeidafe0bf9f2013-10-21 13:07:13 +0000369class MSA_MI10_FMT<bits<2> df, bits<4> minor>: MSAInst {
370 bits<21> addr;
371 bits<5> wd;
372
373 let Inst{25-16} = addr{9-0};
374 let Inst{15-11} = addr{20-16};
375 let Inst{10-6} = wd;
376 let Inst{5-2} = minor;
377 let Inst{1-0} = df;
378}
379
Daniel Sanders869bdad2013-08-20 08:38:21 +0000380class MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst {
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000381 bits<5> wt;
382 bits<5> ws;
383 bits<5> wd;
384
Daniel Sanders869bdad2013-08-20 08:38:21 +0000385 let Inst{25-21} = major;
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000386 let Inst{20-16} = wt;
387 let Inst{15-11} = ws;
388 let Inst{10-6} = wd;
Daniel Sanders869bdad2013-08-20 08:38:21 +0000389 let Inst{5-0} = minor;
390}
Daniel Sandersce09d072013-08-28 12:14:50 +0000391
Matheus Almeidaeb68d9d2013-10-22 09:43:32 +0000392class MSA_CBRANCH_FMT<bits<3> major, bits<2> df>: MSACBranch {
393 bits<16> offset;
394 bits<5> wt;
395
396 let Inst{25-23} = major;
397 let Inst{22-21} = df;
398 let Inst{20-16} = wt;
399 let Inst{15-0} = offset;
400}
401
402class MSA_CBRANCH_V_FMT<bits<5> major>: MSACBranch {
403 bits<16> offset;
404 bits<5> wt;
405
Daniel Sandersce09d072013-08-28 12:14:50 +0000406 let Inst{25-21} = major;
Matheus Almeidaeb68d9d2013-10-22 09:43:32 +0000407 let Inst{20-16} = wt;
408 let Inst{15-0} = offset;
Daniel Sandersce09d072013-08-28 12:14:50 +0000409}
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000410
Matheus Almeidabe8681b2013-10-23 13:20:07 +0000411class SPECIAL_LSA_FMT<bits<6> minor>: MSASpecial {
412 bits<5> rs;
413 bits<5> rt;
414 bits<5> rd;
415 bits<2> sa;
416
417 let Inst{25-21} = rs;
418 let Inst{20-16} = rt;
419 let Inst{15-11} = rd;
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000420 let Inst{10-8} = 0b000;
Matheus Almeidabe8681b2013-10-23 13:20:07 +0000421 let Inst{7-6} = sa;
422 let Inst{5-0} = minor;
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000423}