blob: 1357deb83688d841dbcda9033ad23c96edc5c11a [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
18class PseudoMSA<dag outs, dag ins, list<dag> pattern,
19 InstrItinClass itin = IIPseudo>:
20 MipsPseudo<outs, ins, pattern, itin> {
21 let Predicates = [HasMSA];
22}
23
Jack Carterbabdcc82013-08-15 12:24:57 +000024class MSA_BIT_B_FMT<bits<3> major, bits<6> minor>: MSAInst {
Matheus Almeida21021882013-10-14 13:07:39 +000025 bits<5> ws;
26 bits<5> wd;
27 bits<3> m;
28
Jack Carterbabdcc82013-08-15 12:24:57 +000029 let Inst{25-23} = major;
30 let Inst{22-19} = 0b1110;
Matheus Almeida21021882013-10-14 13:07:39 +000031 let Inst{18-16} = m;
32 let Inst{15-11} = ws;
33 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000034 let Inst{5-0} = minor;
35}
36
37class MSA_BIT_H_FMT<bits<3> major, bits<6> minor>: MSAInst {
Matheus Almeida21021882013-10-14 13:07:39 +000038 bits<5> ws;
39 bits<5> wd;
40 bits<4> m;
41
Jack Carterbabdcc82013-08-15 12:24:57 +000042 let Inst{25-23} = major;
43 let Inst{22-20} = 0b110;
Matheus Almeida21021882013-10-14 13:07:39 +000044 let Inst{19-16} = m;
45 let Inst{15-11} = ws;
46 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000047 let Inst{5-0} = minor;
48}
49
50class MSA_BIT_W_FMT<bits<3> major, bits<6> minor>: MSAInst {
Matheus Almeida21021882013-10-14 13:07:39 +000051 bits<5> ws;
52 bits<5> wd;
53 bits<5> m;
54
Jack Carterbabdcc82013-08-15 12:24:57 +000055 let Inst{25-23} = major;
56 let Inst{22-21} = 0b10;
Matheus Almeida21021882013-10-14 13:07:39 +000057 let Inst{20-16} = m;
58 let Inst{15-11} = ws;
59 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000060 let Inst{5-0} = minor;
61}
62
63class MSA_BIT_D_FMT<bits<3> major, bits<6> minor>: MSAInst {
Matheus Almeida21021882013-10-14 13:07:39 +000064 bits<5> ws;
65 bits<5> wd;
66 bits<6> m;
67
Jack Carterbabdcc82013-08-15 12:24:57 +000068 let Inst{25-23} = major;
69 let Inst{22} = 0b0;
Matheus Almeida21021882013-10-14 13:07:39 +000070 let Inst{21-16} = m;
71 let Inst{15-11} = ws;
72 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000073 let Inst{5-0} = minor;
74}
75
Jack Carter6eed9cc2013-09-30 17:43:04 +000076class MSA_2R_FILL_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
77 bits<5> rs;
78 bits<5> wd;
79
80 let Inst{25-18} = major;
81 let Inst{17-16} = df;
82 let Inst{15-11} = rs;
83 let Inst{10-6} = wd;
84 let Inst{5-0} = minor;
85}
86
Jack Carterbabdcc82013-08-15 12:24:57 +000087class MSA_2R_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carter92e6e0f2013-09-30 17:52:33 +000088 bits<5> ws;
89 bits<5> wd;
90
Jack Carterbabdcc82013-08-15 12:24:57 +000091 let Inst{25-18} = major;
92 let Inst{17-16} = df;
Jack Carter92e6e0f2013-09-30 17:52:33 +000093 let Inst{15-11} = ws;
94 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +000095 let Inst{5-0} = minor;
96}
97
98class MSA_2RF_FMT<bits<9> major, bits<1> df, bits<6> minor>: MSAInst {
Jack Carter5dc8ac92013-09-25 23:50:44 +000099 bits<5> ws;
100 bits<5> wd;
101
Jack Carterbabdcc82013-08-15 12:24:57 +0000102 let Inst{25-17} = major;
103 let Inst{16} = df;
Jack Carter5dc8ac92013-09-25 23:50:44 +0000104 let Inst{15-11} = ws;
105 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000106 let Inst{5-0} = minor;
107}
108
Jack Carter3a2c2d42013-08-13 20:54:07 +0000109class MSA_3R_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carter3eb663b2013-09-26 00:09:46 +0000110 bits<5> wt;
111 bits<5> ws;
112 bits<5> wd;
113
Jack Carter3a2c2d42013-08-13 20:54:07 +0000114 let Inst{25-23} = major;
115 let Inst{22-21} = df;
Jack Carter3eb663b2013-09-26 00:09:46 +0000116 let Inst{20-16} = wt;
117 let Inst{15-11} = ws;
118 let Inst{10-6} = wd;
Jack Carter3a2c2d42013-08-13 20:54:07 +0000119 let Inst{5-0} = minor;
120}
121
Jack Carterbabdcc82013-08-15 12:24:57 +0000122class MSA_3RF_FMT<bits<4> major, bits<1> df, bits<6> minor>: MSAInst {
Jack Cartercb8b40b2013-09-26 21:31:43 +0000123 bits<5> wt;
124 bits<5> ws;
125 bits<5> wd;
126
Jack Carterbabdcc82013-08-15 12:24:57 +0000127 let Inst{25-22} = major;
128 let Inst{21} = df;
Jack Cartercb8b40b2013-09-26 21:31:43 +0000129 let Inst{20-16} = wt;
130 let Inst{15-11} = ws;
131 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000132 let Inst{5-0} = minor;
133}
134
Matheus Almeida70fbf772013-10-21 11:47:56 +0000135class MSA_3R_INDEX_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
136 bits<5> rt;
137 bits<5> ws;
138 bits<5> wd;
139
140 let Inst{25-23} = major;
141 let Inst{22-21} = df;
142 let Inst{20-16} = rt;
143 let Inst{15-11} = ws;
144 let Inst{10-6} = wd;
145 let Inst{5-0} = minor;
146}
147
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000148class MSA_ELM_FMT<bits<10> major, bits<6> minor>: MSAInst {
Matheus Almeida83d797d2013-10-21 12:43:54 +0000149 bits<5> ws;
150 bits<5> wd;
151
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000152 let Inst{25-16} = major;
Matheus Almeida83d797d2013-10-21 12:43:54 +0000153 let Inst{15-11} = ws;
154 let Inst{10-6} = wd;
Daniel Sandersf9aa1d12013-08-28 10:26:24 +0000155 let Inst{5-0} = minor;
156}
157
Matheus Almeidaa591fdc2013-10-21 12:26:50 +0000158class MSA_ELM_CFCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
159 bits<5> rd;
160 bits<5> cs;
161
162 let Inst{25-16} = major;
163 let Inst{15-11} = cs;
164 let Inst{10-6} = rd;
165 let Inst{5-0} = minor;
166}
167
168class MSA_ELM_CTCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
169 bits<5> rs;
170 bits<5> cd;
171
172 let Inst{25-16} = major;
173 let Inst{15-11} = rs;
174 let Inst{10-6} = cd;
175 let Inst{5-0} = minor;
176}
177
Jack Carterbabdcc82013-08-15 12:24:57 +0000178class MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000179 bits<4> n;
180 bits<5> ws;
181 bits<5> wd;
182
Jack Carterbabdcc82013-08-15 12:24:57 +0000183 let Inst{25-22} = major;
184 let Inst{21-20} = 0b00;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000185 let Inst{19-16} = n{3-0};
186 let Inst{15-11} = ws;
187 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000188 let Inst{5-0} = minor;
189}
190
191class MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000192 bits<4> n;
193 bits<5> ws;
194 bits<5> wd;
195
Jack Carterbabdcc82013-08-15 12:24:57 +0000196 let Inst{25-22} = major;
197 let Inst{21-19} = 0b100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000198 let Inst{18-16} = n{2-0};
199 let Inst{15-11} = ws;
200 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000201 let Inst{5-0} = minor;
202}
203
204class MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000205 bits<4> n;
206 bits<5> ws;
207 bits<5> wd;
208
Jack Carterbabdcc82013-08-15 12:24:57 +0000209 let Inst{25-22} = major;
210 let Inst{21-18} = 0b1100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000211 let Inst{17-16} = n{1-0};
212 let Inst{15-11} = ws;
213 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000214 let Inst{5-0} = minor;
215}
216
217class MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000218 bits<4> n;
219 bits<5> ws;
220 bits<5> wd;
221
Jack Carterbabdcc82013-08-15 12:24:57 +0000222 let Inst{25-22} = major;
223 let Inst{21-17} = 0b11100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000224 let Inst{16} = n{0};
225 let Inst{15-11} = ws;
226 let Inst{10-6} = wd;
227 let Inst{5-0} = minor;
228}
229
230class MSA_ELM_COPY_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
231 bits<4> n;
232 bits<5> ws;
233 bits<5> rd;
234
235 let Inst{25-22} = major;
236 let Inst{21-20} = 0b00;
237 let Inst{19-16} = n{3-0};
238 let Inst{15-11} = ws;
239 let Inst{10-6} = rd;
240 let Inst{5-0} = minor;
241}
242
243class MSA_ELM_COPY_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
244 bits<4> n;
245 bits<5> ws;
246 bits<5> rd;
247
248 let Inst{25-22} = major;
249 let Inst{21-19} = 0b100;
250 let Inst{18-16} = n{2-0};
251 let Inst{15-11} = ws;
252 let Inst{10-6} = rd;
253 let Inst{5-0} = minor;
254}
255
256class MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
257 bits<4> n;
258 bits<5> ws;
259 bits<5> rd;
260
261 let Inst{25-22} = major;
262 let Inst{21-18} = 0b1100;
263 let Inst{17-16} = n{1-0};
264 let Inst{15-11} = ws;
265 let Inst{10-6} = rd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000266 let Inst{5-0} = minor;
267}
268
Matheus Almeidab74293d2013-10-14 11:49:30 +0000269class MSA_ELM_INSERT_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
270 bits<6> n;
271 bits<5> rs;
272 bits<5> wd;
273
274 let Inst{25-22} = major;
275 let Inst{21-20} = 0b00;
276 let Inst{19-16} = n{3-0};
277 let Inst{15-11} = rs;
278 let Inst{10-6} = wd;
279 let Inst{5-0} = minor;
280}
281
282class MSA_ELM_INSERT_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
283 bits<6> n;
284 bits<5> rs;
285 bits<5> wd;
286
287 let Inst{25-22} = major;
288 let Inst{21-19} = 0b100;
289 let Inst{18-16} = n{2-0};
290 let Inst{15-11} = rs;
291 let Inst{10-6} = wd;
292 let Inst{5-0} = minor;
293}
294
295class MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
296 bits<6> n;
297 bits<5> rs;
298 bits<5> wd;
299
300 let Inst{25-22} = major;
301 let Inst{21-18} = 0b1100;
302 let Inst{17-16} = n{1-0};
303 let Inst{15-11} = rs;
304 let Inst{10-6} = wd;
305 let Inst{5-0} = minor;
306}
307
Jack Carter3a2c2d42013-08-13 20:54:07 +0000308class MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carterc3b25682013-09-30 17:58:07 +0000309 bits<5> imm;
310 bits<5> ws;
311 bits<5> wd;
312
Jack Carter3a2c2d42013-08-13 20:54:07 +0000313 let Inst{25-23} = major;
314 let Inst{22-21} = df;
Jack Carterc3b25682013-09-30 17:58:07 +0000315 let Inst{20-16} = imm;
316 let Inst{15-11} = ws;
317 let Inst{10-6} = wd;
Jack Carter3a2c2d42013-08-13 20:54:07 +0000318 let Inst{5-0} = minor;
319}
Jack Carterbabdcc82013-08-15 12:24:57 +0000320
321class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst {
Jack Carter8ff70e32013-09-30 18:05:18 +0000322 bits<8> u8;
323 bits<5> ws;
324 bits<5> wd;
325
Jack Carterbabdcc82013-08-15 12:24:57 +0000326 let Inst{25-24} = major;
Jack Carter8ff70e32013-09-30 18:05:18 +0000327 let Inst{23-16} = u8;
328 let Inst{15-11} = ws;
329 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000330 let Inst{5-0} = minor;
331}
332
333class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Matheus Almeida8ddad152013-10-21 12:56:20 +0000334 bits<10> s10;
335 bits<5> wd;
336
Jack Carterbabdcc82013-08-15 12:24:57 +0000337 let Inst{25-23} = major;
338 let Inst{22-21} = df;
Matheus Almeida8ddad152013-10-21 12:56:20 +0000339 let Inst{20-11} = s10;
340 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000341 let Inst{5-0} = minor;
342}
Daniel Sanders869bdad2013-08-20 08:38:21 +0000343
Matheus Almeidafe0bf9f2013-10-21 13:07:13 +0000344class MSA_MI10_FMT<bits<2> df, bits<4> minor>: MSAInst {
345 bits<21> addr;
346 bits<5> wd;
347
348 let Inst{25-16} = addr{9-0};
349 let Inst{15-11} = addr{20-16};
350 let Inst{10-6} = wd;
351 let Inst{5-2} = minor;
352 let Inst{1-0} = df;
353}
354
Daniel Sanders869bdad2013-08-20 08:38:21 +0000355class MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst {
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000356 bits<5> wt;
357 bits<5> ws;
358 bits<5> wd;
359
Daniel Sanders869bdad2013-08-20 08:38:21 +0000360 let Inst{25-21} = major;
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000361 let Inst{20-16} = wt;
362 let Inst{15-11} = ws;
363 let Inst{10-6} = wd;
Daniel Sanders869bdad2013-08-20 08:38:21 +0000364 let Inst{5-0} = minor;
365}
Daniel Sandersce09d072013-08-28 12:14:50 +0000366
367class MSA_VECS10_FMT<bits<5> major, bits<6> minor>: MSAInst {
368 let Inst{25-21} = major;
369 let Inst{5-0} = minor;
370}
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000371
372class SPECIAL_LSA_FMT: MSAInst {
373 let Inst{25-21} = 0b000000;
374 let Inst{10-8} = 0b000;
375 let Inst{5-0} = 0b000101;
376}