xref: /aosp_15_r20/external/llvm/lib/Target/Mips/MipsMSAInstrFormats.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===- MipsMSAInstrFormats.td - Mips Instruction Formats ---*- tablegen -*-===//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerclass MSAInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>,
11*9880d681SAndroid Build Coastguard Worker                PredicateControl, ASE_MSA {
12*9880d681SAndroid Build Coastguard Worker  let EncodingPredicates = [HasStdEnc];
13*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011110;
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerclass MSACBranch : MSAInst {
17*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010001;
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerclass MSASpecial : MSAInst {
21*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerclass MSAPseudo<dag outs, dag ins, list<dag> pattern,
25*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin = IIPseudo>:
26*9880d681SAndroid Build Coastguard Worker  MipsPseudo<outs, ins, pattern, itin> {
27*9880d681SAndroid Build Coastguard Worker  let Predicates = [HasMSA];
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerclass MSA_BIT_B_FMT<bits<3> major, bits<6> minor>: MSAInst {
31*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
32*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
33*9880d681SAndroid Build Coastguard Worker  bits<3> m;
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
36*9880d681SAndroid Build Coastguard Worker  let Inst{22-19} = 0b1110;
37*9880d681SAndroid Build Coastguard Worker  let Inst{18-16} = m;
38*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
39*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
40*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerclass MSA_BIT_H_FMT<bits<3> major, bits<6> minor>: MSAInst {
44*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
45*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
46*9880d681SAndroid Build Coastguard Worker  bits<4> m;
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
49*9880d681SAndroid Build Coastguard Worker  let Inst{22-20} = 0b110;
50*9880d681SAndroid Build Coastguard Worker  let Inst{19-16} = m;
51*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
52*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
53*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerclass MSA_BIT_W_FMT<bits<3> major, bits<6> minor>: MSAInst {
57*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
58*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
59*9880d681SAndroid Build Coastguard Worker  bits<5> m;
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
62*9880d681SAndroid Build Coastguard Worker  let Inst{22-21} = 0b10;
63*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = m;
64*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
65*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
66*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerclass MSA_BIT_D_FMT<bits<3> major, bits<6> minor>: MSAInst {
70*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
71*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
72*9880d681SAndroid Build Coastguard Worker  bits<6> m;
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
75*9880d681SAndroid Build Coastguard Worker  let Inst{22} = 0b0;
76*9880d681SAndroid Build Coastguard Worker  let Inst{21-16} = m;
77*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
78*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
79*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
80*9880d681SAndroid Build Coastguard Worker}
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerclass MSA_2R_FILL_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
83*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
84*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker  let Inst{25-18} = major;
87*9880d681SAndroid Build Coastguard Worker  let Inst{17-16} = df;
88*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rs;
89*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
90*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerclass MSA_2R_FILL_D_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
94*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
95*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker  let Inst{25-18} = major;
98*9880d681SAndroid Build Coastguard Worker  let Inst{17-16} = df;
99*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rs;
100*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
101*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Workerclass MSA_2R_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
105*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
106*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker  let Inst{25-18} = major;
109*9880d681SAndroid Build Coastguard Worker  let Inst{17-16} = df;
110*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
111*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
112*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Workerclass MSA_2RF_FMT<bits<9> major, bits<1> df, bits<6> minor>: MSAInst {
116*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
117*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker  let Inst{25-17} = major;
120*9880d681SAndroid Build Coastguard Worker  let Inst{16} = df;
121*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
122*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
123*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerclass MSA_3R_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
127*9880d681SAndroid Build Coastguard Worker  bits<5> wt;
128*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
129*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
132*9880d681SAndroid Build Coastguard Worker  let Inst{22-21} = df;
133*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = wt;
134*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
135*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
136*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerclass MSA_3RF_FMT<bits<4> major, bits<1> df, bits<6> minor>: MSAInst {
140*9880d681SAndroid Build Coastguard Worker  bits<5> wt;
141*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
142*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
145*9880d681SAndroid Build Coastguard Worker  let Inst{21} = df;
146*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = wt;
147*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
148*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
149*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerclass MSA_3R_INDEX_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
153*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
154*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
155*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
158*9880d681SAndroid Build Coastguard Worker  let Inst{22-21} = df;
159*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
160*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
161*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
162*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
163*9880d681SAndroid Build Coastguard Worker}
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_FMT<bits<10> major, bits<6> minor>: MSAInst {
166*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
167*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = major;
170*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
171*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
172*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_CFCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
176*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
177*9880d681SAndroid Build Coastguard Worker  bits<5> cs;
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = major;
180*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = cs;
181*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = rd;
182*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_CTCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
186*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
187*9880d681SAndroid Build Coastguard Worker  bits<5> cd;
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = major;
190*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rs;
191*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = cd;
192*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
196*9880d681SAndroid Build Coastguard Worker  bits<4> n;
197*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
198*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
201*9880d681SAndroid Build Coastguard Worker  let Inst{21-20} = 0b00;
202*9880d681SAndroid Build Coastguard Worker  let Inst{19-16} = n{3-0};
203*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
204*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
205*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
206*9880d681SAndroid Build Coastguard Worker}
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
209*9880d681SAndroid Build Coastguard Worker  bits<4> n;
210*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
211*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
214*9880d681SAndroid Build Coastguard Worker  let Inst{21-19} = 0b100;
215*9880d681SAndroid Build Coastguard Worker  let Inst{18-16} = n{2-0};
216*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
217*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
218*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
222*9880d681SAndroid Build Coastguard Worker  bits<4> n;
223*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
224*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
227*9880d681SAndroid Build Coastguard Worker  let Inst{21-18} = 0b1100;
228*9880d681SAndroid Build Coastguard Worker  let Inst{17-16} = n{1-0};
229*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
230*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
231*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
232*9880d681SAndroid Build Coastguard Worker}
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
235*9880d681SAndroid Build Coastguard Worker  bits<4> n;
236*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
237*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
240*9880d681SAndroid Build Coastguard Worker  let Inst{21-17} = 0b11100;
241*9880d681SAndroid Build Coastguard Worker  let Inst{16} = n{0};
242*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
243*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
244*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_COPY_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
248*9880d681SAndroid Build Coastguard Worker  bits<4> n;
249*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
250*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
253*9880d681SAndroid Build Coastguard Worker  let Inst{21-20} = 0b00;
254*9880d681SAndroid Build Coastguard Worker  let Inst{19-16} = n{3-0};
255*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
256*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = rd;
257*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_COPY_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
261*9880d681SAndroid Build Coastguard Worker  bits<4> n;
262*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
263*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
266*9880d681SAndroid Build Coastguard Worker  let Inst{21-19} = 0b100;
267*9880d681SAndroid Build Coastguard Worker  let Inst{18-16} = n{2-0};
268*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
269*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = rd;
270*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
271*9880d681SAndroid Build Coastguard Worker}
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
274*9880d681SAndroid Build Coastguard Worker  bits<4> n;
275*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
276*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
279*9880d681SAndroid Build Coastguard Worker  let Inst{21-18} = 0b1100;
280*9880d681SAndroid Build Coastguard Worker  let Inst{17-16} = n{1-0};
281*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
282*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = rd;
283*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
284*9880d681SAndroid Build Coastguard Worker}
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_COPY_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
287*9880d681SAndroid Build Coastguard Worker  bits<4> n;
288*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
289*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
292*9880d681SAndroid Build Coastguard Worker  let Inst{21-17} = 0b11100;
293*9880d681SAndroid Build Coastguard Worker  let Inst{16} = n{0};
294*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
295*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = rd;
296*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_INSERT_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
300*9880d681SAndroid Build Coastguard Worker  bits<6> n;
301*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
302*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
305*9880d681SAndroid Build Coastguard Worker  let Inst{21-20} = 0b00;
306*9880d681SAndroid Build Coastguard Worker  let Inst{19-16} = n{3-0};
307*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rs;
308*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
309*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
310*9880d681SAndroid Build Coastguard Worker}
311*9880d681SAndroid Build Coastguard Worker
312*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_INSERT_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
313*9880d681SAndroid Build Coastguard Worker  bits<6> n;
314*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
315*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
318*9880d681SAndroid Build Coastguard Worker  let Inst{21-19} = 0b100;
319*9880d681SAndroid Build Coastguard Worker  let Inst{18-16} = n{2-0};
320*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rs;
321*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
322*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
323*9880d681SAndroid Build Coastguard Worker}
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
326*9880d681SAndroid Build Coastguard Worker  bits<6> n;
327*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
328*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
331*9880d681SAndroid Build Coastguard Worker  let Inst{21-18} = 0b1100;
332*9880d681SAndroid Build Coastguard Worker  let Inst{17-16} = n{1-0};
333*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rs;
334*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
335*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
336*9880d681SAndroid Build Coastguard Worker}
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Workerclass MSA_ELM_INSERT_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
339*9880d681SAndroid Build Coastguard Worker  bits<6> n;
340*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
341*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = major;
344*9880d681SAndroid Build Coastguard Worker  let Inst{21-17} = 0b11100;
345*9880d681SAndroid Build Coastguard Worker  let Inst{16} = n{0};
346*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rs;
347*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
348*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
349*9880d681SAndroid Build Coastguard Worker}
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Workerclass MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
352*9880d681SAndroid Build Coastguard Worker  bits<5> imm;
353*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
354*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
357*9880d681SAndroid Build Coastguard Worker  let Inst{22-21} = df;
358*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = imm;
359*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
360*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
361*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Workerclass MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst {
365*9880d681SAndroid Build Coastguard Worker  bits<8> u8;
366*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
367*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Worker  let Inst{25-24} = major;
370*9880d681SAndroid Build Coastguard Worker  let Inst{23-16} = u8;
371*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
372*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
373*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
374*9880d681SAndroid Build Coastguard Worker}
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Workerclass MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
377*9880d681SAndroid Build Coastguard Worker  bits<10> s10;
378*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
381*9880d681SAndroid Build Coastguard Worker  let Inst{22-21} = df;
382*9880d681SAndroid Build Coastguard Worker  let Inst{20-11} = s10;
383*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
384*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
385*9880d681SAndroid Build Coastguard Worker}
386*9880d681SAndroid Build Coastguard Worker
387*9880d681SAndroid Build Coastguard Workerclass MSA_MI10_FMT<bits<2> df, bits<4> minor>: MSAInst {
388*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
389*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
390*9880d681SAndroid Build Coastguard Worker
391*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = addr{9-0};
392*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = addr{20-16};
393*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
394*9880d681SAndroid Build Coastguard Worker  let Inst{5-2} = minor;
395*9880d681SAndroid Build Coastguard Worker  let Inst{1-0} = df;
396*9880d681SAndroid Build Coastguard Worker}
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Workerclass MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst {
399*9880d681SAndroid Build Coastguard Worker  bits<5> wt;
400*9880d681SAndroid Build Coastguard Worker  bits<5> ws;
401*9880d681SAndroid Build Coastguard Worker  bits<5> wd;
402*9880d681SAndroid Build Coastguard Worker
403*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = major;
404*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = wt;
405*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = ws;
406*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = wd;
407*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerclass MSA_CBRANCH_FMT<bits<3> major, bits<2> df>: MSACBranch {
411*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
412*9880d681SAndroid Build Coastguard Worker  bits<5> wt;
413*9880d681SAndroid Build Coastguard Worker
414*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = major;
415*9880d681SAndroid Build Coastguard Worker  let Inst{22-21} = df;
416*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = wt;
417*9880d681SAndroid Build Coastguard Worker  let Inst{15-0} = offset;
418*9880d681SAndroid Build Coastguard Worker}
419*9880d681SAndroid Build Coastguard Worker
420*9880d681SAndroid Build Coastguard Workerclass MSA_CBRANCH_V_FMT<bits<5> major>: MSACBranch {
421*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
422*9880d681SAndroid Build Coastguard Worker  bits<5> wt;
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = major;
425*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = wt;
426*9880d681SAndroid Build Coastguard Worker  let Inst{15-0} = offset;
427*9880d681SAndroid Build Coastguard Worker}
428*9880d681SAndroid Build Coastguard Worker
429*9880d681SAndroid Build Coastguard Workerclass SPECIAL_LSA_FMT<bits<6> minor>: MSASpecial {
430*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
431*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
432*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
433*9880d681SAndroid Build Coastguard Worker  bits<2> sa;
434*9880d681SAndroid Build Coastguard Worker
435*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
436*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
437*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
438*9880d681SAndroid Build Coastguard Worker  let Inst{10-8} = 0b000;
439*9880d681SAndroid Build Coastguard Worker  let Inst{7-6} = sa;
440*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
441*9880d681SAndroid Build Coastguard Worker}
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Workerclass SPECIAL_DLSA_FMT<bits<6> minor>: MSASpecial {
444*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
445*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
446*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
447*9880d681SAndroid Build Coastguard Worker  bits<2> sa;
448*9880d681SAndroid Build Coastguard Worker
449*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
450*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
451*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
452*9880d681SAndroid Build Coastguard Worker  let Inst{10-8} = 0b000;
453*9880d681SAndroid Build Coastguard Worker  let Inst{7-6} = sa;
454*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = minor;
455*9880d681SAndroid Build Coastguard Worker}
456