decoder.isa revision 2041
17170Sgblack@eecs.umich.edu//////////////////////////////////////////////////////////////////// 210339Smitch.hayenga@arm.com// 37170Sgblack@eecs.umich.edu// The actual MIPS32 ISA decoder 47170Sgblack@eecs.umich.edu// ----------------------------- 57170Sgblack@eecs.umich.edu// The following instructions are specified in the MIPS32 ISA 67170Sgblack@eecs.umich.edu// Specification. Decoding closely follows the style specified 77170Sgblack@eecs.umich.edu// in the MIPS32 ISAthe specification document starting with Table 87170Sgblack@eecs.umich.edu// A-2 (document available @ www.mips.com) 97170Sgblack@eecs.umich.edu// 107170Sgblack@eecs.umich.edu//@todo: Distinguish "unknown/future" use insts from "reserved" 117170Sgblack@eecs.umich.edu// ones 127170Sgblack@eecs.umich.edudecode OPCODE_HI default FailUnimpl::unknown() { 137170Sgblack@eecs.umich.edu 147170Sgblack@eecs.umich.edu // Derived From ... Table A-2 MIPS32 ISA Manual 157170Sgblack@eecs.umich.edu 0x0: decode OPCODE_LO default FailUnimpl::reserved(){ 167170Sgblack@eecs.umich.edu 177170Sgblack@eecs.umich.edu 0x0: decode FUNCTION_HI { 187170Sgblack@eecs.umich.edu 0x0: decode FUNCTION_LO { 197170Sgblack@eecs.umich.edu 0x1: decode MOVCI { 207170Sgblack@eecs.umich.edu format Move { 217170Sgblack@eecs.umich.edu 0: movf({{ if( FPConditionCode(CC) == 0) Rd = Rs}}); 227170Sgblack@eecs.umich.edu 1: movt({{ if( FPConditionCode(CC) == 1) Rd = Rs}}); 237170Sgblack@eecs.umich.edu } 247170Sgblack@eecs.umich.edu } 257170Sgblack@eecs.umich.edu 267170Sgblack@eecs.umich.edu format BasicOp { 277170Sgblack@eecs.umich.edu 287170Sgblack@eecs.umich.edu //Table A-3 Note: "1. Specific encodings of the rt, rd, and sa fields 297170Sgblack@eecs.umich.edu //are used to distinguish among the SLL, NOP, SSNOP and EHB functions." 307170Sgblack@eecs.umich.edu 317170Sgblack@eecs.umich.edu 0x0: sll({{ Rd = Rt.uw << SA; }}); 327170Sgblack@eecs.umich.edu 337170Sgblack@eecs.umich.edu 0x2: decode SRL { 347170Sgblack@eecs.umich.edu 0: srl({{ Rd = Rt.uw >> SA; }}); 357170Sgblack@eecs.umich.edu 367170Sgblack@eecs.umich.edu //Hardcoded assuming 32-bit ISA, probably need parameter here 377170Sgblack@eecs.umich.edu 1: rotr({{ Rd = (Rt.uw << (32 - SA)) | (Rt.uw >> SA);}}); 387170Sgblack@eecs.umich.edu } 397170Sgblack@eecs.umich.edu 407170Sgblack@eecs.umich.edu 0x3: sra({{ Rd = Rt.sw >> SA; }}); 417170Sgblack@eecs.umich.edu 427170Sgblack@eecs.umich.edu 0x4: sllv({{ Rd = Rt.uw << Rs<4:0>; }}); 438229Snate@binkert.org 448229Snate@binkert.org 0x6: decode SRLV { 457170Sgblack@eecs.umich.edu 0: srlv({{ Rd = Rt.uw >> Rs<4:0>; }}); 4610037SARM gem5 Developers 478961Sgblack@eecs.umich.edu //Hardcoded assuming 32-bit ISA, probably need parameter here 4810037SARM gem5 Developers 1: rotrv({{ Rd = (Rt.uw << (32 - Rs<4:0>)) | (Rt.uw >> Rs<4:0>);}}); 497170Sgblack@eecs.umich.edu } 507853SMatt.Horsnell@ARM.com 517170Sgblack@eecs.umich.edu 0x7: srav({{ Rd = Rt.sw >> Rs<4:0>; }}); 527170Sgblack@eecs.umich.edu } 537170Sgblack@eecs.umich.edu } 547170Sgblack@eecs.umich.edu 557170Sgblack@eecs.umich.edu 0x1: decode FUNCTION_LO { 567170Sgblack@eecs.umich.edu 577170Sgblack@eecs.umich.edu //Table A-3 Note: "Specific encodings of the hint field are used 587170Sgblack@eecs.umich.edu //to distinguish JR from JR.HB and JALR from JALR.HB" 597170Sgblack@eecs.umich.edu format Jump { 607170Sgblack@eecs.umich.edu 0x0: jr(IsReturn); 617170Sgblack@eecs.umich.edu 0x1: jalr(IsCall,IsReturn); 627170Sgblack@eecs.umich.edu } 637170Sgblack@eecs.umich.edu 6410346Smitch.hayenga@arm.com format Move { 658148SAli.Saidi@ARM.com 0x2: movz({{ if (Rt == 0) Rd = Rs; }}); 6610346Smitch.hayenga@arm.com 0x3: movn({{ if (Rt != 0) Rd = Rs; }}); 6710346Smitch.hayenga@arm.com } 6810346Smitch.hayenga@arm.com 6910346Smitch.hayenga@arm.com format Trap { 7010346Smitch.hayenga@arm.com 0x4: Syscall::syscall({{ xc->syscall()}},IsNonSpeculative); 7110346Smitch.hayenga@arm.com 0x5: Break::break({{ }}); 7210346Smitch.hayenga@arm.com 0x7: Synchronize::sync({{ }}); 7310346Smitch.hayenga@arm.com } 748148SAli.Saidi@ARM.com } 7510346Smitch.hayenga@arm.com 7610346Smitch.hayenga@arm.com 0x2: decode FUNCTION_LO { 7710346Smitch.hayenga@arm.com format IntOp { 7810346Smitch.hayenga@arm.com 0x0: mfhi({{ }}); 7910346Smitch.hayenga@arm.com 0x1: mthi({{ }}); 8010346Smitch.hayenga@arm.com 0x2: mflo({{ }}); 8110346Smitch.hayenga@arm.com 0x3: mtlo({{ }}); 8210346Smitch.hayenga@arm.com } 8310346Smitch.hayenga@arm.com }; 848148SAli.Saidi@ARM.com 857170Sgblack@eecs.umich.edu 0x3: decode FUNCTION_LO { 8610346Smitch.hayenga@arm.com format IntOp { 877170Sgblack@eecs.umich.edu 0x0: mult({{ Rd.sw = Rs.sw * Rt.sw; }}); 887170Sgblack@eecs.umich.edu 0x1: multu({{ Rd.sw = Rs.uw * Rt.uw;}}); 897170Sgblack@eecs.umich.edu 0x2: div({{ Rd.sw = Rs.sw / Rt.sw;}}); 907170Sgblack@eecs.umich.edu 0x3: divu({{ Rd.sw = Rs.sw / Rt.uw;}}); 917170Sgblack@eecs.umich.edu } 927170Sgblack@eecs.umich.edu }; 937170Sgblack@eecs.umich.edu 947170Sgblack@eecs.umich.edu 0x4: decode FUNCTION_LO { 957190Sgblack@eecs.umich.edu format IntOp { 967190Sgblack@eecs.umich.edu 0x0: add({{ Rd.sw = Rs.sw + Rt.sw;}}); 977170Sgblack@eecs.umich.edu 0x1: addu({{ Rd.uw = Rs.uw + Rt.uw;}}); 987170Sgblack@eecs.umich.edu 0x2: sub({{ Rd.sw = Rs.sw - Rt.sw;}}); 9910346Smitch.hayenga@arm.com 0x3: subu({{ Rd.uw = Rs.uw - Rt.uw;}}); 10010346Smitch.hayenga@arm.com 0x4: and({{ Rd.sw = Rs.uw & Rt.uw;}}); 1017190Sgblack@eecs.umich.edu 0x5: or({{ Rd.sw = Rs.uw | Rt.uw;}}); 1027170Sgblack@eecs.umich.edu 0x6: xor({{ Rd.sw = Rs.uw ^ Rt.uw;}}); 10310346Smitch.hayenga@arm.com 0x7: nor({{ Rd.sw = ~(Rs.uw | Rt.uw);}}); 10410346Smitch.hayenga@arm.com } 10510346Smitch.hayenga@arm.com } 10610346Smitch.hayenga@arm.com 10710346Smitch.hayenga@arm.com 0x5: decode FUNCTION_LO { 10810346Smitch.hayenga@arm.com format IntOp{ 10910346Smitch.hayenga@arm.com 0x2: slt({{ Rd.sw = ( Rs.sw < Rt.sw ) ? 1 : 0}}); 11010346Smitch.hayenga@arm.com 0x3: sltu({{ Rd.uw = ( Rs.uw < Rt.uw ) ? 1 : 0}}); 1117170Sgblack@eecs.umich.edu } 11210346Smitch.hayenga@arm.com }; 11310346Smitch.hayenga@arm.com 11410346Smitch.hayenga@arm.com 0x6: decode FUNCTION_LO { 11510346Smitch.hayenga@arm.com format Trap { 1167170Sgblack@eecs.umich.edu 0x0: tge({{ }}); 11710346Smitch.hayenga@arm.com 0x1: tgeu({{ }}); 11810346Smitch.hayenga@arm.com 0x2: tlt({{ }}); 11910346Smitch.hayenga@arm.com 0x3: tltu({{ }}); 12010346Smitch.hayenga@arm.com 0x4: teq({{ }}); 1217170Sgblack@eecs.umich.edu 0x6: tne({{ }}); 12210346Smitch.hayenga@arm.com } 12310346Smitch.hayenga@arm.com } 12410346Smitch.hayenga@arm.com } 12510346Smitch.hayenga@arm.com 12610346Smitch.hayenga@arm.com 0x1: decode REGIMM_HI { 12710346Smitch.hayenga@arm.com 0x0: decode REGIMM_LO { 12810346Smitch.hayenga@arm.com format Branch { 12910346Smitch.hayenga@arm.com 0x0: bltz({{ }}); 13010346Smitch.hayenga@arm.com 0x1: bgez({{ }}); 13110346Smitch.hayenga@arm.com 13210346Smitch.hayenga@arm.com //MIPS obsolete instructions 13310346Smitch.hayenga@arm.com 0x2: bltzl({{ }}); 13410346Smitch.hayenga@arm.com 0x3: bgezl({{ }}); 13510346Smitch.hayenga@arm.com } 13610346Smitch.hayenga@arm.com } 13710346Smitch.hayenga@arm.com 13810346Smitch.hayenga@arm.com 0x1: decode REGIMM_LO { 13910346Smitch.hayenga@arm.com format Trap { 14010346Smitch.hayenga@arm.com 0x0: tgei({{ }}); 14110346Smitch.hayenga@arm.com 0x1: tgeiu({{ }}); 14210346Smitch.hayenga@arm.com 0x2: tlti({{ }}); 14310346Smitch.hayenga@arm.com 0x3: tltiu({{ }}); 14410346Smitch.hayenga@arm.com 0x4: teqi({{ }}); 14510346Smitch.hayenga@arm.com 0x6: tnei({{ }}); 14610346Smitch.hayenga@arm.com } 14710346Smitch.hayenga@arm.com } 14810346Smitch.hayenga@arm.com 14910346Smitch.hayenga@arm.com 0x2: decode REGIMM_LO { 15010346Smitch.hayenga@arm.com format Branch { 15110346Smitch.hayenga@arm.com 0x0: bltzal({{ }}); 15210346Smitch.hayenga@arm.com 0x1: bgezal({{ }}); 15310346Smitch.hayenga@arm.com 15410346Smitch.hayenga@arm.com //MIPS obsolete instructions 15510346Smitch.hayenga@arm.com 0x2: bltzall({{ }}); 15610346Smitch.hayenga@arm.com 0x3: bgezall({{ }}); 15710346Smitch.hayenga@arm.com } 15810346Smitch.hayenga@arm.com } 15910346Smitch.hayenga@arm.com 16010346Smitch.hayenga@arm.com 0x3: decode REGIMM_LO { 16110346Smitch.hayenga@arm.com format Trap { 16210346Smitch.hayenga@arm.com 0x7: synci({{ }}); 16310346Smitch.hayenga@arm.com } 16410346Smitch.hayenga@arm.com } 16510346Smitch.hayenga@arm.com } 16610346Smitch.hayenga@arm.com 16710346Smitch.hayenga@arm.com format Jump { 16810346Smitch.hayenga@arm.com 0x2: j(); 16910346Smitch.hayenga@arm.com 0x3: jal(IsCall); 17010346Smitch.hayenga@arm.com } 17110346Smitch.hayenga@arm.com 17210346Smitch.hayenga@arm.com format Branch { 17310346Smitch.hayenga@arm.com 0x4: beq({{ }}); 1749640Snathanael.premillieu@irisa.fr 0x5: bne({{ }}); 1759640Snathanael.premillieu@irisa.fr 0x6: blez({{ }}); 1769640Snathanael.premillieu@irisa.fr 0x7: bgtz({{ }}); 1779640Snathanael.premillieu@irisa.fr } 1788148SAli.Saidi@ARM.com }; 17910346Smitch.hayenga@arm.com 18010346Smitch.hayenga@arm.com 0x1: decode OPCODE_LO default FailUnimpl::reserved(){ 1817170Sgblack@eecs.umich.edu format IntOp { 18210346Smitch.hayenga@arm.com 0x0: addi({{ Rt.sw = Rs.sw + INTIMM; }}); 18310346Smitch.hayenga@arm.com 0x1: addiu({{ Rt.uw = Rs.uw + INTIMM;}}); 18410346Smitch.hayenga@arm.com 0x2: slti({{ Rt.sw = ( Rs.sw < INTIMM ) ? 1 : 0 }}); 18510346Smitch.hayenga@arm.com 0x3: sltiu({{ Rt.uw = ( Rs.uw < INTIMM ) ? 1 : 0 }}); 1867170Sgblack@eecs.umich.edu 0x4: andi({{ Rt.sw = Rs.sw & INTIMM;}}); 1877170Sgblack@eecs.umich.edu 0x5: ori({{ Rt.sw = Rs.sw | INTIMM;}}); 18810346Smitch.hayenga@arm.com 0x6: xori({{ Rt.sw = Rs.sw ^ INTIMM;}}); 18910346Smitch.hayenga@arm.com }; 1907170Sgblack@eecs.umich.edu 1917170Sgblack@eecs.umich.edu format Memory { 1928148SAli.Saidi@ARM.com 0x7: lui({{ }}); 19310346Smitch.hayenga@arm.com }; 1948148SAli.Saidi@ARM.com }; 19510346Smitch.hayenga@arm.com 1968148SAli.Saidi@ARM.com 0x2: decode OPCODE_LO default FailUnimpl::reserved(){ 19710346Smitch.hayenga@arm.com 1988148SAli.Saidi@ARM.com //Table A-11 MIPS32 COP0 Encoding of rs Field 19910346Smitch.hayenga@arm.com 0x0: decode RS_MSB { 20010346Smitch.hayenga@arm.com 0x0: decode RS { 20110346Smitch.hayenga@arm.com 0x0: mfc0({{ }}); 20210346Smitch.hayenga@arm.com 0xC: mtc0({{ }}); 20310346Smitch.hayenga@arm.com 0xA: rdpgpr({{ }}); 20410346Smitch.hayenga@arm.com 20510346Smitch.hayenga@arm.com 0xB: decode SC { 20610346Smitch.hayenga@arm.com format BasicOp { 20710346Smitch.hayenga@arm.com 0x0: di({{ }}); 20810346Smitch.hayenga@arm.com 0x1: ei({{ }}); 2099368Snathanael.premillieu@irisa.fr } 2109368Snathanael.premillieu@irisa.fr } 2119368Snathanael.premillieu@irisa.fr 2129368Snathanael.premillieu@irisa.fr 0xE: wrpgpr({{ }}); 2138148SAli.Saidi@ARM.com } 21410346Smitch.hayenga@arm.com 21510346Smitch.hayenga@arm.com //Table A-12 MIPS32 COP0 Encoding of Function Field When rs=CO 21610346Smitch.hayenga@arm.com 0x1: decode FUNCTION { 21710346Smitch.hayenga@arm.com format Trap { 2188148SAli.Saidi@ARM.com 0x01: tlbr({{ }}); 2197170Sgblack@eecs.umich.edu 0x02: tlbwi({{ }}); 2207190Sgblack@eecs.umich.edu 0x06: tlbwr({{ }}); 22110346Smitch.hayenga@arm.com 0x08: tlbp({{ }}); 2227190Sgblack@eecs.umich.edu } 2237343Sgblack@eecs.umich.edu 22410199SAndrew.Bardsley@arm.com format BasicOp { 22510199SAndrew.Bardsley@arm.com 0x18: eret({{ }}); 22610199SAndrew.Bardsley@arm.com 0x1F: deret({{ }}); 22710199SAndrew.Bardsley@arm.com 0x20: wait({{ }}); 22810199SAndrew.Bardsley@arm.com } 22910346Smitch.hayenga@arm.com } 23010346Smitch.hayenga@arm.com } 23110199SAndrew.Bardsley@arm.com 23210199SAndrew.Bardsley@arm.com //Table A-13 MIPS32 COP1 Encoding of rs Field 23310199SAndrew.Bardsley@arm.com 0x1: decode RS_MSB { 23410199SAndrew.Bardsley@arm.com 23510199SAndrew.Bardsley@arm.com 0x0: decode RS_HI { 23610346Smitch.hayenga@arm.com 0x0: decode RS_LO { 23710346Smitch.hayenga@arm.com 0x0: mfc1({{ }}); 2387343Sgblack@eecs.umich.edu 0x2: cfc1({{ }}); 2397170Sgblack@eecs.umich.edu 0x3: mfhc1({{ }}); 2407170Sgblack@eecs.umich.edu 0x4: mtc1({{ }}); 24110037SARM gem5 Developers 0x6: ctc1({{ }}); 24210037SARM gem5 Developers 0x7: mftc1({{ }}); 24310037SARM gem5 Developers } 24410037SARM gem5 Developers 24510037SARM gem5 Developers 0x1: decode ND { 24610037SARM gem5 Developers 0x0: decode TF { 24710037SARM gem5 Developers format Branch { 24810346Smitch.hayenga@arm.com 0x0: bc1f({{ }}); 24910037SARM gem5 Developers 0x1: bc1t({{ }}); 25010346Smitch.hayenga@arm.com } 25110346Smitch.hayenga@arm.com } 25210346Smitch.hayenga@arm.com 25310346Smitch.hayenga@arm.com 0x1: decode TF { 25410346Smitch.hayenga@arm.com format Branch { 25510346Smitch.hayenga@arm.com 0x0: bc1fl({{ }}); 25610346Smitch.hayenga@arm.com 0x1: bc1tl({{ }}); 25710037SARM gem5 Developers } 25810037SARM gem5 Developers } 25910037SARM gem5 Developers } 26010037SARM gem5 Developers } 26110037SARM gem5 Developers 26210037SARM gem5 Developers 0x1: decode RS_HI { 26310346Smitch.hayenga@arm.com 0x2: decode RS_LO { 26410346Smitch.hayenga@arm.com 26510346Smitch.hayenga@arm.com //Table A-14 MIPS32 COP1 Encoding of Function Field When rs=S 26610346Smitch.hayenga@arm.com //(( single-word )) 26710037SARM gem5 Developers 0x0: decode RS_HI { 26810037SARM gem5 Developers 0x0: decode RS_LO { 26910037SARM gem5 Developers 0x0: add_fmt({{ }}); 27010037SARM gem5 Developers 0x1: sub_fmt({{ }}); 27110346Smitch.hayenga@arm.com 0x2: mul_fmt({{ }}); 27210346Smitch.hayenga@arm.com 0x3: div_fmt({{ }}); 27310346Smitch.hayenga@arm.com 0x4: sqrt_fmt({{ }}); 27410346Smitch.hayenga@arm.com 0x5: abs_fmt({{ }}); 27510037SARM gem5 Developers 0x6: mov_fmt({{ }}); 27610346Smitch.hayenga@arm.com 0x7: neg_fmt({{ }}); 27710346Smitch.hayenga@arm.com } 27810346Smitch.hayenga@arm.com 27910346Smitch.hayenga@arm.com 0x1: decode RS_LO { 28010346Smitch.hayenga@arm.com //only legal for 64 bit 28110346Smitch.hayenga@arm.com format mode64 { 28210346Smitch.hayenga@arm.com 0x0: round_l({{ }}); 28310346Smitch.hayenga@arm.com 0x1: trunc_l({{ }}); 28410037SARM gem5 Developers 0x2: ceil_l({{ }}); 28510037SARM gem5 Developers 0x3: floor_l({{ }}); 28610037SARM gem5 Developers } 28710346Smitch.hayenga@arm.com 28810346Smitch.hayenga@arm.com 0x4: round_w({{ }}); 28910037SARM gem5 Developers 0x5: trunc_w({{ }}); 29010346Smitch.hayenga@arm.com 0x6: ceil_w({{ }}); 29110346Smitch.hayenga@arm.com 0x7: floor_w({{ }}); 29210346Smitch.hayenga@arm.com } 29310346Smitch.hayenga@arm.com 29410037SARM gem5 Developers 0x2: decode RS_LO { 29510037SARM gem5 Developers 0x1: decode MOVCF { 29610037SARM gem5 Developers 0x0: movf_fmt({{ }}); 29710346Smitch.hayenga@arm.com 0x1: movt_fmt({{ }}); 29810346Smitch.hayenga@arm.com } 29910037SARM gem5 Developers 30010346Smitch.hayenga@arm.com format Move { 30110346Smitch.hayenga@arm.com 0x2: movz({{ if (Rt == 0) Rd = Rs; }}); 30210037SARM gem5 Developers 0x3: movn({{ if (Rt != 0) Rd = Rs; }}); 30310037SARM gem5 Developers } 30410037SARM gem5 Developers 30510037SARM gem5 Developers format mode64 { 30610037SARM gem5 Developers 0x2: recip({{ }}); 30710346Smitch.hayenga@arm.com 0x3: rsqrt{{ }}); 30810346Smitch.hayenga@arm.com } 30910346Smitch.hayenga@arm.com } 31010346Smitch.hayenga@arm.com 31110037SARM gem5 Developers 0x4: decode RS_LO { 31210346Smitch.hayenga@arm.com 0x1: cvt_d({{ }}); 31310037SARM gem5 Developers 0x4: cvt_w({{ }}); 31410037SARM gem5 Developers 31510037SARM gem5 Developers //only legal for 64 bit 31610037SARM gem5 Developers format mode64 { 31710037SARM gem5 Developers 0x5: cvt_l({{ }}); 31810346Smitch.hayenga@arm.com 0x6: cvt_ps({{ }}); 31910346Smitch.hayenga@arm.com } 32010037SARM gem5 Developers } 32110346Smitch.hayenga@arm.com } 32210346Smitch.hayenga@arm.com 32310037SARM gem5 Developers //Table A-15 MIPS32 COP1 Encoding of Function Field When rs=D 32410037SARM gem5 Developers 0x1: decode RS_HI { 32510346Smitch.hayenga@arm.com 0x0: decode RS_LO { 32610346Smitch.hayenga@arm.com 0x0: add_fmt({{ }}); 32710037SARM gem5 Developers 0x1: sub_fmt({{ }}); 32810037SARM gem5 Developers 0x2: mul_fmt({{ }}); 32910037SARM gem5 Developers 0x3: div_fmt({{ }}); 33010037SARM gem5 Developers 0x4: sqrt_fmt({{ }}); 33110037SARM gem5 Developers 0x5: abs_fmt({{ }}); 33210346Smitch.hayenga@arm.com 0x6: mov_fmt({{ }}); 33310037SARM gem5 Developers 0x7: neg_fmt({{ }}); 33410037SARM gem5 Developers } 33510037SARM gem5 Developers 33610346Smitch.hayenga@arm.com 0x1: decode RS_LO { 33710346Smitch.hayenga@arm.com //only legal for 64 bit 33810037SARM gem5 Developers format mode64 { 33910037SARM gem5 Developers 0x0: round_l({{ }}); 34010037SARM gem5 Developers 0x1: trunc_l({{ }}); 34110037SARM gem5 Developers 0x2: ceil_l({{ }}); 34210037SARM gem5 Developers 0x3: floor_l({{ }}); 34310037SARM gem5 Developers } 34410037SARM gem5 Developers 34510037SARM gem5 Developers 0x4: round_w({{ }}); 34610037SARM gem5 Developers 0x5: trunc_w({{ }}); 34710037SARM gem5 Developers 0x6: ceil_w({{ }}); 34810037SARM gem5 Developers 0x7: floor_w({{ }}); 34910037SARM gem5 Developers } 35010346Smitch.hayenga@arm.com 35110037SARM gem5 Developers 0x2: decode RS_LO { 35210037SARM gem5 Developers 0x1: decode MOVCF { 35310346Smitch.hayenga@arm.com 0x0: movf_fmt({{ }}); 35410346Smitch.hayenga@arm.com 0x1: movt_fmt({{ }}); 35510037SARM gem5 Developers } 35610346Smitch.hayenga@arm.com 35710037SARM gem5 Developers format Move { 35810346Smitch.hayenga@arm.com 0x2: movz({{ if (Rt == 0) Rd = Rs; }}); 35910346Smitch.hayenga@arm.com 0x3: movn({{ if (Rt != 0) Rd = Rs; }}); 36010346Smitch.hayenga@arm.com } 36110037SARM gem5 Developers 36210346Smitch.hayenga@arm.com format mode64 { 36310037SARM gem5 Developers 0x5: recip({{ }}); 36410037SARM gem5 Developers 0x6: rsqrt{{ }}); 36510037SARM gem5 Developers } 36610037SARM gem5 Developers } 36710037SARM gem5 Developers 36810037SARM gem5 Developers 0x4: decode RS_LO { 36910037SARM gem5 Developers 0x0: cvt_s({{ }}); 37010346Smitch.hayenga@arm.com 0x4: cvt_w({{ }}); 37110037SARM gem5 Developers 37210037SARM gem5 Developers //only legal for 64 bit 37310346Smitch.hayenga@arm.com format mode64 { 37410346Smitch.hayenga@arm.com 0x5: cvt_l({{ }}); 37510037SARM gem5 Developers } 37610346Smitch.hayenga@arm.com } 37710037SARM gem5 Developers } 37810346Smitch.hayenga@arm.com 37910346Smitch.hayenga@arm.com //Table A-16 MIPS32 COP1 Encoding of Function Field When rs=W 38010037SARM gem5 Developers 0x4: decode FUNCTION { 38110346Smitch.hayenga@arm.com 0x10: cvt_s({{ }}); 38210346Smitch.hayenga@arm.com 0x10: cvt_d({{ }}); 38310037SARM gem5 Developers } 38410346Smitch.hayenga@arm.com 38510346Smitch.hayenga@arm.com //Table A-16 MIPS32 COP1 Encoding of Function Field When rs=L1 38610346Smitch.hayenga@arm.com //Note: "1. Format type L is legal only if 64-bit floating point operations 38710346Smitch.hayenga@arm.com //are enabled." 38810037SARM gem5 Developers 0x5: decode FUNCTION_HI { 38910037SARM gem5 Developers 0x10: cvt_s({{ }}); 39010037SARM gem5 Developers 0x11: cvt_d({{ }}); 39110037SARM gem5 Developers } 39210037SARM gem5 Developers 39310037SARM gem5 Developers //Table A-17 MIPS64 COP1 Encoding of Function Field When rs=PS1 39410037SARM gem5 Developers //Note: "1. Format type PS is legal only if 64-bit floating point operations 39510346Smitch.hayenga@arm.com //are enabled. " 39610037SARM gem5 Developers 0x6: decode RS_HI { 39710037SARM gem5 Developers 0x0: decode RS_LO { 39810346Smitch.hayenga@arm.com 0x0: add_fmt({{ }}); 39910346Smitch.hayenga@arm.com 0x1: sub_fmt({{ }}); 40010037SARM gem5 Developers 0x2: mul_fmt({{ }}); 40110346Smitch.hayenga@arm.com 0x5: abs_fmt({{ }}); 40210037SARM gem5 Developers 0x6: mov_fmt({{ }}); 40310346Smitch.hayenga@arm.com 0x7: neg_fmt({{ }}); 40410346Smitch.hayenga@arm.com } 40510037SARM gem5 Developers 40610346Smitch.hayenga@arm.com 0x2: decode RS_LO { 40710346Smitch.hayenga@arm.com 0x1: decode MOVCF { 40810037SARM gem5 Developers 0x0: movf_fmt({{ }}); 40910346Smitch.hayenga@arm.com 0x1: movt_fmt({{ }}); 41010346Smitch.hayenga@arm.com } 41110346Smitch.hayenga@arm.com 41210346Smitch.hayenga@arm.com } 41310037SARM gem5 Developers 41410037SARM gem5 Developers 0x4: decode RS_LO { 41510037SARM gem5 Developers 0x0: cvt_s_pu({{ }}); 41610037SARM gem5 Developers } 41710037SARM gem5 Developers 41810037SARM gem5 Developers 0x5: decode RS_LO { 41910037SARM gem5 Developers 0x0: cvt_s_pl({{ }}); 42010037SARM gem5 Developers 0x4: pll_s_pl({{ }}); 42110346Smitch.hayenga@arm.com 0x5: plu_s_pl({{ }}); 42210037SARM gem5 Developers 0x6: pul_s_pl({{ }}); 42310037SARM gem5 Developers 0x7: puu_s_pl({{ }}); 42410346Smitch.hayenga@arm.com } 42510346Smitch.hayenga@arm.com } 42610037SARM gem5 Developers } 42710346Smitch.hayenga@arm.com 42810346Smitch.hayenga@arm.com //Table A-19 MIPS32 COP2 Encoding of rs Field 42910037SARM gem5 Developers 0x2: decode RS_MSB { 43010346Smitch.hayenga@arm.com 0x0: decode RS_HI { 43110346Smitch.hayenga@arm.com 0x0: decode RS_LO { 43210346Smitch.hayenga@arm.com 0x0: mfc2({{ }}); 43310346Smitch.hayenga@arm.com 0x2: cfc2({{ }}); 43410346Smitch.hayenga@arm.com 0x3: mfhc2({{ }}); 43510037SARM gem5 Developers 0x4: mtc2({{ }}); 43610037SARM gem5 Developers 0x6: ctc2({{ }}); 43710346Smitch.hayenga@arm.com 0x7: mftc2({{ }}); 43810037SARM gem5 Developers } 43910037SARM gem5 Developers 44010037SARM gem5 Developers 0x1: decode ND { 44110037SARM gem5 Developers 0x0: decode TF { 44210037SARM gem5 Developers format Branch { 44310037SARM gem5 Developers 0x0: bc2f({{ }}); 44410037SARM gem5 Developers 0x1: bc2t({{ }}); 44510346Smitch.hayenga@arm.com } 44610037SARM gem5 Developers } 44710037SARM gem5 Developers 44810346Smitch.hayenga@arm.com 0x1: decode TF { 44910346Smitch.hayenga@arm.com format Branch { 45010037SARM gem5 Developers 0x0: bc2fl({{ }}); 45110037SARM gem5 Developers 0x1: bc2tl({{ }}); 4527639Sgblack@eecs.umich.edu } 4537639Sgblack@eecs.umich.edu } 4547639Sgblack@eecs.umich.edu } 4557639Sgblack@eecs.umich.edu } 4567639Sgblack@eecs.umich.edu } 4577639Sgblack@eecs.umich.edu 4587639Sgblack@eecs.umich.edu //Table A-20 MIPS64 COP1X Encoding of Function Field 1 4597639Sgblack@eecs.umich.edu //Note: "COP1X instructions are legal only if 64-bit floating point 4607639Sgblack@eecs.umich.edu //operations are enabled." 4617639Sgblack@eecs.umich.edu 0x3: decode FUNCTION_HI { 4627639Sgblack@eecs.umich.edu 0x0: decode FUNCTION_LO { 4637639Sgblack@eecs.umich.edu 0x0: lwxc1({{ }}); 4647639Sgblack@eecs.umich.edu 0x1: ldxc1({{ }}); 4657639Sgblack@eecs.umich.edu 0x5: luxc1({{ }}); 4667639Sgblack@eecs.umich.edu } 4677639Sgblack@eecs.umich.edu 46810037SARM gem5 Developers 0x1: decode FUNCTION_LO { 4697639Sgblack@eecs.umich.edu 0x0: swxc1({{ }}); 4707639Sgblack@eecs.umich.edu 0x1: sdxc1({{ }}); 4717639Sgblack@eecs.umich.edu 0x5: suxc1({{ }}); 4727639Sgblack@eecs.umich.edu 0x7: prefx({{ }}); 4737639Sgblack@eecs.umich.edu } 4747639Sgblack@eecs.umich.edu 4757639Sgblack@eecs.umich.edu 0x3: alnv_ps({{ }}); 4767639Sgblack@eecs.umich.edu 4777639Sgblack@eecs.umich.edu 0x4: decode FUNCTION_LO { 4787639Sgblack@eecs.umich.edu 0x0: madd_s({{ }}); 4797639Sgblack@eecs.umich.edu 0x1: madd_d({{ }}); 4807639Sgblack@eecs.umich.edu 0x6: madd_ps({{ }}); 4817639Sgblack@eecs.umich.edu } 4827639Sgblack@eecs.umich.edu 4837639Sgblack@eecs.umich.edu 0x5: decode FUNCTION_LO { 4847639Sgblack@eecs.umich.edu 0x0: msub_s({{ }}); 4857639Sgblack@eecs.umich.edu 0x1: msub_d({{ }}); 4867639Sgblack@eecs.umich.edu 0x6: msub_ps({{ }}); 4877639Sgblack@eecs.umich.edu } 4887639Sgblack@eecs.umich.edu 4897639Sgblack@eecs.umich.edu 0x6: decode FUNCTION_LO { 4907639Sgblack@eecs.umich.edu 0x0: nmadd_s({{ }}); 4917639Sgblack@eecs.umich.edu 0x1: nmadd_d({{ }}); 4927639Sgblack@eecs.umich.edu 0x6: nmadd_ps({{ }}); 4937639Sgblack@eecs.umich.edu } 4947639Sgblack@eecs.umich.edu 4957853SMatt.Horsnell@ARM.com 0x7: decode FUNCTION_LO { 4967853SMatt.Horsnell@ARM.com 0x0: nmsub_s({{ }}); 4977639Sgblack@eecs.umich.edu 0x1: nmsub_d({{ }}); 4987639Sgblack@eecs.umich.edu 0x6: nmsub_ps({{ }}); 4997639Sgblack@eecs.umich.edu } 5007639Sgblack@eecs.umich.edu } 5017646Sgene.wu@arm.com 5027639Sgblack@eecs.umich.edu //MIPS obsolete instructions 5037639Sgblack@eecs.umich.edu 0x4: beql({{ }}); 5047639Sgblack@eecs.umich.edu 0x5: bnel({{ }}); 5057639Sgblack@eecs.umich.edu 0x6: blezl({{ }}); 5067639Sgblack@eecs.umich.edu 0x7: bgtzl({{ }}); 5077639Sgblack@eecs.umich.edu }; 5087639Sgblack@eecs.umich.edu 5097639Sgblack@eecs.umich.edu 0x3: decode OPCODE_LO default FailUnimpl::reserved() { 5107639Sgblack@eecs.umich.edu 5117639Sgblack@eecs.umich.edu //Table A-5 MIPS32 SPECIAL2 Encoding of Function Field 5127639Sgblack@eecs.umich.edu 0x4: decode FUNCTION_HI { 5137639Sgblack@eecs.umich.edu 5147639Sgblack@eecs.umich.edu 0x0: decode FUNCTION_LO { 5157639Sgblack@eecs.umich.edu 0x0: madd({{ }}); 5167639Sgblack@eecs.umich.edu 0x1: maddu({{ }}); 5177639Sgblack@eecs.umich.edu 0x2: mult({{ }}); 5187639Sgblack@eecs.umich.edu 0x4: msub({{ }}); 5197639Sgblack@eecs.umich.edu 0x5: msubu({{ }}); 5207639Sgblack@eecs.umich.edu } 5217639Sgblack@eecs.umich.edu 5227639Sgblack@eecs.umich.edu 0x4: decode FUNCTION_LO { 5237639Sgblack@eecs.umich.edu 0x0: clz({{ }}); 5247639Sgblack@eecs.umich.edu 0x1: clo({{ }}); 5257639Sgblack@eecs.umich.edu } 5267639Sgblack@eecs.umich.edu 5277639Sgblack@eecs.umich.edu 0x7: decode FUNCTION_LO { 5287639Sgblack@eecs.umich.edu 0x7: sdbbp({{ }}); 5297639Sgblack@eecs.umich.edu } 5307639Sgblack@eecs.umich.edu } 5317639Sgblack@eecs.umich.edu 5327853SMatt.Horsnell@ARM.com //Table A-6 MIPS32 SPECIAL3 Encoding of Function Field for Release 2 of the Architecture 5337853SMatt.Horsnell@ARM.com 0x7: decode FUNCTION_HI { 5347639Sgblack@eecs.umich.edu 5357639Sgblack@eecs.umich.edu 0x0: decode FUNCTION_LO { 5367639Sgblack@eecs.umich.edu 0x1: ext({{ }}); 5377639Sgblack@eecs.umich.edu 0x4: ins({{ }}); 5387639Sgblack@eecs.umich.edu } 5397639Sgblack@eecs.umich.edu 5407639Sgblack@eecs.umich.edu //Table A-10 MIPS32 BSHFL Encoding of sa Field 5417639Sgblack@eecs.umich.edu 0x4: decode SA { 5427639Sgblack@eecs.umich.edu 0x02: wsbh({{ }}); 5437639Sgblack@eecs.umich.edu 0x10: seb({{ }}); 5447639Sgblack@eecs.umich.edu 0x18: seh({{ }}); 5457639Sgblack@eecs.umich.edu } 5467639Sgblack@eecs.umich.edu 5477639Sgblack@eecs.umich.edu 0x6: decode FUNCTION_LO { 5487639Sgblack@eecs.umich.edu 0x7: rdhwr({{ }}); 5497639Sgblack@eecs.umich.edu } 5507639Sgblack@eecs.umich.edu } 5517639Sgblack@eecs.umich.edu }; 5527639Sgblack@eecs.umich.edu 5537639Sgblack@eecs.umich.edu 0x4: decode OPCODE_LO default FailUnimpl::reserved() { 5547639Sgblack@eecs.umich.edu format Memory { 5557639Sgblack@eecs.umich.edu 0x0: lb({{ }}); 5567639Sgblack@eecs.umich.edu 0x1: lh({{ }}); 5577639Sgblack@eecs.umich.edu 0x2: lwl({{ }}); 5587639Sgblack@eecs.umich.edu 0x3: lw({{ }}); 5597639Sgblack@eecs.umich.edu 0x4: lbu({{ }}); 5607639Sgblack@eecs.umich.edu 0x5: lhu({{ }}); 5617639Sgblack@eecs.umich.edu 0x6: lhu({{ }}); 5627639Sgblack@eecs.umich.edu }; 5637639Sgblack@eecs.umich.edu 5647639Sgblack@eecs.umich.edu 0x7: FailUnimpl::reserved({{ }}); 5657639Sgblack@eecs.umich.edu }; 5667639Sgblack@eecs.umich.edu 5677639Sgblack@eecs.umich.edu 0x5: decode OPCODE_LO default FailUnimpl::reserved() { 5687639Sgblack@eecs.umich.edu format Memory { 5697639Sgblack@eecs.umich.edu 0x0: sb({{ }}); 57010037SARM gem5 Developers 0x1: sh({{ }}); 5717639Sgblack@eecs.umich.edu 0x2: swl({{ }}); 5727639Sgblack@eecs.umich.edu 0x3: sw({{ }}); 5737639Sgblack@eecs.umich.edu 0x6: swr({{ }}); 5747639Sgblack@eecs.umich.edu }; 5757639Sgblack@eecs.umich.edu 5767639Sgblack@eecs.umich.edu format FailUnimpl { 5777639Sgblack@eecs.umich.edu 0x4: reserved({{ }}); 5787639Sgblack@eecs.umich.edu 0x5: reserved({{ }}); 5797639Sgblack@eecs.umich.edu 0x7: cache({{ }}); 5807639Sgblack@eecs.umich.edu }; 5817639Sgblack@eecs.umich.edu 5827639Sgblack@eecs.umich.edu }; 5837639Sgblack@eecs.umich.edu 5847639Sgblack@eecs.umich.edu 0x6: decode OPCODE_LO default FailUnimpl::reserved() { 5857639Sgblack@eecs.umich.edu format Memory { 5867639Sgblack@eecs.umich.edu 0x0: ll({{ }}); 5877639Sgblack@eecs.umich.edu 0x1: lwc1({{ }}); 5887639Sgblack@eecs.umich.edu 0x5: ldc1({{ }}); 5897639Sgblack@eecs.umich.edu }; 5907639Sgblack@eecs.umich.edu }; 5917639Sgblack@eecs.umich.edu 5927639Sgblack@eecs.umich.edu 0x7: decode OPCODE_LO default FailUnimpl::reserved() { 5937639Sgblack@eecs.umich.edu format Memory { 5947639Sgblack@eecs.umich.edu 0x0: sc({{ }}); 5957639Sgblack@eecs.umich.edu 0x1: swc1({{ }}); 5967639Sgblack@eecs.umich.edu 0x5: sdc1({{ }}); 5977639Sgblack@eecs.umich.edu }; 5987639Sgblack@eecs.umich.edu 5997639Sgblack@eecs.umich.edu } 6007639Sgblack@eecs.umich.edu} 6017639Sgblack@eecs.umich.edu 6027639Sgblack@eecs.umich.edu 6037639Sgblack@eecs.umich.edu