]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/lib/Target/Mips/MipsMSAInstrFormats.td
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / lib / Target / Mips / MipsMSAInstrFormats.td
1 //===- 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
10 def HasMSA : Predicate<"Subtarget.hasMSA()">,
11              AssemblerPredicate<"FeatureMSA">;
12
13 class MSAInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> {
14   let Predicates = [HasMSA];
15   let Inst{31-26} = 0b011110;
16 }
17
18 class MSACBranch : MSAInst {
19   let Inst{31-26} = 0b010001;
20 }
21
22 class MSASpecial : MSAInst {
23   let Inst{31-26} = 0b000000;
24 }
25
26 class PseudoMSA<dag outs, dag ins, list<dag> pattern,
27                 InstrItinClass itin = IIPseudo>:
28   MipsPseudo<outs, ins, pattern, itin> {
29   let Predicates = [HasMSA];
30 }
31
32 class MSA_BIT_B_FMT<bits<3> major, bits<6> minor>: MSAInst {
33   bits<5> ws;
34   bits<5> wd;
35   bits<3> m;
36
37   let Inst{25-23} = major;
38   let Inst{22-19} = 0b1110;
39   let Inst{18-16} = m;
40   let Inst{15-11} = ws;
41   let Inst{10-6} = wd;
42   let Inst{5-0} = minor;
43 }
44
45 class MSA_BIT_H_FMT<bits<3> major, bits<6> minor>: MSAInst {
46   bits<5> ws;
47   bits<5> wd;
48   bits<4> m;
49
50   let Inst{25-23} = major;
51   let Inst{22-20} = 0b110;
52   let Inst{19-16} = m;
53   let Inst{15-11} = ws;
54   let Inst{10-6} = wd;
55   let Inst{5-0} = minor;
56 }
57
58 class MSA_BIT_W_FMT<bits<3> major, bits<6> minor>: MSAInst {
59   bits<5> ws;
60   bits<5> wd;
61   bits<5> m;
62
63   let Inst{25-23} = major;
64   let Inst{22-21} = 0b10;
65   let Inst{20-16} = m;
66   let Inst{15-11} = ws;
67   let Inst{10-6} = wd;
68   let Inst{5-0} = minor;
69 }
70
71 class MSA_BIT_D_FMT<bits<3> major, bits<6> minor>: MSAInst {
72   bits<5> ws;
73   bits<5> wd;
74   bits<6> m;
75
76   let Inst{25-23} = major;
77   let Inst{22} = 0b0;
78   let Inst{21-16} = m;
79   let Inst{15-11} = ws;
80   let Inst{10-6} = wd;
81   let Inst{5-0} = minor;
82 }
83
84 class MSA_2R_FILL_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
85   bits<5> rs;
86   bits<5> wd;
87
88   let Inst{25-18} = major;
89   let Inst{17-16} = df;
90   let Inst{15-11} = rs;
91   let Inst{10-6} = wd;
92   let Inst{5-0} = minor;
93 }
94
95 class MSA_2R_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
96   bits<5> ws;
97   bits<5> wd;
98
99   let Inst{25-18} = major;
100   let Inst{17-16} = df;
101   let Inst{15-11} = ws;
102   let Inst{10-6} = wd;
103   let Inst{5-0} = minor;
104 }
105
106 class MSA_2RF_FMT<bits<9> major, bits<1> df, bits<6> minor>: MSAInst {
107   bits<5> ws;
108   bits<5> wd;
109
110   let Inst{25-17} = major;
111   let Inst{16} = df;
112   let Inst{15-11} = ws;
113   let Inst{10-6} = wd;
114   let Inst{5-0} = minor;
115 }
116
117 class MSA_3R_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
118   bits<5> wt;
119   bits<5> ws;
120   bits<5> wd;
121
122   let Inst{25-23} = major;
123   let Inst{22-21} = df;
124   let Inst{20-16} = wt;
125   let Inst{15-11} = ws;
126   let Inst{10-6} = wd;
127   let Inst{5-0} = minor;
128 }
129
130 class MSA_3RF_FMT<bits<4> major, bits<1> df, bits<6> minor>: MSAInst {
131   bits<5> wt;
132   bits<5> ws;
133   bits<5> wd;
134
135   let Inst{25-22} = major;
136   let Inst{21} = df;
137   let Inst{20-16} = wt;
138   let Inst{15-11} = ws;
139   let Inst{10-6} = wd;
140   let Inst{5-0} = minor;
141 }
142
143 class MSA_3R_INDEX_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
144   bits<5> rt;
145   bits<5> ws;
146   bits<5> wd;
147
148   let Inst{25-23} = major;
149   let Inst{22-21} = df;
150   let Inst{20-16} = rt;
151   let Inst{15-11} = ws;
152   let Inst{10-6} = wd;
153   let Inst{5-0} = minor;
154 }
155
156 class MSA_ELM_FMT<bits<10> major, bits<6> minor>: MSAInst {
157   bits<5> ws;
158   bits<5> wd;
159
160   let Inst{25-16} = major;
161   let Inst{15-11} = ws;
162   let Inst{10-6} = wd;
163   let Inst{5-0} = minor;
164 }
165
166 class MSA_ELM_CFCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
167   bits<5> rd;
168   bits<5> cs;
169
170   let Inst{25-16} = major;
171   let Inst{15-11} = cs;
172   let Inst{10-6} = rd;
173   let Inst{5-0} = minor;
174 }
175
176 class MSA_ELM_CTCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
177   bits<5> rs;
178   bits<5> cd;
179
180   let Inst{25-16} = major;
181   let Inst{15-11} = rs;
182   let Inst{10-6} = cd;
183   let Inst{5-0} = minor;
184 }
185
186 class MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
187   bits<4> n;
188   bits<5> ws;
189   bits<5> wd;
190
191   let Inst{25-22} = major;
192   let Inst{21-20} = 0b00;
193   let Inst{19-16} = n{3-0};
194   let Inst{15-11} = ws;
195   let Inst{10-6} = wd;
196   let Inst{5-0} = minor;
197 }
198
199 class MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
200   bits<4> n;
201   bits<5> ws;
202   bits<5> wd;
203
204   let Inst{25-22} = major;
205   let Inst{21-19} = 0b100;
206   let Inst{18-16} = n{2-0};
207   let Inst{15-11} = ws;
208   let Inst{10-6} = wd;
209   let Inst{5-0} = minor;
210 }
211
212 class MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
213   bits<4> n;
214   bits<5> ws;
215   bits<5> wd;
216
217   let Inst{25-22} = major;
218   let Inst{21-18} = 0b1100;
219   let Inst{17-16} = n{1-0};
220   let Inst{15-11} = ws;
221   let Inst{10-6} = wd;
222   let Inst{5-0} = minor;
223 }
224
225 class MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
226   bits<4> n;
227   bits<5> ws;
228   bits<5> wd;
229
230   let Inst{25-22} = major;
231   let Inst{21-17} = 0b11100;
232   let Inst{16} = n{0};
233   let Inst{15-11} = ws;
234   let Inst{10-6} = wd;
235   let Inst{5-0} = minor;
236 }
237
238 class MSA_ELM_COPY_B_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-20} = 0b00;
245   let Inst{19-16} = n{3-0};
246   let Inst{15-11} = ws;
247   let Inst{10-6} = rd;
248   let Inst{5-0} = minor;
249 }
250
251 class MSA_ELM_COPY_H_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-19} = 0b100;
258   let Inst{18-16} = n{2-0};
259   let Inst{15-11} = ws;
260   let Inst{10-6} = rd;
261   let Inst{5-0} = minor;
262 }
263
264 class MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
265   bits<4> n;
266   bits<5> ws;
267   bits<5> rd;
268
269   let Inst{25-22} = major;
270   let Inst{21-18} = 0b1100;
271   let Inst{17-16} = n{1-0};
272   let Inst{15-11} = ws;
273   let Inst{10-6} = rd;
274   let Inst{5-0} = minor;
275 }
276
277 class MSA_ELM_INSERT_B_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-20} = 0b00;
284   let Inst{19-16} = n{3-0};
285   let Inst{15-11} = rs;
286   let Inst{10-6} = wd;
287   let Inst{5-0} = minor;
288 }
289
290 class MSA_ELM_INSERT_H_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-19} = 0b100;
297   let Inst{18-16} = n{2-0};
298   let Inst{15-11} = rs;
299   let Inst{10-6} = wd;
300   let Inst{5-0} = minor;
301 }
302
303 class MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
304   bits<6> n;
305   bits<5> rs;
306   bits<5> wd;
307
308   let Inst{25-22} = major;
309   let Inst{21-18} = 0b1100;
310   let Inst{17-16} = n{1-0};
311   let Inst{15-11} = rs;
312   let Inst{10-6} = wd;
313   let Inst{5-0} = minor;
314 }
315
316 class MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
317   bits<5> imm;
318   bits<5> ws;
319   bits<5> wd;
320
321   let Inst{25-23} = major;
322   let Inst{22-21} = df;
323   let Inst{20-16} = imm;
324   let Inst{15-11} = ws;
325   let Inst{10-6} = wd;
326   let Inst{5-0} = minor;
327 }
328
329 class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst {
330   bits<8> u8;
331   bits<5> ws;
332   bits<5> wd;
333
334   let Inst{25-24} = major;
335   let Inst{23-16} = u8;
336   let Inst{15-11} = ws;
337   let Inst{10-6} = wd;
338   let Inst{5-0} = minor;
339 }
340
341 class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
342   bits<10> s10;
343   bits<5> wd;
344
345   let Inst{25-23} = major;
346   let Inst{22-21} = df;
347   let Inst{20-11} = s10;
348   let Inst{10-6} = wd;
349   let Inst{5-0} = minor;
350 }
351
352 class MSA_MI10_FMT<bits<2> df, bits<4> minor>: MSAInst {
353   bits<21> addr;
354   bits<5> wd;
355
356   let Inst{25-16} = addr{9-0};
357   let Inst{15-11} = addr{20-16};
358   let Inst{10-6} = wd;
359   let Inst{5-2} = minor;
360   let Inst{1-0} = df;
361 }
362
363 class MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst {
364   bits<5> wt;
365   bits<5> ws;
366   bits<5> wd;
367
368   let Inst{25-21} = major;
369   let Inst{20-16} = wt;
370   let Inst{15-11} = ws;
371   let Inst{10-6} = wd;
372   let Inst{5-0} = minor;
373 }
374
375 class MSA_CBRANCH_FMT<bits<3> major, bits<2> df>: MSACBranch {
376   bits<16> offset;
377   bits<5> wt;
378
379   let Inst{25-23} = major;
380   let Inst{22-21} = df;
381   let Inst{20-16} = wt;
382   let Inst{15-0} = offset;
383 }
384
385 class MSA_CBRANCH_V_FMT<bits<5> major>: MSACBranch {
386   bits<16> offset;
387   bits<5> wt;
388
389   let Inst{25-21} = major;
390   let Inst{20-16} = wt;
391   let Inst{15-0} = offset;
392 }
393
394 class SPECIAL_LSA_FMT<bits<6> minor>: MSASpecial {
395   bits<5> rs;
396   bits<5> rt;
397   bits<5> rd;
398   bits<2> sa;
399
400   let Inst{25-21} = rs;
401   let Inst{20-16} = rt;
402   let Inst{15-11} = rd;
403   let Inst{10-8} = 0b000;
404   let Inst{7-6} = sa;
405   let Inst{5-0} = minor;
406 }