blob: 8b595f9e6c4c1a8e8efb8ac99149e5a422ed5ebc [file] [log] [blame]
Zoran Jovanovic87d13e52014-03-20 10:18:24 +00001//===----------------------------------------------------------------------===//
2// MicroMIPS Base Classes
3//===----------------------------------------------------------------------===//
4
5//
6// Base class for MicroMips instructions.
7// This class does not depend on the instruction size.
8//
9class MicroMipsInstBase<dag outs, dag ins, string asmstr, list<dag> pattern,
10 InstrItinClass itin, Format f> : Instruction
11{
12 let Namespace = "Mips";
13 let DecoderNamespace = "MicroMips";
14
15 let OutOperandList = outs;
16 let InOperandList = ins;
17
18 let AsmString = asmstr;
19 let Pattern = pattern;
20 let Itinerary = itin;
21
22 let Predicates = [InMicroMips];
23
24 Format Form = f;
25}
26
27//
28// Base class for MicroMIPS 16-bit instructions.
29//
30class MicroMipsInst16<dag outs, dag ins, string asmstr, list<dag> pattern,
31 InstrItinClass itin, Format f> :
32 MicroMipsInstBase<outs, ins, asmstr, pattern, itin, f>
33{
34 let Size = 2;
35 field bits<16> Inst;
36 field bits<16> SoftFail = 0;
37 bits<6> Opcode = 0x0;
38}
39
40//===----------------------------------------------------------------------===//
41// MicroMIPS 16-bit Instruction Formats
42//===----------------------------------------------------------------------===//
43
Zoran Jovanovic592239d2014-10-21 08:44:58 +000044class ARITH_FM_MM16<bit funct> {
45 bits<3> rd;
46 bits<3> rt;
47 bits<3> rs;
48
49 bits<16> Inst;
50
51 let Inst{15-10} = 0x01;
52 let Inst{9-7} = rd;
53 let Inst{6-4} = rt;
54 let Inst{3-1} = rs;
55 let Inst{0} = funct;
56}
57
Zoran Jovanovic88531712014-11-05 17:31:00 +000058class ANDI_FM_MM16<bits<6> funct> {
59 bits<3> rd;
60 bits<3> rs;
61 bits<4> imm;
62
63 bits<16> Inst;
64
65 let Inst{15-10} = funct;
66 let Inst{9-7} = rd;
67 let Inst{6-4} = rs;
68 let Inst{3-0} = imm;
69}
70
Zoran Jovanovic81ceebc2014-10-21 08:32:40 +000071class LOGIC_FM_MM16<bits<4> funct> {
72 bits<3> rt;
73 bits<3> rs;
74
75 bits<16> Inst;
76
77 let Inst{15-10} = 0x11;
78 let Inst{9-6} = funct;
79 let Inst{5-3} = rt;
80 let Inst{2-0} = rs;
81}
82
Zoran Jovanovic4a00fdc2014-10-23 10:42:01 +000083class SHIFT_FM_MM16<bits<1> funct> {
84 bits<3> rd;
85 bits<3> rt;
86 bits<3> shamt;
87
88 bits<16> Inst;
89
90 let Inst{15-10} = 0x09;
91 let Inst{9-7} = rd;
92 let Inst{6-4} = rt;
93 let Inst{3-1} = shamt;
94 let Inst{0} = funct;
95}
96
Zoran Jovanovicbac36192014-10-23 11:06:34 +000097class ADDIUR2_FM_MM16 {
98 bits<3> rd;
99 bits<3> rs;
100 bits<3> imm;
101
102 bits<16> Inst;
103
104 let Inst{15-10} = 0x1b;
105 let Inst{9-7} = rd;
106 let Inst{6-4} = rs;
107 let Inst{3-1} = imm;
108 let Inst{0} = 0;
109}
110
Jozef Koleke8c9d1e2014-11-24 14:39:13 +0000111class LOAD_STORE_FM_MM16<bits<6> op> {
112 bits<3> rt;
113 bits<7> addr;
114
115 bits<16> Inst;
116
117 let Inst{15-10} = op;
118 let Inst{9-7} = rt;
119 let Inst{6-4} = addr{6-4};
120 let Inst{3-0} = addr{3-0};
121}
122
Jozef Kolek12c69822014-12-23 16:16:33 +0000123class LOAD_STORE_SP_FM_MM16<bits<6> op> {
124 bits<5> rt;
125 bits<5> offset;
126
127 bits<16> Inst;
128
129 let Inst{15-10} = op;
130 let Inst{9-5} = rt;
131 let Inst{4-0} = offset;
132}
133
Jozef Koleke10a02e2015-01-28 17:27:26 +0000134class LOAD_GP_FM_MM16<bits<6> op> {
135 bits<3> rt;
136 bits<7> offset;
137
138 bits<16> Inst;
139
140 let Inst{15-10} = op;
141 let Inst{9-7} = rt;
142 let Inst{6-0} = offset;
143}
144
Zoran Jovanovicb26f8892014-10-10 13:45:34 +0000145class ADDIUS5_FM_MM16 {
146 bits<5> rd;
147 bits<4> imm;
148
149 bits<16> Inst;
150
151 let Inst{15-10} = 0x13;
152 let Inst{9-5} = rd;
153 let Inst{4-1} = imm;
154 let Inst{0} = 0;
155}
156
Zoran Jovanovic98bd58c2014-10-10 14:37:30 +0000157class ADDIUSP_FM_MM16 {
158 bits<9> imm;
159
160 bits<16> Inst;
161
162 let Inst{15-10} = 0x13;
163 let Inst{9-1} = imm;
164 let Inst{0} = 1;
165}
166
Zoran Jovanovic87d13e52014-03-20 10:18:24 +0000167class MOVE_FM_MM16<bits<6> funct> {
168 bits<5> rs;
169 bits<5> rd;
170
171 bits<16> Inst;
172
173 let Inst{15-10} = funct;
174 let Inst{9-5} = rd;
175 let Inst{4-0} = rs;
176}
177
Zoran Jovanovic9bda2f12014-10-23 10:59:24 +0000178class LI_FM_MM16 {
179 bits<3> rd;
180 bits<7> imm;
181
182 bits<16> Inst;
183
184 let Inst{15-10} = 0x3b;
185 let Inst{9-7} = rd;
186 let Inst{6-0} = imm;
187}
188
Zoran Jovanovic87d13e52014-03-20 10:18:24 +0000189class JALR_FM_MM16<bits<5> op> {
190 bits<5> rs;
191
192 bits<16> Inst;
193
194 let Inst{15-10} = 0x11;
195 let Inst{9-5} = op;
196 let Inst{4-0} = rs;
197}
198
Zoran Jovanoviccabf0f42014-04-03 12:47:34 +0000199class MFHILO_FM_MM16<bits<5> funct> {
200 bits<5> rd;
201
202 bits<16> Inst;
203
204 let Inst{15-10} = 0x11;
205 let Inst{9-5} = funct;
206 let Inst{4-0} = rd;
207}
208
Zoran Jovanovicc74e3eb92014-09-12 14:29:54 +0000209class JRADDIUSP_FM_MM16<bits<5> op> {
210 bits<5> rs;
211 bits<5> imm;
212
213 bits<16> Inst;
214
215 let Inst{15-10} = 0x11;
216 let Inst{9-5} = op;
217 let Inst{4-0} = imm;
218}
219
Zoran Jovanovic42b84442014-10-23 11:13:59 +0000220class ADDIUR1SP_FM_MM16 {
221 bits<3> rd;
222 bits<6> imm;
223
224 bits<16> Inst;
225
226 let Inst{15-10} = 0x1b;
227 let Inst{9-7} = rd;
228 let Inst{6-1} = imm;
229 let Inst{0} = 1;
230}
231
Jozef Kolek56a6a7d2014-11-27 18:18:42 +0000232class BRKSDBBP16_FM_MM<bits<6> op> {
233 bits<4> code_;
234 bits<16> Inst;
235
236 let Inst{15-10} = 0x11;
237 let Inst{9-4} = op;
238 let Inst{3-0} = code_;
239}
240
Jozef Kolek9761e962015-01-12 12:03:34 +0000241class BEQNEZ_FM_MM16<bits<6> op> {
242 bits<3> rs;
243 bits<7> offset;
244
245 bits<16> Inst;
246
247 let Inst{15-10} = op;
248 let Inst{9-7} = rs;
249 let Inst{6-0} = offset;
250}
251
Jozef Kolek5cfebdd2015-01-21 12:39:30 +0000252class B16_FM {
253 bits<10> offset;
254
255 bits<16> Inst;
256
257 let Inst{15-10} = 0x33;
258 let Inst{9-0} = offset;
259}
260
Zoran Jovanovic41688672015-02-10 16:36:20 +0000261class MOVEP_FM_MM16 {
262 bits<3> dst_regs;
263 bits<3> rt;
264 bits<3> rs;
265
266 bits<16> Inst;
267
268 let Inst{15-10} = 0x21;
269 let Inst{9-7} = dst_regs;
270 let Inst{6-4} = rt;
271 let Inst{3-1} = rs;
272 let Inst{0} = 0;
273}
274
Zoran Jovanovic87d13e52014-03-20 10:18:24 +0000275//===----------------------------------------------------------------------===//
276// MicroMIPS 32-bit Instruction Formats
277//===----------------------------------------------------------------------===//
278
Akira Hatanakabe6a8182013-04-19 19:03:11 +0000279class MMArch {
280 string Arch = "micromips";
Akira Hatanakabe6a8182013-04-19 19:03:11 +0000281}
282
283class ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch {
284 bits<5> rt;
285 bits<5> rs;
286 bits<5> rd;
287
288 bits<32> Inst;
289
290 let Inst{31-26} = op;
291 let Inst{25-21} = rt;
292 let Inst{20-16} = rs;
293 let Inst{15-11} = rd;
294 let Inst{10} = 0;
295 let Inst{9-0} = funct;
296}
297
298class ADDI_FM_MM<bits<6> op> : MMArch {
299 bits<5> rs;
300 bits<5> rt;
301 bits<16> imm16;
302
303 bits<32> Inst;
304
305 let Inst{31-26} = op;
306 let Inst{25-21} = rt;
307 let Inst{20-16} = rs;
308 let Inst{15-0} = imm16;
309}
310
311class SLTI_FM_MM<bits<6> op> : MMArch {
312 bits<5> rt;
313 bits<5> rs;
314 bits<16> imm16;
315
316 bits<32> Inst;
317
318 let Inst{31-26} = op;
Zoran Jovanovicf4d4d782013-11-15 08:07:34 +0000319 let Inst{25-21} = rt;
320 let Inst{20-16} = rs;
Akira Hatanakabe6a8182013-04-19 19:03:11 +0000321 let Inst{15-0} = imm16;
322}
323
324class LUI_FM_MM : MMArch {
325 bits<5> rt;
326 bits<16> imm16;
327
328 bits<32> Inst;
329
330 let Inst{31-26} = 0x10;
331 let Inst{25-21} = 0xd;
332 let Inst{20-16} = rt;
333 let Inst{15-0} = imm16;
334}
335
336class MULT_FM_MM<bits<10> funct> : MMArch {
337 bits<5> rs;
338 bits<5> rt;
339
340 bits<32> Inst;
341
342 let Inst{31-26} = 0x00;
343 let Inst{25-21} = rt;
344 let Inst{20-16} = rs;
345 let Inst{15-6} = funct;
346 let Inst{5-0} = 0x3c;
347}
Akira Hatanakacd9b74a2013-04-25 01:11:15 +0000348
349class SRA_FM_MM<bits<10> funct, bit rotate> : MMArch {
350 bits<5> rd;
351 bits<5> rt;
352 bits<5> shamt;
353
354 bits<32> Inst;
355
356 let Inst{31-26} = 0;
357 let Inst{25-21} = rd;
358 let Inst{20-16} = rt;
359 let Inst{15-11} = shamt;
360 let Inst{10} = rotate;
361 let Inst{9-0} = funct;
362}
363
364class SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch {
365 bits<5> rd;
366 bits<5> rt;
367 bits<5> rs;
368
369 bits<32> Inst;
370
371 let Inst{31-26} = 0;
372 let Inst{25-21} = rt;
373 let Inst{20-16} = rs;
374 let Inst{15-11} = rd;
375 let Inst{10} = rotate;
376 let Inst{9-0} = funct;
377}
Akira Hatanakaf0aa6c92013-04-25 01:21:25 +0000378
379class LW_FM_MM<bits<6> op> : MMArch {
380 bits<5> rt;
381 bits<21> addr;
Zlatko Buljan6afea512016-05-18 06:54:59 +0000382 bits<5> base = addr{20-16};
383 bits<16> offset = addr{15-0};
Akira Hatanakaf0aa6c92013-04-25 01:21:25 +0000384
385 bits<32> Inst;
386
387 let Inst{31-26} = op;
388 let Inst{25-21} = rt;
Zlatko Buljan6afea512016-05-18 06:54:59 +0000389 let Inst{20-16} = base;
390 let Inst{15-0} = offset;
Akira Hatanakaf0aa6c92013-04-25 01:21:25 +0000391}
Jack Carter97700972013-08-13 20:19:16 +0000392
Zoran Jovanovic6e6a2c92015-09-16 09:14:35 +0000393class POOL32C_LHUE_FM_MM<bits<6> op, bits<4> fmt, bits<3> funct> : MMArch {
394 bits<5> rt;
395 bits<21> addr;
396 bits<5> base = addr{20-16};
397 bits<9> offset = addr{8-0};
398
399 bits<32> Inst;
400
401 let Inst{31-26} = op;
402 let Inst{25-21} = rt;
403 let Inst{20-16} = base;
404 let Inst{15-12} = fmt;
405 let Inst{11-9} = funct;
406 let Inst{8-0} = offset;
407}
408
Jack Carter97700972013-08-13 20:19:16 +0000409class LWL_FM_MM<bits<4> funct> {
410 bits<5> rt;
411 bits<21> addr;
412
413 bits<32> Inst;
414
415 let Inst{31-26} = 0x18;
416 let Inst{25-21} = rt;
417 let Inst{20-16} = addr{20-16};
418 let Inst{15-12} = funct;
419 let Inst{11-0} = addr{11-0};
420}
Vladimir Medice0fbb442013-09-06 12:41:17 +0000421
Hrvoje Vargaa766eff2015-10-15 07:23:06 +0000422class POOL32C_STEVA_LDEVA_FM_MM<bits<4> type, bits<3> funct> {
423 bits<5> rt;
424 bits<21> addr;
425 bits<5> base = addr{20-16};
426 bits<9> offset = addr{8-0};
427
428 bits<32> Inst;
429
430 let Inst{31-26} = 0x18;
431 let Inst{25-21} = rt;
432 let Inst{20-16} = base;
433 let Inst{15-12} = type;
434 let Inst{11-9} = funct;
435 let Inst{8-0} = offset;
436}
437
Vladimir Medice0fbb442013-09-06 12:41:17 +0000438class CMov_F_I_FM_MM<bits<7> func> : MMArch {
439 bits<5> rd;
440 bits<5> rs;
441 bits<3> fcc;
442
443 bits<32> Inst;
444
445 let Inst{31-26} = 0x15;
446 let Inst{25-21} = rd;
447 let Inst{20-16} = rs;
448 let Inst{15-13} = fcc;
449 let Inst{12-6} = func;
450 let Inst{5-0} = 0x3b;
451}
Vladimir Medic457ba562013-09-06 12:53:21 +0000452
453class MTLO_FM_MM<bits<10> funct> : MMArch {
454 bits<5> rs;
455
456 bits<32> Inst;
457
458 let Inst{31-26} = 0x00;
459 let Inst{25-21} = 0x00;
460 let Inst{20-16} = rs;
461 let Inst{15-6} = funct;
462 let Inst{5-0} = 0x3c;
463}
464
465class MFLO_FM_MM<bits<10> funct> : MMArch {
466 bits<5> rd;
467
468 bits<32> Inst;
469
470 let Inst{31-26} = 0x00;
471 let Inst{25-21} = 0x00;
472 let Inst{20-16} = rd;
473 let Inst{15-6} = funct;
474 let Inst{5-0} = 0x3c;
475}
Zoran Jovanovicab852782013-09-14 06:49:25 +0000476
477class CLO_FM_MM<bits<10> funct> : MMArch {
478 bits<5> rd;
479 bits<5> rs;
480
481 bits<32> Inst;
482
483 let Inst{31-26} = 0x00;
484 let Inst{25-21} = rd;
485 let Inst{20-16} = rs;
486 let Inst{15-6} = funct;
487 let Inst{5-0} = 0x3c;
488}
489
490class SEB_FM_MM<bits<10> funct> : MMArch {
491 bits<5> rd;
492 bits<5> rt;
493
494 bits<32> Inst;
495
496 let Inst{31-26} = 0x00;
497 let Inst{25-21} = rd;
498 let Inst{20-16} = rt;
499 let Inst{15-6} = funct;
500 let Inst{5-0} = 0x3c;
501}
502
503class EXT_FM_MM<bits<6> funct> : MMArch {
504 bits<5> rt;
505 bits<5> rs;
506 bits<5> pos;
507 bits<5> size;
508
509 bits<32> Inst;
510
511 let Inst{31-26} = 0x00;
512 let Inst{25-21} = rt;
513 let Inst{20-16} = rs;
514 let Inst{15-11} = size;
515 let Inst{10-6} = pos;
516 let Inst{5-0} = funct;
517}
Zoran Jovanovic507e0842013-10-29 16:38:59 +0000518
519class J_FM_MM<bits<6> op> : MMArch {
520 bits<26> target;
521
522 bits<32> Inst;
523
524 let Inst{31-26} = op;
525 let Inst{25-0} = target;
526}
527
528class JR_FM_MM<bits<8> funct> : MMArch {
529 bits<5> rs;
530
531 bits<32> Inst;
532
533 let Inst{31-21} = 0x00;
534 let Inst{20-16} = rs;
535 let Inst{15-14} = 0x0;
536 let Inst{13-6} = funct;
537 let Inst{5-0} = 0x3c;
538}
539
Zoran Jovanovic87d13e52014-03-20 10:18:24 +0000540class JALR_FM_MM<bits<10> funct> {
Zoran Jovanovic507e0842013-10-29 16:38:59 +0000541 bits<5> rs;
542 bits<5> rd;
543
544 bits<32> Inst;
545
546 let Inst{31-26} = 0x00;
547 let Inst{25-21} = rd;
548 let Inst{20-16} = rs;
549 let Inst{15-6} = funct;
550 let Inst{5-0} = 0x3c;
551}
Zoran Jovanovic8a80aa72013-11-04 14:53:22 +0000552
553class BEQ_FM_MM<bits<6> op> : MMArch {
554 bits<5> rs;
555 bits<5> rt;
556 bits<16> offset;
557
558 bits<32> Inst;
559
560 let Inst{31-26} = op;
561 let Inst{25-21} = rt;
562 let Inst{20-16} = rs;
563 let Inst{15-0} = offset;
564}
565
566class BGEZ_FM_MM<bits<5> funct> : MMArch {
567 bits<5> rs;
568 bits<16> offset;
569
570 bits<32> Inst;
571
572 let Inst{31-26} = 0x10;
573 let Inst{25-21} = funct;
574 let Inst{20-16} = rs;
575 let Inst{15-0} = offset;
576}
577
578class BGEZAL_FM_MM<bits<5> funct> : MMArch {
579 bits<5> rs;
580 bits<16> offset;
581
582 bits<32> Inst;
583
584 let Inst{31-26} = 0x10;
585 let Inst{25-21} = funct;
586 let Inst{20-16} = rs;
587 let Inst{15-0} = offset;
588}
Zoran Jovanovicc18b6d12013-11-07 14:35:24 +0000589
Zoran Jovanovic8e918c32013-12-19 16:25:00 +0000590class SYNC_FM_MM : MMArch {
591 bits<5> stype;
592
593 bits<32> Inst;
594
595 let Inst{31-26} = 0x00;
596 let Inst{25-21} = 0x0;
597 let Inst{20-16} = stype;
598 let Inst{15-6} = 0x1ad;
599 let Inst{5-0} = 0x3c;
600}
601
Simon Dardis9c348542016-10-24 10:23:59 +0000602class SYNCI_FM_MM : MMArch {
603 bits<5> rs;
604 bits<16> offset;
605 bits<32> Inst;
606
607 let Inst{31-26} = 0b010000;
608 let Inst{25-21} = 0b10000;
609 let Inst{20-16} = rs;
610 let Inst{15-0} = offset;
611}
612
Zoran Jovanovic8e918c32013-12-19 16:25:00 +0000613class BRK_FM_MM : MMArch {
614 bits<10> code_1;
615 bits<10> code_2;
616 bits<32> Inst;
617 let Inst{31-26} = 0x0;
618 let Inst{25-16} = code_1;
619 let Inst{15-6} = code_2;
620 let Inst{5-0} = 0x07;
621}
622
623class SYS_FM_MM : MMArch {
624 bits<10> code_;
625 bits<32> Inst;
626 let Inst{31-26} = 0x0;
627 let Inst{25-16} = code_;
Zoran Jovanovic7c6c36d2014-02-28 18:17:08 +0000628 let Inst{15-6} = 0x22d;
Zoran Jovanovic8e918c32013-12-19 16:25:00 +0000629 let Inst{5-0} = 0x3c;
630}
631
Zoran Jovanovica0f53282014-03-20 10:41:37 +0000632class WAIT_FM_MM {
633 bits<10> code_;
Zoran Jovanovic8e918c32013-12-19 16:25:00 +0000634 bits<32> Inst;
635
636 let Inst{31-26} = 0x00;
Zoran Jovanovica0f53282014-03-20 10:41:37 +0000637 let Inst{25-16} = code_;
Zoran Jovanovic8e918c32013-12-19 16:25:00 +0000638 let Inst{15-6} = 0x24d;
639 let Inst{5-0} = 0x3c;
640}
641
642class ER_FM_MM<bits<10> funct> : MMArch {
643 bits<32> Inst;
644
645 let Inst{31-26} = 0x00;
646 let Inst{25-16} = 0x00;
647 let Inst{15-6} = funct;
648 let Inst{5-0} = 0x3c;
649}
650
651class EI_FM_MM<bits<10> funct> : MMArch {
652 bits<32> Inst;
653 bits<5> rt;
654
655 let Inst{31-26} = 0x00;
656 let Inst{25-21} = 0x00;
657 let Inst{20-16} = rt;
658 let Inst{15-6} = funct;
659 let Inst{5-0} = 0x3c;
660}
661
Zoran Jovanovicc18b6d12013-11-07 14:35:24 +0000662class TEQ_FM_MM<bits<6> funct> : MMArch {
663 bits<5> rs;
664 bits<5> rt;
665 bits<4> code_;
666
667 bits<32> Inst;
668
669 let Inst{31-26} = 0x00;
670 let Inst{25-21} = rt;
671 let Inst{20-16} = rs;
672 let Inst{15-12} = code_;
673 let Inst{11-6} = funct;
674 let Inst{5-0} = 0x3c;
675}
Zoran Jovanovicccb70ca2013-11-13 13:15:03 +0000676
677class TEQI_FM_MM<bits<5> funct> : MMArch {
678 bits<5> rs;
679 bits<16> imm16;
680
681 bits<32> Inst;
682
683 let Inst{31-26} = 0x10;
684 let Inst{25-21} = funct;
685 let Inst{20-16} = rs;
686 let Inst{15-0} = imm16;
687}
Zoran Jovanovicff9d5f32013-12-19 16:12:56 +0000688
Hrvoje Varga24b975d2016-06-27 08:23:28 +0000689class LL_FM_MM<bits<4> funct> : MMArch {
Zoran Jovanovicff9d5f32013-12-19 16:12:56 +0000690 bits<5> rt;
691 bits<21> addr;
692
693 bits<32> Inst;
694
695 let Inst{31-26} = 0x18;
696 let Inst{25-21} = rt;
697 let Inst{20-16} = addr{20-16};
698 let Inst{15-12} = funct;
699 let Inst{11-0} = addr{11-0};
700}
Zoran Jovanovicce024862013-12-20 15:44:08 +0000701
Hrvoje Varga3ef4dd72015-10-15 08:11:50 +0000702class LLE_FM_MM<bits<4> funct> {
703 bits<5> rt;
704 bits<21> addr;
705 bits<5> base = addr{20-16};
706 bits<9> offset = addr{8-0};
707
708 bits<32> Inst;
709
710 let Inst{31-26} = 0x18;
711 let Inst{25-21} = rt;
712 let Inst{20-16} = base;
713 let Inst{15-12} = funct;
714 let Inst{11-9} = 0x6;
715 let Inst{8-0} = offset;
716}
717
Zoran Jovanovicce024862013-12-20 15:44:08 +0000718class ADDS_FM_MM<bits<2> fmt, bits<8> funct> : MMArch {
719 bits<5> ft;
720 bits<5> fs;
721 bits<5> fd;
722
723 bits<32> Inst;
724
725 let Inst{31-26} = 0x15;
726 let Inst{25-21} = ft;
727 let Inst{20-16} = fs;
728 let Inst{15-11} = fd;
729 let Inst{10} = 0;
730 let Inst{9-8} = fmt;
731 let Inst{7-0} = funct;
732
733 list<dag> Pattern = [];
734}
735
736class LWXC1_FM_MM<bits<9> funct> : MMArch {
737 bits<5> fd;
738 bits<5> base;
739 bits<5> index;
740
741 bits<32> Inst;
742
743 let Inst{31-26} = 0x15;
744 let Inst{25-21} = index;
745 let Inst{20-16} = base;
746 let Inst{15-11} = fd;
747 let Inst{10-9} = 0x0;
748 let Inst{8-0} = funct;
749}
750
751class SWXC1_FM_MM<bits<9> funct> : MMArch {
752 bits<5> fs;
753 bits<5> base;
754 bits<5> index;
755
756 bits<32> Inst;
757
758 let Inst{31-26} = 0x15;
759 let Inst{25-21} = index;
760 let Inst{20-16} = base;
761 let Inst{15-11} = fs;
762 let Inst{10-9} = 0x0;
763 let Inst{8-0} = funct;
764}
765
766class CEQS_FM_MM<bits<2> fmt> : MMArch {
767 bits<5> fs;
768 bits<5> ft;
769 bits<4> cond;
770
771 bits<32> Inst;
772
773 let Inst{31-26} = 0x15;
774 let Inst{25-21} = ft;
775 let Inst{20-16} = fs;
776 let Inst{15-13} = 0x0; // cc
777 let Inst{12} = 0;
778 let Inst{11-10} = fmt;
779 let Inst{9-6} = cond;
780 let Inst{5-0} = 0x3c;
781}
782
783class BC1F_FM_MM<bits<5> tf> : MMArch {
784 bits<16> offset;
785
786 bits<32> Inst;
787
788 let Inst{31-26} = 0x10;
789 let Inst{25-21} = tf;
790 let Inst{20-18} = 0x0; // cc
791 let Inst{17-16} = 0x0;
792 let Inst{15-0} = offset;
793}
794
795class ROUND_W_FM_MM<bits<1> fmt, bits<8> funct> : MMArch {
796 bits<5> fd;
797 bits<5> fs;
798
799 bits<32> Inst;
800
801 let Inst{31-26} = 0x15;
802 let Inst{25-21} = fd;
803 let Inst{20-16} = fs;
804 let Inst{15} = 0;
805 let Inst{14} = fmt;
806 let Inst{13-6} = funct;
807 let Inst{5-0} = 0x3b;
808}
809
810class ABS_FM_MM<bits<2> fmt, bits<7> funct> : MMArch {
811 bits<5> fd;
812 bits<5> fs;
813
814 bits<32> Inst;
815
816 let Inst{31-26} = 0x15;
817 let Inst{25-21} = fd;
818 let Inst{20-16} = fs;
819 let Inst{15} = 0;
820 let Inst{14-13} = fmt;
821 let Inst{12-6} = funct;
822 let Inst{5-0} = 0x3b;
823}
Zoran Jovanovic8876be32013-12-25 10:09:27 +0000824
825class CMov_F_F_FM_MM<bits<9> func, bits<2> fmt> : MMArch {
826 bits<5> fd;
827 bits<5> fs;
828
829 bits<32> Inst;
830
831 let Inst{31-26} = 0x15;
832 let Inst{25-21} = fd;
833 let Inst{20-16} = fs;
834 let Inst{15-13} = 0x0; //cc
835 let Inst{12-11} = 0x0;
836 let Inst{10-9} = fmt;
837 let Inst{8-0} = func;
838}
839
840class CMov_I_F_FM_MM<bits<8> funct, bits<2> fmt> : MMArch {
841 bits<5> fd;
842 bits<5> fs;
843 bits<5> rt;
844
845 bits<32> Inst;
846
847 let Inst{31-26} = 0x15;
848 let Inst{25-21} = rt;
849 let Inst{20-16} = fs;
850 let Inst{15-11} = fd;
851 let Inst{9-8} = fmt;
852 let Inst{7-0} = funct;
853}
854
855class MFC1_FM_MM<bits<8> funct> : MMArch {
856 bits<5> rt;
857 bits<5> fs;
858
859 bits<32> Inst;
860
861 let Inst{31-26} = 0x15;
862 let Inst{25-21} = rt;
863 let Inst{20-16} = fs;
864 let Inst{15-14} = 0x0;
865 let Inst{13-6} = funct;
866 let Inst{5-0} = 0x3b;
867}
868
869class MADDS_FM_MM<bits<6> funct>: MMArch {
870 bits<5> ft;
871 bits<5> fs;
872 bits<5> fd;
873 bits<5> fr;
874
875 bits<32> Inst;
876
877 let Inst{31-26} = 0x15;
878 let Inst{25-21} = ft;
879 let Inst{20-16} = fs;
880 let Inst{15-11} = fd;
881 let Inst{10-6} = fr;
882 let Inst{5-0} = funct;
883}
Zoran Jovanovic73ff9482014-08-14 12:09:10 +0000884
885class COMPACT_BRANCH_FM_MM<bits<5> funct> {
886 bits<5> rs;
887 bits<16> offset;
888
889 bits<32> Inst;
890
891 let Inst{31-26} = 0x10;
892 let Inst{25-21} = funct;
893 let Inst{20-16} = rs;
894 let Inst{15-0} = offset;
895}
Zoran Jovanovic4e7ac4a2014-09-12 13:33:33 +0000896
897class COP0_TLB_FM_MM<bits<10> op> : MMArch {
898 bits<32> Inst;
899
900 let Inst{31-26} = 0x0;
901 let Inst{25-16} = 0x0;
902 let Inst{15-6} = op;
903 let Inst{5-0} = 0x3c;
904}
Jozef Kolekdc62fc42014-11-19 11:25:50 +0000905
906class SDBBP_FM_MM : MMArch {
907 bits<10> code_;
908
909 bits<32> Inst;
910
911 let Inst{31-26} = 0x0;
912 let Inst{25-16} = code_;
913 let Inst{15-6} = 0x36d;
914 let Inst{5-0} = 0x3c;
915}
916
917class RDHWR_FM_MM : MMArch {
918 bits<5> rt;
919 bits<5> rd;
920
921 bits<32> Inst;
922
923 let Inst{31-26} = 0x0;
924 let Inst{25-21} = rt;
925 let Inst{20-16} = rd;
926 let Inst{15-6} = 0x1ac;
927 let Inst{5-0} = 0x3c;
928}
Jozef Kolek5f95dd22014-11-19 11:39:12 +0000929
930class LWXS_FM_MM<bits<10> funct> {
931 bits<5> rd;
932 bits<5> base;
933 bits<5> index;
934
935 bits<32> Inst;
936
937 let Inst{31-26} = 0x0;
938 let Inst{25-21} = index;
939 let Inst{20-16} = base;
940 let Inst{15-11} = rd;
941 let Inst{10} = 0;
942 let Inst{9-0} = funct;
943}
Zoran Jovanovica4c4b5f2014-11-19 16:44:02 +0000944
945class LWM_FM_MM<bits<4> funct> : MMArch {
946 bits<5> rt;
947 bits<21> addr;
948
949 bits<32> Inst;
950
951 let Inst{31-26} = 0x8;
952 let Inst{25-21} = rt;
953 let Inst{20-16} = addr{20-16};
954 let Inst{15-12} = funct;
955 let Inst{11-0} = addr{11-0};
956}
Zoran Jovanovicf9a02502014-11-27 18:28:59 +0000957
Zlatko Buljan797c2ae2015-11-12 13:21:33 +0000958class LWM_FM_MM16<bits<4> funct> : MMArch, PredicateControl {
Zoran Jovanovicf9a02502014-11-27 18:28:59 +0000959 bits<2> rt;
960 bits<4> addr;
961
962 bits<16> Inst;
963
964 let Inst{15-10} = 0x11;
965 let Inst{9-6} = funct;
966 let Inst{5-4} = rt;
967 let Inst{3-0} = addr;
968}
Jozef Kolekab6d1cc2014-12-23 19:55:34 +0000969
970class CACHE_PREF_FM_MM<bits<6> op, bits<4> funct> : MMArch {
971 bits<21> addr;
972 bits<5> hint;
973 bits<5> base = addr{20-16};
974 bits<12> offset = addr{11-0};
975
976 bits<32> Inst;
977
978 let Inst{31-26} = op;
979 let Inst{25-21} = hint;
980 let Inst{20-16} = base;
981 let Inst{15-12} = funct;
982 let Inst{11-0} = offset;
983}
984
Zoran Jovanovicd9790792015-09-09 09:10:46 +0000985class CACHE_PREFE_FM_MM<bits<6> op, bits<3> funct> : MMArch {
986 bits<21> addr;
987 bits<5> hint;
988 bits<5> base = addr{20-16};
989 bits<9> offset = addr{8-0};
990
991 bits<32> Inst;
992
993 let Inst{31-26} = op;
994 let Inst{25-21} = hint;
995 let Inst{20-16} = base;
996 let Inst{15-12} = 0xA;
997 let Inst{11-9} = funct;
998 let Inst{8-0} = offset;
999}
1000
Zoran Jovanovic6e6a2c92015-09-16 09:14:35 +00001001class POOL32F_PREFX_FM_MM<bits<6> op, bits<9> funct> : MMArch {
1002 bits<5> index;
1003 bits<5> base;
1004 bits<5> hint;
1005
1006 bits<32> Inst;
1007
1008 let Inst{31-26} = op;
1009 let Inst{25-21} = index;
1010 let Inst{20-16} = base;
1011 let Inst{15-11} = hint;
1012 let Inst{10-9} = 0x0;
1013 let Inst{8-0} = funct;
1014}
1015
Jozef Kolekab6d1cc2014-12-23 19:55:34 +00001016class BARRIER_FM_MM<bits<5> op> : MMArch {
1017 bits<32> Inst;
1018
1019 let Inst{31-26} = 0x0;
1020 let Inst{25-21} = 0x0;
1021 let Inst{20-16} = 0x0;
1022 let Inst{15-11} = op;
1023 let Inst{10-6} = 0x0;
1024 let Inst{5-0} = 0x0;
1025}
Jozef Kolek2c6d7322015-01-21 12:10:11 +00001026
1027class ADDIUPC_FM_MM {
1028 bits<3> rs;
1029 bits<23> imm;
1030
1031 bits<32> Inst;
1032
1033 let Inst{31-26} = 0x1e;
1034 let Inst{25-23} = rs;
1035 let Inst{22-0} = imm;
1036}
Hrvoje Varga846bdb742016-08-04 11:22:52 +00001037
1038class POOL32A_CFTC2_FM_MM<bits<10> funct> : MMArch {
1039 bits<5> rt;
1040 bits<5> impl;
1041
1042 bits<32> Inst;
1043
1044 let Inst{31-26} = 0b000000;
1045 let Inst{25-21} = rt;
1046 let Inst{20-16} = impl;
1047 let Inst{15-6} = funct;
1048 let Inst{5-0} = 0b111100;
1049}