MicroMipsInstrFormats.td revision 47b33528d1b4298bf8cc5dcca8b531dfd0e704bb
1f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass MMArch {
2f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  string Arch = "micromips";
3f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  list<dag> Pattern = [];
4f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
5f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
6f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch {
7f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rt;
8f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rs;
9f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rd;
10f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
11f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
12f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
13f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = op;
14f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = rt;
15f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rs;
16f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-11} = rd;
17f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{10}    = 0;
18f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{9-0}   = funct;
19f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
20f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
21f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass ADDI_FM_MM<bits<6> op> : MMArch {
22f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5>  rs;
23f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5>  rt;
24f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<16> imm16;
25f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
26f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
27f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
28f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = op;
29f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = rt;
30f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rs;
31f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-0}  = imm16;
32f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
33f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
34f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass SLTI_FM_MM<bits<6> op> : MMArch {
35f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rt;
36f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rs;
37f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<16> imm16;
38f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
39f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
40f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
41f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = op;
42f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = rs;
43f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rt;
44f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-0}  = imm16;
45f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
46f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
47f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass LUI_FM_MM : MMArch {
48f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5> rt;
49f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<16> imm16;
50f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
51f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
52f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
53f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = 0x10;
54f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = 0xd;
55f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rt;
56f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-0}  = imm16;
57f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
58f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
59f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanakaclass MULT_FM_MM<bits<10> funct> : MMArch {
60f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5>  rs;
61f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<5>  rt;
62f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
63f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  bits<32> Inst;
64f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka
65f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{31-26} = 0x00;
66f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{25-21} = rt;
67f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{20-16} = rs;
68f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{15-6}  = funct;
69f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka  let Inst{5-0}   = 0x3c;
70f530aff9de2738db0e3471b259ff0b577a6603e6Akira Hatanaka}
71385de773033080503491919dc50be7203552247bAkira Hatanaka
72385de773033080503491919dc50be7203552247bAkira Hatanakaclass SRA_FM_MM<bits<10> funct, bit rotate> : MMArch {
73385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rd;
74385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rt;
75385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> shamt;
76385de773033080503491919dc50be7203552247bAkira Hatanaka
77385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<32> Inst;
78385de773033080503491919dc50be7203552247bAkira Hatanaka
79385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{31-26} = 0;
80385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{25-21} = rd;
81385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{20-16} = rt;
82385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{15-11} = shamt;
83385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{10}    = rotate;
84385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{9-0}   = funct;
85385de773033080503491919dc50be7203552247bAkira Hatanaka}
86385de773033080503491919dc50be7203552247bAkira Hatanaka
87385de773033080503491919dc50be7203552247bAkira Hatanakaclass SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch {
88385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rd;
89385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rt;
90385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<5> rs;
91385de773033080503491919dc50be7203552247bAkira Hatanaka
92385de773033080503491919dc50be7203552247bAkira Hatanaka  bits<32> Inst;
93385de773033080503491919dc50be7203552247bAkira Hatanaka
94385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{31-26} = 0;
95385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{25-21} = rt;
96385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{20-16} = rs;
97385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{15-11} = rd;
98385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{10}    = rotate;
99385de773033080503491919dc50be7203552247bAkira Hatanaka  let Inst{9-0}   = funct;
100385de773033080503491919dc50be7203552247bAkira Hatanaka}
101089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka
102089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanakaclass LW_FM_MM<bits<6> op> : MMArch {
103089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  bits<5> rt;
104089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  bits<21> addr;
105089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka
106089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  bits<32> Inst;
107089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka
108089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  let Inst{31-26} = op;
109089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  let Inst{25-21} = rt;
110089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  let Inst{20-16} = addr{20-16};
111089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka  let Inst{15-0}  = addr{15-0};
112089741479be03b625f5a8cc52e750b4e532338c6Akira Hatanaka}
113da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter
114da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carterclass LWL_FM_MM<bits<4> funct> {
115da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  bits<5> rt;
116da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  bits<21> addr;
117da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter
118da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  bits<32> Inst;
119da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter
120da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{31-26} = 0x18;
121da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{25-21} = rt;
122da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{20-16} = addr{20-16};
123da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{15-12} = funct;
124da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter  let Inst{11-0}  = addr{11-0};
125da0860f78e6e43aca3333a7815b2f9bc0f8dfac0Jack Carter}
126bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic
127bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medicclass CMov_F_I_FM_MM<bits<7> func> : MMArch {
128bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  bits<5> rd;
129bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  bits<5> rs;
130bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  bits<3> fcc;
131bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic
132bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  bits<32> Inst;
133bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic
134bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{31-26} = 0x15;
135bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{25-21} = rd;
136bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{20-16} = rs;
137bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{15-13} = fcc;
138bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{12-6}  = func;
139bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic  let Inst{5-0}   = 0x3b;
140bf7f7b5e0eae40bb47a410c90f9f0885c0f38b2cVladimir Medic}
141dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
142dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medicclass MTLO_FM_MM<bits<10> funct> : MMArch {
143dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  bits<5> rs;
144dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
145dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  bits<32> Inst;
146dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
147dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{31-26} = 0x00;
148dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{25-21} = 0x00;
149dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{20-16} = rs;
150dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{15-6}  = funct;
151dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{5-0}   = 0x3c;
152dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic}
153dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
154dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medicclass MFLO_FM_MM<bits<10> funct> : MMArch {
155dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  bits<5> rd;
156dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
157dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  bits<32> Inst;
158dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic
159dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{31-26} = 0x00;
160dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{25-21} = 0x00;
161dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{20-16} = rd;
162dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{15-6}  = funct;
163dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic  let Inst{5-0}   = 0x3c;
164dadd1fba3280295936f556acbdc3fbb68b496badVladimir Medic}
16547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
16647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovicclass CLO_FM_MM<bits<10> funct> : MMArch {
16747b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rd;
16847b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rs;
16947b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
17047b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<32> Inst;
17147b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
17247b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{31-26} = 0x00;
17347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{25-21} = rd;
17447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{20-16} = rs;
17547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{15-6}  = funct;
17647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{5-0}   = 0x3c;
17747b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic}
17847b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
17947b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovicclass SEB_FM_MM<bits<10> funct> : MMArch {
18047b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rd;
18147b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rt;
18247b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
18347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<32> Inst;
18447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
18547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{31-26} = 0x00;
18647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{25-21} = rd;
18747b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{20-16} = rt;
18847b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{15-6}  = funct;
18947b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{5-0}   = 0x3c;
19047b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic}
19147b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
19247b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovicclass EXT_FM_MM<bits<6> funct> : MMArch {
19347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rt;
19447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> rs;
19547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> pos;
19647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<5> size;
19747b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
19847b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  bits<32> Inst;
19947b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic
20047b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{31-26} = 0x00;
20147b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{25-21} = rt;
20247b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{20-16} = rs;
20347b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{15-11} = size;
20447b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{10-6}  = pos;
20547b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic  let Inst{5-0}   = funct;
20647b33528d1b4298bf8cc5dcca8b531dfd0e704bbZoran Jovanovic}
207