blob: c9b37451701b197b90d3538a90b84fdaf4711254 [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
Jack Carterbabdcc82013-08-15 12:24:57 +0000153class MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000154 bits<4> n;
155 bits<5> ws;
156 bits<5> wd;
157
Jack Carterbabdcc82013-08-15 12:24:57 +0000158 let Inst{25-22} = major;
159 let Inst{21-20} = 0b00;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000160 let Inst{19-16} = n{3-0};
161 let Inst{15-11} = ws;
162 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000163 let Inst{5-0} = minor;
164}
165
166class MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000167 bits<4> n;
168 bits<5> ws;
169 bits<5> wd;
170
Jack Carterbabdcc82013-08-15 12:24:57 +0000171 let Inst{25-22} = major;
172 let Inst{21-19} = 0b100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000173 let Inst{18-16} = n{2-0};
174 let Inst{15-11} = ws;
175 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000176 let Inst{5-0} = minor;
177}
178
179class MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000180 bits<4> n;
181 bits<5> ws;
182 bits<5> wd;
183
Jack Carterbabdcc82013-08-15 12:24:57 +0000184 let Inst{25-22} = major;
185 let Inst{21-18} = 0b1100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000186 let Inst{17-16} = n{1-0};
187 let Inst{15-11} = ws;
188 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000189 let Inst{5-0} = minor;
190}
191
192class MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000193 bits<4> n;
194 bits<5> ws;
195 bits<5> wd;
196
Jack Carterbabdcc82013-08-15 12:24:57 +0000197 let Inst{25-22} = major;
198 let Inst{21-17} = 0b11100;
Matheus Almeidabc189eb2013-10-14 12:22:43 +0000199 let Inst{16} = n{0};
200 let Inst{15-11} = ws;
201 let Inst{10-6} = wd;
202 let Inst{5-0} = minor;
203}
204
205class MSA_ELM_COPY_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
206 bits<4> n;
207 bits<5> ws;
208 bits<5> rd;
209
210 let Inst{25-22} = major;
211 let Inst{21-20} = 0b00;
212 let Inst{19-16} = n{3-0};
213 let Inst{15-11} = ws;
214 let Inst{10-6} = rd;
215 let Inst{5-0} = minor;
216}
217
218class MSA_ELM_COPY_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
219 bits<4> n;
220 bits<5> ws;
221 bits<5> rd;
222
223 let Inst{25-22} = major;
224 let Inst{21-19} = 0b100;
225 let Inst{18-16} = n{2-0};
226 let Inst{15-11} = ws;
227 let Inst{10-6} = rd;
228 let Inst{5-0} = minor;
229}
230
231class MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
232 bits<4> n;
233 bits<5> ws;
234 bits<5> rd;
235
236 let Inst{25-22} = major;
237 let Inst{21-18} = 0b1100;
238 let Inst{17-16} = n{1-0};
239 let Inst{15-11} = ws;
240 let Inst{10-6} = rd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000241 let Inst{5-0} = minor;
242}
243
Matheus Almeidab74293d2013-10-14 11:49:30 +0000244class MSA_ELM_INSERT_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
245 bits<6> n;
246 bits<5> rs;
247 bits<5> wd;
248
249 let Inst{25-22} = major;
250 let Inst{21-20} = 0b00;
251 let Inst{19-16} = n{3-0};
252 let Inst{15-11} = rs;
253 let Inst{10-6} = wd;
254 let Inst{5-0} = minor;
255}
256
257class MSA_ELM_INSERT_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
258 bits<6> n;
259 bits<5> rs;
260 bits<5> wd;
261
262 let Inst{25-22} = major;
263 let Inst{21-19} = 0b100;
264 let Inst{18-16} = n{2-0};
265 let Inst{15-11} = rs;
266 let Inst{10-6} = wd;
267 let Inst{5-0} = minor;
268}
269
270class MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
271 bits<6> n;
272 bits<5> rs;
273 bits<5> wd;
274
275 let Inst{25-22} = major;
276 let Inst{21-18} = 0b1100;
277 let Inst{17-16} = n{1-0};
278 let Inst{15-11} = rs;
279 let Inst{10-6} = wd;
280 let Inst{5-0} = minor;
281}
282
Jack Carter3a2c2d42013-08-13 20:54:07 +0000283class MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
Jack Carterc3b25682013-09-30 17:58:07 +0000284 bits<5> imm;
285 bits<5> ws;
286 bits<5> wd;
287
Jack Carter3a2c2d42013-08-13 20:54:07 +0000288 let Inst{25-23} = major;
289 let Inst{22-21} = df;
Jack Carterc3b25682013-09-30 17:58:07 +0000290 let Inst{20-16} = imm;
291 let Inst{15-11} = ws;
292 let Inst{10-6} = wd;
Jack Carter3a2c2d42013-08-13 20:54:07 +0000293 let Inst{5-0} = minor;
294}
Jack Carterbabdcc82013-08-15 12:24:57 +0000295
296class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst {
Jack Carter8ff70e32013-09-30 18:05:18 +0000297 bits<8> u8;
298 bits<5> ws;
299 bits<5> wd;
300
Jack Carterbabdcc82013-08-15 12:24:57 +0000301 let Inst{25-24} = major;
Jack Carter8ff70e32013-09-30 18:05:18 +0000302 let Inst{23-16} = u8;
303 let Inst{15-11} = ws;
304 let Inst{10-6} = wd;
Jack Carterbabdcc82013-08-15 12:24:57 +0000305 let Inst{5-0} = minor;
306}
307
308class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
309 let Inst{25-23} = major;
310 let Inst{22-21} = df;
311 let Inst{5-0} = minor;
312}
Daniel Sanders869bdad2013-08-20 08:38:21 +0000313
314class MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst {
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000315 bits<5> wt;
316 bits<5> ws;
317 bits<5> wd;
318
Daniel Sanders869bdad2013-08-20 08:38:21 +0000319 let Inst{25-21} = major;
Matheus Almeida5be0cd82013-10-14 12:57:18 +0000320 let Inst{20-16} = wt;
321 let Inst{15-11} = ws;
322 let Inst{10-6} = wd;
Daniel Sanders869bdad2013-08-20 08:38:21 +0000323 let Inst{5-0} = minor;
324}
Daniel Sandersce09d072013-08-28 12:14:50 +0000325
326class MSA_VECS10_FMT<bits<5> major, bits<6> minor>: MSAInst {
327 let Inst{25-21} = major;
328 let Inst{5-0} = minor;
329}
Daniel Sandersa4eaf592013-10-17 13:38:20 +0000330
331class SPECIAL_LSA_FMT: MSAInst {
332 let Inst{25-21} = 0b000000;
333 let Inst{10-8} = 0b000;
334 let Inst{5-0} = 0b000101;
335}