xref: /llvm-project/llvm/lib/Target/Mips/MicroMipsDSPInstrFormats.td (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
12e386d3dSZoran Jovanovic//===-- MicroMipsDSPInstrFormats.td - Instruction Formats --*- tablegen -*-===//
22e386d3dSZoran Jovanovic//
3*2946cd70SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth// See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62e386d3dSZoran Jovanovic//
72e386d3dSZoran Jovanovic//===----------------------------------------------------------------------===//
82e386d3dSZoran Jovanovic
92e386d3dSZoran Jovanovicclass MMDSPInst<string opstr = "">
10f909058aSSimon Dardis    : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> {
111f0fe564SSimon Dardis  let ASEPredicate = [HasDSP];
12eae99120SSimon Dardis  let EncodingPredicates = [InMicroMips];
132e386d3dSZoran Jovanovic  string BaseOpcode = opstr;
142e386d3dSZoran Jovanovic  string Arch = "mmdsp";
152e386d3dSZoran Jovanovic  let DecoderNamespace = "MicroMips";
162e386d3dSZoran Jovanovic}
172e386d3dSZoran Jovanovic
18252cca55SZlatko Buljanclass MMDSPInstAlias<string Asm, dag Result, bit Emit = 0b1>
19252cca55SZlatko Buljan    : InstAlias<Asm, Result, Emit>, PredicateControl {
201f0fe564SSimon Dardis  let ASEPredicate = [HasDSP];
21252cca55SZlatko Buljan  let AdditionalPredicates = [InMicroMips];
22252cca55SZlatko Buljan}
23252cca55SZlatko Buljan
2454b1eb4cSZlatko Buljanclass POOL32A_3R_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
252e386d3dSZoran Jovanovic  bits<5> rd;
262e386d3dSZoran Jovanovic  bits<5> rs;
272e386d3dSZoran Jovanovic  bits<5> rt;
282e386d3dSZoran Jovanovic
292e386d3dSZoran Jovanovic  let Inst{31-26} = 0b000000;
302e386d3dSZoran Jovanovic  let Inst{25-21} = rt;
312e386d3dSZoran Jovanovic  let Inst{20-16} = rs;
322e386d3dSZoran Jovanovic  let Inst{15-11} = rd;
332e386d3dSZoran Jovanovic  let Inst{10-0}  = op;
342e386d3dSZoran Jovanovic}
3554b1eb4cSZlatko Buljan
36d0a7d6e4SZlatko Buljanclass POOL32A_2R_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
37d0a7d6e4SZlatko Buljan  bits<5> rt;
38d0a7d6e4SZlatko Buljan  bits<5> rs;
39d0a7d6e4SZlatko Buljan
40d0a7d6e4SZlatko Buljan  let Inst{31-26} = 0b000000;
41d0a7d6e4SZlatko Buljan  let Inst{25-21} = rt;
42d0a7d6e4SZlatko Buljan  let Inst{20-16} = rs;
43d0a7d6e4SZlatko Buljan  let Inst{15-6}  = op;
44d0a7d6e4SZlatko Buljan  let Inst{5-0}   = 0b111100;
45d0a7d6e4SZlatko Buljan}
46d0a7d6e4SZlatko Buljan
47d0a7d6e4SZlatko Buljanclass POOL32A_2RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
48d0a7d6e4SZlatko Buljan  bits<5> rt;
49d0a7d6e4SZlatko Buljan  bits<5> rs;
50d0a7d6e4SZlatko Buljan  bits<2> ac;
51d0a7d6e4SZlatko Buljan
52d0a7d6e4SZlatko Buljan  let Inst{31-26} = 0b000000;
53d0a7d6e4SZlatko Buljan  let Inst{25-21} = rt;
54d0a7d6e4SZlatko Buljan  let Inst{20-16} = rs;
55d0a7d6e4SZlatko Buljan  let Inst{15-14} = ac;
56d0a7d6e4SZlatko Buljan  let Inst{13-6}  = op;
57d0a7d6e4SZlatko Buljan  let Inst{5-0}   = 0b111100;
58d0a7d6e4SZlatko Buljan}
5952920835SZlatko Buljan
6052920835SZlatko Buljanclass POOL32A_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
6152920835SZlatko Buljan  bits<5> rd;
6252920835SZlatko Buljan  bits<5> rs;
6352920835SZlatko Buljan  bits<5> rt;
6452920835SZlatko Buljan
6552920835SZlatko Buljan  let Inst{31-26} = 0b000000;
6652920835SZlatko Buljan  let Inst{25-21} = rt;
6752920835SZlatko Buljan  let Inst{20-16} = rs;
6852920835SZlatko Buljan  let Inst{15-11} = rd;
6952920835SZlatko Buljan  let Inst{10}    = 0b0;
7052920835SZlatko Buljan  let Inst{9-0}   = op;
7152920835SZlatko Buljan}
722cf61020SZlatko Buljan
732cf61020SZlatko Buljanclass POOL32A_2RSA4_FMT<string opstr, bits<12> op> : MMDSPInst<opstr> {
742cf61020SZlatko Buljan  bits<5> rt;
752cf61020SZlatko Buljan  bits<5> rs;
762cf61020SZlatko Buljan  bits<4> sa;
772cf61020SZlatko Buljan
782cf61020SZlatko Buljan  let Inst{31-26} = 0b000000;
792cf61020SZlatko Buljan  let Inst{25-21} = rt;
802cf61020SZlatko Buljan  let Inst{20-16} = rs;
812cf61020SZlatko Buljan  let Inst{15-12} = sa;
822cf61020SZlatko Buljan  let Inst{11-0}  = op;
832cf61020SZlatko Buljan}
842cf61020SZlatko Buljan
852cf61020SZlatko Buljanclass POOL32A_2RSA3_FMT<string opstr, bits<7> op> : MMDSPInst<opstr> {
862cf61020SZlatko Buljan  bits<5> rt;
872cf61020SZlatko Buljan  bits<5> rs;
882cf61020SZlatko Buljan  bits<3> sa;
892cf61020SZlatko Buljan
902cf61020SZlatko Buljan  let Inst{31-26} = 0b000000;
912cf61020SZlatko Buljan  let Inst{25-21} = rt;
922cf61020SZlatko Buljan  let Inst{20-16} = rs;
932cf61020SZlatko Buljan  let Inst{15-13} = sa;
942cf61020SZlatko Buljan  let Inst{12-6}  = op;
952cf61020SZlatko Buljan  let Inst{5-0}   = 0b111100;
962cf61020SZlatko Buljan}
972cf61020SZlatko Buljan
982cf61020SZlatko Buljanclass POOL32A_2RSA5B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
992cf61020SZlatko Buljan  bits<5> rt;
1002cf61020SZlatko Buljan  bits<5> rs;
1012cf61020SZlatko Buljan  bits<5> sa;
1022cf61020SZlatko Buljan
1032cf61020SZlatko Buljan  let Inst{31-26} = 0b000000;
1042cf61020SZlatko Buljan  let Inst{25-21} = rt;
1052cf61020SZlatko Buljan  let Inst{20-16} = rs;
1062cf61020SZlatko Buljan  let Inst{15-11} = sa;
1072cf61020SZlatko Buljan  let Inst{10}    = 0b0;
1082cf61020SZlatko Buljan  let Inst{9-0}   = op;
1092cf61020SZlatko Buljan}
11032fb5c40SZlatko Buljan
11132fb5c40SZlatko Buljanclass POOL32A_2RSA4B0_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
11232fb5c40SZlatko Buljan  bits<5> rt;
11332fb5c40SZlatko Buljan  bits<5> rs;
11432fb5c40SZlatko Buljan  bits<4> sa;
11532fb5c40SZlatko Buljan
11632fb5c40SZlatko Buljan  let Inst{31-26} = 0b000000;
11732fb5c40SZlatko Buljan  let Inst{25-21} = rt;
11832fb5c40SZlatko Buljan  let Inst{20-16} = rs;
11932fb5c40SZlatko Buljan  let Inst{15-12} = sa;
12032fb5c40SZlatko Buljan  let Inst{11}    = 0b0;
12132fb5c40SZlatko Buljan  let Inst{10-0}  = op;
12232fb5c40SZlatko Buljan}
12332fb5c40SZlatko Buljan
12432fb5c40SZlatko Buljanclass POOL32A_2RSA4OP6_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> {
12532fb5c40SZlatko Buljan  bits<5> rt;
12632fb5c40SZlatko Buljan  bits<5> rs;
12732fb5c40SZlatko Buljan  bits<4> sa;
12832fb5c40SZlatko Buljan
12932fb5c40SZlatko Buljan  let Inst{31-26} = 0b000000;
13032fb5c40SZlatko Buljan  let Inst{25-21} = rt;
13132fb5c40SZlatko Buljan  let Inst{20-16} = rs;
13232fb5c40SZlatko Buljan  let Inst{15-12} = sa;
13332fb5c40SZlatko Buljan  let Inst{11-6}  = op;
13432fb5c40SZlatko Buljan  let Inst{5-0}   = 0b111100;
13532fb5c40SZlatko Buljan}
13672a7f9c1SZlatko Buljan
13772a7f9c1SZlatko Buljanclass POOL32A_1RIMM5AC_FMT<string opstr, bits<8> funct> : MMDSPInst<opstr> {
13872a7f9c1SZlatko Buljan  bits<5> rt;
13972a7f9c1SZlatko Buljan  bits<5> imm;
14072a7f9c1SZlatko Buljan  bits<2> ac;
14172a7f9c1SZlatko Buljan
14272a7f9c1SZlatko Buljan  let Inst{31-26} = 0b000000;
14372a7f9c1SZlatko Buljan  let Inst{25-21} = rt;
14472a7f9c1SZlatko Buljan  let Inst{20-16} = imm;
14572a7f9c1SZlatko Buljan  let Inst{15-14} = ac;
14672a7f9c1SZlatko Buljan  let Inst{13-6}  = funct;
14772a7f9c1SZlatko Buljan  let Inst{5-0}   = 0b111100;
14872a7f9c1SZlatko Buljan}
14956f3b0e4SZlatko Buljan
15056f3b0e4SZlatko Buljanclass POOL32A_2RSA5_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
15156f3b0e4SZlatko Buljan  bits<5> rt;
15256f3b0e4SZlatko Buljan  bits<5> rs;
15356f3b0e4SZlatko Buljan  bits<5> sa;
15456f3b0e4SZlatko Buljan
15556f3b0e4SZlatko Buljan  let Inst{31-26} = 0b000000;
15656f3b0e4SZlatko Buljan  let Inst{25-21} = rt;
15756f3b0e4SZlatko Buljan  let Inst{20-16} = rs;
15856f3b0e4SZlatko Buljan  let Inst{15-11} = sa;
15956f3b0e4SZlatko Buljan  let Inst{10-0}  = op;
16056f3b0e4SZlatko Buljan}
161c03957f0SHrvoje Varga
162c03957f0SHrvoje Vargaclass POOL32A_1RMEMB0_FMT<string opstr, bits<10> funct> : MMDSPInst<opstr> {
163c03957f0SHrvoje Varga  bits<5> index;
164c03957f0SHrvoje Varga  bits<5> base;
165c03957f0SHrvoje Varga  bits<5> rd;
166c03957f0SHrvoje Varga
167c03957f0SHrvoje Varga  let Inst{31-26} = 0;
168c03957f0SHrvoje Varga  let Inst{25-21} = index;
169c03957f0SHrvoje Varga  let Inst{20-16} = base;
170c03957f0SHrvoje Varga  let Inst{15-11} = rd;
171c03957f0SHrvoje Varga  let Inst{10}    = 0b0;
172c03957f0SHrvoje Varga  let Inst{9-0}   = funct;
173c03957f0SHrvoje Varga}
174c03957f0SHrvoje Varga
175c03957f0SHrvoje Vargaclass POOL32A_1RAC_FMT<string instr_asm, bits<8> funct> : MMDSPInst<instr_asm> {
176c03957f0SHrvoje Varga  bits<5> rs;
177c03957f0SHrvoje Varga  bits<2> ac;
178c03957f0SHrvoje Varga
179c03957f0SHrvoje Varga  let Inst{31-26} = 0;
180c03957f0SHrvoje Varga  let Inst{25-21} = 0;
181c03957f0SHrvoje Varga  let Inst{20-16} = rs;
182c03957f0SHrvoje Varga  let Inst{15-14} = ac;
183c03957f0SHrvoje Varga  let Inst{13-6}  = funct;
184c03957f0SHrvoje Varga  let Inst{5-0}   = 0b111100;
185c03957f0SHrvoje Varga}
186672b0f55SHrvoje Varga
187672b0f55SHrvoje Vargaclass POOL32A_1RMASK7_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
188672b0f55SHrvoje Varga  bits<5> rt;
189672b0f55SHrvoje Varga  bits<7> mask;
190672b0f55SHrvoje Varga
191672b0f55SHrvoje Varga  let Inst{31-26} = 0b000000;
192672b0f55SHrvoje Varga  let Inst{25-21} = rt;
193672b0f55SHrvoje Varga  let Inst{20-14} = mask;
194672b0f55SHrvoje Varga  let Inst{13-6}  = op;
195672b0f55SHrvoje Varga  let Inst{5-0}   = 0b111100;
196672b0f55SHrvoje Varga}
197672b0f55SHrvoje Varga
198672b0f55SHrvoje Vargaclass POOL32A_1RIMM10_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
199672b0f55SHrvoje Varga  bits<5> rd;
200672b0f55SHrvoje Varga  bits<10> imm;
201672b0f55SHrvoje Varga
202672b0f55SHrvoje Varga  let Inst{31-26} = 0;
203672b0f55SHrvoje Varga  let Inst{25-16} = imm;
204672b0f55SHrvoje Varga  let Inst{15-11} = rd;
205672b0f55SHrvoje Varga  let Inst{10}    = 0;
206672b0f55SHrvoje Varga  let Inst{9-0}   = op;
207672b0f55SHrvoje Varga}
208672b0f55SHrvoje Varga
209672b0f55SHrvoje Vargaclass POOL32A_1RIMM8_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> {
210672b0f55SHrvoje Varga  bits<5> rt;
211672b0f55SHrvoje Varga  bits<8> imm;
212672b0f55SHrvoje Varga
213672b0f55SHrvoje Varga  let Inst{31-26} = 0;
214672b0f55SHrvoje Varga  let Inst{25-21} = rt;
215672b0f55SHrvoje Varga  let Inst{20-13} = imm;
216672b0f55SHrvoje Varga  let Inst{12}    = 0;
217672b0f55SHrvoje Varga  let Inst{11-6}  = op;
218672b0f55SHrvoje Varga  let Inst{5-0}   = 0b111100;
219672b0f55SHrvoje Varga}
220252cca55SZlatko Buljan
221252cca55SZlatko Buljanclass POOL32A_4B0SHIFT6AC4B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
222252cca55SZlatko Buljan  bits<6> shift;
223252cca55SZlatko Buljan  bits<2> ac;
224252cca55SZlatko Buljan
225252cca55SZlatko Buljan  let Inst{31-26} = 0b000000;
226252cca55SZlatko Buljan  let Inst{25-22} = 0b0000;
227252cca55SZlatko Buljan  let Inst{21-16} = shift;
228252cca55SZlatko Buljan  let Inst{15-14} = ac;
229252cca55SZlatko Buljan  let Inst{13-10} = 0b0000;
230252cca55SZlatko Buljan  let Inst{9-0}   = op;
231252cca55SZlatko Buljan}
232252cca55SZlatko Buljan
233252cca55SZlatko Buljanclass POOL32A_5B01RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
234252cca55SZlatko Buljan  bits<5> rs;
235252cca55SZlatko Buljan  bits<2> ac;
236252cca55SZlatko Buljan
237252cca55SZlatko Buljan  let Inst{31-26} = 0b000000;
238252cca55SZlatko Buljan  let Inst{25-21} = 0b00000;
239252cca55SZlatko Buljan  let Inst{20-16} = rs;
240252cca55SZlatko Buljan  let Inst{15-14} = ac;
241252cca55SZlatko Buljan  let Inst{13-6}  = op;
242252cca55SZlatko Buljan  let Inst{5-0}   = 0b111100;
243252cca55SZlatko Buljan}
2446f09cdfdSHrvoje Varga
2456f09cdfdSHrvoje Vargaclass POOL32I_IMMB0_FMT<string opstr, bits<5> op> : MMDSPInst<opstr> {
2466f09cdfdSHrvoje Varga  bits<16> offset;
2476f09cdfdSHrvoje Varga
2486f09cdfdSHrvoje Varga  let Inst{31-26} = 0b010000;
2496f09cdfdSHrvoje Varga  let Inst{25-21} = op;
2506f09cdfdSHrvoje Varga  let Inst{20-16} = 0;
2516f09cdfdSHrvoje Varga  let Inst{15-0}  = offset;
252e9abe881SZlatko Buljan}
253e9abe881SZlatko Buljan
254e9abe881SZlatko Buljanclass POOL32A_2RBP_FMT<string opstr> : MMDSPInst<opstr> {
255e9abe881SZlatko Buljan  bits<5> rt;
256e9abe881SZlatko Buljan  bits<5> rs;
257e9abe881SZlatko Buljan  bits<2> bp;
258e9abe881SZlatko Buljan
259e9abe881SZlatko Buljan  let Inst{31-26} = 0;
260e9abe881SZlatko Buljan  let Inst{25-21} = rt;
261e9abe881SZlatko Buljan  let Inst{20-16} = rs;
262e9abe881SZlatko Buljan  let Inst{15-14} = bp;
263e9abe881SZlatko Buljan  let Inst{13-6}  = 0b00100010;
264e9abe881SZlatko Buljan  let Inst{5-0}   = 0b111100;
265e9abe881SZlatko Buljan}
266e9abe881SZlatko Buljan
267e9abe881SZlatko Buljanclass POOL32A_2RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
268e9abe881SZlatko Buljan  bits<5> rt;
269e9abe881SZlatko Buljan  bits<5> rs;
270e9abe881SZlatko Buljan
271e9abe881SZlatko Buljan  let Inst{31-26} = 0;
272e9abe881SZlatko Buljan  let Inst{25-21} = rt;
273e9abe881SZlatko Buljan  let Inst{20-16} = rs;
274e9abe881SZlatko Buljan  let Inst{15-10} = 0;
275e9abe881SZlatko Buljan  let Inst{9-0}   = op;
276e9abe881SZlatko Buljan}
277e9abe881SZlatko Buljan
278e9abe881SZlatko Buljanclass POOL32S_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
279e9abe881SZlatko Buljan  bits<5> rt;
280e9abe881SZlatko Buljan  bits<5> rs;
281e9abe881SZlatko Buljan  bits<5> rd;
282e9abe881SZlatko Buljan
283e9abe881SZlatko Buljan  let Inst{31-26} = 0b010110;
284e9abe881SZlatko Buljan  let Inst{25-21} = rt;
285e9abe881SZlatko Buljan  let Inst{20-16} = rs;
286e9abe881SZlatko Buljan  let Inst{15-11} = rd;
287e9abe881SZlatko Buljan  let Inst{10}    = 0b0;
288e9abe881SZlatko Buljan  let Inst{9-0}   = op;
289e9abe881SZlatko Buljan}
290e9abe881SZlatko Buljan
291e9abe881SZlatko Buljanclass POOL32A_2R2B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
292e9abe881SZlatko Buljan  bits<5> rt;
293e9abe881SZlatko Buljan  bits<5> rs;
294e9abe881SZlatko Buljan
295e9abe881SZlatko Buljan  let Inst{31-26} = 0;
296e9abe881SZlatko Buljan  let Inst{25-21} = rt;
297e9abe881SZlatko Buljan  let Inst{20-16} = rs;
298e9abe881SZlatko Buljan  let Inst{15-11} = 0;
299e9abe881SZlatko Buljan  let Inst{10}    = 0;
300e9abe881SZlatko Buljan  let Inst{9-0}   = op;
3016f09cdfdSHrvoje Varga}
302