blob: 8fe4dbca569dce02dc7b6fbd53969c414184bdd6 [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 {
149 let Inst{25-16} = major;
150 let Inst{5-0} = minor;
151}
152
Matheus Almeidaa591fdc2013-10-21 12:26:50 +0000153class MSA_ELM_CFCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
154 bits<5> rd;
155 bits<5> cs;
156
157 let Inst{25-16} = major;
158 let Inst{15-11} = cs;
159 let Inst{10-6} = rd;
160 let Inst{5-0} = minor;
161}
162
163class MSA_ELM_CTCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
164 bits<5> rs;
165 bits<5> cd;
166
167 let Inst{25-16} = major;
168 let Inst{15-11} = rs;
169 let Inst{10-6} = cd;
170 let Inst{5-0} = minor;
171}
172
Jack Carterbabdcc82013-08-15 12:24:57 +0000173class MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000174 bits<4> n;
175 bits<5> ws;
176 bits<5> wd;
177
Jack Carterbabdcc82013-08-15 12:24:57 +0000178 let Inst{25-22} = major;
179 let Inst{21-20} = 0b00;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000180 let Inst{19-16} = n{3-0};
181 let Inst{15-11} = ws;
182 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000183 let Inst{5-0} = minor;
184}
185
186class MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000187 bits<4> n;
188 bits<5> ws;
189 bits<5> wd;
190
Jack Carterbabdcc82013-08-15 12:24:57 +0000191 let Inst{25-22} = major;
192 let Inst{21-19} = 0b100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000193 let Inst{18-16} = n{2-0};
194 let Inst{15-11} = ws;
195 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000196 let Inst{5-0} = minor;
197}
198
199class MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000200 bits<4> n;
201 bits<5> ws;
202 bits<5> wd;
203
Jack Carterbabdcc82013-08-15 12:24:57 +0000204 let Inst{25-22} = major;
205 let Inst{21-18} = 0b1100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000206 let Inst{17-16} = n{1-0};
207 let Inst{15-11} = ws;
208 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000209 let Inst{5-0} = minor;
210}
211
212class MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000213 bits<4> n;
214 bits<5> ws;
215 bits<5> wd;
216
Jack Carterbabdcc82013-08-15 12:24:57 +0000217 let Inst{25-22} = major;
218 let Inst{21-17} = 0b11100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000219 let Inst{16} = n{0};
220 let Inst{15-11} = ws;
221 let Inst{10-6} = wd;
222 let Inst{5-0} = minor;
223}
224
225class MSA_ELM_COPY_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
226 bits<4> n;
227 bits<5> ws;
228 bits<5> rd;
229
230 let Inst{25-22} = major;
231 let Inst{21-20} = 0b00;
232 let Inst{19-16} = n{3-0};
233 let Inst{15-11} = ws;
234 let Inst{10-6} = rd;
235 let Inst{5-0} = minor;
236}
237
238class MSA_ELM_COPY_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
239 bits<4> n;
240 bits<5> ws;
241 bits<5> rd;
242
243 let Inst{25-22} = major;
244 let Inst{21-19} = 0b100;
245 let Inst{18-16} = n{2-0};
246 let Inst{15-11} = ws;
247 let Inst{10-6} = rd;
248 let Inst{5-0} = minor;
249}
250
251class MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
252 bits<4> n;
253 bits<5> ws;
254 bits<5> rd;
255
256 let Inst{25-22} = major;
257 let Inst{21-18} = 0b1100;
258 let Inst{17-16} = n{1-0};
259 let Inst{15-11} = ws;
260 let Inst{10-6} = rd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000261 let Inst{5-0} = minor;
262}
263
Matheus Almeidab74293d2013-10-14 11:49:30 +0000264class MSA_ELM_INSERT_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
265 bits<6> n;
266 bits<5> rs;
267 bits<5> wd;
268
269 let Inst{25-22} = major;
270 let Inst{21-20} = 0b00;
271 let Inst{19-16} = n{3-0};
272 let Inst{15-11} = rs;
273 let Inst{10-6} = wd;
274 let Inst{5-0} = minor;
275}
276
277class MSA_ELM_INSERT_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
278 bits<6> n;
279 bits<5> rs;
280 bits<5> wd;
281
282 let Inst{25-22} = major;
283 let Inst{21-19} = 0b100;
284 let Inst{18-16} = n{2-0};
285 let Inst{15-11} = rs;
286 let Inst{10-6} = wd;
287 let Inst{5-0} = minor;
288}
289
290class MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
291 bits<6> n;
292 bits<5> rs;
293 bits<5> wd;
294
295 let Inst{25-22} = major;
296 let Inst{21-18} = 0b1100;
297 let Inst{17-16} = n{1-0};
298 let Inst{15-11} = rs;
299 let Inst{10-6} = wd;
300 let Inst{5-0} = minor;
301}
302
Jack Carter3a2c2d42013-08-13 20:54:07 +0000303class MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carterc3b25682013-09-30 17:58:07 +0000304 bits<5> imm;
305 bits<5> ws;
306 bits<5> wd;
307
Jack Carter3a2c2d42013-08-13 20:54:07 +0000308 let Inst{25-23} = major;
309 let Inst{22-21} = df;
Jack Carterc3b25682013-09-30 17:58:07 +0000310 let Inst{20-16} = imm;
311 let Inst{15-11} = ws;
312 let Inst{10-6} = wd;
Jack Carter3a2c2d42013-08-13 20:54:07 +0000313 let Inst{5-0} = minor;
314}
Jack Carterbabdcc82013-08-15 12:24:57 +0000315
316class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst {
Jack Carter8ff70e32013-09-30 18:05:18 +0000317 bits<8> u8;
318 bits<5> ws;
319 bits<5> wd;
320
Jack Carterbabdcc82013-08-15 12:24:57 +0000321 let Inst{25-24} = major;
Jack Carter8ff70e32013-09-30 18:05:18 +0000322 let Inst{23-16} = u8;
323 let Inst{15-11} = ws;
324 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000325 let Inst{5-0} = minor;
326}
327
328class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
329 let Inst{25-23} = major;
330 let Inst{22-21} = df;
331 let Inst{5-0} = minor;
332}
Daniel Sanders869bdad2013-08-20 08:38:21 +0000333
334class MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst {
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000335 bits<5> wt;
336 bits<5> ws;
337 bits<5> wd;
338
Daniel Sanders869bdad2013-08-20 08:38:21 +0000339 let Inst{25-21} = major;
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000340 let Inst{20-16} = wt;
341 let Inst{15-11} = ws;
342 let Inst{10-6} = wd;
Daniel Sanders869bdad2013-08-20 08:38:21 +0000343 let Inst{5-0} = minor;
344}
Daniel Sandersce09d072013-08-28 12:14:50 +0000345
346class MSA_VECS10_FMT<bits<5> major, bits<6> minor>: MSAInst {
347 let Inst{25-21} = major;
348 let Inst{5-0} = minor;
349}
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000350
351class SPECIAL_LSA_FMT: MSAInst {
352 let Inst{25-21} = 0b000000;
353 let Inst{10-8} = 0b000;
354 let Inst{5-0} = 0b000101;
355}