15 #include "copyright.h" 96 #define IndexToAddr(x) ((x) << 2) 98 #define SIGN_BIT 0x80000000 119 static OpInfo opTable[] = {
120 {SPECIAL, RFMT}, {BCOND, IFMT}, {OP_J, JFMT}, {OP_JAL, JFMT},
121 {OP_BEQ, IFMT}, {OP_BNE, IFMT}, {OP_BLEZ, IFMT}, {OP_BGTZ, IFMT},
122 {OP_ADDI, IFMT}, {OP_ADDIU, IFMT}, {OP_SLTI, IFMT}, {OP_SLTIU, IFMT},
123 {OP_ANDI, IFMT}, {OP_ORI, IFMT}, {OP_XORI, IFMT}, {OP_LUI, IFMT},
124 {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT},
125 {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT},
126 {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT},
127 {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT},
128 {OP_LB, IFMT}, {OP_LH, IFMT}, {OP_LWL, IFMT}, {OP_LW, IFMT},
129 {OP_LBU, IFMT}, {OP_LHU, IFMT}, {OP_LWR, IFMT}, {OP_RES, IFMT},
130 {OP_SB, IFMT}, {OP_SH, IFMT}, {OP_SWL, IFMT}, {OP_SW, IFMT},
131 {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_SWR, IFMT}, {OP_RES, IFMT},
132 {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT},
133 {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT},
134 {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT}, {OP_UNIMP, IFMT},
135 {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT}, {OP_RES, IFMT}
143 static int specialTable[] = {
144 OP_SLL, OP_RES, OP_SRL, OP_SRA, OP_SLLV, OP_RES, OP_SRLV, OP_SRAV,
145 OP_JR, OP_JALR, OP_RES, OP_RES, OP_SYSCALL, OP_UNIMP, OP_RES, OP_RES,
146 OP_MFHI, OP_MTHI, OP_MFLO, OP_MTLO, OP_RES, OP_RES, OP_RES, OP_RES,
147 OP_MULT, OP_MULTU, OP_DIV, OP_DIVU, OP_RES, OP_RES, OP_RES, OP_RES,
148 OP_ADD, OP_ADDU, OP_SUB, OP_SUBU, OP_AND, OP_OR, OP_XOR, OP_NOR,
149 OP_RES, OP_RES, OP_SLT, OP_SLTU, OP_RES, OP_RES, OP_RES, OP_RES,
150 OP_RES, OP_RES, OP_RES, OP_RES, OP_RES, OP_RES, OP_RES, OP_RES,
151 OP_RES, OP_RES, OP_RES, OP_RES, OP_RES, OP_RES, OP_RES, OP_RES
157 enum RegType { NONE, RS, RT, RD, EXTRA };
164 static struct OpString opStrings[] = {
165 {
"Shouldn't happen", {NONE, NONE, NONE}},
166 {
"ADD r%d,r%d,r%d", {RD, RS, RT}},
167 {
"ADDI r%d,r%d,%d", {RT, RS, EXTRA}},
168 {
"ADDIU r%d,r%d,%d", {RT, RS, EXTRA}},
169 {
"ADDU r%d,r%d,r%d", {RD, RS, RT}},
170 {
"AND r%d,r%d,r%d", {RD, RS, RT}},
171 {
"ANDI r%d,r%d,%d", {RT, RS, EXTRA}},
172 {
"BEQ r%d,r%d,%d", {RS, RT, EXTRA}},
173 {
"BGEZ r%d,%d", {RS, EXTRA, NONE}},
174 {
"BGEZAL r%d,%d", {RS, EXTRA, NONE}},
175 {
"BGTZ r%d,%d", {RS, EXTRA, NONE}},
176 {
"BLEZ r%d,%d", {RS, EXTRA, NONE}},
177 {
"BLTZ r%d,%d", {RS, EXTRA, NONE}},
178 {
"BLTZAL r%d,%d", {RS, EXTRA, NONE}},
179 {
"BNE r%d,r%d,%d", {RS, RT, EXTRA}},
180 {
"Shouldn't happen", {NONE, NONE, NONE}},
181 {
"DIV r%d,r%d", {RS, RT, NONE}},
182 {
"DIVU r%d,r%d", {RS, RT, NONE}},
183 {
"J %d", {EXTRA, NONE, NONE}},
184 {
"JAL %d", {EXTRA, NONE, NONE}},
185 {
"JALR r%d,r%d", {RD, RS, NONE}},
186 {
"JR r%d,r%d", {RD, RS, NONE}},
187 {
"LB r%d,%d(r%d)", {RT, EXTRA, RS}},
188 {
"LBU r%d,%d(r%d)", {RT, EXTRA, RS}},
189 {
"LH r%d,%d(r%d)", {RT, EXTRA, RS}},
190 {
"LHU r%d,%d(r%d)", {RT, EXTRA, RS}},
191 {
"LUI r%d,%d", {RT, EXTRA, NONE}},
192 {
"LW r%d,%d(r%d)", {RT, EXTRA, RS}},
193 {
"LWL r%d,%d(r%d)", {RT, EXTRA, RS}},
194 {
"LWR r%d,%d(r%d)", {RT, EXTRA, RS}},
195 {
"Shouldn't happen", {NONE, NONE, NONE}},
196 {
"MFHI r%d", {RD, NONE, NONE}},
197 {
"MFLO r%d", {RD, NONE, NONE}},
198 {
"Shouldn't happen", {NONE, NONE, NONE}},
199 {
"MTHI r%d", {RS, NONE, NONE}},
200 {
"MTLO r%d", {RS, NONE, NONE}},
201 {
"MULT r%d,r%d", {RS, RT, NONE}},
202 {
"MULTU r%d,r%d", {RS, RT, NONE}},
203 {
"NOR r%d,r%d,r%d", {RD, RS, RT}},
204 {
"OR r%d,r%d,r%d", {RD, RS, RT}},
205 {
"ORI r%d,r%d,%d", {RT, RS, EXTRA}},
206 {
"RFE", {NONE, NONE, NONE}},
207 {
"SB r%d,%d(r%d)", {RT, EXTRA, RS}},
208 {
"SH r%d,%d(r%d)", {RT, EXTRA, RS}},
209 {
"SLL r%d,r%d,%d", {RD, RT, EXTRA}},
210 {
"SLLV r%d,r%d,r%d", {RD, RT, RS}},
211 {
"SLT r%d,r%d,r%d", {RD, RS, RT}},
212 {
"SLTI r%d,r%d,%d", {RT, RS, EXTRA}},
213 {
"SLTIU r%d,r%d,%d", {RT, RS, EXTRA}},
214 {
"SLTU r%d,r%d,r%d", {RD, RS, RT}},
215 {
"SRA r%d,r%d,%d", {RD, RT, EXTRA}},
216 {
"SRAV r%d,r%d,r%d", {RD, RT, RS}},
217 {
"SRL r%d,r%d,%d", {RD, RT, EXTRA}},
218 {
"SRLV r%d,r%d,r%d", {RD, RT, RS}},
219 {
"SUB r%d,r%d,r%d", {RD, RS, RT}},
220 {
"SUBU r%d,r%d,r%d", {RD, RS, RT}},
221 {
"SW r%d,%d(r%d)", {RT, EXTRA, RS}},
222 {
"SWL r%d,%d(r%d)", {RT, EXTRA, RS}},
223 {
"SWR r%d,%d(r%d)", {RT, EXTRA, RS}},
224 {
"XOR r%d,r%d,r%d", {RD, RS, RT}},
225 {
"XORI r%d,r%d,%d", {RT, RS, EXTRA}},
226 {
"SYSCALL", {NONE, NONE, NONE}},
227 {
"Unimplemented", {NONE, NONE, NONE}},
228 {
"Reserved", {NONE, NONE, NONE}}
Definition: mipssim.h:114
Definition: mipssim.h:159
#define OP_ADD
Definition: mipssim.h:27