blob: 26b6cf8994ca01352a822675d12149cc5a5294d4 [file] [log] [blame]
Zoran Jovanovic2e386d32015-10-12 16:07:25 +00001//===-- MicroMipsDSPInstrFormats.td - Instruction Formats --*- tablegen -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Zoran Jovanovic2e386d32015-10-12 16:07:25 +00006//
7//===----------------------------------------------------------------------===//
8
9class MMDSPInst<string opstr = "">
Simon Dardisf9090582018-05-30 12:40:53 +000010 : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> {
Simon Dardis1f0fe562018-03-12 13:16:12 +000011 let ASEPredicate = [HasDSP];
Simon Dardiseae99122018-06-20 13:29:57 +000012 let EncodingPredicates = [InMicroMips];
Zoran Jovanovic2e386d32015-10-12 16:07:25 +000013 string BaseOpcode = opstr;
14 string Arch = "mmdsp";
15 let DecoderNamespace = "MicroMips";
16}
17
Zlatko Buljan252cca52015-12-18 08:59:37 +000018class MMDSPInstAlias<string Asm, dag Result, bit Emit = 0b1>
19 : InstAlias<Asm, Result, Emit>, PredicateControl {
Simon Dardis1f0fe562018-03-12 13:16:12 +000020 let ASEPredicate = [HasDSP];
Zlatko Buljan252cca52015-12-18 08:59:37 +000021 let AdditionalPredicates = [InMicroMips];
22}
23
Zlatko Buljan54b1eb42015-10-15 08:59:45 +000024class POOL32A_3R_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
Zoran Jovanovic2e386d32015-10-12 16:07:25 +000025 bits<5> rd;
26 bits<5> rs;
27 bits<5> rt;
28
29 let Inst{31-26} = 0b000000;
30 let Inst{25-21} = rt;
31 let Inst{20-16} = rs;
32 let Inst{15-11} = rd;
33 let Inst{10-0} = op;
34}
Zlatko Buljan54b1eb42015-10-15 08:59:45 +000035
Zlatko Buljand0a7d6e2015-10-19 06:34:44 +000036class POOL32A_2R_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
37 bits<5> rt;
38 bits<5> rs;
39
40 let Inst{31-26} = 0b000000;
41 let Inst{25-21} = rt;
42 let Inst{20-16} = rs;
43 let Inst{15-6} = op;
44 let Inst{5-0} = 0b111100;
45}
46
47class POOL32A_2RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
48 bits<5> rt;
49 bits<5> rs;
50 bits<2> ac;
51
52 let Inst{31-26} = 0b000000;
53 let Inst{25-21} = rt;
54 let Inst{20-16} = rs;
55 let Inst{15-14} = ac;
56 let Inst{13-6} = op;
57 let Inst{5-0} = 0b111100;
58}
Zlatko Buljan52920832015-10-19 07:16:26 +000059
60class POOL32A_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
61 bits<5> rd;
62 bits<5> rs;
63 bits<5> rt;
64
65 let Inst{31-26} = 0b000000;
66 let Inst{25-21} = rt;
67 let Inst{20-16} = rs;
68 let Inst{15-11} = rd;
69 let Inst{10} = 0b0;
70 let Inst{9-0} = op;
71}
Zlatko Buljan2cf61022015-10-23 06:39:29 +000072
73class POOL32A_2RSA4_FMT<string opstr, bits<12> op> : MMDSPInst<opstr> {
74 bits<5> rt;
75 bits<5> rs;
76 bits<4> sa;
77
78 let Inst{31-26} = 0b000000;
79 let Inst{25-21} = rt;
80 let Inst{20-16} = rs;
81 let Inst{15-12} = sa;
82 let Inst{11-0} = op;
83}
84
85class POOL32A_2RSA3_FMT<string opstr, bits<7> op> : MMDSPInst<opstr> {
86 bits<5> rt;
87 bits<5> rs;
88 bits<3> sa;
89
90 let Inst{31-26} = 0b000000;
91 let Inst{25-21} = rt;
92 let Inst{20-16} = rs;
93 let Inst{15-13} = sa;
94 let Inst{12-6} = op;
95 let Inst{5-0} = 0b111100;
96}
97
98class POOL32A_2RSA5B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
99 bits<5> rt;
100 bits<5> rs;
101 bits<5> sa;
102
103 let Inst{31-26} = 0b000000;
104 let Inst{25-21} = rt;
105 let Inst{20-16} = rs;
106 let Inst{15-11} = sa;
107 let Inst{10} = 0b0;
108 let Inst{9-0} = op;
109}
Zlatko Buljan32fb5c42015-11-13 13:14:25 +0000110
111class POOL32A_2RSA4B0_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
112 bits<5> rt;
113 bits<5> rs;
114 bits<4> sa;
115
116 let Inst{31-26} = 0b000000;
117 let Inst{25-21} = rt;
118 let Inst{20-16} = rs;
119 let Inst{15-12} = sa;
120 let Inst{11} = 0b0;
121 let Inst{10-0} = op;
122}
123
124class POOL32A_2RSA4OP6_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> {
125 bits<5> rt;
126 bits<5> rs;
127 bits<4> sa;
128
129 let Inst{31-26} = 0b000000;
130 let Inst{25-21} = rt;
131 let Inst{20-16} = rs;
132 let Inst{15-12} = sa;
133 let Inst{11-6} = op;
134 let Inst{5-0} = 0b111100;
135}
Zlatko Buljan72a7f9c2015-11-17 12:54:15 +0000136
137class POOL32A_1RIMM5AC_FMT<string opstr, bits<8> funct> : MMDSPInst<opstr> {
138 bits<5> rt;
139 bits<5> imm;
140 bits<2> ac;
141
142 let Inst{31-26} = 0b000000;
143 let Inst{25-21} = rt;
144 let Inst{20-16} = imm;
145 let Inst{15-14} = ac;
146 let Inst{13-6} = funct;
147 let Inst{5-0} = 0b111100;
148}
Zlatko Buljan56f3b0e2015-11-30 08:37:38 +0000149
150class POOL32A_2RSA5_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
151 bits<5> rt;
152 bits<5> rs;
153 bits<5> sa;
154
155 let Inst{31-26} = 0b000000;
156 let Inst{25-21} = rt;
157 let Inst{20-16} = rs;
158 let Inst{15-11} = sa;
159 let Inst{10-0} = op;
160}
Hrvoje Vargac03957f2015-11-30 12:58:39 +0000161
162class POOL32A_1RMEMB0_FMT<string opstr, bits<10> funct> : MMDSPInst<opstr> {
163 bits<5> index;
164 bits<5> base;
165 bits<5> rd;
166
167 let Inst{31-26} = 0;
168 let Inst{25-21} = index;
169 let Inst{20-16} = base;
170 let Inst{15-11} = rd;
171 let Inst{10} = 0b0;
172 let Inst{9-0} = funct;
173}
174
175class POOL32A_1RAC_FMT<string instr_asm, bits<8> funct> : MMDSPInst<instr_asm> {
176 bits<5> rs;
177 bits<2> ac;
178
179 let Inst{31-26} = 0;
180 let Inst{25-21} = 0;
181 let Inst{20-16} = rs;
182 let Inst{15-14} = ac;
183 let Inst{13-6} = funct;
184 let Inst{5-0} = 0b111100;
185}
Hrvoje Varga672b0f52015-12-02 09:31:24 +0000186
187class POOL32A_1RMASK7_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
188 bits<5> rt;
189 bits<7> mask;
190
191 let Inst{31-26} = 0b000000;
192 let Inst{25-21} = rt;
193 let Inst{20-14} = mask;
194 let Inst{13-6} = op;
195 let Inst{5-0} = 0b111100;
196}
197
198class POOL32A_1RIMM10_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
199 bits<5> rd;
200 bits<10> imm;
201
202 let Inst{31-26} = 0;
203 let Inst{25-16} = imm;
204 let Inst{15-11} = rd;
205 let Inst{10} = 0;
206 let Inst{9-0} = op;
207}
208
209class POOL32A_1RIMM8_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> {
210 bits<5> rt;
211 bits<8> imm;
212
213 let Inst{31-26} = 0;
214 let Inst{25-21} = rt;
215 let Inst{20-13} = imm;
216 let Inst{12} = 0;
217 let Inst{11-6} = op;
218 let Inst{5-0} = 0b111100;
219}
Zlatko Buljan252cca52015-12-18 08:59:37 +0000220
221class POOL32A_4B0SHIFT6AC4B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
222 bits<6> shift;
223 bits<2> ac;
224
225 let Inst{31-26} = 0b000000;
226 let Inst{25-22} = 0b0000;
227 let Inst{21-16} = shift;
228 let Inst{15-14} = ac;
229 let Inst{13-10} = 0b0000;
230 let Inst{9-0} = op;
231}
232
233class POOL32A_5B01RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
234 bits<5> rs;
235 bits<2> ac;
236
237 let Inst{31-26} = 0b000000;
238 let Inst{25-21} = 0b00000;
239 let Inst{20-16} = rs;
240 let Inst{15-14} = ac;
241 let Inst{13-6} = op;
242 let Inst{5-0} = 0b111100;
243}
Hrvoje Varga6f09cdf2016-05-13 11:32:53 +0000244
245class POOL32I_IMMB0_FMT<string opstr, bits<5> op> : MMDSPInst<opstr> {
246 bits<16> offset;
247
248 let Inst{31-26} = 0b010000;
249 let Inst{25-21} = op;
250 let Inst{20-16} = 0;
Zlatko Buljane9abe882016-05-17 09:32:58 +0000251 let Inst{15-0} = offset;
252}
253
254class POOL32A_2RBP_FMT<string opstr> : MMDSPInst<opstr> {
255 bits<5> rt;
256 bits<5> rs;
257 bits<2> bp;
258
259 let Inst{31-26} = 0;
260 let Inst{25-21} = rt;
261 let Inst{20-16} = rs;
262 let Inst{15-14} = bp;
263 let Inst{13-6} = 0b00100010;
264 let Inst{5-0} = 0b111100;
265}
266
267class POOL32A_2RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
268 bits<5> rt;
269 bits<5> rs;
270
271 let Inst{31-26} = 0;
272 let Inst{25-21} = rt;
273 let Inst{20-16} = rs;
274 let Inst{15-10} = 0;
275 let Inst{9-0} = op;
276}
277
278class POOL32S_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
279 bits<5> rt;
280 bits<5> rs;
281 bits<5> rd;
282
283 let Inst{31-26} = 0b010110;
284 let Inst{25-21} = rt;
285 let Inst{20-16} = rs;
286 let Inst{15-11} = rd;
287 let Inst{10} = 0b0;
288 let Inst{9-0} = op;
289}
290
291class POOL32A_2R2B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
292 bits<5> rt;
293 bits<5> rs;
294
295 let Inst{31-26} = 0;
296 let Inst{25-21} = rt;
297 let Inst{20-16} = rs;
298 let Inst{15-11} = 0;
299 let Inst{10} = 0;
300 let Inst{9-0} = op;
Hrvoje Varga6f09cdf2016-05-13 11:32:53 +0000301}