136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// MicroMIPS Base Classes
336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Base class for MicroMips instructions.
736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This class does not depend on the instruction size.
836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MicroMipsInstBase<dag outs, dag ins, string asmstr, list<dag> pattern,
1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                        InstrItinClass itin, Format f> : Instruction
1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines{
1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Namespace = "Mips";
1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let DecoderNamespace = "MicroMips";
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let OutOperandList = outs;
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let InOperandList  = ins;
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let AsmString   = asmstr;
1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Pattern     = pattern;
2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Itinerary   = itin;
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Predicates = [InMicroMips];
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  Format Form = f;
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Base class for MicroMIPS 16-bit instructions.
2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MicroMipsInst16<dag outs, dag ins, string asmstr, list<dag> pattern,
3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines               InstrItinClass itin, Format f> :
3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  MicroMipsInstBase<outs, ins, asmstr, pattern, itin, f>
3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines{
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Size = 2;
3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  field bits<16> Inst;
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  field bits<16> SoftFail = 0;
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<6> Opcode = 0x0;
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// MicroMIPS 16-bit Instruction Formats
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MOVE_FM_MM16<bits<6> funct> {
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> rs;
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> rd;
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<16> Inst;
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-10} = funct;
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{9-5}   = rd;
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{4-0}   = rs;
5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass JALR_FM_MM16<bits<5> op> {
5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> rs;
5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<16> Inst;
5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-10} = 0x11;
6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{9-5}   = op;
6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{4-0}   = rs;
6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MFHILO_FM_MM16<bits<5> funct> {
6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> rd;
6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<16> Inst;
6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-10} = 0x11;
7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{9-5}   = funct;
7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{4-0}   = rd;
7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// MicroMIPS 32-bit Instruction Formats
7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
79f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass MMArch {
80f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  string Arch = "micromips";
81f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  list<dag> Pattern = [];
82f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
83f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
84f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch {
85f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rt;
86f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rs;
87f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rd;
88f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
89f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
90f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
91f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = op;
92f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = rt;
93f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rs;
94f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-11} = rd;
95f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{10}    = 0;
96f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{9-0}   = funct;
97f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
98f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
99f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass ADDI_FM_MM<bits<6> op> : MMArch {
100f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5>  rs;
101f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5>  rt;
102f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<16> imm16;
103f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
104f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
105f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
106f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = op;
107f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = rt;
108f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rs;
109f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-0}  = imm16;
110f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
111f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
112f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass SLTI_FM_MM<bits<6> op> : MMArch {
113f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rt;
114f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rs;
115f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<16> imm16;
116f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
117f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
118f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
119f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = op;
12042cb3abaddfcff16ab18b114c3de034839c85e05Zoran Jovanovic  let Inst{25-21} = rt;
12142cb3abaddfcff16ab18b114c3de034839c85e05Zoran Jovanovic  let Inst{20-16} = rs;
122f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-0}  = imm16;
123f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
124f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
125f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass LUI_FM_MM : MMArch {
126f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rt;
127f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<16> imm16;
128f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
129f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
130f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
131f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = 0x10;
132f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = 0xd;
133f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rt;
134f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-0}  = imm16;
135f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
136f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
137f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass MULT_FM_MM<bits<10> funct> : MMArch {
138f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5>  rs;
139f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5>  rt;
140f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
141f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
142f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
143f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = 0x00;
144f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = rt;
145f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rs;
146f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-6}  = funct;
147f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{5-0}   = 0x3c;
148f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
149385de773033080503491919dc50be7203552247bAkira Hatanaka
150385de773033080503491919dc50be7203552247bAkira Hatanakaclass SRA_FM_MM<bits<10> funct, bit rotate> : MMArch {
151385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rd;
152385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rt;
153385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> shamt;
154385de773033080503491919dc50be7203552247bAkira Hatanaka
155385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<32> Inst;
156385de773033080503491919dc50be7203552247bAkira Hatanaka
157385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{31-26} = 0;
158385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{25-21} = rd;
159385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{20-16} = rt;
160385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{15-11} = shamt;
161385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{10}    = rotate;
162385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{9-0}   = funct;
163385de773033080503491919dc50be7203552247bAkira Hatanaka}
164385de773033080503491919dc50be7203552247bAkira Hatanaka
165385de773033080503491919dc50be7203552247bAkira Hatanakaclass SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch {
166385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rd;
167385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rt;
168385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rs;
169385de773033080503491919dc50be7203552247bAkira Hatanaka
170385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<32> Inst;
171385de773033080503491919dc50be7203552247bAkira Hatanaka
172385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{31-26} = 0;
173385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{25-21} = rt;
174385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{20-16} = rs;
175385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{15-11} = rd;
176385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{10}    = rotate;
177385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{9-0}   = funct;
178385de773033080503491919dc50be7203552247bAkira Hatanaka}
179089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka
180089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanakaclass LW_FM_MM<bits<6> op> : MMArch {
181089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  bits<5> rt;
182089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  bits<21> addr;
183089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka
184089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  bits<32> Inst;
185089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka
186089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  let Inst{31-26} = op;
187089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  let Inst{25-21} = rt;
188089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  let Inst{20-16} = addr{20-16};
189089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  let Inst{15-0}  = addr{15-0};
190089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka}
191da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter
192da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carterclass LWL_FM_MM<bits<4> funct> {
193da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  bits<5> rt;
194da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  bits<21> addr;
195da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter
196da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  bits<32> Inst;
197da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter
198da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{31-26} = 0x18;
199da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{25-21} = rt;
200da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{20-16} = addr{20-16};
201da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{15-12} = funct;
202da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{11-0}  = addr{11-0};
203da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter}
204bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic
205bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medicclass CMov_F_I_FM_MM<bits<7> func> : MMArch {
206bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  bits<5> rd;
207bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  bits<5> rs;
208bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  bits<3> fcc;
209bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic
210bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  bits<32> Inst;
211bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic
212bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{31-26} = 0x15;
213bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{25-21} = rd;
214bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{20-16} = rs;
215bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{15-13} = fcc;
216bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{12-6}  = func;
217bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{5-0}   = 0x3b;
218bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic}
219dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
220dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medicclass MTLO_FM_MM<bits<10> funct> : MMArch {
221dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  bits<5> rs;
222dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
223dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  bits<32> Inst;
224dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
225dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{31-26} = 0x00;
226dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{25-21} = 0x00;
227dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{20-16} = rs;
228dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{15-6}  = funct;
229dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{5-0}   = 0x3c;
230dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic}
231dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
232dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medicclass MFLO_FM_MM<bits<10> funct> : MMArch {
233dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  bits<5> rd;
234dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
235dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  bits<32> Inst;
236dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
237dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{31-26} = 0x00;
238dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{25-21} = 0x00;
239dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{20-16} = rd;
240dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{15-6}  = funct;
241dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{5-0}   = 0x3c;
242dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic}
24347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
24447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovicclass CLO_FM_MM<bits<10> funct> : MMArch {
24547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rd;
24647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rs;
24747b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
24847b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<32> Inst;
24947b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
25047b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{31-26} = 0x00;
25147b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{25-21} = rd;
25247b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{20-16} = rs;
25347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{15-6}  = funct;
25447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{5-0}   = 0x3c;
25547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic}
25647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
25747b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovicclass SEB_FM_MM<bits<10> funct> : MMArch {
25847b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rd;
25947b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rt;
26047b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
26147b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<32> Inst;
26247b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
26347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{31-26} = 0x00;
26447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{25-21} = rd;
26547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{20-16} = rt;
26647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{15-6}  = funct;
26747b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{5-0}   = 0x3c;
26847b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic}
26947b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
27047b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovicclass EXT_FM_MM<bits<6> funct> : MMArch {
27147b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rt;
27247b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rs;
27347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> pos;
27447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> size;
27547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
27647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<32> Inst;
27747b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
27847b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{31-26} = 0x00;
27947b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{25-21} = rt;
28047b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{20-16} = rs;
28147b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{15-11} = size;
28247b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{10-6}  = pos;
28347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{5-0}   = funct;
28447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic}
2851aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
2861aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovicclass J_FM_MM<bits<6> op> : MMArch {
2871aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  bits<26> target;
2881aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
2891aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  bits<32> Inst;
2901aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
2911aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{31-26} = op;
2921aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{25-0}  = target;
2931aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic}
2941aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
2951aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovicclass JR_FM_MM<bits<8> funct> : MMArch {
2961aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  bits<5> rs;
2971aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
2981aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  bits<32> Inst;
2991aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
3001aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{31-21} = 0x00;
3011aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{20-16} = rs;
3021aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{15-14} = 0x0;
3031aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{13-6}  = funct;
3041aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{5-0}   = 0x3c;
3051aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic}
3061aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
30736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass JALR_FM_MM<bits<10> funct> {
3081aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  bits<5> rs;
3091aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  bits<5> rd;
3101aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
3111aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  bits<32> Inst;
3121aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic
3131aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{31-26} = 0x00;
3141aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{25-21} = rd;
3151aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{20-16} = rs;
3161aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{15-6}  = funct;
3171aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic  let Inst{5-0}   = 0x3c;
3181aaf43c2a2ec0fd4c8dbfe56558237219c5f8af7Zoran Jovanovic}
3195c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3205c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovicclass BEQ_FM_MM<bits<6> op> : MMArch {
3215c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<5>  rs;
3225c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<5>  rt;
3235c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<16> offset;
3245c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3255c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<32> Inst;
3265c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3275c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{31-26} = op;
3285c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{25-21} = rt;
3295c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{20-16} = rs;
3305c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{15-0}  = offset;
3315c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic}
3325c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3335c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovicclass BGEZ_FM_MM<bits<5> funct> : MMArch {
3345c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<5>  rs;
3355c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<16> offset;
3365c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3375c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<32> Inst;
3385c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3395c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{31-26} = 0x10;
3405c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{25-21} = funct;
3415c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{20-16} = rs;
3425c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{15-0}  = offset;
3435c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic}
3445c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3455c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovicclass BGEZAL_FM_MM<bits<5> funct> : MMArch {
3465c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<5>  rs;
3475c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<16> offset;
3485c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3495c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  bits<32> Inst;
3505c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic
3515c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{31-26} = 0x10;
3525c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{25-21} = funct;
3535c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{20-16} = rs;
3545c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic  let Inst{15-0}  = offset;
3555c042162beb3c2dd556e00aab84c4278a69cd5b1Zoran Jovanovic}
3569f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic
35736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass SYNC_FM_MM : MMArch {
35836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> stype;
35936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
36036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
36136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
36236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x00;
36336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = 0x0;
36436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = stype;
36536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-6}  = 0x1ad;
36636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3c;
36736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
36836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
36936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass BRK_FM_MM : MMArch {
37036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<10> code_1;
37136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<10> code_2;
37236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
37336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x0;
37436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-16} = code_1;
37536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-6}  = code_2;
37636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x07;
37736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
37836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
37936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass SYS_FM_MM : MMArch {
38036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<10> code_;
38136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
38236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x0;
38336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-16} = code_;
38436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-6}  = 0x22d;
38536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3c;
38636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
38736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
38836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass WAIT_FM_MM {
38936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<10> code_;
39036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
39136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
39236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x00;
39336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-16} = code_;
39436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-6}  = 0x24d;
39536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3c;
39636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
39736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
39836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass ER_FM_MM<bits<10> funct> : MMArch {
39936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
40036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
40136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x00;
40236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-16} = 0x00;
40336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-6}  = funct;
40436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3c;
40536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
40636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
40736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass EI_FM_MM<bits<10> funct> : MMArch {
40836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
40936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> rt;
41036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
41136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x00;
41236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = 0x00;
41336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = rt;
41436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-6}  = funct;
41536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3c;
41636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
41736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4189f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovicclass TEQ_FM_MM<bits<6> funct> : MMArch {
4199f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  bits<5> rs;
4209f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  bits<5> rt;
4219f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  bits<4> code_;
4229f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic
4239f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  bits<32> Inst;
4249f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic
4259f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  let Inst{31-26} = 0x00;
4269f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  let Inst{25-21} = rt;
4279f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  let Inst{20-16} = rs;
4289f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  let Inst{15-12} = code_;
4299f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  let Inst{11-6}  = funct;
4309f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic  let Inst{5-0}   = 0x3c;
4319f471750fa6f34120d4758d5d14f54f899e34a54Zoran Jovanovic}
4321206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic
4331206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovicclass TEQI_FM_MM<bits<5> funct> : MMArch {
4341206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic  bits<5> rs;
4351206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic  bits<16> imm16;
4361206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic
4371206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic  bits<32> Inst;
4381206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic
4391206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic  let Inst{31-26} = 0x10;
4401206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic  let Inst{25-21} = funct;
4411206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic  let Inst{20-16} = rs;
4421206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic  let Inst{15-0}  = imm16;
4431206f1968b0886ab41739aebe113dd4813f3fc46Zoran Jovanovic}
44436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
44536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass LL_FM_MM<bits<4> funct> {
44636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> rt;
44736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<21> addr;
44836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
44936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
45036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
45136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x18;
45236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = rt;
45336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = addr{20-16};
45436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-12} = funct;
45536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{11-0}  = addr{11-0};
45636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
45736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
45836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass ADDS_FM_MM<bits<2> fmt, bits<8> funct> : MMArch {
45936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> ft;
46036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
46136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fd;
46236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
46336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
46436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
46536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
46636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = ft;
46736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = fs;
46836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-11} = fd;
46936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{10}    = 0;
47036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{9-8}   = fmt;
47136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{7-0}   = funct;
47236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
47336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  list<dag> Pattern = [];
47436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
47536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
47636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass LWXC1_FM_MM<bits<9> funct> : MMArch {
47736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fd;
47836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> base;
47936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> index;
48036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
48136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
48236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
48336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
48436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = index;
48536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = base;
48636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-11} = fd;
48736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{10-9}  = 0x0;
48836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{8-0}   = funct;
48936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
49036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
49136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass SWXC1_FM_MM<bits<9> funct> : MMArch {
49236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
49336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> base;
49436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> index;
49536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
49636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
49736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
49836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
49936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = index;
50036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = base;
50136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-11} = fs;
50236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{10-9}  = 0x0;
50336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{8-0}   = funct;
50436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
50536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
50636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass CEQS_FM_MM<bits<2> fmt> : MMArch {
50736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
50836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> ft;
50936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<4> cond;
51036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
51136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
51236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
51336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
51436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = ft;
51536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = fs;
51636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-13} = 0x0;  // cc
51736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{12}    = 0;
51836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{11-10} = fmt;
51936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{9-6}   = cond;
52036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3c;
52136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
52236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
52336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass BC1F_FM_MM<bits<5> tf> : MMArch {
52436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<16> offset;
52536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
52636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
52736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
52836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x10;
52936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = tf;
53036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-18} = 0x0; // cc
53136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{17-16} = 0x0;
53236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-0}  = offset;
53336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
53436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
53536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass ROUND_W_FM_MM<bits<1> fmt, bits<8> funct> : MMArch {
53636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fd;
53736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
53836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
53936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
54036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
54136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
54236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = fd;
54336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = fs;
54436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15}    = 0;
54536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{14}    = fmt;
54636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{13-6}  = funct;
54736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3b;
54836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
54936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
55036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass ABS_FM_MM<bits<2> fmt, bits<7> funct> : MMArch {
55136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fd;
55236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
55336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
55436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
55536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
55636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
55736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = fd;
55836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = fs;
55936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15}    = 0;
56036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{14-13} = fmt;
56136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{12-6}  = funct;
56236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3b;
56336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
56436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
56536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass CMov_F_F_FM_MM<bits<9> func, bits<2> fmt> : MMArch {
56636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fd;
56736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
56836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
56936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
57036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
57136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
57236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = fd;
57336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = fs;
57436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-13} = 0x0; //cc
57536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{12-11} = 0x0;
57636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{10-9}  = fmt;
57736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{8-0}   = func;
57836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
57936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
58036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass CMov_I_F_FM_MM<bits<8> funct, bits<2> fmt> : MMArch {
58136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fd;
58236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
58336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> rt;
58436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
58536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
58636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
58736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
58836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = rt;
58936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = fs;
59036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-11} = fd;
59136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{9-8}   = fmt;
59236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{7-0}   = funct;
59336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
59436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
59536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MFC1_FM_MM<bits<8> funct> : MMArch {
59636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> rt;
59736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
59836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
59936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
60036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
60136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
60236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = rt;
60336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = fs;
60436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-14} = 0x0;
60536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{13-6}  = funct;
60636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = 0x3b;
60736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
60836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
60936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MADDS_FM_MM<bits<6> funct>: MMArch {
61036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> ft;
61136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fs;
61236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fd;
61336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<5> fr;
61436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
61536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bits<32> Inst;
61636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
61736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{31-26} = 0x15;
61836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{25-21} = ft;
61936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{20-16} = fs;
62036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{15-11} = fd;
62136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{10-6}  = fr;
62236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  let Inst{5-0}   = funct;
62336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
624