blob: f231d3a5294ddb2ad592aa351e1cfbdf198ceaa3 [file] [log] [blame]
Zoran Jovanovic2e386d32015-10-12 16:07:25 +00001//===-- MicroMipsDSPInstrFormats.td - 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
10class MMDSPInst<string opstr = "">
11 : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>, PredicateControl {
12 let InsnPredicates = [HasDSP];
Zlatko Buljan54b1eb42015-10-15 08:59:45 +000013 let AdditionalPredicates = [InMicroMips];
Zoran Jovanovic2e386d32015-10-12 16:07:25 +000014 string BaseOpcode = opstr;
15 string Arch = "mmdsp";
16 let DecoderNamespace = "MicroMips";
17}
18
Zlatko Buljan54b1eb42015-10-15 08:59:45 +000019class POOL32A_3R_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
Zoran Jovanovic2e386d32015-10-12 16:07:25 +000020 bits<5> rd;
21 bits<5> rs;
22 bits<5> rt;
23
24 let Inst{31-26} = 0b000000;
25 let Inst{25-21} = rt;
26 let Inst{20-16} = rs;
27 let Inst{15-11} = rd;
28 let Inst{10-0} = op;
29}
Zlatko Buljan54b1eb42015-10-15 08:59:45 +000030
Zlatko Buljand0a7d6e2015-10-19 06:34:44 +000031class POOL32A_2R_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
32 bits<5> rt;
33 bits<5> rs;
34
35 let Inst{31-26} = 0b000000;
36 let Inst{25-21} = rt;
37 let Inst{20-16} = rs;
38 let Inst{15-6} = op;
39 let Inst{5-0} = 0b111100;
40}
41
42class POOL32A_2RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
43 bits<5> rt;
44 bits<5> rs;
45 bits<2> ac;
46
47 let Inst{31-26} = 0b000000;
48 let Inst{25-21} = rt;
49 let Inst{20-16} = rs;
50 let Inst{15-14} = ac;
51 let Inst{13-6} = op;
52 let Inst{5-0} = 0b111100;
53}
Zlatko Buljan52920832015-10-19 07:16:26 +000054
55class POOL32A_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
56 bits<5> rd;
57 bits<5> rs;
58 bits<5> rt;
59
60 let Inst{31-26} = 0b000000;
61 let Inst{25-21} = rt;
62 let Inst{20-16} = rs;
63 let Inst{15-11} = rd;
64 let Inst{10} = 0b0;
65 let Inst{9-0} = op;
66}
Zlatko Buljan2cf61022015-10-23 06:39:29 +000067
68class POOL32A_2RSA4_FMT<string opstr, bits<12> op> : MMDSPInst<opstr> {
69 bits<5> rt;
70 bits<5> rs;
71 bits<4> sa;
72
73 let Inst{31-26} = 0b000000;
74 let Inst{25-21} = rt;
75 let Inst{20-16} = rs;
76 let Inst{15-12} = sa;
77 let Inst{11-0} = op;
78}
79
80class POOL32A_2RSA3_FMT<string opstr, bits<7> op> : MMDSPInst<opstr> {
81 bits<5> rt;
82 bits<5> rs;
83 bits<3> sa;
84
85 let Inst{31-26} = 0b000000;
86 let Inst{25-21} = rt;
87 let Inst{20-16} = rs;
88 let Inst{15-13} = sa;
89 let Inst{12-6} = op;
90 let Inst{5-0} = 0b111100;
91}
92
93class POOL32A_2RSA5B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
94 bits<5> rt;
95 bits<5> rs;
96 bits<5> sa;
97
98 let Inst{31-26} = 0b000000;
99 let Inst{25-21} = rt;
100 let Inst{20-16} = rs;
101 let Inst{15-11} = sa;
102 let Inst{10} = 0b0;
103 let Inst{9-0} = op;
104}
Zlatko Buljan32fb5c42015-11-13 13:14:25 +0000105
106class POOL32A_2RSA4B0_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
107 bits<5> rt;
108 bits<5> rs;
109 bits<4> sa;
110
111 let Inst{31-26} = 0b000000;
112 let Inst{25-21} = rt;
113 let Inst{20-16} = rs;
114 let Inst{15-12} = sa;
115 let Inst{11} = 0b0;
116 let Inst{10-0} = op;
117}
118
119class POOL32A_2RSA4OP6_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> {
120 bits<5> rt;
121 bits<5> rs;
122 bits<4> sa;
123
124 let Inst{31-26} = 0b000000;
125 let Inst{25-21} = rt;
126 let Inst{20-16} = rs;
127 let Inst{15-12} = sa;
128 let Inst{11-6} = op;
129 let Inst{5-0} = 0b111100;
130}
Zlatko Buljan72a7f9c2015-11-17 12:54:15 +0000131
132class POOL32A_1RIMM5AC_FMT<string opstr, bits<8> funct> : MMDSPInst<opstr> {
133 bits<5> rt;
134 bits<5> imm;
135 bits<2> ac;
136
137 let Inst{31-26} = 0b000000;
138 let Inst{25-21} = rt;
139 let Inst{20-16} = imm;
140 let Inst{15-14} = ac;
141 let Inst{13-6} = funct;
142 let Inst{5-0} = 0b111100;
143}
Zlatko Buljan56f3b0e2015-11-30 08:37:38 +0000144
145class POOL32A_2RSA5_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
146 bits<5> rt;
147 bits<5> rs;
148 bits<5> sa;
149
150 let Inst{31-26} = 0b000000;
151 let Inst{25-21} = rt;
152 let Inst{20-16} = rs;
153 let Inst{15-11} = sa;
154 let Inst{10-0} = op;
155}
Hrvoje Vargac03957f2015-11-30 12:58:39 +0000156
157class POOL32A_1RMEMB0_FMT<string opstr, bits<10> funct> : MMDSPInst<opstr> {
158 bits<5> index;
159 bits<5> base;
160 bits<5> rd;
161
162 let Inst{31-26} = 0;
163 let Inst{25-21} = index;
164 let Inst{20-16} = base;
165 let Inst{15-11} = rd;
166 let Inst{10} = 0b0;
167 let Inst{9-0} = funct;
168}
169
170class POOL32A_1RAC_FMT<string instr_asm, bits<8> funct> : MMDSPInst<instr_asm> {
171 bits<5> rs;
172 bits<2> ac;
173
174 let Inst{31-26} = 0;
175 let Inst{25-21} = 0;
176 let Inst{20-16} = rs;
177 let Inst{15-14} = ac;
178 let Inst{13-6} = funct;
179 let Inst{5-0} = 0b111100;
180}