MicroMipsInstrFormats.td revision 42cb3abaddfcff16ab18b114c3de034839c85e05
1class MMArch {
2  string Arch = "micromips";
3  list<dag> Pattern = [];
4}
5
6class ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch {
7  bits<5> rt;
8  bits<5> rs;
9  bits<5> rd;
10
11  bits<32> Inst;
12
13  let Inst{31-26} = op;
14  let Inst{25-21} = rt;
15  let Inst{20-16} = rs;
16  let Inst{15-11} = rd;
17  let Inst{10}    = 0;
18  let Inst{9-0}   = funct;
19}
20
21class ADDI_FM_MM<bits<6> op> : MMArch {
22  bits<5>  rs;
23  bits<5>  rt;
24  bits<16> imm16;
25
26  bits<32> Inst;
27
28  let Inst{31-26} = op;
29  let Inst{25-21} = rt;
30  let Inst{20-16} = rs;
31  let Inst{15-0}  = imm16;
32}
33
34class SLTI_FM_MM<bits<6> op> : MMArch {
35  bits<5> rt;
36  bits<5> rs;
37  bits<16> imm16;
38
39  bits<32> Inst;
40
41  let Inst{31-26} = op;
42  let Inst{25-21} = rt;
43  let Inst{20-16} = rs;
44  let Inst{15-0}  = imm16;
45}
46
47class LUI_FM_MM : MMArch {
48  bits<5> rt;
49  bits<16> imm16;
50
51  bits<32> Inst;
52
53  let Inst{31-26} = 0x10;
54  let Inst{25-21} = 0xd;
55  let Inst{20-16} = rt;
56  let Inst{15-0}  = imm16;
57}
58
59class MULT_FM_MM<bits<10> funct> : MMArch {
60  bits<5>  rs;
61  bits<5>  rt;
62
63  bits<32> Inst;
64
65  let Inst{31-26} = 0x00;
66  let Inst{25-21} = rt;
67  let Inst{20-16} = rs;
68  let Inst{15-6}  = funct;
69  let Inst{5-0}   = 0x3c;
70}
71
72class SRA_FM_MM<bits<10> funct, bit rotate> : MMArch {
73  bits<5> rd;
74  bits<5> rt;
75  bits<5> shamt;
76
77  bits<32> Inst;
78
79  let Inst{31-26} = 0;
80  let Inst{25-21} = rd;
81  let Inst{20-16} = rt;
82  let Inst{15-11} = shamt;
83  let Inst{10}    = rotate;
84  let Inst{9-0}   = funct;
85}
86
87class SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch {
88  bits<5> rd;
89  bits<5> rt;
90  bits<5> rs;
91
92  bits<32> Inst;
93
94  let Inst{31-26} = 0;
95  let Inst{25-21} = rt;
96  let Inst{20-16} = rs;
97  let Inst{15-11} = rd;
98  let Inst{10}    = rotate;
99  let Inst{9-0}   = funct;
100}
101
102class LW_FM_MM<bits<6> op> : MMArch {
103  bits<5> rt;
104  bits<21> addr;
105
106  bits<32> Inst;
107
108  let Inst{31-26} = op;
109  let Inst{25-21} = rt;
110  let Inst{20-16} = addr{20-16};
111  let Inst{15-0}  = addr{15-0};
112}
113
114class LWL_FM_MM<bits<4> funct> {
115  bits<5> rt;
116  bits<21> addr;
117
118  bits<32> Inst;
119
120  let Inst{31-26} = 0x18;
121  let Inst{25-21} = rt;
122  let Inst{20-16} = addr{20-16};
123  let Inst{15-12} = funct;
124  let Inst{11-0}  = addr{11-0};
125}
126
127class CMov_F_I_FM_MM<bits<7> func> : MMArch {
128  bits<5> rd;
129  bits<5> rs;
130  bits<3> fcc;
131
132  bits<32> Inst;
133
134  let Inst{31-26} = 0x15;
135  let Inst{25-21} = rd;
136  let Inst{20-16} = rs;
137  let Inst{15-13} = fcc;
138  let Inst{12-6}  = func;
139  let Inst{5-0}   = 0x3b;
140}
141
142class MTLO_FM_MM<bits<10> funct> : MMArch {
143  bits<5> rs;
144
145  bits<32> Inst;
146
147  let Inst{31-26} = 0x00;
148  let Inst{25-21} = 0x00;
149  let Inst{20-16} = rs;
150  let Inst{15-6}  = funct;
151  let Inst{5-0}   = 0x3c;
152}
153
154class MFLO_FM_MM<bits<10> funct> : MMArch {
155  bits<5> rd;
156
157  bits<32> Inst;
158
159  let Inst{31-26} = 0x00;
160  let Inst{25-21} = 0x00;
161  let Inst{20-16} = rd;
162  let Inst{15-6}  = funct;
163  let Inst{5-0}   = 0x3c;
164}
165
166class CLO_FM_MM<bits<10> funct> : MMArch {
167  bits<5> rd;
168  bits<5> rs;
169
170  bits<32> Inst;
171
172  let Inst{31-26} = 0x00;
173  let Inst{25-21} = rd;
174  let Inst{20-16} = rs;
175  let Inst{15-6}  = funct;
176  let Inst{5-0}   = 0x3c;
177}
178
179class SEB_FM_MM<bits<10> funct> : MMArch {
180  bits<5> rd;
181  bits<5> rt;
182
183  bits<32> Inst;
184
185  let Inst{31-26} = 0x00;
186  let Inst{25-21} = rd;
187  let Inst{20-16} = rt;
188  let Inst{15-6}  = funct;
189  let Inst{5-0}   = 0x3c;
190}
191
192class EXT_FM_MM<bits<6> funct> : MMArch {
193  bits<5> rt;
194  bits<5> rs;
195  bits<5> pos;
196  bits<5> size;
197
198  bits<32> Inst;
199
200  let Inst{31-26} = 0x00;
201  let Inst{25-21} = rt;
202  let Inst{20-16} = rs;
203  let Inst{15-11} = size;
204  let Inst{10-6}  = pos;
205  let Inst{5-0}   = funct;
206}
207
208class J_FM_MM<bits<6> op> : MMArch {
209  bits<26> target;
210
211  bits<32> Inst;
212
213  let Inst{31-26} = op;
214  let Inst{25-0}  = target;
215}
216
217class JR_FM_MM<bits<8> funct> : MMArch {
218  bits<5> rs;
219
220  bits<32> Inst;
221
222  let Inst{31-21} = 0x00;
223  let Inst{20-16} = rs;
224  let Inst{15-14} = 0x0;
225  let Inst{13-6}  = funct;
226  let Inst{5-0}   = 0x3c;
227}
228
229class JALR_FM_MM<bits<10> funct> : MMArch {
230  bits<5> rs;
231  bits<5> rd;
232
233  bits<32> Inst;
234
235  let Inst{31-26} = 0x00;
236  let Inst{25-21} = rd;
237  let Inst{20-16} = rs;
238  let Inst{15-6}  = funct;
239  let Inst{5-0}   = 0x3c;
240}
241
242class BEQ_FM_MM<bits<6> op> : MMArch {
243  bits<5>  rs;
244  bits<5>  rt;
245  bits<16> offset;
246
247  bits<32> Inst;
248
249  let Inst{31-26} = op;
250  let Inst{25-21} = rt;
251  let Inst{20-16} = rs;
252  let Inst{15-0}  = offset;
253}
254
255class BGEZ_FM_MM<bits<5> funct> : MMArch {
256  bits<5>  rs;
257  bits<16> offset;
258
259  bits<32> Inst;
260
261  let Inst{31-26} = 0x10;
262  let Inst{25-21} = funct;
263  let Inst{20-16} = rs;
264  let Inst{15-0}  = offset;
265}
266
267class BGEZAL_FM_MM<bits<5> funct> : MMArch {
268  bits<5>  rs;
269  bits<16> offset;
270
271  bits<32> Inst;
272
273  let Inst{31-26} = 0x10;
274  let Inst{25-21} = funct;
275  let Inst{20-16} = rs;
276  let Inst{15-0}  = offset;
277}
278
279class TEQ_FM_MM<bits<6> funct> : MMArch {
280  bits<5> rs;
281  bits<5> rt;
282  bits<4> code_;
283
284  bits<32> Inst;
285
286  let Inst{31-26} = 0x00;
287  let Inst{25-21} = rt;
288  let Inst{20-16} = rs;
289  let Inst{15-12} = code_;
290  let Inst{11-6}  = funct;
291  let Inst{5-0}   = 0x3c;
292}
293
294class TEQI_FM_MM<bits<5> funct> : MMArch {
295  bits<5> rs;
296  bits<16> imm16;
297
298  bits<32> Inst;
299
300  let Inst{31-26} = 0x10;
301  let Inst{25-21} = funct;
302  let Inst{20-16} = rs;
303  let Inst{15-0}  = imm16;
304}
305