annotate modules/bluespec/Pygar/core/ProcTrace.bsv~ @ 26:f5dfbe28fa59 pygar svn.27

[svn r27] Fixed Instruction trace issue.
author punk
date Fri, 30 Apr 2010 09:03:10 -0400
parents
children
rev   line source
punk@26 1 import Trace::*;
punk@26 2
punk@26 3
punk@26 4 //----------------------------------------------------------------------
punk@26 5 // Other typedefs
punk@26 6 //----------------------------------------------------------------------
punk@26 7
punk@26 8 typedef Bit#(32) Addr;
punk@26 9 typedef Int#(18) Stat;
punk@26 10
punk@26 11 //----------------------------------------------------------------------
punk@26 12 // Basic instruction type
punk@26 13 //----------------------------------------------------------------------
punk@26 14
punk@26 15 typedef Bit#(5) Rindx;
punk@26 16 typedef Bit#(16) Simm;
punk@26 17 typedef Bit#(16) Zimm;
punk@26 18 typedef Bit#(8) Epoch;
punk@26 19 typedef Bit#(5) Shamt;
punk@26 20 typedef Bit#(26) Target;
punk@26 21 typedef Bit#(5) CP0indx;
punk@26 22 typedef Bit#(32) Data;
punk@26 23
punk@26 24 typedef enum
punk@26 25 {
punk@26 26 Taken,
punk@26 27 NotTaken
punk@26 28 }
punk@26 29 Direction
punk@26 30 deriving(Bits,Eq);
punk@26 31
punk@26 32
punk@26 33 //----------------------------------------------------------------------
punk@26 34 // Pipeline typedefs
punk@26 35 //----------------------------------------------------------------------
punk@26 36
punk@26 37 typedef union tagged
punk@26 38 {
punk@26 39 Tuple2#(Rindx,Data) ALUWB;
punk@26 40 Rindx MemWB;
punk@26 41 Tuple2#(Rindx,Data) CoWB;
punk@26 42 }
punk@26 43 WritebackType
punk@26 44 deriving(Bits,Eq);
punk@26 45
punk@26 46 ////////////////////////
punk@26 47 // I Add Writeback queue type
punk@26 48 ////////////
punk@26 49 typedef union tagged
punk@26 50 {
punk@26 51 struct {Bit#(32) data; Rindx dest; } WB_ALU;
punk@26 52 Bit#(32) WB_Host;
punk@26 53 Rindx WB_Load;
punk@26 54 void WB_Store;
punk@26 55 }
punk@26 56 WBResult deriving(Eq, Bits);
punk@26 57
punk@26 58 typedef struct{Addr qpc; Addr qnxtpc; Epoch qepoch;} PCStat deriving(Eq, Bits);
punk@26 59 //typedef struct{Addr qpc; Epoch qepoch;} PCStat deriving(Eq, Bits);
punk@26 60
punk@26 61 typedef union tagged
punk@26 62 {
punk@26 63
punk@26 64 struct { Rindx rbase; Rindx rdst; Simm offset; } LW;
punk@26 65 struct { Rindx rbase; Rindx rsrc; Simm offset; } SW;
punk@26 66
punk@26 67 struct { Rindx rsrc; Rindx rdst; Simm imm; } ADDIU;
punk@26 68 struct { Rindx rsrc; Rindx rdst; Simm imm; } SLTI;
punk@26 69 struct { Rindx rsrc; Rindx rdst; Simm imm; } SLTIU;
punk@26 70 struct { Rindx rsrc; Rindx rdst; Zimm imm; } ANDI;
punk@26 71 struct { Rindx rsrc; Rindx rdst; Zimm imm; } ORI;
punk@26 72 struct { Rindx rsrc; Rindx rdst; Zimm imm; } XORI;
punk@26 73 struct { Rindx rdst; Zimm imm; } LUI;
punk@26 74
punk@26 75 struct { Rindx rsrc; Rindx rdst; Shamt shamt; } SLL;
punk@26 76 struct { Rindx rsrc; Rindx rdst; Shamt shamt; } SRL;
punk@26 77 struct { Rindx rsrc; Rindx rdst; Shamt shamt; } SRA;
punk@26 78 struct { Rindx rsrc; Rindx rdst; Rindx rshamt; } SLLV;
punk@26 79 struct { Rindx rsrc; Rindx rdst; Rindx rshamt; } SRLV;
punk@26 80 struct { Rindx rsrc; Rindx rdst; Rindx rshamt; } SRAV;
punk@26 81 struct { Rindx rsrc1; Rindx rsrc2; Rindx rdst; } ADDU;
punk@26 82 struct { Rindx rsrc1; Rindx rsrc2; Rindx rdst; } SUBU;
punk@26 83 struct { Rindx rsrc1; Rindx rsrc2; Rindx rdst; } AND;
punk@26 84 struct { Rindx rsrc1; Rindx rsrc2; Rindx rdst; } OR;
punk@26 85 struct { Rindx rsrc1; Rindx rsrc2; Rindx rdst; } XOR;
punk@26 86 struct { Rindx rsrc1; Rindx rsrc2; Rindx rdst; } NOR;
punk@26 87 struct { Rindx rsrc1; Rindx rsrc2; Rindx rdst; } SLT;
punk@26 88 struct { Rindx rsrc1; Rindx rsrc2; Rindx rdst; } SLTU;
punk@26 89
punk@26 90 struct { Target target; } J;
punk@26 91 struct { Target target; } JAL;
punk@26 92 struct { Rindx rsrc; } JR;
punk@26 93 struct { Rindx rsrc; Rindx rdst; } JALR;
punk@26 94 struct { Rindx rsrc1; Rindx rsrc2; Simm offset; } BEQ;
punk@26 95 struct { Rindx rsrc1; Rindx rsrc2; Simm offset; } BNE;
punk@26 96 struct { Rindx rsrc; Simm offset; } BLEZ;
punk@26 97 struct { Rindx rsrc; Simm offset; } BGTZ;
punk@26 98 struct { Rindx rsrc; Simm offset; } BLTZ;
punk@26 99 struct { Rindx rsrc; Simm offset; } BGEZ;
punk@26 100
punk@26 101 struct { Rindx rdst; CP0indx cop0src; } MFC0;
punk@26 102 struct { Rindx rsrc; CP0indx cop0dst; } MTC0;
punk@26 103
punk@26 104 void ILLEGAL;
punk@26 105
punk@26 106 }
punk@26 107 Instr deriving(Eq);
punk@26 108
punk@26 109 //----------------------------------------------------------------------
punk@26 110 // Pack and Unpack
punk@26 111 //----------------------------------------------------------------------
punk@26 112
punk@26 113 Bit#(6) opFUNC = 6'b000000; Bit#(6) fcSLL = 6'b000000;
punk@26 114 Bit#(6) opRT = 6'b000001; Bit#(6) fcSRL = 6'b000010;
punk@26 115 Bit#(6) opRS = 6'b010000; Bit#(6) fcSRA = 6'b000011;
punk@26 116 Bit#(6) fcSLLV = 6'b000100;
punk@26 117 Bit#(6) opLW = 6'b100011; Bit#(6) fcSRLV = 6'b000110;
punk@26 118 Bit#(6) opSW = 6'b101011; Bit#(6) fcSRAV = 6'b000111;
punk@26 119 Bit#(6) fcADDU = 6'b100001;
punk@26 120 Bit#(6) opADDIU = 6'b001001; Bit#(6) fcSUBU = 6'b100011;
punk@26 121 Bit#(6) opSLTI = 6'b001010; Bit#(6) fcAND = 6'b100100;
punk@26 122 Bit#(6) opSLTIU = 6'b001011; Bit#(6) fcOR = 6'b100101;
punk@26 123 Bit#(6) opANDI = 6'b001100; Bit#(6) fcXOR = 6'b100110;
punk@26 124 Bit#(6) opORI = 6'b001101; Bit#(6) fcNOR = 6'b100111;
punk@26 125 Bit#(6) opXORI = 6'b001110; Bit#(6) fcSLT = 6'b101010;
punk@26 126 Bit#(6) opLUI = 6'b001111; Bit#(6) fcSLTU = 6'b101011;
punk@26 127
punk@26 128 Bit#(6) opJ = 6'b000010;
punk@26 129 Bit#(6) opJAL = 6'b000011;
punk@26 130 Bit#(6) fcJR = 6'b001000;
punk@26 131 Bit#(6) fcJALR = 6'b001001;
punk@26 132 Bit#(6) opBEQ = 6'b000100;
punk@26 133 Bit#(6) opBNE = 6'b000101;
punk@26 134 Bit#(6) opBLEZ = 6'b000110;
punk@26 135 Bit#(6) opBGTZ = 6'b000111;
punk@26 136 Bit#(5) rtBLTZ = 5'b00000;
punk@26 137 Bit#(5) rtBGEZ = 5'b00001;
punk@26 138
punk@26 139 Bit#(5) rsMFC0 = 5'b00000;
punk@26 140 Bit#(5) rsMTC0 = 5'b00100;
punk@26 141
punk@26 142 instance Bits#(Instr,32);
punk@26 143
punk@26 144 // Pack Function
punk@26 145
punk@26 146 function Bit#(32) pack( Instr instr );
punk@26 147
punk@26 148 case ( instr ) matches
punk@26 149
punk@26 150 tagged LW .it : return { opLW, it.rbase, it.rdst, it.offset };
punk@26 151 tagged SW .it : return { opSW, it.rbase, it.rsrc, it.offset };
punk@26 152
punk@26 153 tagged ADDIU .it : return { opADDIU, it.rsrc, it.rdst, it.imm };
punk@26 154 tagged SLTI .it : return { opSLTI, it.rsrc, it.rdst, it.imm };
punk@26 155 tagged SLTIU .it : return { opSLTIU, it.rsrc, it.rdst, it.imm };
punk@26 156 tagged ANDI .it : return { opANDI, it.rsrc, it.rdst, it.imm };
punk@26 157 tagged ORI .it : return { opORI, it.rsrc, it.rdst, it.imm };
punk@26 158 tagged XORI .it : return { opXORI, it.rsrc, it.rdst, it.imm };
punk@26 159 tagged LUI .it : return { opLUI, 5'b0, it.rdst, it.imm };
punk@26 160
punk@26 161 tagged SLL .it : return { opFUNC, 5'b0, it.rsrc, it.rdst, it.shamt, fcSLL };
punk@26 162 tagged SRL .it : return { opFUNC, 5'b0, it.rsrc, it.rdst, it.shamt, fcSRL };
punk@26 163 tagged SRA .it : return { opFUNC, 5'b0, it.rsrc, it.rdst, it.shamt, fcSRA };
punk@26 164
punk@26 165 tagged SLLV .it : return { opFUNC, it.rshamt, it.rsrc, it.rdst, 5'b0, fcSLLV };
punk@26 166 tagged SRLV .it : return { opFUNC, it.rshamt, it.rsrc, it.rdst, 5'b0, fcSRLV };
punk@26 167 tagged SRAV .it : return { opFUNC, it.rshamt, it.rsrc, it.rdst, 5'b0, fcSRAV };
punk@26 168
punk@26 169 tagged ADDU .it : return { opFUNC, it.rsrc1, it.rsrc2, it.rdst, 5'b0, fcADDU };
punk@26 170 tagged SUBU .it : return { opFUNC, it.rsrc1, it.rsrc2, it.rdst, 5'b0, fcSUBU };
punk@26 171 tagged AND .it : return { opFUNC, it.rsrc1, it.rsrc2, it.rdst, 5'b0, fcAND };
punk@26 172 tagged OR .it : return { opFUNC, it.rsrc1, it.rsrc2, it.rdst, 5'b0, fcOR };
punk@26 173 tagged XOR .it : return { opFUNC, it.rsrc1, it.rsrc2, it.rdst, 5'b0, fcXOR };
punk@26 174 tagged NOR .it : return { opFUNC, it.rsrc1, it.rsrc2, it.rdst, 5'b0, fcNOR };
punk@26 175 tagged SLT .it : return { opFUNC, it.rsrc1, it.rsrc2, it.rdst, 5'b0, fcSLT };
punk@26 176 tagged SLTU .it : return { opFUNC, it.rsrc1, it.rsrc2, it.rdst, 5'b0, fcSLTU };
punk@26 177
punk@26 178 tagged J .it : return { opJ, it.target };
punk@26 179 tagged JAL .it : return { opJAL, it.target };
punk@26 180 tagged JR .it : return { opFUNC, it.rsrc, 5'b0, 5'b0, 5'b0, fcJR };
punk@26 181 tagged JALR .it : return { opFUNC, it.rsrc, 5'b0, it.rdst, 5'b0, fcJALR };
punk@26 182 tagged BEQ .it : return { opBEQ, it.rsrc1, it.rsrc2, it.offset };
punk@26 183 tagged BNE .it : return { opBNE, it.rsrc1, it.rsrc2, it.offset };
punk@26 184 tagged BLEZ .it : return { opBLEZ, it.rsrc, 5'b0, it.offset };
punk@26 185 tagged BGTZ .it : return { opBGTZ, it.rsrc, 5'b0, it.offset };
punk@26 186 tagged BLTZ .it : return { opRT, it.rsrc, rtBLTZ, it.offset };
punk@26 187 tagged BGEZ .it : return { opRT, it.rsrc, rtBGEZ, it.offset };
punk@26 188
punk@26 189 tagged MFC0 .it : return { opRS, rsMFC0, it.rdst, it.cop0src, 11'b0 };
punk@26 190 tagged MTC0 .it : return { opRS, rsMTC0, it.rsrc, it.cop0dst, 11'b0 };
punk@26 191
punk@26 192 endcase
punk@26 193
punk@26 194 endfunction
punk@26 195
punk@26 196 // Unpack Function
punk@26 197
punk@26 198 function Instr unpack( Bit#(32) instrBits );
punk@26 199
punk@26 200 let opcode = instrBits[ 31 : 26 ];
punk@26 201 let rs = instrBits[ 25 : 21 ];
punk@26 202 let rt = instrBits[ 20 : 16 ];
punk@26 203 let rd = instrBits[ 15 : 11 ];
punk@26 204 let shamt = instrBits[ 10 : 6 ];
punk@26 205 let funct = instrBits[ 5 : 0 ];
punk@26 206 let imm = instrBits[ 15 : 0 ];
punk@26 207 let target = instrBits[ 25 : 0 ];
punk@26 208
punk@26 209 case ( opcode )
punk@26 210
punk@26 211 opLW : return LW { rbase:rs, rdst:rt, offset:imm };
punk@26 212 opSW : return SW { rbase:rs, rsrc:rt, offset:imm };
punk@26 213 opADDIU : return ADDIU { rsrc:rs, rdst:rt, imm:imm };
punk@26 214 opSLTI : return SLTI { rsrc:rs, rdst:rt, imm:imm };
punk@26 215 opSLTIU : return SLTIU { rsrc:rs, rdst:rt, imm:imm };
punk@26 216 opANDI : return ANDI { rsrc:rs, rdst:rt, imm:imm };
punk@26 217 opORI : return ORI { rsrc:rs, rdst:rt, imm:imm };
punk@26 218 opXORI : return XORI { rsrc:rs, rdst:rt, imm:imm };
punk@26 219 opLUI : return LUI { rdst:rt, imm:imm };
punk@26 220 opJ : return J { target:target };
punk@26 221 opJAL : return JAL { target:target };
punk@26 222 opBEQ : return BEQ { rsrc1:rs, rsrc2:rt, offset:imm };
punk@26 223 opBNE : return BNE { rsrc1:rs, rsrc2:rt, offset:imm };
punk@26 224 opBLEZ : return BLEZ { rsrc:rs, offset:imm };
punk@26 225 opBGTZ : return BGTZ { rsrc:rs, offset:imm };
punk@26 226
punk@26 227 opFUNC :
punk@26 228 case ( funct )
punk@26 229 fcSLL : return SLL { rsrc:rt, rdst:rd, shamt:shamt };
punk@26 230 fcSRL : return SRL { rsrc:rt, rdst:rd, shamt:shamt };
punk@26 231 fcSRA : return SRA { rsrc:rt, rdst:rd, shamt:shamt };
punk@26 232 fcSLLV : return SLLV { rsrc:rt, rdst:rd, rshamt:rs };
punk@26 233 fcSRLV : return SRLV { rsrc:rt, rdst:rd, rshamt:rs };
punk@26 234 fcSRAV : return SRAV { rsrc:rt, rdst:rd, rshamt:rs };
punk@26 235 fcADDU : return ADDU { rsrc1:rs, rsrc2:rt, rdst:rd };
punk@26 236 fcSUBU : return SUBU { rsrc1:rs, rsrc2:rt, rdst:rd };
punk@26 237 fcAND : return AND { rsrc1:rs, rsrc2:rt, rdst:rd };
punk@26 238 fcOR : return OR { rsrc1:rs, rsrc2:rt, rdst:rd };
punk@26 239 fcXOR : return XOR { rsrc1:rs, rsrc2:rt, rdst:rd };
punk@26 240 fcNOR : return NOR { rsrc1:rs, rsrc2:rt, rdst:rd };
punk@26 241 fcSLT : return SLT { rsrc1:rs, rsrc2:rt, rdst:rd };
punk@26 242 fcSLTU : return SLTU { rsrc1:rs, rsrc2:rt, rdst:rd };
punk@26 243 fcJR : return JR { rsrc:rs };
punk@26 244 fcJALR : return JALR { rsrc:rs, rdst:rd };
punk@26 245 default : return ILLEGAL;
punk@26 246 endcase
punk@26 247
punk@26 248 opRT :
punk@26 249 case ( rt )
punk@26 250 rtBLTZ : return BLTZ { rsrc:rs, offset:imm };
punk@26 251 rtBGEZ : return BGEZ { rsrc:rs, offset:imm };
punk@26 252 default : return ILLEGAL;
punk@26 253 endcase
punk@26 254
punk@26 255 opRS :
punk@26 256 case ( rs )
punk@26 257 rsMFC0 : return MFC0 { rdst:rt, cop0src:rd };
punk@26 258 rsMTC0 : return MTC0 { rsrc:rt, cop0dst:rd };
punk@26 259 default : return ILLEGAL;
punk@26 260 endcase
punk@26 261
punk@26 262 default : return ILLEGAL;
punk@26 263
punk@26 264 endcase
punk@26 265
punk@26 266 endfunction
punk@26 267
punk@26 268 endinstance
punk@26 269
punk@26 270 //----------------------------------------------------------------------
punk@26 271 // Trace
punk@26 272 //----------------------------------------------------------------------
punk@26 273
punk@26 274 instance Traceable#(Instr);
punk@26 275
punk@26 276 function Action traceTiny( String loc, String ttag, Instr inst );
punk@26 277 case ( inst ) matches
punk@26 278
punk@26 279 tagged LW .it : $fdisplay(stderr, " => %s:%s lw", loc, ttag );
punk@26 280 tagged SW .it : $fdisplay(stderr, " => %s:%s sw", loc, ttag );
punk@26 281
punk@26 282 tagged ADDIU .it : $fdisplay(stderr, " => %s:%s addi", loc, ttag );
punk@26 283 tagged SLTI .it : $fdisplay(stderr, " => %s:%s sli", loc, ttag );
punk@26 284 tagged SLTIU .it : $fdisplay(stderr, " => %s:%s sliu", loc, ttag );
punk@26 285 tagged ANDI .it : $fdisplay(stderr, " => %s:%s andi", loc, ttag );
punk@26 286 tagged ORI .it : $fdisplay(stderr, " => %s:%s ori", loc, ttag );
punk@26 287 tagged XORI .it : $fdisplay(stderr, " => %s:%s xori", loc, ttag );
punk@26 288 tagged LUI .it : $fdisplay(stderr, " => %s:%s lui", loc, ttag );
punk@26 289
punk@26 290 tagged SLL .it : $fdisplay(stderr, " => %s:%s sll", loc, ttag );
punk@26 291 tagged SRL .it : $fdisplay(stderr, " => %s:%s srl", loc, ttag );
punk@26 292 tagged SRA .it : $fdisplay(stderr, " => %s:%s sra", loc, ttag );
punk@26 293 tagged SLLV .it : $fdisplay(stderr, " => %s:%s sllv", loc, ttag );
punk@26 294 tagged SRLV .it : $fdisplay(stderr, " => %s:%s srlv", loc, ttag );
punk@26 295 tagged SRAV .it : $fdisplay(stderr, " => %s:%s srav", loc, ttag );
punk@26 296
punk@26 297 tagged ADDU .it : $fdisplay(stderr, " => %s:%s addu", loc, ttag );
punk@26 298 tagged SUBU .it : $fdisplay(stderr, " => %s:%s subu", loc, ttag );
punk@26 299 tagged AND .it : $fdisplay(stderr, " => %s:%s and", loc, ttag );
punk@26 300 tagged OR .it : $fdisplay(stderr, " => %s:%s or", loc, ttag );
punk@26 301 tagged XOR .it : $fdisplay(stderr, " => %s:%s xor", loc, ttag );
punk@26 302 tagged NOR .it : $fdisplay(stderr, " => %s:%s nor", loc, ttag );
punk@26 303 tagged SLT .it : $fdisplay(stderr, " => %s:%s slt", loc, ttag );
punk@26 304 tagged SLTU .it : $fdisplay(stderr, " => %s:%s sltu", loc, ttag );
punk@26 305
punk@26 306 tagged J .it : $fdisplay(stderr, " => %s:%s j", loc, ttag );
punk@26 307 tagged JAL .it : $fdisplay(stderr, " => %s:%s jal", loc, ttag );
punk@26 308 tagged JR .it : $fdisplay(stderr, " => %s:%s jr", loc, ttag );
punk@26 309 tagged JALR .it : $fdisplay(stderr, " => %s:%s jalr", loc, ttag );
punk@26 310 tagged BEQ .it : $fdisplay(stderr, " => %s:%s beq", loc, ttag );
punk@26 311 tagged BNE .it : $fdisplay(stderr, " => %s:%s bne", loc, ttag );
punk@26 312 tagged BLEZ .it : $fdisplay(stderr, " => %s:%s blez", loc, ttag );
punk@26 313 tagged BGTZ .it : $fdisplay(stderr, " => %s:%s bgtz", loc, ttag );
punk@26 314 tagged BLTZ .it : $fdisplay(stderr, " => %s:%s bltz", loc, ttag );
punk@26 315 tagged BGEZ .it : $fdisplay(stderr, " => %s:%s bgez", loc, ttag );
punk@26 316
punk@26 317 tagged MFC0 .it : $fdisplay(stderr, " => %s:%s mfc0", loc, ttag );
punk@26 318 tagged MTC0 .it : $fdisplay(stderr, " => %s:%s mtc0", loc, ttag );
punk@26 319
punk@26 320 tagged ILLEGAL : $fdisplay(stderr, " => %s:%s ill", loc, ttag );
punk@26 321
punk@26 322 endcase
punk@26 323 endfunction
punk@26 324
punk@26 325 function Action traceFull( String loc, String ttag, Instr inst );
punk@26 326 case ( inst ) matches
punk@26 327
punk@26 328 tagged LW .it : $fdisplay(stderr, " => %s:%s lw r%0d, 0x%x(r%0d)", loc, ttag, it.rdst, it.offset, it.rbase );
punk@26 329 tagged SW .it : $fdisplay(stderr, " => %s:%s sw r%0d, 0x%x(r%0d)", loc, ttag, it.rsrc, it.offset, it.rbase );
punk@26 330
punk@26 331 tagged ADDIU .it : $fdisplay(stderr, " => %s:%s addiu r%0d, r%0d, 0x%x", loc, ttag, it.rdst, it.rsrc, it.imm );
punk@26 332 tagged SLTI .it : $fdisplay(stderr, " => %s:%s slti r%0d, r%0d, 0x%x", loc, ttag, it.rdst, it.rsrc, it.imm );
punk@26 333 tagged SLTIU .it : $fdisplay(stderr, " => %s:%s sltiu r%0d, r%0d, 0x%x", loc, ttag, it.rdst, it.rsrc, it.imm );
punk@26 334 tagged ANDI .it : $fdisplay(stderr, " => %s:%s andi r%0d, r%0d, 0x%x", loc, ttag, it.rdst, it.rsrc, it.imm );
punk@26 335 tagged ORI .it : $fdisplay(stderr, " => %s:%s ori r%0d, r%0d, 0x%x", loc, ttag, it.rdst, it.rsrc, it.imm );
punk@26 336 tagged XORI .it : $fdisplay(stderr, " => %s:%s xori r%0d, r%0d, 0x%x", loc, ttag, it.rdst, it.rsrc, it.imm );
punk@26 337 tagged LUI .it : $fdisplay(stderr, " => %s:%s lui r%0d, 0x%x", loc, ttag, it.rdst, it.imm );
punk@26 338
punk@26 339 tagged SLL .it : $fdisplay(stderr, " => %s:%s sll r%0d, r%0d, %0d", loc, ttag, it.rdst, it.rsrc, it.shamt );
punk@26 340 tagged SRL .it : $fdisplay(stderr, " => %s:%s srl r%0d, r%0d, %0d", loc, ttag, it.rdst, it.rsrc, it.shamt );
punk@26 341 tagged SRA .it : $fdisplay(stderr, " => %s:%s sra r%0d, r%0d, %0d", loc, ttag, it.rdst, it.rsrc, it.shamt );
punk@26 342 tagged SLLV .it : $fdisplay(stderr, " => %s:%s sllv r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc, it.rshamt );
punk@26 343 tagged SRLV .it : $fdisplay(stderr, " => %s:%s srlv r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc, it.rshamt );
punk@26 344 tagged SRAV .it : $fdisplay(stderr, " => %s:%s srav r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc, it.rshamt );
punk@26 345
punk@26 346 tagged ADDU .it : $fdisplay(stderr, " => %s:%s addu r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc1, it.rsrc2 );
punk@26 347 tagged SUBU .it : $fdisplay(stderr, " => %s:%s subu r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc1, it.rsrc2 );
punk@26 348 tagged AND .it : $fdisplay(stderr, " => %s:%s and r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc1, it.rsrc2 );
punk@26 349 tagged OR .it : $fdisplay(stderr, " => %s:%s or r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc1, it.rsrc2 );
punk@26 350 tagged XOR .it : $fdisplay(stderr, " => %s:%s xor r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc1, it.rsrc2 );
punk@26 351 tagged NOR .it : $fdisplay(stderr, " => %s:%s nor r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc1, it.rsrc2 );
punk@26 352 tagged SLT .it : $fdisplay(stderr, " => %s:%s slt r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc1, it.rsrc2 );
punk@26 353 tagged SLTU .it : $fdisplay(stderr, " => %s:%s sltu r%0d, r%0d, r%0d", loc, ttag, it.rdst, it.rsrc1, it.rsrc2 );
punk@26 354
punk@26 355 tagged J .it : $fdisplay(stderr, " => %s:%s j 0x%x", loc, ttag, it.target );
punk@26 356 tagged JAL .it : $fdisplay(stderr, " => %s:%s jal 0x%x", loc, ttag, it.target );
punk@26 357 tagged JR .it : $fdisplay(stderr, " => %s:%s jr r%0d", loc, ttag, it.rsrc );
punk@26 358 tagged JALR .it : $fdisplay(stderr, " => %s:%s jalr r%0d", loc, ttag, it.rsrc );
punk@26 359 tagged BEQ .it : $fdisplay(stderr, " => %s:%s beq r%0d, r%0d, 0x%x", loc, ttag, it.rsrc1, it.rsrc2, it.offset );
punk@26 360 tagged BNE .it : $fdisplay(stderr, " => %s:%s bne r%0d, r%0d, 0x%x", loc, ttag, it.rsrc1, it.rsrc2, it.offset );
punk@26 361 tagged BLEZ .it : $fdisplay(stderr, " => %s:%s blez r%0d, 0x%x", loc, ttag, it.rsrc, it.offset );
punk@26 362 tagged BGTZ .it : $fdisplay(stderr, " => %s:%s bgtz r%0d, 0x%x", loc, ttag, it.rsrc, it.offset );
punk@26 363 tagged BLTZ .it : $fdisplay(stderr, " => %s:%s bltz r%0d, 0x%x", loc, ttag, it.rsrc, it.offset );
punk@26 364 tagged BGEZ .it : $fdisplay(stderr, " => %s:%s bgez r%0d, 0x%x", loc, ttag, it.rsrc, it.offset );
punk@26 365
punk@26 366 tagged MFC0 .it : $fdisplay(stderr, " => %s:%s mfc0 r%0d, cpr%0d", loc, ttag, it.rdst, it.cop0src );
punk@26 367 tagged MTC0 .it : $fdisplay(stderr, " => %s:%s mtc0 r%0d, cpr%0d", loc, ttag, it.rsrc, it.cop0dst );
punk@26 368
punk@26 369 tagged ILLEGAL : $fdisplay(stderr, " => %s:%s illegal instruction", loc, ttag );
punk@26 370
punk@26 371 endcase
punk@26 372 endfunction
punk@26 373
punk@26 374 endinstance
punk@26 375