diff options
Diffstat (limited to 'sim/mips')
-rw-r--r-- | sim/mips/mips.igen | 426 |
1 files changed, 104 insertions, 322 deletions
diff --git a/sim/mips/mips.igen b/sim/mips/mips.igen index 7e43a9a..8b7e16a 100644 --- a/sim/mips/mips.igen +++ b/sim/mips/mips.igen @@ -22,6 +22,9 @@ :option:32:insn-specifying-widths:true +// Generate separate simulators for each target +:option::multi-sim:true + // Models known by this simulator :model::mipsI:mipsI: @@ -565,7 +568,7 @@ } -000000,********************,001101:SPECIAL:32::BREAK +000000,20.CODE,001101:SPECIAL:32::BREAK "break" *mipsI: *mipsII: @@ -583,7 +586,7 @@ } -0100,ZZ!1!3,26.COP_FUN:NORMAL:32::COP0 +0100,ZZ!0!1!3,26.COP_FUN:NORMAL:32::COPz "cop<ZZ> <COP_FUN>" *mipsI: *mipsII: @@ -1304,7 +1307,7 @@ } -1101,ZZ,5.BASE,5.RT,16.OFFSET:NORMAL:64::LDCz +1101,ZZ!0!1!3,5.BASE,5.RT,16.OFFSET:NORMAL:64::LDCz "ldc<ZZ> r<RT>, <OFFSET>(r<BASE>)" *mipsII: *mipsIII: @@ -1680,7 +1683,7 @@ } -1100,ZZ,5.BASE,5.RT,16.OFFSET:NORMAL:32::LWCz +1100,ZZ!0!1!3,5.BASE,5.RT,16.OFFSET:NORMAL:32::LWCz "lwc<ZZ> r<RT>, <OFFSET>(r<BASE>)" *mipsI: *mipsII: @@ -2261,7 +2264,7 @@ } -1111,ZZ,5.BASE,5.RT,16.OFFSET:NORMAL:64::SDCz +1111,ZZ!0!1!3,5.BASE,5.RT,16.OFFSET:NORMAL:64::SDCz "sdc<ZZ> r<RT>, <OFFSET>(r<BASE>)" *mipsII: *mipsIII: @@ -2714,7 +2717,7 @@ } -1110,ZZ,5.RS,5.RT,16.OFFSET:NORMAL:32::SWCz +1110,ZZ!0!1!3,5.RS,5.RT,16.OFFSET:NORMAL:32::SWCz "swc<ZZ> r<RT>, <OFFSET>(r<BASE>)" *mipsI: *mipsII: @@ -4054,7 +4057,7 @@ 010011,5.BASE,5.INDEX,5.HINT,00000001111:COP1X:32::PREFX -"prefx <HINT>, r<INDEX>(r<BASE)" +"prefx <HINT>, r<INDEX>(r<BASE>)" *mipsIV: { unsigned32 instruction = instruction_0; @@ -4088,7 +4091,7 @@ 010001,10,3.FMT,00000,5.FS,5.FD,001000:COP1:64::ROUND.L.fmt -"round.l.%S<FMT> f<FD>, f<FS>" +"round.l.%s<FMT> f<FD>, f<FS>" *mipsIII: *mipsIV: // start-sanitize-r5900 @@ -4113,7 +4116,7 @@ 010001,10,3.FMT,00000,5.FS,5.FD,001100:COP1:32::ROUND.W.fmt -"round.w.%S<FMT> f<FD>, f<FS>" +"round.w.%s<FMT> f<FD>, f<FS>" *mipsII: *mipsIII: *mipsIV: @@ -4376,7 +4379,7 @@ -010000,01000,00001,16.OFFSET:COP0:32::BC0TL +010000,01000,00011,16.OFFSET:COP0:32::BC0TL "bc0tl <OFFSET>" *mipsI: *mipsII: @@ -4443,151 +4446,8 @@ // end-sanitize-r5900 -010000,00000,5.RT,11000,00000000000:COP0:32::MFBPC -"mfbpc r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11000,00000000000:COP0:32::MFC0 -"mfc0 r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11000,00000000100:COP0:32::MFDAB -"mfdab r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11000,00000000101:COP0:32::MFDABM -"mfdabm r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11000,00000000110:COP0:32::MFDVB -"mfdv r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11000,00000000111:COP0:32::MFDVBM -"mfdvm r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11000,00000000010:COP0:32::MFIAB -"mfiab r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11000,00000000011:COP0:32::MFIABM -"mfiabm r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11001,00000,5.REG,1:COP0:32::MFPC -"mfpc r<RT>, <REG>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00000,5.RT,11001,00000,5.REG,0:COP0:32::MFPS -"mfps r<RT>, <REG>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11000,00000000000:COP0:32::MTBPC -"mtbpc r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,5.RD,00000000000:COP0:32::MTC0 -"mtc0 r<RT>, r<RD>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11000,00000000100:COP0:32::MTDAB -"mtdab r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11000,00000000101:COP0:32::MTDABM -"mtdabm r<RT>" +010000,00000,5.RT,5.RD,00000,6.REGX:COP0:32::MFC0 +"mfc0 r<RT>, r<RD> # <REGX>" *mipsI: *mipsII: *mipsIII: @@ -4597,74 +4457,8 @@ // end-sanitize-r5900 -010000,00100,5.RT,11000,00000000110:COP0:32::MTDVB -"mtdvb r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11000,00000000111:COP0:32::MTDVBM -"mtdvbm r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11000,00000000010:COP0:32::MTIAB -"mtiab r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11000,00000000011:COP0:32::MTIABM -"mtiabm r<RT>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11001,00000,5.REG,1:COP0:32::MTPC -"mtpc r<RT>, r<REG>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11001,00000,5.REG,0:COP0:32::MTPCM -"mtpcm r<RT>, r<REG>" -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 - - -010000,00100,5.RT,11001,00000,5.REG,0:COP0:32::MTPS -"mtps r<RT>, r<REG>" +010000,00100,5.RT,5.RD,00000,6.REGX:COP0:32::MTC0 +"mtc0 r<RT>, r<RD> # <REGX>" *mipsI: *mipsII: *mipsIII: @@ -7455,35 +7249,7 @@ // end-sanitize-r5900 -000000,5.RS,5.RT,0000000000101001:SPECIAL:64::DMADD16 -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 -*r3900: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 -{ - unsigned32 instruction = instruction_0; - t_reg op2 UNUSED = GPR[((instruction >> 16) & 0x0000001F)]; - t_reg op1 UNUSED = GPR[((instruction >> 21) & 0x0000001F)]; - { - CHECKHILO("Multiply-Add"); - { - unsigned64 temp = (op1 * op2); - LO = LO + temp; - } - } -} - - 011101,26.INSTR_INDEX:NORMAL:32::JALX -*mipsI: -*mipsII: -*mipsIII: -*mipsIV: // start-sanitize-r5900 *r5900: // end-sanitize-r5900 @@ -7617,32 +7383,6 @@ } // end-sanitize-r5900 - -000000,5.RS,5.RT,0000000000101000:SPECIAL:32::MADD16 -*mipsIII: -*mipsIV: -// start-sanitize-r5900 -*r5900: -// end-sanitize-r5900 -*r3900: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 -{ - unsigned32 instruction = instruction_0; - t_reg op2 UNUSED = GPR[((instruction >> 16) & 0x0000001F)]; - t_reg op1 UNUSED = GPR[((instruction >> 21) & 0x0000001F)]; - { - CHECKHILO("Multiply-Add"); - { - unsigned64 temp = (op1 * op2); - temp += (SET64HI(VL4_8(HI)) | VL4_8(LO)); - LO = SIGNEXTEND((unsigned64)VL4_8(temp),32); - HI = SIGNEXTEND((unsigned64)VH4_8(temp),32); - } - } -} - // start-sanitize-r5900 0111000000000000,5.RD,00000010000:MMINORM:32::MFHI1 @@ -9939,58 +9679,100 @@ // start-sanitize-cygnus-never -// What is this instruction? -//111011,5.RS,5.RT,16.OFFSET:NORMAL:32::<INT> -//*mipsI: -//*mipsII: -//*mipsIII: -//*mipsIV: -//// start-sanitize-r5900 -//*r5900: -//// end-sanitize-r5900 -//*r3900: -//// start-sanitize-tx19 -//*tx19: -//// end-sanitize-tx19 -//{ -// unsigned32 instruction = instruction_0; -// t_reg offset UNUSED = SIGNEXTEND((t_reg)((instruction >> 0) & 0x0000FFFF),16); -// t_reg op2 UNUSED = GPR[((instruction >> 16) & 0x0000001F)]; -// t_reg op1 UNUSED = GPR[((instruction >> 21) & 0x0000001F)]; -// { -// if (CoProcPresent(3)) -// SignalException(CoProcessorUnusable); -// else -// SignalException(ReservedInstruction,instruction); -// } -//} +// // FIXME FIXME FIXME What is this instruction? +// 111011,5.RS,5.RT,16.OFFSET:NORMAL:32::<INT> +// *mipsI: +// *mipsII: +// *mipsIII: +// *mipsIV: +// // start-sanitize-r5900 +// *r5900: +// // end-sanitize-r5900 +// *r3900: +// // start-sanitize-tx19 +// *tx19: +// // end-sanitize-tx19 +// { +// unsigned32 instruction = instruction_0; +// t_reg offset UNUSED = SIGNEXTEND((t_reg)((instruction >> 0) & 0x0000FFFF),16); +// t_reg op2 UNUSED = GPR[((instruction >> 16) & 0x0000001F)]; +// t_reg op1 UNUSED = GPR[((instruction >> 21) & 0x0000001F)]; +// { +// if (CoProcPresent(3)) +// SignalException(CoProcessorUnusable); +// else +// SignalException(ReservedInstruction,instruction); +// } +// } + +// end-sanitize-cygnus-never +// start-sanitize-cygnus-never + +// // FIXME FIXME FIXME What is this? +// 11100,******,00001:RR:16::SDBBP +// *mips16: +// { +// unsigned32 instruction = instruction_0; +// if (have_extendval) +// SignalException (ReservedInstruction, instruction); +// { +// SignalException(DebugBreakPoint,instruction); +// } +// } // end-sanitize-cygnus-never // start-sanitize-cygnus-never -// FIXME FIXME FIXME What is this? -//11100,******,00001:RR:16::SDBBP -//*mips16: -//{ -// unsigned32 instruction = instruction_0; -// if (have_extendval) -// SignalException (ReservedInstruction, instruction); -// { -// SignalException(DebugBreakPoint,instruction); -// } -//} +// // FIXME FIXME FIXME What is this? +// 000000,********************,001110:SPECIAL:32::SDBBP +// *r3900: +// { +// unsigned32 instruction = instruction_0; +// { +// SignalException(DebugBreakPoint,instruction); +// } +// } // end-sanitize-cygnus-never // start-sanitize-cygnus-never -// FIXME FIXME FIXME What is this? -000000,********************,001110:SPECIAL:32::SDBBP -//*r3900: -//{ -// unsigned32 instruction = instruction_0; -// { -// SignalException(DebugBreakPoint,instruction); -// } -//} +// // FIXME FIXME FIXME This apparently belongs to the vr4100 which +// // isn't yet reconized by this simulator. +// 000000,5.RS,5.RT,0000000000101000:SPECIAL:32::MADD16 +// *vr4100: +// { +// unsigned32 instruction = instruction_0; +// t_reg op2 UNUSED = GPR[((instruction >> 16) & 0x0000001F)]; +// t_reg op1 UNUSED = GPR[((instruction >> 21) & 0x0000001F)]; +// { +// CHECKHILO("Multiply-Add"); +// { +// unsigned64 temp = (op1 * op2); +// temp += (SET64HI(VL4_8(HI)) | VL4_8(LO)); +// LO = SIGNEXTEND((unsigned64)VL4_8(temp),32); +// HI = SIGNEXTEND((unsigned64)VH4_8(temp),32); +// } +// } +// } // end-sanitize-cygnus-never +// start-sanitize-cygnus-never + +// // FIXME FIXME FIXME This apparently belongs to the vr4100 which +// // isn't yet reconized by this simulator. +// 000000,5.RS,5.RT,0000000000101001:SPECIAL:64::DMADD16 +// *vr4100: +// { +// unsigned32 instruction = instruction_0; +// t_reg op2 UNUSED = GPR[((instruction >> 16) & 0x0000001F)]; +// t_reg op1 UNUSED = GPR[((instruction >> 21) & 0x0000001F)]; +// { +// CHECKHILO("Multiply-Add"); +// { +// unsigned64 temp = (op1 * op2); +// LO = LO + temp; +// } +// } +// } + +// start-sanitize-cygnus-never |