// This code was autogenerated by ./tools/ppc-table-gen. Do not modify! // clang-format off #include #include #include "xenia/base/assert.h" #include "xenia/cpu/ppc/ppc_opcode.h" #include "xenia/cpu/ppc/ppc_opcode_info.h" namespace xe { namespace cpu { namespace ppc { constexpr uint32_t ExtractBits(uint32_t v, uint32_t a, uint32_t b) { return (v >> (32 - 1 - b)) & ((1 << (b - a + 1)) - 1); } #define PPC_DECODER_MISS assert_always(); return PPCOpcode::kInvalid #define PPC_DECODER_HIT(name) return PPCOpcode::name; PPCOpcode LookupOpcode(uint32_t code) { switch (ExtractBits(code, 0, 5)) { case 2: PPC_DECODER_HIT(tdi); case 3: PPC_DECODER_HIT(twi); case 4: switch ((ExtractBits(code, 21, 27) << 4)|(ExtractBits(code, 30, 31) << 0)) { case 0b00000000011: PPC_DECODER_HIT(lvsl128); case 0b00001000011: PPC_DECODER_HIT(lvsr128); case 0b00010000011: PPC_DECODER_HIT(lvewx128); case 0b00011000011: PPC_DECODER_HIT(lvx128); case 0b00110000011: PPC_DECODER_HIT(stvewx128); case 0b00111000011: PPC_DECODER_HIT(stvx128); case 0b01011000011: PPC_DECODER_HIT(lvxl128); case 0b01111000011: PPC_DECODER_HIT(stvxl128); case 0b10000000011: PPC_DECODER_HIT(lvlx128); case 0b10001000011: PPC_DECODER_HIT(lvrx128); case 0b10100000011: PPC_DECODER_HIT(stvlx128); case 0b10101000011: PPC_DECODER_HIT(stvrx128); case 0b11000000011: PPC_DECODER_HIT(lvlxl128); case 0b11001000011: PPC_DECODER_HIT(lvrxl128); case 0b11100000011: PPC_DECODER_HIT(stvlxl128); case 0b11101000011: PPC_DECODER_HIT(stvrxl128); } switch ((ExtractBits(code, 21, 31) << 0)) { case 0b00000000000: PPC_DECODER_HIT(vaddubm); case 0b00000000010: PPC_DECODER_HIT(vmaxub); case 0b00000000100: PPC_DECODER_HIT(vrlb); case 0b00000001000: PPC_DECODER_HIT(vmuloub); case 0b00000001010: PPC_DECODER_HIT(vaddfp); case 0b00000001100: PPC_DECODER_HIT(vmrghb); case 0b00000001110: PPC_DECODER_HIT(vpkuhum); case 0b00001000000: PPC_DECODER_HIT(vadduhm); case 0b00001000010: PPC_DECODER_HIT(vmaxuh); case 0b00001000100: PPC_DECODER_HIT(vrlh); case 0b00001001000: PPC_DECODER_HIT(vmulouh); case 0b00001001010: PPC_DECODER_HIT(vsubfp); case 0b00001001100: PPC_DECODER_HIT(vmrghh); case 0b00001001110: PPC_DECODER_HIT(vpkuwum); case 0b00010000000: PPC_DECODER_HIT(vadduwm); case 0b00010000010: PPC_DECODER_HIT(vmaxuw); case 0b00010000100: PPC_DECODER_HIT(vrlw); case 0b00010001100: PPC_DECODER_HIT(vmrghw); case 0b00010001110: PPC_DECODER_HIT(vpkuhus); case 0b00011001110: PPC_DECODER_HIT(vpkuwus); case 0b00100000010: PPC_DECODER_HIT(vmaxsb); case 0b00100000100: PPC_DECODER_HIT(vslb); case 0b00100001000: PPC_DECODER_HIT(vmulosb); case 0b00100001010: PPC_DECODER_HIT(vrefp); case 0b00100001100: PPC_DECODER_HIT(vmrglb); case 0b00100001110: PPC_DECODER_HIT(vpkshus); case 0b00101000010: PPC_DECODER_HIT(vmaxsh); case 0b00101000100: PPC_DECODER_HIT(vslh); case 0b00101001000: PPC_DECODER_HIT(vmulosh); case 0b00101001010: PPC_DECODER_HIT(vrsqrtefp); case 0b00101001100: PPC_DECODER_HIT(vmrglh); case 0b00101001110: PPC_DECODER_HIT(vpkswus); case 0b00110000000: PPC_DECODER_HIT(vaddcuw); case 0b00110000010: PPC_DECODER_HIT(vmaxsw); case 0b00110000100: PPC_DECODER_HIT(vslw); case 0b00110001010: PPC_DECODER_HIT(vexptefp); case 0b00110001100: PPC_DECODER_HIT(vmrglw); case 0b00110001110: PPC_DECODER_HIT(vpkshss); case 0b00111000100: PPC_DECODER_HIT(vsl); case 0b00111001010: PPC_DECODER_HIT(vlogefp); case 0b00111001110: PPC_DECODER_HIT(vpkswss); case 0b01000000000: PPC_DECODER_HIT(vaddubs); case 0b01000000010: PPC_DECODER_HIT(vminub); case 0b01000000100: PPC_DECODER_HIT(vsrb); case 0b01000001000: PPC_DECODER_HIT(vmuleub); case 0b01000001010: PPC_DECODER_HIT(vrfin); case 0b01000001100: PPC_DECODER_HIT(vspltb); case 0b01000001110: PPC_DECODER_HIT(vupkhsb); case 0b01001000000: PPC_DECODER_HIT(vadduhs); case 0b01001000010: PPC_DECODER_HIT(vminuh); case 0b01001000100: PPC_DECODER_HIT(vsrh); case 0b01001001000: PPC_DECODER_HIT(vmuleuh); case 0b01001001010: PPC_DECODER_HIT(vrfiz); case 0b01001001100: PPC_DECODER_HIT(vsplth); case 0b01001001110: PPC_DECODER_HIT(vupkhsh); case 0b01010000000: PPC_DECODER_HIT(vadduws); case 0b01010000010: PPC_DECODER_HIT(vminuw); case 0b01010000100: PPC_DECODER_HIT(vsrw); case 0b01010001010: PPC_DECODER_HIT(vrfip); case 0b01010001100: PPC_DECODER_HIT(vspltw); case 0b01010001110: PPC_DECODER_HIT(vupklsb); case 0b01011000100: PPC_DECODER_HIT(vsr); case 0b01011001010: PPC_DECODER_HIT(vrfim); case 0b01011001110: PPC_DECODER_HIT(vupklsh); case 0b01100000000: PPC_DECODER_HIT(vaddsbs); case 0b01100000010: PPC_DECODER_HIT(vminsb); case 0b01100000100: PPC_DECODER_HIT(vsrab); case 0b01100001000: PPC_DECODER_HIT(vmulesb); case 0b01100001010: PPC_DECODER_HIT(vcfux); case 0b01100001100: PPC_DECODER_HIT(vspltisb); case 0b01100001110: PPC_DECODER_HIT(vpkpx); case 0b01101000000: PPC_DECODER_HIT(vaddshs); case 0b01101000010: PPC_DECODER_HIT(vminsh); case 0b01101000100: PPC_DECODER_HIT(vsrah); case 0b01101001000: PPC_DECODER_HIT(vmulesh); case 0b01101001010: PPC_DECODER_HIT(vcfsx); case 0b01101001100: PPC_DECODER_HIT(vspltish); case 0b01101001110: PPC_DECODER_HIT(vupkhpx); case 0b01110000000: PPC_DECODER_HIT(vaddsws); case 0b01110000010: PPC_DECODER_HIT(vminsw); case 0b01110000100: PPC_DECODER_HIT(vsraw); case 0b01110001010: PPC_DECODER_HIT(vctuxs); case 0b01110001100: PPC_DECODER_HIT(vspltisw); case 0b01111001010: PPC_DECODER_HIT(vctsxs); case 0b01111001110: PPC_DECODER_HIT(vupklpx); case 0b10000000000: PPC_DECODER_HIT(vsububm); case 0b10000000010: PPC_DECODER_HIT(vavgub); case 0b10000000100: PPC_DECODER_HIT(vand); case 0b10000001010: PPC_DECODER_HIT(vmaxfp); case 0b10000001100: PPC_DECODER_HIT(vslo); case 0b10001000000: PPC_DECODER_HIT(vsubuhm); case 0b10001000010: PPC_DECODER_HIT(vavguh); case 0b10001000100: PPC_DECODER_HIT(vandc); case 0b10001001010: PPC_DECODER_HIT(vminfp); case 0b10001001100: PPC_DECODER_HIT(vsro); case 0b10010000000: PPC_DECODER_HIT(vsubuwm); case 0b10010000010: PPC_DECODER_HIT(vavguw); case 0b10010000100: PPC_DECODER_HIT(vor); case 0b10011000100: PPC_DECODER_HIT(vxor); case 0b10100000010: PPC_DECODER_HIT(vavgsb); case 0b10100000100: PPC_DECODER_HIT(vnor); case 0b10101000010: PPC_DECODER_HIT(vavgsh); case 0b10110000000: PPC_DECODER_HIT(vsubcuw); case 0b10110000010: PPC_DECODER_HIT(vavgsw); case 0b11000000000: PPC_DECODER_HIT(vsububs); case 0b11000000100: PPC_DECODER_HIT(mfvscr); case 0b11000001000: PPC_DECODER_HIT(vsum4ubs); case 0b11001000000: PPC_DECODER_HIT(vsubuhs); case 0b11001000100: PPC_DECODER_HIT(mtvscr); case 0b11001001000: PPC_DECODER_HIT(vsum4shs); case 0b11010000000: PPC_DECODER_HIT(vsubuws); case 0b11010001000: PPC_DECODER_HIT(vsum2sws); case 0b11100000000: PPC_DECODER_HIT(vsubsbs); case 0b11100001000: PPC_DECODER_HIT(vsum4sbs); case 0b11101000000: PPC_DECODER_HIT(vsubshs); case 0b11110000000: PPC_DECODER_HIT(vsubsws); case 0b11110001000: PPC_DECODER_HIT(vsumsws); } switch ((ExtractBits(code, 22, 31) << 0)) { case 0b0000000110: PPC_DECODER_HIT(vcmpequb); case 0b0001000110: PPC_DECODER_HIT(vcmpequh); case 0b0010000110: PPC_DECODER_HIT(vcmpequw); case 0b0011000110: PPC_DECODER_HIT(vcmpeqfp); case 0b0111000110: PPC_DECODER_HIT(vcmpgefp); case 0b1000000110: PPC_DECODER_HIT(vcmpgtub); case 0b1001000110: PPC_DECODER_HIT(vcmpgtuh); case 0b1010000110: PPC_DECODER_HIT(vcmpgtuw); case 0b1011000110: PPC_DECODER_HIT(vcmpgtfp); case 0b1100000110: PPC_DECODER_HIT(vcmpgtsb); case 0b1101000110: PPC_DECODER_HIT(vcmpgtsh); case 0b1110000110: PPC_DECODER_HIT(vcmpgtsw); case 0b1111000110: PPC_DECODER_HIT(vcmpbfp); } switch ((ExtractBits(code, 26, 31) << 0)) { case 0b100000: PPC_DECODER_HIT(vmhaddshs); case 0b100001: PPC_DECODER_HIT(vmhraddshs); case 0b100010: PPC_DECODER_HIT(vmladduhm); case 0b100100: PPC_DECODER_HIT(vmsumubm); case 0b100101: PPC_DECODER_HIT(vmsummbm); case 0b100110: PPC_DECODER_HIT(vmsumuhm); case 0b100111: PPC_DECODER_HIT(vmsumuhs); case 0b101000: PPC_DECODER_HIT(vmsumshm); case 0b101001: PPC_DECODER_HIT(vmsumshs); case 0b101010: PPC_DECODER_HIT(vsel); case 0b101011: PPC_DECODER_HIT(vperm); case 0b101100: PPC_DECODER_HIT(vsldoi); case 0b101110: PPC_DECODER_HIT(vmaddfp); case 0b101111: PPC_DECODER_HIT(vnmsubfp); } switch ((ExtractBits(code, 27, 27) << 0)) { case 0b1: PPC_DECODER_HIT(vsldoi128); } PPC_DECODER_MISS; case 5: switch ((ExtractBits(code, 22, 22) << 5)|(ExtractBits(code, 27, 27) << 0)) { case 0b000000: PPC_DECODER_HIT(vperm128); } switch ((ExtractBits(code, 22, 25) << 2)|(ExtractBits(code, 27, 27) << 0)) { case 0b000001: PPC_DECODER_HIT(vaddfp128); case 0b000101: PPC_DECODER_HIT(vsubfp128); case 0b001001: PPC_DECODER_HIT(vmulfp128); case 0b001101: PPC_DECODER_HIT(vmaddfp128); case 0b010001: PPC_DECODER_HIT(vmaddcfp128); case 0b010101: PPC_DECODER_HIT(vnmsubfp128); case 0b011001: PPC_DECODER_HIT(vmsum3fp128); case 0b011101: PPC_DECODER_HIT(vmsum4fp128); case 0b100000: PPC_DECODER_HIT(vpkshss128); case 0b100001: PPC_DECODER_HIT(vand128); case 0b100100: PPC_DECODER_HIT(vpkshus128); case 0b100101: PPC_DECODER_HIT(vandc128); case 0b101000: PPC_DECODER_HIT(vpkswss128); case 0b101001: PPC_DECODER_HIT(vnor128); case 0b101100: PPC_DECODER_HIT(vpkswus128); case 0b101101: PPC_DECODER_HIT(vor128); case 0b110000: PPC_DECODER_HIT(vpkuhum128); case 0b110001: PPC_DECODER_HIT(vxor128); case 0b110100: PPC_DECODER_HIT(vpkuhus128); case 0b110101: PPC_DECODER_HIT(vsel128); case 0b111000: PPC_DECODER_HIT(vpkuwum128); case 0b111001: PPC_DECODER_HIT(vslo128); case 0b111100: PPC_DECODER_HIT(vpkuwus128); case 0b111101: PPC_DECODER_HIT(vsro128); } PPC_DECODER_MISS; case 6: switch ((ExtractBits(code, 21, 22) << 5)|(ExtractBits(code, 26, 27) << 0)) { case 0b0100001: PPC_DECODER_HIT(vpermwi128); } switch ((ExtractBits(code, 21, 23) << 4)|(ExtractBits(code, 26, 27) << 0)) { case 0b1100001: PPC_DECODER_HIT(vpkd3d128); case 0b1110001: PPC_DECODER_HIT(vrlimi128); } switch ((ExtractBits(code, 21, 27) << 0)) { case 0b0100011: PPC_DECODER_HIT(vcfpsxws128); case 0b0100111: PPC_DECODER_HIT(vcfpuxws128); case 0b0101011: PPC_DECODER_HIT(vcsxwfp128); case 0b0101111: PPC_DECODER_HIT(vcuxwfp128); case 0b0110011: PPC_DECODER_HIT(vrfim128); case 0b0110111: PPC_DECODER_HIT(vrfin128); case 0b0111011: PPC_DECODER_HIT(vrfip128); case 0b0111111: PPC_DECODER_HIT(vrfiz128); case 0b1100011: PPC_DECODER_HIT(vrefp128); case 0b1100111: PPC_DECODER_HIT(vrsqrtefp128); case 0b1101011: PPC_DECODER_HIT(vexptefp128); case 0b1101111: PPC_DECODER_HIT(vlogefp128); case 0b1110011: PPC_DECODER_HIT(vspltw128); case 0b1110111: PPC_DECODER_HIT(vspltisw128); case 0b1111111: PPC_DECODER_HIT(vupkd3d128); } switch ((ExtractBits(code, 22, 24) << 3)|(ExtractBits(code, 27, 27) << 0)) { case 0b000000: PPC_DECODER_HIT(vcmpeqfp128); case 0b001000: PPC_DECODER_HIT(vcmpgefp128); case 0b010000: PPC_DECODER_HIT(vcmpgtfp128); case 0b011000: PPC_DECODER_HIT(vcmpbfp128); case 0b100000: PPC_DECODER_HIT(vcmpequw128); } switch ((ExtractBits(code, 22, 25) << 2)|(ExtractBits(code, 27, 27) << 0)) { case 0b000101: PPC_DECODER_HIT(vrlw128); case 0b001101: PPC_DECODER_HIT(vslw128); case 0b010101: PPC_DECODER_HIT(vsraw128); case 0b011101: PPC_DECODER_HIT(vsrw128); case 0b101000: PPC_DECODER_HIT(vmaxfp128); case 0b101100: PPC_DECODER_HIT(vminfp128); case 0b110000: PPC_DECODER_HIT(vmrghw128); case 0b110100: PPC_DECODER_HIT(vmrglw128); case 0b111000: PPC_DECODER_HIT(vupkhsb128); case 0b111100: PPC_DECODER_HIT(vupklsb128); } PPC_DECODER_MISS; case 7: PPC_DECODER_HIT(mulli); case 8: PPC_DECODER_HIT(subficx); case 10: PPC_DECODER_HIT(cmpli); case 11: PPC_DECODER_HIT(cmpi); case 12: PPC_DECODER_HIT(addic); case 13: PPC_DECODER_HIT(addicx); case 14: PPC_DECODER_HIT(addi); case 15: PPC_DECODER_HIT(addis); case 16: PPC_DECODER_HIT(bcx); case 17: PPC_DECODER_HIT(sc); case 18: PPC_DECODER_HIT(bx); case 19: switch ((ExtractBits(code, 21, 30) << 0)) { case 0b0000000000: PPC_DECODER_HIT(mcrf); case 0b0000010000: PPC_DECODER_HIT(bclrx); case 0b0000100001: PPC_DECODER_HIT(crnor); case 0b0010000001: PPC_DECODER_HIT(crandc); case 0b0010010110: PPC_DECODER_HIT(isync); case 0b0011000001: PPC_DECODER_HIT(crxor); case 0b0011100001: PPC_DECODER_HIT(crnand); case 0b0100000001: PPC_DECODER_HIT(crand); case 0b0100100001: PPC_DECODER_HIT(creqv); case 0b0110100001: PPC_DECODER_HIT(crorc); case 0b0111000001: PPC_DECODER_HIT(cror); case 0b1000010000: PPC_DECODER_HIT(bcctrx); } PPC_DECODER_MISS; case 20: PPC_DECODER_HIT(rlwimix); case 21: PPC_DECODER_HIT(rlwinmx); case 23: PPC_DECODER_HIT(rlwnmx); case 24: PPC_DECODER_HIT(ori); case 25: PPC_DECODER_HIT(oris); case 26: PPC_DECODER_HIT(xori); case 27: PPC_DECODER_HIT(xoris); case 28: PPC_DECODER_HIT(andix); case 29: PPC_DECODER_HIT(andisx); case 30: switch ((ExtractBits(code, 27, 29) << 0)) { case 0b000: PPC_DECODER_HIT(rldiclx); case 0b001: PPC_DECODER_HIT(rldicrx); case 0b010: PPC_DECODER_HIT(rldicx); case 0b011: PPC_DECODER_HIT(rldimix); } switch ((ExtractBits(code, 27, 30) << 0)) { case 0b1000: PPC_DECODER_HIT(rldclx); case 0b1001: PPC_DECODER_HIT(rldcrx); } PPC_DECODER_MISS; case 31: switch ((ExtractBits(code, 21, 29) << 0)) { case 0b110011101: PPC_DECODER_HIT(sradix); } switch ((ExtractBits(code, 21, 30) << 0)) { case 0b0000000000: PPC_DECODER_HIT(cmp); case 0b0000000100: PPC_DECODER_HIT(tw); case 0b0000000110: PPC_DECODER_HIT(lvsl); case 0b0000000111: PPC_DECODER_HIT(lvebx); case 0b0000010011: PPC_DECODER_HIT(mfcr); case 0b0000010100: PPC_DECODER_HIT(lwarx); case 0b0000010101: PPC_DECODER_HIT(ldx); case 0b0000010111: PPC_DECODER_HIT(lwzx); case 0b0000011000: PPC_DECODER_HIT(slwx); case 0b0000011010: PPC_DECODER_HIT(cntlzwx); case 0b0000011011: PPC_DECODER_HIT(sldx); case 0b0000011100: PPC_DECODER_HIT(andx); case 0b0000100000: PPC_DECODER_HIT(cmpl); case 0b0000100110: PPC_DECODER_HIT(lvsr); case 0b0000100111: PPC_DECODER_HIT(lvehx); case 0b0000110101: PPC_DECODER_HIT(ldux); case 0b0000110110: PPC_DECODER_HIT(dcbst); case 0b0000110111: PPC_DECODER_HIT(lwzux); case 0b0000111010: PPC_DECODER_HIT(cntlzdx); case 0b0000111100: PPC_DECODER_HIT(andcx); case 0b0001000100: PPC_DECODER_HIT(td); case 0b0001000111: PPC_DECODER_HIT(lvewx); case 0b0001010011: PPC_DECODER_HIT(mfmsr); case 0b0001010100: PPC_DECODER_HIT(ldarx); case 0b0001010110: PPC_DECODER_HIT(dcbf); case 0b0001010111: PPC_DECODER_HIT(lbzx); case 0b0001100111: PPC_DECODER_HIT(lvx); case 0b0001110111: PPC_DECODER_HIT(lbzux); case 0b0001111100: PPC_DECODER_HIT(norx); case 0b0010000111: PPC_DECODER_HIT(stvebx); case 0b0010010000: PPC_DECODER_HIT(mtcrf); case 0b0010010010: PPC_DECODER_HIT(mtmsr); case 0b0010010101: PPC_DECODER_HIT(stdx); case 0b0010010110: PPC_DECODER_HIT(stwcx); case 0b0010010111: PPC_DECODER_HIT(stwx); case 0b0010100111: PPC_DECODER_HIT(stvehx); case 0b0010110010: PPC_DECODER_HIT(mtmsrd); case 0b0010110101: PPC_DECODER_HIT(stdux); case 0b0010110111: PPC_DECODER_HIT(stwux); case 0b0011000111: PPC_DECODER_HIT(stvewx); case 0b0011010110: PPC_DECODER_HIT(stdcx); case 0b0011010111: PPC_DECODER_HIT(stbx); case 0b0011100111: PPC_DECODER_HIT(stvx); case 0b0011110110: PPC_DECODER_HIT(dcbtst); case 0b0011110111: PPC_DECODER_HIT(stbux); case 0b0100010110: PPC_DECODER_HIT(dcbt); case 0b0100010111: PPC_DECODER_HIT(lhzx); case 0b0100011100: PPC_DECODER_HIT(eqvx); case 0b0100110111: PPC_DECODER_HIT(lhzux); case 0b0100111100: PPC_DECODER_HIT(xorx); case 0b0101010011: PPC_DECODER_HIT(mfspr); case 0b0101010101: PPC_DECODER_HIT(lwax); case 0b0101010111: PPC_DECODER_HIT(lhax); case 0b0101100111: PPC_DECODER_HIT(lvxl); case 0b0101110011: PPC_DECODER_HIT(mftb); case 0b0101110101: PPC_DECODER_HIT(lwaux); case 0b0101110111: PPC_DECODER_HIT(lhaux); case 0b0110010111: PPC_DECODER_HIT(sthx); case 0b0110011100: PPC_DECODER_HIT(orcx); case 0b0110110111: PPC_DECODER_HIT(sthux); case 0b0110111100: PPC_DECODER_HIT(orx); case 0b0111010011: PPC_DECODER_HIT(mtspr); case 0b0111010110: PPC_DECODER_HIT(dcbi); case 0b0111011100: PPC_DECODER_HIT(nandx); case 0b0111100111: PPC_DECODER_HIT(stvxl); case 0b1000000000: PPC_DECODER_HIT(mcrxr); case 0b1000000111: PPC_DECODER_HIT(lvlx); case 0b1000010100: PPC_DECODER_HIT(ldbrx); case 0b1000010101: PPC_DECODER_HIT(lswx); case 0b1000010110: PPC_DECODER_HIT(lwbrx); case 0b1000010111: PPC_DECODER_HIT(lfsx); case 0b1000011000: PPC_DECODER_HIT(srwx); case 0b1000011011: PPC_DECODER_HIT(srdx); case 0b1000100111: PPC_DECODER_HIT(lvrx); case 0b1000110111: PPC_DECODER_HIT(lfsux); case 0b1001010101: PPC_DECODER_HIT(lswi); case 0b1001010110: PPC_DECODER_HIT(sync); case 0b1001010111: PPC_DECODER_HIT(lfdx); case 0b1001110111: PPC_DECODER_HIT(lfdux); case 0b1010000111: PPC_DECODER_HIT(stvlx); case 0b1010010100: PPC_DECODER_HIT(stdbrx); case 0b1010010101: PPC_DECODER_HIT(stswx); case 0b1010010110: PPC_DECODER_HIT(stwbrx); case 0b1010010111: PPC_DECODER_HIT(stfsx); case 0b1010100111: PPC_DECODER_HIT(stvrx); case 0b1010110111: PPC_DECODER_HIT(stfsux); case 0b1011010101: PPC_DECODER_HIT(stswi); case 0b1011010111: PPC_DECODER_HIT(stfdx); case 0b1011110111: PPC_DECODER_HIT(stfdux); case 0b1100000111: PPC_DECODER_HIT(lvlxl); case 0b1100010110: PPC_DECODER_HIT(lhbrx); case 0b1100011000: PPC_DECODER_HIT(srawx); case 0b1100011010: PPC_DECODER_HIT(sradx); case 0b1100100111: PPC_DECODER_HIT(lvrxl); case 0b1100111000: PPC_DECODER_HIT(srawix); case 0b1101010110: PPC_DECODER_HIT(eieio); case 0b1110000111: PPC_DECODER_HIT(stvlxl); case 0b1110010110: PPC_DECODER_HIT(sthbrx); case 0b1110011010: PPC_DECODER_HIT(extshx); case 0b1110100111: PPC_DECODER_HIT(stvrxl); case 0b1110111010: PPC_DECODER_HIT(extsbx); case 0b1111010110: PPC_DECODER_HIT(icbi); case 0b1111010111: PPC_DECODER_HIT(stfiwx); case 0b1111011010: PPC_DECODER_HIT(extswx); } switch ((ExtractBits(code, 22, 30) << 0)) { case 0b000001000: PPC_DECODER_HIT(subfcx); case 0b000001001: PPC_DECODER_HIT(mulhdux); case 0b000001010: PPC_DECODER_HIT(addcx); case 0b000001011: PPC_DECODER_HIT(mulhwux); case 0b000101000: PPC_DECODER_HIT(subfx); case 0b001001001: PPC_DECODER_HIT(mulhdx); case 0b001001011: PPC_DECODER_HIT(mulhwx); case 0b001101000: PPC_DECODER_HIT(negx); case 0b010001000: PPC_DECODER_HIT(subfex); case 0b010001010: PPC_DECODER_HIT(addex); case 0b011001000: PPC_DECODER_HIT(subfzex); case 0b011001010: PPC_DECODER_HIT(addzex); case 0b011101000: PPC_DECODER_HIT(subfmex); case 0b011101001: PPC_DECODER_HIT(mulldx); case 0b011101010: PPC_DECODER_HIT(addmex); case 0b011101011: PPC_DECODER_HIT(mullwx); case 0b100001010: PPC_DECODER_HIT(addx); case 0b111001001: PPC_DECODER_HIT(divdux); case 0b111001011: PPC_DECODER_HIT(divwux); case 0b111101001: PPC_DECODER_HIT(divdx); case 0b111101011: PPC_DECODER_HIT(divwx); } switch ((ExtractBits(code, 6, 10) << 20)|(ExtractBits(code, 21, 30) << 0)) { case 0b0000000000000001111110110: PPC_DECODER_HIT(dcbz); case 0b0000100000000001111110110: PPC_DECODER_HIT(dcbz128); } PPC_DECODER_MISS; case 32: PPC_DECODER_HIT(lwz); case 33: PPC_DECODER_HIT(lwzu); case 34: PPC_DECODER_HIT(lbz); case 35: PPC_DECODER_HIT(lbzu); case 36: PPC_DECODER_HIT(stw); case 37: PPC_DECODER_HIT(stwu); case 38: PPC_DECODER_HIT(stb); case 39: PPC_DECODER_HIT(stbu); case 40: PPC_DECODER_HIT(lhz); case 41: PPC_DECODER_HIT(lhzu); case 42: PPC_DECODER_HIT(lha); case 43: PPC_DECODER_HIT(lhau); case 44: PPC_DECODER_HIT(sth); case 45: PPC_DECODER_HIT(sthu); case 46: PPC_DECODER_HIT(lmw); case 47: PPC_DECODER_HIT(stmw); case 48: PPC_DECODER_HIT(lfs); case 49: PPC_DECODER_HIT(lfsu); case 50: PPC_DECODER_HIT(lfd); case 51: PPC_DECODER_HIT(lfdu); case 52: PPC_DECODER_HIT(stfs); case 53: PPC_DECODER_HIT(stfsu); case 54: PPC_DECODER_HIT(stfd); case 55: PPC_DECODER_HIT(stfdu); case 58: switch ((ExtractBits(code, 30, 31) << 0)) { case 0b00: PPC_DECODER_HIT(ld); case 0b01: PPC_DECODER_HIT(ldu); case 0b10: PPC_DECODER_HIT(lwa); } PPC_DECODER_MISS; case 59: switch ((ExtractBits(code, 26, 30) << 0)) { case 0b10010: PPC_DECODER_HIT(fdivsx); case 0b10100: PPC_DECODER_HIT(fsubsx); case 0b10101: PPC_DECODER_HIT(faddsx); case 0b10110: PPC_DECODER_HIT(fsqrtsx); case 0b11000: PPC_DECODER_HIT(fresx); case 0b11001: PPC_DECODER_HIT(fmulsx); case 0b11100: PPC_DECODER_HIT(fmsubsx); case 0b11101: PPC_DECODER_HIT(fmaddsx); case 0b11110: PPC_DECODER_HIT(fnmsubsx); case 0b11111: PPC_DECODER_HIT(fnmaddsx); } PPC_DECODER_MISS; case 62: switch ((ExtractBits(code, 30, 31) << 0)) { case 0b00: PPC_DECODER_HIT(std); case 0b01: PPC_DECODER_HIT(stdu); } PPC_DECODER_MISS; case 63: switch ((ExtractBits(code, 21, 30) << 0)) { case 0b0000000000: PPC_DECODER_HIT(fcmpu); case 0b0000001100: PPC_DECODER_HIT(frspx); case 0b0000001110: PPC_DECODER_HIT(fctiwx); case 0b0000001111: PPC_DECODER_HIT(fctiwzx); case 0b0000100000: PPC_DECODER_HIT(fcmpo); case 0b0000100110: PPC_DECODER_HIT(mtfsb1x); case 0b0000101000: PPC_DECODER_HIT(fnegx); case 0b0001000000: PPC_DECODER_HIT(mcrfs); case 0b0001000110: PPC_DECODER_HIT(mtfsb0x); case 0b0001001000: PPC_DECODER_HIT(fmrx); case 0b0010000110: PPC_DECODER_HIT(mtfsfix); case 0b0010001000: PPC_DECODER_HIT(fnabsx); case 0b0100001000: PPC_DECODER_HIT(fabsx); case 0b1001000111: PPC_DECODER_HIT(mffsx); case 0b1011000111: PPC_DECODER_HIT(mtfsfx); case 0b1100101110: PPC_DECODER_HIT(fctidx); case 0b1100101111: PPC_DECODER_HIT(fctidzx); case 0b1101001110: PPC_DECODER_HIT(fcfidx); } switch ((ExtractBits(code, 26, 30) << 0)) { case 0b10010: PPC_DECODER_HIT(fdivx); case 0b10100: PPC_DECODER_HIT(fsubx); case 0b10101: PPC_DECODER_HIT(faddx); case 0b10110: PPC_DECODER_HIT(fsqrtx); case 0b10111: PPC_DECODER_HIT(fselx); case 0b11001: PPC_DECODER_HIT(fmulx); case 0b11010: PPC_DECODER_HIT(frsqrtex); case 0b11100: PPC_DECODER_HIT(fmsubx); case 0b11101: PPC_DECODER_HIT(fmaddx); case 0b11110: PPC_DECODER_HIT(fnmsubx); case 0b11111: PPC_DECODER_HIT(fnmaddx); } PPC_DECODER_MISS; default: PPC_DECODER_MISS; } } } // namespace ppc } // namespace cpu } // namespace xe