mipssim.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#ifndef MIPSSIM_H
00011
#define MIPSSIM_H
00012
00013
#include "copyright.h"
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #define OP_ADD 1
00026 #define OP_ADDI 2
00027 #define OP_ADDIU 3
00028 #define OP_ADDU 4
00029 #define OP_AND 5
00030 #define OP_ANDI 6
00031 #define OP_BEQ 7
00032 #define OP_BGEZ 8
00033 #define OP_BGEZAL 9
00034 #define OP_BGTZ 10
00035 #define OP_BLEZ 11
00036 #define OP_BLTZ 12
00037 #define OP_BLTZAL 13
00038 #define OP_BNE 14
00039
00040 #define OP_DIV 16
00041 #define OP_DIVU 17
00042 #define OP_J 18
00043 #define OP_JAL 19
00044 #define OP_JALR 20
00045 #define OP_JR 21
00046 #define OP_LB 22
00047 #define OP_LBU 23
00048 #define OP_LH 24
00049 #define OP_LHU 25
00050 #define OP_LUI 26
00051 #define OP_LW 27
00052 #define OP_LWL 28
00053 #define OP_LWR 29
00054
00055 #define OP_MFHI 31
00056 #define OP_MFLO 32
00057
00058 #define OP_MTHI 34
00059 #define OP_MTLO 35
00060 #define OP_MULT 36
00061 #define OP_MULTU 37
00062 #define OP_NOR 38
00063 #define OP_OR 39
00064 #define OP_ORI 40
00065 #define OP_RFE 41
00066 #define OP_SB 42
00067 #define OP_SH 43
00068 #define OP_SLL 44
00069 #define OP_SLLV 45
00070 #define OP_SLT 46
00071 #define OP_SLTI 47
00072 #define OP_SLTIU 48
00073 #define OP_SLTU 49
00074 #define OP_SRA 50
00075 #define OP_SRAV 51
00076 #define OP_SRL 52
00077 #define OP_SRLV 53
00078 #define OP_SUB 54
00079 #define OP_SUBU 55
00080 #define OP_SW 56
00081 #define OP_SWL 57
00082 #define OP_SWR 58
00083 #define OP_XOR 59
00084 #define OP_XORI 60
00085 #define OP_SYSCALL 61
00086 #define OP_UNIMP 62
00087 #define OP_RES 63
00088 #define MaxOpcode 63
00089
00090
00091
00092
00093
00094 #define IndexToAddr(x) ((x) << 2)
00095
00096 #define SIGN_BIT 0x80000000
00097 #define R31 31
00098
00099
00100
00101
00102
00103
00104
00105 #define SPECIAL 100
00106 #define BCOND 101
00107
00108 #define IFMT 1
00109 #define JFMT 2
00110 #define RFMT 3
00111
00112 struct OpInfo {
00113 int opCode;
00114 int format;
00115 };
00116
00117
static OpInfo opTable[] = {
00118 {
SPECIAL,
RFMT}, {
BCOND,
IFMT}, {
OP_J,
JFMT}, {
OP_JAL,
JFMT},
00119 {
OP_BEQ,
IFMT}, {
OP_BNE,
IFMT}, {
OP_BLEZ,
IFMT}, {
OP_BGTZ,
IFMT},
00120 {
OP_ADDI,
IFMT}, {
OP_ADDIU,
IFMT}, {
OP_SLTI,
IFMT}, {
OP_SLTIU,
IFMT},
00121 {
OP_ANDI,
IFMT}, {
OP_ORI,
IFMT}, {
OP_XORI,
IFMT}, {
OP_LUI,
IFMT},
00122 {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT},
00123 {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT},
00124 {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT},
00125 {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT},
00126 {
OP_LB,
IFMT}, {
OP_LH,
IFMT}, {
OP_LWL,
IFMT}, {
OP_LW,
IFMT},
00127 {
OP_LBU,
IFMT}, {
OP_LHU,
IFMT}, {
OP_LWR,
IFMT}, {
OP_RES,
IFMT},
00128 {
OP_SB,
IFMT}, {
OP_SH,
IFMT}, {
OP_SWL,
IFMT}, {
OP_SW,
IFMT},
00129 {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_SWR,
IFMT}, {
OP_RES,
IFMT},
00130 {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT},
00131 {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT},
00132 {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT}, {
OP_UNIMP,
IFMT},
00133 {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT}, {
OP_RES,
IFMT}
00134 };
00135
00136
00137
00138
00139
00140
00141
static int specialTable[] = {
00142
OP_SLL,
OP_RES,
OP_SRL,
OP_SRA,
OP_SLLV,
OP_RES,
OP_SRLV,
OP_SRAV,
00143
OP_JR,
OP_JALR,
OP_RES,
OP_RES,
OP_SYSCALL,
OP_UNIMP,
OP_RES,
OP_RES,
00144
OP_MFHI,
OP_MTHI,
OP_MFLO,
OP_MTLO,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
00145
OP_MULT,
OP_MULTU,
OP_DIV,
OP_DIVU,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
00146
OP_ADD,
OP_ADDU,
OP_SUB,
OP_SUBU,
OP_AND,
OP_OR,
OP_XOR,
OP_NOR,
00147
OP_RES,
OP_RES,
OP_SLT,
OP_SLTU,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
00148
OP_RES,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
00149
OP_RES,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
OP_RES,
OP_RES
00150 };
00151
00152
00153
00154
00155 enum RegType {
NONE,
RS,
RT,
RD,
EXTRA };
00156
00157 struct OpString {
00158 char *
string;
00159 RegType args[3];
00160 };
00161
00162
static struct OpString opStrings[] = {
00163 {
"Shouldn't happen", {
NONE,
NONE,
NONE}},
00164 {
"ADD r%d,r%d,r%d", {
RD,
RS,
RT}},
00165 {
"ADDI r%d,r%d,%d", {
RT,
RS,
EXTRA}},
00166 {
"ADDIU r%d,r%d,%d", {
RT,
RS,
EXTRA}},
00167 {
"ADDU r%d,r%d,r%d", {
RD,
RS,
RT}},
00168 {
"AND r%d,r%d,r%d", {
RD,
RS,
RT}},
00169 {
"ANDI r%d,r%d,%d", {
RT,
RS,
EXTRA}},
00170 {
"BEQ r%d,r%d,%d", {
RS,
RT,
EXTRA}},
00171 {
"BGEZ r%d,%d", {
RS,
EXTRA,
NONE}},
00172 {
"BGEZAL r%d,%d", {
RS,
EXTRA,
NONE}},
00173 {
"BGTZ r%d,%d", {
RS,
EXTRA,
NONE}},
00174 {
"BLEZ r%d,%d", {
RS,
EXTRA,
NONE}},
00175 {
"BLTZ r%d,%d", {
RS,
EXTRA,
NONE}},
00176 {
"BLTZAL r%d,%d", {
RS,
EXTRA,
NONE}},
00177 {
"BNE r%d,r%d,%d", {
RS,
RT,
EXTRA}},
00178 {
"Shouldn't happen", {
NONE,
NONE,
NONE}},
00179 {
"DIV r%d,r%d", {
RS,
RT,
NONE}},
00180 {
"DIVU r%d,r%d", {
RS,
RT,
NONE}},
00181 {
"J %d", {
EXTRA,
NONE,
NONE}},
00182 {
"JAL %d", {
EXTRA,
NONE,
NONE}},
00183 {
"JALR r%d,r%d", {
RD,
RS,
NONE}},
00184 {
"JR r%d,r%d", {
RD,
RS,
NONE}},
00185 {
"LB r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00186 {
"LBU r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00187 {
"LH r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00188 {
"LHU r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00189 {
"LUI r%d,%d", {
RT,
EXTRA,
NONE}},
00190 {
"LW r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00191 {
"LWL r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00192 {
"LWR r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00193 {
"Shouldn't happen", {
NONE,
NONE,
NONE}},
00194 {
"MFHI r%d", {
RD,
NONE,
NONE}},
00195 {
"MFLO r%d", {
RD,
NONE,
NONE}},
00196 {
"Shouldn't happen", {
NONE,
NONE,
NONE}},
00197 {
"MTHI r%d", {
RS,
NONE,
NONE}},
00198 {
"MTLO r%d", {
RS,
NONE,
NONE}},
00199 {
"MULT r%d,r%d", {
RS,
RT,
NONE}},
00200 {
"MULTU r%d,r%d", {
RS,
RT,
NONE}},
00201 {
"NOR r%d,r%d,r%d", {
RD,
RS,
RT}},
00202 {
"OR r%d,r%d,r%d", {
RD,
RS,
RT}},
00203 {
"ORI r%d,r%d,%d", {
RT,
RS,
EXTRA}},
00204 {
"RFE", {
NONE,
NONE,
NONE}},
00205 {
"SB r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00206 {
"SH r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00207 {
"SLL r%d,r%d,%d", {
RD,
RT,
EXTRA}},
00208 {
"SLLV r%d,r%d,r%d", {
RD,
RT,
RS}},
00209 {
"SLT r%d,r%d,r%d", {
RD,
RS,
RT}},
00210 {
"SLTI r%d,r%d,%d", {
RT,
RS,
EXTRA}},
00211 {
"SLTIU r%d,r%d,%d", {
RT,
RS,
EXTRA}},
00212 {
"SLTU r%d,r%d,r%d", {
RD,
RS,
RT}},
00213 {
"SRA r%d,r%d,%d", {
RD,
RT,
EXTRA}},
00214 {
"SRAV r%d,r%d,r%d", {
RD,
RT,
RS}},
00215 {
"SRL r%d,r%d,%d", {
RD,
RT,
EXTRA}},
00216 {
"SRLV r%d,r%d,r%d", {
RD,
RT,
RS}},
00217 {
"SUB r%d,r%d,r%d", {
RD,
RS,
RT}},
00218 {
"SUBU r%d,r%d,r%d", {
RD,
RS,
RT}},
00219 {
"SW r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00220 {
"SWL r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00221 {
"SWR r%d,%d(r%d)", {
RT,
EXTRA,
RS}},
00222 {
"XOR r%d,r%d,r%d", {
RD,
RS,
RT}},
00223 {
"XORI r%d,r%d,%d", {
RT,
RS,
EXTRA}},
00224 {
"SYSCALL", {
NONE,
NONE,
NONE}},
00225 {
"Unimplemented", {
NONE,
NONE,
NONE}},
00226 {
"Reserved", {
NONE,
NONE,
NONE}}
00227 };
00228
00229
#endif // MIPSSIM_H
Generated on Thu Sep 16 12:33:45 2004 for NachOS by
1.3.8