blob: 937898f9d55bcb6988247274f089bc7cb03bd3f3 [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
Matheus Almeidaec079d92014-01-29 15:12:02 +000099class MSA_2R_FILL_D_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSA64Inst {
100 bits<5> rs;
101 bits<5> wd;
102
103 let Inst{25-18} = major;
104 let Inst{17-16} = df;
105 let Inst{15-11} = rs;
106 let Inst{10-6} = wd;
107 let Inst{5-0} = minor;
108}
109
Jack Carterbabdcc82013-08-15 12:24:57 +0000110class MSA_2R_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carter92e6e0f2013-09-30 17:52:33 +0000111 bits<5> ws;
112 bits<5> wd;
113
Jack Carterbabdcc82013-08-15 12:24:57 +0000114 let Inst{25-18} = major;
115 let Inst{17-16} = df;
Jack Carter92e6e0f2013-09-30 17:52:33 +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
121class MSA_2RF_FMT<bits<9> major, bits<1> df, bits<6> minor>: MSAInst {
Jack Carter5dc8ac92013-09-25 23:50:44 +0000122 bits<5> ws;
123 bits<5> wd;
124
Jack Carterbabdcc82013-08-15 12:24:57 +0000125 let Inst{25-17} = major;
126 let Inst{16} = df;
Jack Carter5dc8ac92013-09-25 23:50:44 +0000127 let Inst{15-11} = ws;
128 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000129 let Inst{5-0} = minor;
130}
131
Jack Carter3a2c2d42013-08-13 20:54:07 +0000132class MSA_3R_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carter3eb663b2013-09-26 00:09:46 +0000133 bits<5> wt;
134 bits<5> ws;
135 bits<5> wd;
136
Jack Carter3a2c2d42013-08-13 20:54:07 +0000137 let Inst{25-23} = major;
138 let Inst{22-21} = df;
Jack Carter3eb663b2013-09-26 00:09:46 +0000139 let Inst{20-16} = wt;
140 let Inst{15-11} = ws;
141 let Inst{10-6} = wd;
Jack Carter3a2c2d42013-08-13 20:54:07 +0000142 let Inst{5-0} = minor;
143}
144
Jack Carterbabdcc82013-08-15 12:24:57 +0000145class MSA_3RF_FMT<bits<4> major, bits<1> df, bits<6> minor>: MSAInst {
Jack Cartercb8b40b2013-09-26 21:31:43 +0000146 bits<5> wt;
147 bits<5> ws;
148 bits<5> wd;
149
Jack Carterbabdcc82013-08-15 12:24:57 +0000150 let Inst{25-22} = major;
151 let Inst{21} = df;
Jack Cartercb8b40b2013-09-26 21:31:43 +0000152 let Inst{20-16} = wt;
153 let Inst{15-11} = ws;
154 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000155 let Inst{5-0} = minor;
156}
157
Matheus Almeida70fbf772013-10-21 11:47:56 +0000158class MSA_3R_INDEX_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
159 bits<5> rt;
160 bits<5> ws;
161 bits<5> wd;
162
163 let Inst{25-23} = major;
164 let Inst{22-21} = df;
165 let Inst{20-16} = rt;
166 let Inst{15-11} = ws;
167 let Inst{10-6} = wd;
168 let Inst{5-0} = minor;
169}
170
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000171class MSA_ELM_FMT<bits<10> major, bits<6> minor>: MSAInst {
Matheus Almeida83d797d2013-10-21 12:43:54 +0000172 bits<5> ws;
173 bits<5> wd;
174
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000175 let Inst{25-16} = major;
Matheus Almeida83d797d2013-10-21 12:43:54 +0000176 let Inst{15-11} = ws;
177 let Inst{10-6} = wd;
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000178 let Inst{5-0} = minor;
179}
180
Matheus Almeidaa591fdc2013-10-21 12:26:50 +0000181class MSA_ELM_CFCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
182 bits<5> rd;
183 bits<5> cs;
184
185 let Inst{25-16} = major;
186 let Inst{15-11} = cs;
187 let Inst{10-6} = rd;
188 let Inst{5-0} = minor;
189}
190
191class MSA_ELM_CTCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
192 bits<5> rs;
193 bits<5> cd;
194
195 let Inst{25-16} = major;
196 let Inst{15-11} = rs;
197 let Inst{10-6} = cd;
198 let Inst{5-0} = minor;
199}
200
Jack Carterbabdcc82013-08-15 12:24:57 +0000201class MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000202 bits<4> n;
203 bits<5> ws;
204 bits<5> wd;
205
Jack Carterbabdcc82013-08-15 12:24:57 +0000206 let Inst{25-22} = major;
207 let Inst{21-20} = 0b00;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000208 let Inst{19-16} = n{3-0};
209 let Inst{15-11} = ws;
210 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000211 let Inst{5-0} = minor;
212}
213
214class MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000215 bits<4> n;
216 bits<5> ws;
217 bits<5> wd;
218
Jack Carterbabdcc82013-08-15 12:24:57 +0000219 let Inst{25-22} = major;
220 let Inst{21-19} = 0b100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000221 let Inst{18-16} = n{2-0};
222 let Inst{15-11} = ws;
223 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000224 let Inst{5-0} = minor;
225}
226
227class MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000228 bits<4> n;
229 bits<5> ws;
230 bits<5> wd;
231
Jack Carterbabdcc82013-08-15 12:24:57 +0000232 let Inst{25-22} = major;
233 let Inst{21-18} = 0b1100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000234 let Inst{17-16} = n{1-0};
235 let Inst{15-11} = ws;
236 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000237 let Inst{5-0} = minor;
238}
239
240class MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000241 bits<4> n;
242 bits<5> ws;
243 bits<5> wd;
244
Jack Carterbabdcc82013-08-15 12:24:57 +0000245 let Inst{25-22} = major;
246 let Inst{21-17} = 0b11100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000247 let Inst{16} = n{0};
248 let Inst{15-11} = ws;
249 let Inst{10-6} = wd;
250 let Inst{5-0} = minor;
251}
252
253class MSA_ELM_COPY_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
254 bits<4> n;
255 bits<5> ws;
256 bits<5> rd;
257
258 let Inst{25-22} = major;
259 let Inst{21-20} = 0b00;
260 let Inst{19-16} = n{3-0};
261 let Inst{15-11} = ws;
262 let Inst{10-6} = rd;
263 let Inst{5-0} = minor;
264}
265
266class MSA_ELM_COPY_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
267 bits<4> n;
268 bits<5> ws;
269 bits<5> rd;
270
271 let Inst{25-22} = major;
272 let Inst{21-19} = 0b100;
273 let Inst{18-16} = n{2-0};
274 let Inst{15-11} = ws;
275 let Inst{10-6} = rd;
276 let Inst{5-0} = minor;
277}
278
279class MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
280 bits<4> n;
281 bits<5> ws;
282 bits<5> rd;
283
284 let Inst{25-22} = major;
285 let Inst{21-18} = 0b1100;
286 let Inst{17-16} = n{1-0};
287 let Inst{15-11} = ws;
288 let Inst{10-6} = rd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000289 let Inst{5-0} = minor;
290}
291
Matheus Almeida74070322014-01-29 14:05:28 +0000292class MSA_ELM_COPY_D_FMT<bits<4> major, bits<6> minor>: MSA64Inst {
293 bits<4> n;
294 bits<5> ws;
295 bits<5> rd;
296
297 let Inst{25-22} = major;
298 let Inst{21-17} = 0b11100;
299 let Inst{16} = n{0};
300 let Inst{15-11} = ws;
301 let Inst{10-6} = rd;
302 let Inst{5-0} = minor;
303}
304
Matheus Almeidab74293d2013-10-14 11:49:30 +0000305class MSA_ELM_INSERT_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
306 bits<6> n;
307 bits<5> rs;
308 bits<5> wd;
309
310 let Inst{25-22} = major;
311 let Inst{21-20} = 0b00;
312 let Inst{19-16} = n{3-0};
313 let Inst{15-11} = rs;
314 let Inst{10-6} = wd;
315 let Inst{5-0} = minor;
316}
317
318class MSA_ELM_INSERT_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
319 bits<6> n;
320 bits<5> rs;
321 bits<5> wd;
322
323 let Inst{25-22} = major;
324 let Inst{21-19} = 0b100;
325 let Inst{18-16} = n{2-0};
326 let Inst{15-11} = rs;
327 let Inst{10-6} = wd;
328 let Inst{5-0} = minor;
329}
330
331class MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
332 bits<6> n;
333 bits<5> rs;
334 bits<5> wd;
335
336 let Inst{25-22} = major;
337 let Inst{21-18} = 0b1100;
338 let Inst{17-16} = n{1-0};
339 let Inst{15-11} = rs;
340 let Inst{10-6} = wd;
341 let Inst{5-0} = minor;
342}
343
Jack Carter3a2c2d42013-08-13 20:54:07 +0000344class MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carterc3b25682013-09-30 17:58:07 +0000345 bits<5> imm;
346 bits<5> ws;
347 bits<5> wd;
348
Jack Carter3a2c2d42013-08-13 20:54:07 +0000349 let Inst{25-23} = major;
350 let Inst{22-21} = df;
Jack Carterc3b25682013-09-30 17:58:07 +0000351 let Inst{20-16} = imm;
352 let Inst{15-11} = ws;
353 let Inst{10-6} = wd;
Jack Carter3a2c2d42013-08-13 20:54:07 +0000354 let Inst{5-0} = minor;
355}
Jack Carterbabdcc82013-08-15 12:24:57 +0000356
357class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst {
Jack Carter8ff70e32013-09-30 18:05:18 +0000358 bits<8> u8;
359 bits<5> ws;
360 bits<5> wd;
361
Jack Carterbabdcc82013-08-15 12:24:57 +0000362 let Inst{25-24} = major;
Jack Carter8ff70e32013-09-30 18:05:18 +0000363 let Inst{23-16} = u8;
364 let Inst{15-11} = ws;
365 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000366 let Inst{5-0} = minor;
367}
368
369class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Matheus Almeida8ddad152013-10-21 12:56:20 +0000370 bits<10> s10;
371 bits<5> wd;
372
Jack Carterbabdcc82013-08-15 12:24:57 +0000373 let Inst{25-23} = major;
374 let Inst{22-21} = df;
Matheus Almeida8ddad152013-10-21 12:56:20 +0000375 let Inst{20-11} = s10;
376 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000377 let Inst{5-0} = minor;
378}
Daniel Sanders869bdad2013-08-20 08:38:21 +0000379
Matheus Almeidafe0bf9f2013-10-21 13:07:13 +0000380class MSA_MI10_FMT<bits<2> df, bits<4> minor>: MSAInst {
381 bits<21> addr;
382 bits<5> wd;
383
384 let Inst{25-16} = addr{9-0};
385 let Inst{15-11} = addr{20-16};
386 let Inst{10-6} = wd;
387 let Inst{5-2} = minor;
388 let Inst{1-0} = df;
389}
390
Daniel Sanders869bdad2013-08-20 08:38:21 +0000391class MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst {
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000392 bits<5> wt;
393 bits<5> ws;
394 bits<5> wd;
395
Daniel Sanders869bdad2013-08-20 08:38:21 +0000396 let Inst{25-21} = major;
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000397 let Inst{20-16} = wt;
398 let Inst{15-11} = ws;
399 let Inst{10-6} = wd;
Daniel Sanders869bdad2013-08-20 08:38:21 +0000400 let Inst{5-0} = minor;
401}
Daniel Sandersce09d072013-08-28 12:14:50 +0000402
Matheus Almeidaeb68d9d2013-10-22 09:43:32 +0000403class MSA_CBRANCH_FMT<bits<3> major, bits<2> df>: MSACBranch {
404 bits<16> offset;
405 bits<5> wt;
406
407 let Inst{25-23} = major;
408 let Inst{22-21} = df;
409 let Inst{20-16} = wt;
410 let Inst{15-0} = offset;
411}
412
413class MSA_CBRANCH_V_FMT<bits<5> major>: MSACBranch {
414 bits<16> offset;
415 bits<5> wt;
416
Daniel Sandersce09d072013-08-28 12:14:50 +0000417 let Inst{25-21} = major;
Matheus Almeidaeb68d9d2013-10-22 09:43:32 +0000418 let Inst{20-16} = wt;
419 let Inst{15-0} = offset;
Daniel Sandersce09d072013-08-28 12:14:50 +0000420}
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000421
Matheus Almeidabe8681b2013-10-23 13:20:07 +0000422class SPECIAL_LSA_FMT<bits<6> minor>: MSASpecial {
423 bits<5> rs;
424 bits<5> rt;
425 bits<5> rd;
426 bits<2> sa;
427
428 let Inst{25-21} = rs;
429 let Inst{20-16} = rt;
430 let Inst{15-11} = rd;
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000431 let Inst{10-8} = 0b000;
Matheus Almeidabe8681b2013-10-23 13:20:07 +0000432 let Inst{7-6} = sa;
433 let Inst{5-0} = minor;
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000434}