diff options
| author | Galen Williamson <galen@vector35.com> | 2025-06-29 11:23:58 -0400 |
|---|---|---|
| committer | Galen Williamson <galen@vector35.com> | 2025-06-29 18:28:48 -0400 |
| commit | e8206bc27e1633c7e4c99907f43bf67d2f200cd5 (patch) | |
| tree | 2315bec284e9bb692a0eb8986578fe18e2289d23 /arch/powerpc/decode/mnemonic.c | |
| parent | 91f1eccb6c41a7ef60fd66387ffae075f88141a4 (diff) | |
[powerpc] Full merge of PowerPC disassembler PRs, including:
* Remove dependency on capstone for PowerPC disassembly #6292
* Add support for PowerPC VLE instruction set #6740
* Add support for paired-single instructions #6821
* Various post-merge fixes and tweaks to disassembly and lifting
* Removal of dependence on capstone for assembler's scoring mechanism (capstone currently disabled, but not removed from codebase yet)
Diffstat (limited to 'arch/powerpc/decode/mnemonic.c')
| -rw-r--r-- | arch/powerpc/decode/mnemonic.c | 2188 |
1 files changed, 2188 insertions, 0 deletions
diff --git a/arch/powerpc/decode/mnemonic.c b/arch/powerpc/decode/mnemonic.c new file mode 100644 index 00000000..2b5fa06d --- /dev/null +++ b/arch/powerpc/decode/mnemonic.c @@ -0,0 +1,2188 @@ +#include "decode.h" + +// the hope is to avoid having to manipulate strings in something that's +// somewhat hot, so we create a bunch of lookup tables for each mnemonic + +// for "OP" and "OP." +#define DEFINE_SUBMNEM_RC(_identifier, base) \ + const char* _identifier[2] = \ + { \ + base, \ + base ".", \ + }; + +// for "OP", "OP.", "OPo", and "OPo." +#define DEFINE_SUBMNEM_OE_RC(_identifier, base) \ + const char* _identifier[4] = \ + { \ + base, \ + base ".", \ + base "o", \ + base "o.", \ + }; + +// for "OP" and "OPl" +#define DEFINE_SUBMNEM_LK(_identifier, base) \ + const char* _identifier[2] = \ + { \ + base, \ + base "l", \ + }; + +// for "OP" and "OPl" and +/- hints +#define DEFINE_SUBMNEM_LK_HINT(_identifier, base) \ + const char* _identifier[8] = \ + { \ + base, \ + base "l", \ + base, \ + base "l", \ + base "-", \ + base "l-", \ + base "+", \ + base "l+", \ + }; + +// for "OP", "OPl", "OPa", and "OPla" +#define DEFINE_SUBMNEM_AA_LK(_identifier, base) \ + const char* _identifier[4] = \ + { \ + base, \ + base "l", \ + base "a", \ + base "la", \ + }; + +// for "OP", "OPl", "OPa", "OPla" and +/- hints +#define DEFINE_SUBMNEM_AA_LK_HINT(_identifier, base) \ + const char* _identifier[16] = \ + { \ + base, \ + base "l", \ + base "a", \ + base "la", \ + base, \ + base "l", \ + base "a", \ + base "la", \ + base "-", \ + base "l-", \ + base "a-", \ + base "la-", \ + base "+", \ + base "l+", \ + base "a+", \ + base "la+" \ + }; + +#define DEFINE_SUBMNEM_ROUND2ODD(_identifier, base) \ + const char* _identifier[2] = \ + { \ + base, \ + base "o", \ + }; + +#define DEFINE_SUBMNEM_INEXACT(_identifier, base) \ + const char* _identifier[2] = \ + { \ + base, \ + base "x", \ + }; + +DEFINE_SUBMNEM_OE_RC(SubMnemADDx, "add") +DEFINE_SUBMNEM_OE_RC(SubMnemADDCx, "addc") +DEFINE_SUBMNEM_OE_RC(SubMnemADDEx, "adde") +DEFINE_SUBMNEM_OE_RC(SubMnemADDIx, "addi") +DEFINE_SUBMNEM_RC(SubMnemADDICx, "addic") +DEFINE_SUBMNEM_OE_RC(SubMnemADDMEx, "addme") +DEFINE_SUBMNEM_OE_RC(SubMnemADDZEx, "addze") +DEFINE_SUBMNEM_RC(SubMnemANDx, "and") +DEFINE_SUBMNEM_RC(SubMnemANDCx, "andc") +DEFINE_SUBMNEM_RC(SubMnemANDIx, "andi") +DEFINE_SUBMNEM_AA_LK(SubMnemBx, "b") +DEFINE_SUBMNEM_AA_LK(SubMnemBCx, "bc") +DEFINE_SUBMNEM_LK(SubMnemBCTRx, "bctr") +DEFINE_SUBMNEM_LK(SubMnemBCCTRx, "bcctr") +DEFINE_SUBMNEM_LK(SubMnemBCLRx, "bclr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBDZx, "bdz") +DEFINE_SUBMNEM_LK_HINT(SubMnemBDZLRx, "bdzlr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBDNZx, "bdnz") +DEFINE_SUBMNEM_LK_HINT(SubMnemBDNZLRx, "bdnzlr") +DEFINE_SUBMNEM_AA_LK(SubMnemBDNZFx, "bdnzf") +DEFINE_SUBMNEM_LK(SubMnemBDNZFLRx, "bdnzflr") +DEFINE_SUBMNEM_AA_LK(SubMnemBDNZTx, "bdnzt") +DEFINE_SUBMNEM_LK(SubMnemBDNZTLRx, "bdnztlr") +DEFINE_SUBMNEM_AA_LK(SubMnemBDZFx, "bdzf") +DEFINE_SUBMNEM_LK(SubMnemBDZFLRx, "bdzflr") +DEFINE_SUBMNEM_LK(SubMnemBDFLRx, "bdzlr") +DEFINE_SUBMNEM_AA_LK(SubMnemBDZTx, "bdzt") +DEFINE_SUBMNEM_LK(SubMnemBDZTLRx, "bdztlr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBEQx, "beq") +DEFINE_SUBMNEM_LK_HINT(SubMnemBEQCTRx, "beqctr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBEQLRx, "beqlr") +DEFINE_SUBMNEM_AA_LK(SubMnemBFx, "bf") +DEFINE_SUBMNEM_AA_LK(SubMnemBFLRx, "bflr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBGEx, "bge") +DEFINE_SUBMNEM_LK_HINT(SubMnemBGECTRx, "bgectr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBGELRx, "bgelr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBGTx, "bgt") +DEFINE_SUBMNEM_LK_HINT(SubMnemBGTCTRx, "bgtctr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBGTLRx, "bgtlr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBLEx, "ble") +DEFINE_SUBMNEM_LK_HINT(SubMnemBLECTRx, "blectr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBLELRx, "blelr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBLTx, "blt") +DEFINE_SUBMNEM_LK_HINT(SubMnemBLTCTRx, "bltctr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBLTLRx, "bltlr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBLRx, "blr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBNEx, "bne") +DEFINE_SUBMNEM_LK_HINT(SubMnemBNECTRx, "bnectr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBNELRx, "bnelr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBNSx, "bns") +DEFINE_SUBMNEM_LK_HINT(SubMnemBNSCTRx, "bnsctr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBNSLRx, "bnslr") +DEFINE_SUBMNEM_AA_LK_HINT(SubMnemBSOx, "bso") +DEFINE_SUBMNEM_LK_HINT(SubMnemBSOCTRx, "bsoctr") +DEFINE_SUBMNEM_LK_HINT(SubMnemBSOLRx, "bsolr") +DEFINE_SUBMNEM_AA_LK(SubMnemBTx, "bt") +DEFINE_SUBMNEM_AA_LK(SubMnemBTLRx, "btlr") +DEFINE_SUBMNEM_RC(SubMnemCLRLDIx, "clrldi") +DEFINE_SUBMNEM_RC(SubMnemCLRLWIx, "clrlwi") +DEFINE_SUBMNEM_RC(SubMnemCLRRWIx, "clrrwi") +DEFINE_SUBMNEM_RC(SubMnemCLRRDIx, "clrrdi") +DEFINE_SUBMNEM_RC(SubMnemEXTLDIx, "extldi") +DEFINE_SUBMNEM_RC(SubMnemEXTLWIx, "extlwi") +DEFINE_SUBMNEM_RC(SubMnemEXTRWIx, "extrwi") +DEFINE_SUBMNEM_RC(SubMnemEXTRDIx, "extrdi") +DEFINE_SUBMNEM_RC(SubMnemCNTLZDx, "cntlzd") +DEFINE_SUBMNEM_RC(SubMnemCNTLZWx, "cntlzw") +DEFINE_SUBMNEM_RC(SubMnemCNTTZDx, "cnttzd") +DEFINE_SUBMNEM_RC(SubMnemCNTTZWx, "cnttzw") +DEFINE_SUBMNEM_OE_RC(SubMnemDIVDx, "divd") +DEFINE_SUBMNEM_OE_RC(SubMnemDIVDEx, "divde") +DEFINE_SUBMNEM_OE_RC(SubMnemDIVDEUx, "divdeu") +DEFINE_SUBMNEM_OE_RC(SubMnemDIVDUx, "divdu") +DEFINE_SUBMNEM_OE_RC(SubMnemDIVWx, "divw") +DEFINE_SUBMNEM_OE_RC(SubMnemDIVWEx, "divwe") +DEFINE_SUBMNEM_OE_RC(SubMnemDIVWEUx, "divweu") +DEFINE_SUBMNEM_OE_RC(SubMnemDIVWUx, "divwu") +DEFINE_SUBMNEM_RC(SubMnemEQVx, "eqv") +DEFINE_SUBMNEM_RC(SubMnemEXTSBx, "extsb") +DEFINE_SUBMNEM_RC(SubMnemEXTSHx, "extsh") +DEFINE_SUBMNEM_RC(SubMnemEXTSWx, "extsw") +DEFINE_SUBMNEM_RC(SubMnemEXTSWSLIx, "extswsli") +DEFINE_SUBMNEM_RC(SubMnemFABSx, "fabs") +DEFINE_SUBMNEM_RC(SubMnemFADDx, "fadd") +DEFINE_SUBMNEM_RC(SubMnemFADDSx, "fadds") +DEFINE_SUBMNEM_RC(SubMnemFCFIDx, "fcfid") +DEFINE_SUBMNEM_RC(SubMnemFCFIDSx, "fcfids") +DEFINE_SUBMNEM_RC(SubMnemFCFIDUx, "fcfidu") +DEFINE_SUBMNEM_RC(SubMnemFCFIDUSx, "fcfidus") +DEFINE_SUBMNEM_RC(SubMnemFCPSGNx, "fcpsgn") +DEFINE_SUBMNEM_RC(SubMnemFCTIDx, "fctid") +DEFINE_SUBMNEM_RC(SubMnemFCTIDUx, "fctidu") +DEFINE_SUBMNEM_RC(SubMnemFCTIDUZx, "fctiduz") +DEFINE_SUBMNEM_RC(SubMnemFCTIDZx, "fctidz") +DEFINE_SUBMNEM_RC(SubMnemFCTIWx, "fctiw") +DEFINE_SUBMNEM_RC(SubMnemFCTIWUx, "fctiwu") +DEFINE_SUBMNEM_RC(SubMnemFCTIWUZx, "fctiwuz") +DEFINE_SUBMNEM_RC(SubMnemFCTIWZx, "fctiwz") +DEFINE_SUBMNEM_RC(SubMnemFDIVx, "fdiv") +DEFINE_SUBMNEM_RC(SubMnemFDIVSx, "fdivs") +DEFINE_SUBMNEM_RC(SubMnemFMADDx, "fmadd") +DEFINE_SUBMNEM_RC(SubMnemFMADDSx, "fmadds") +DEFINE_SUBMNEM_RC(SubMnemFMRx, "fmr") +DEFINE_SUBMNEM_RC(SubMnemFMSUBx, "fmsub") +DEFINE_SUBMNEM_RC(SubMnemFMSUBSx, "fmsubs") +DEFINE_SUBMNEM_RC(SubMnemFMULx, "fmul") +DEFINE_SUBMNEM_RC(SubMnemFMULSx, "fmuls") +DEFINE_SUBMNEM_RC(SubMnemFNABSx, "fnabs") +DEFINE_SUBMNEM_RC(SubMnemFNEGx, "fneg") +DEFINE_SUBMNEM_RC(SubMnemFNMADDx, "fnmadd") +DEFINE_SUBMNEM_RC(SubMnemFNMADDSx, "fnmadds") +DEFINE_SUBMNEM_RC(SubMnemFNMSUBx, "fnmsub") +DEFINE_SUBMNEM_RC(SubMnemFNMSUBSx, "fnmsubs") +DEFINE_SUBMNEM_RC(SubMnemFREx, "fre") +DEFINE_SUBMNEM_RC(SubMnemFRESx, "fres") +DEFINE_SUBMNEM_RC(SubMnemFRIMx, "frim") +DEFINE_SUBMNEM_RC(SubMnemFRINx, "frin") +DEFINE_SUBMNEM_RC(SubMnemFRIPx, "frip") +DEFINE_SUBMNEM_RC(SubMnemFRIZx, "friz") +DEFINE_SUBMNEM_RC(SubMnemFRSPx, "frsp") +DEFINE_SUBMNEM_RC(SubMnemFRSQRTEx, "frsqrte") +DEFINE_SUBMNEM_RC(SubMnemFRSQRTESx, "frsqrtes") +DEFINE_SUBMNEM_RC(SubMnemFSELx, "fsel") +DEFINE_SUBMNEM_RC(SubMnemFSQRTx, "fsqrt") +DEFINE_SUBMNEM_RC(SubMnemFSQRTSx, "fsqrts") +DEFINE_SUBMNEM_RC(SubMnemFSUBx, "fsub") +DEFINE_SUBMNEM_RC(SubMnemFSUBSx, "fsubs") +DEFINE_SUBMNEM_RC(SubMnemMFFSx, "mffs") +DEFINE_SUBMNEM_RC(SubMnemMTFSB0x, "mtfsb0") +DEFINE_SUBMNEM_RC(SubMnemMTFSB1x, "mtfsb1") +DEFINE_SUBMNEM_RC(SubMnemMTFSFx, "mtfsf") +DEFINE_SUBMNEM_RC(SubMnemMTFSFIx, "mtfsfi") +DEFINE_SUBMNEM_RC(SubMnemMRx, "mr") +DEFINE_SUBMNEM_RC(SubMnemMULHDx, "mulhd") +DEFINE_SUBMNEM_RC(SubMnemMULHDUx, "mulhdu") +DEFINE_SUBMNEM_RC(SubMnemMULHWx, "mulhw") +DEFINE_SUBMNEM_RC(SubMnemMULHWUx, "mulhwu") +DEFINE_SUBMNEM_OE_RC(SubMnemMULLDx, "mulld") +DEFINE_SUBMNEM_OE_RC(SubMnemMULLWx, "mullw") +DEFINE_SUBMNEM_RC(SubMnemNANDx, "nand") +DEFINE_SUBMNEM_OE_RC(SubMnemNEGx, "neg") +DEFINE_SUBMNEM_RC(SubMnemNORx, "nor") +DEFINE_SUBMNEM_RC(SubMnemORx, "or") +DEFINE_SUBMNEM_RC(SubMnemORIx, "ori") +DEFINE_SUBMNEM_RC(SubMnemORCx, "orc") +DEFINE_SUBMNEM_RC(SubMnemRLDICLx, "rldicl") +DEFINE_SUBMNEM_RC(SubMnemRLDICRx, "rldicr") +DEFINE_SUBMNEM_RC(SubMnemRLDICx, "rldic") +DEFINE_SUBMNEM_RC(SubMnemRLDIMIx, "rldimi") +DEFINE_SUBMNEM_RC(SubMnemRLDCLx, "rldcl") +DEFINE_SUBMNEM_RC(SubMnemRLDCRx, "rldcr") +DEFINE_SUBMNEM_RC(SubMnemRLWIMIx, "rlwimi") +DEFINE_SUBMNEM_RC(SubMnemRLWINMx, "rlwinm") +DEFINE_SUBMNEM_RC(SubMnemRLWNMx, "rlwnm") +DEFINE_SUBMNEM_RC(SubMnemROTLDx, "rotld") +DEFINE_SUBMNEM_RC(SubMnemROTLDIx, "rotldi") +DEFINE_SUBMNEM_RC(SubMnemROTLWx, "rotlw") +DEFINE_SUBMNEM_RC(SubMnemROTLWIx, "rotlwi") +DEFINE_SUBMNEM_RC(SubMnemROTRDIx, "rotrdi") +DEFINE_SUBMNEM_RC(SubMnemROTRWIx, "rotrwi") +DEFINE_SUBMNEM_RC(SubMnemSLDx, "sld") +DEFINE_SUBMNEM_RC(SubMnemSLDIx, "sldi") +DEFINE_SUBMNEM_RC(SubMnemSLWx, "slw") +DEFINE_SUBMNEM_RC(SubMnemSLWIx, "slwi") +DEFINE_SUBMNEM_RC(SubMnemSRADx, "srad") +DEFINE_SUBMNEM_RC(SubMnemSRADIx, "sradi") +DEFINE_SUBMNEM_RC(SubMnemSRAWx, "sraw") +DEFINE_SUBMNEM_RC(SubMnemSRAWIx, "srawi") +DEFINE_SUBMNEM_RC(SubMnemSRDx, "srd") +DEFINE_SUBMNEM_RC(SubMnemSRDIx, "srdi") +DEFINE_SUBMNEM_RC(SubMnemSRWx, "srw") +DEFINE_SUBMNEM_RC(SubMnemSRWIx, "srwi") +DEFINE_SUBMNEM_OE_RC(SubMnemSUBFx, "subf") +DEFINE_SUBMNEM_OE_RC(SubMnemSUBFCx, "subfc") +DEFINE_SUBMNEM_OE_RC(SubMnemSUBFEx, "subfe") +DEFINE_SUBMNEM_OE_RC(SubMnemSUBFICx, "subfic") +DEFINE_SUBMNEM_OE_RC(SubMnemSUBFMEx, "subfme") +DEFINE_SUBMNEM_OE_RC(SubMnemSUBFZEx, "subfze") +DEFINE_SUBMNEM_RC(SubMnemXORx, "xor") +DEFINE_SUBMNEM_RC(SubMnemXORIx, "xori") + +// ALTIVEC MNEMONICS +DEFINE_SUBMNEM_RC(SubMnemVCMPBFPx, "vcmpbfp"); +DEFINE_SUBMNEM_RC(SubMnemVCMPEQFPx, "vcmpeqfp"); +DEFINE_SUBMNEM_RC(SubMnemVCMPEQUBx, "vcmpequb"); +DEFINE_SUBMNEM_RC(SubMnemVCMPEQUDx, "vcmpequd"); +DEFINE_SUBMNEM_RC(SubMnemVCMPEQUHx, "vcmpequh"); +DEFINE_SUBMNEM_RC(SubMnemVCMPEQUWx, "vcmpequw"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGEFPx, "vcmpgefp"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTFPx, "vcmpgtfp"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTSBx, "vcmpgtsb"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTSDx, "vcmpgtsd"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTSHx, "vcmpgtsh"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTSWx, "vcmpgtsw"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTUBx, "vcmpgtub"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTUDx, "vcmpgtud"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTUHx, "vcmpgtuh"); +DEFINE_SUBMNEM_RC(SubMnemVCMPGTUWx, "vcmpgtuw"); +DEFINE_SUBMNEM_RC(SubMnemVCMPNEBx, "vcmpneb"); +DEFINE_SUBMNEM_RC(SubMnemVCMPNEHx, "vcmpneh"); +DEFINE_SUBMNEM_RC(SubMnemVCMPNEWx, "vcmpnew"); +DEFINE_SUBMNEM_RC(SubMnemVCMPNEZBx, "vcmpnezb"); +DEFINE_SUBMNEM_RC(SubMnemVCMPNEZHx, "vcmpnezh"); +DEFINE_SUBMNEM_RC(SubMnemVCMPNEZWx, "vcmpnezw"); + +// VSX MNEMONICS +DEFINE_SUBMNEM_RC(SubMnemXVCMPEQDPx, "xvcmpeqdp"); +DEFINE_SUBMNEM_RC(SubMnemXVCMPEQSPx, "xvcmpeqsp"); +DEFINE_SUBMNEM_RC(SubMnemXVCMPGEDPx, "xvcmpgedp"); +DEFINE_SUBMNEM_RC(SubMnemXVCMPGESPx, "xvcmpgesp"); +DEFINE_SUBMNEM_RC(SubMnemXVCMPGTDPx, "xvcmpgtdp"); +DEFINE_SUBMNEM_RC(SubMnemXVCMPGTSPx, "xvcmpgtsp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSADDQPx, "xsaddqp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSCVQPDPx, "xscvqpdp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSDIVQPx, "xsdivqp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSMADDQPx, "xsmaddqp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSMULQPx, "xsmulqp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSMSUBQPx, "xsmsubqp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSNMADDQPx, "xsnmaddqp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSNMSUBQPx, "xsnmsubqp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSSQRTQPx, "xssqrtqp"); +DEFINE_SUBMNEM_ROUND2ODD(SubMnemXSSUBQPx, "xssubqp"); +DEFINE_SUBMNEM_INEXACT(SubMnemXSRQPIx, "xsrqpi"); + +// PAIREDSINGLE MNEMONICS +DEFINE_SUBMNEM_RC(SubMnemPS_ABSx, "ps_abs"); +DEFINE_SUBMNEM_RC(SubMnemPS_ADDx, "ps_add"); +DEFINE_SUBMNEM_RC(SubMnemPS_DIVx, "ps_div"); +DEFINE_SUBMNEM_RC(SubMnemPS_MADDx, "ps_madd"); +DEFINE_SUBMNEM_RC(SubMnemPS_MADDS0x, "ps_madds0"); +DEFINE_SUBMNEM_RC(SubMnemPS_MADDS1x, "ps_madds1"); +DEFINE_SUBMNEM_RC(SubMnemPS_MERGE00x, "ps_merge00"); +DEFINE_SUBMNEM_RC(SubMnemPS_MERGE01x, "ps_merge01"); +DEFINE_SUBMNEM_RC(SubMnemPS_MERGE10x, "ps_merge10"); +DEFINE_SUBMNEM_RC(SubMnemPS_MERGE11x, "ps_merge11"); +DEFINE_SUBMNEM_RC(SubMnemPS_MRx, "ps_mr"); +DEFINE_SUBMNEM_RC(SubMnemPS_MSUBx, "ps_msub"); +DEFINE_SUBMNEM_RC(SubMnemPS_MULx, "ps_mul"); +DEFINE_SUBMNEM_RC(SubMnemPS_MULS0x, "ps_muls0"); +DEFINE_SUBMNEM_RC(SubMnemPS_MULS1x, "ps_muls1"); +DEFINE_SUBMNEM_RC(SubMnemPS_NABSx, "ps_nabs"); +DEFINE_SUBMNEM_RC(SubMnemPS_NEGx, "ps_neg"); +DEFINE_SUBMNEM_RC(SubMnemPS_NMADDx, "ps_nmadd"); +DEFINE_SUBMNEM_RC(SubMnemPS_NMSUBx, "ps_nmsub"); +DEFINE_SUBMNEM_RC(SubMnemPS_RESx, "ps_res"); +DEFINE_SUBMNEM_RC(SubMnemPS_RSQRTEx, "ps_rsqrte"); +DEFINE_SUBMNEM_RC(SubMnemPS_SELx, "ps_sel"); +DEFINE_SUBMNEM_RC(SubMnemPS_SUBx, "ps_sub"); +DEFINE_SUBMNEM_RC(SubMnemPS_SUM0x, "ps_sum0"); +DEFINE_SUBMNEM_RC(SubMnemPS_SUM1x, "ps_sum1"); + +// VLE MNEMONICS +DEFINE_SUBMNEM_RC(SubMnemVle32ADDIx, "e_addi"); +DEFINE_SUBMNEM_RC(SubMnemVle32ADDICx, "e_addic"); +DEFINE_SUBMNEM_RC(SubMnemVle32ANDIx, "e_andi"); +DEFINE_SUBMNEM_LK(SubMnemVle32Bx, "e_b"); +DEFINE_SUBMNEM_LK(SubMnemVle32BCx, "e_bc"); +DEFINE_SUBMNEM_LK(SubMnemVle32BDZx, "e_bdz"); +DEFINE_SUBMNEM_LK(SubMnemVle32BDNZx, "e_bdnz"); +DEFINE_SUBMNEM_LK(SubMnemVle32BEQx, "e_beq"); +DEFINE_SUBMNEM_LK(SubMnemVle32BGEx, "e_bge"); +DEFINE_SUBMNEM_LK(SubMnemVle32BGTx, "e_bgt"); +DEFINE_SUBMNEM_LK(SubMnemVle32BNEx, "e_bne"); +DEFINE_SUBMNEM_LK(SubMnemVle32BNSx, "e_bns"); +DEFINE_SUBMNEM_LK(SubMnemVle32BLEx, "e_ble"); +DEFINE_SUBMNEM_LK(SubMnemVle32BLTx, "e_blt"); +DEFINE_SUBMNEM_LK(SubMnemVle32BSOx, "e_bso"); +DEFINE_SUBMNEM_RC(SubMnemVle32ORIx, "e_ori"); +DEFINE_SUBMNEM_RC(SubMnemVle32RLWx, "e_rlw"); +DEFINE_SUBMNEM_RC(SubMnemVle32RLWIx, "e_rlwi"); +DEFINE_SUBMNEM_RC(SubMnemVle32SLWIx, "e_slwi"); +DEFINE_SUBMNEM_RC(SubMnemVle32SRWIx, "e_srwi"); +DEFINE_SUBMNEM_RC(SubMnemVle32SUBFICx, "e_subfic"); +DEFINE_SUBMNEM_RC(SubMnemVle32XORIx, "e_xori"); + +DEFINE_SUBMNEM_RC(SubMnemVle16ANDx, "se_and"); +DEFINE_SUBMNEM_LK(SubMnemVle16Bx, "se_b"); +DEFINE_SUBMNEM_LK(SubMnemVle16BCTRx, "se_bctr"); +DEFINE_SUBMNEM_LK(SubMnemVle16BLRx, "se_blr"); +DEFINE_SUBMNEM_RC(SubMnemVle16SUBIx, "se_subi"); + +static const char* RcMnemonic(const Instruction* instruction, const char* names[2]) +{ + return names[instruction->flags.rc]; +} + +static const char* OeRcMnemonic(const Instruction* instruction, const char* names[4]) +{ + return names[2*instruction->flags.oe + instruction->flags.rc]; +} + +static const char* LkMnemonic(const Instruction* instruction, const char* names[2]) +{ + return names[instruction->flags.lk]; +} + +static const char* LkHintMnemonic(const Instruction* instruction, const char* names[8]) +{ + return names[2*instruction->flags.branchLikelyHint + instruction->flags.lk]; +} + +static const char* AaLkMnemonic(const Instruction* instruction, const char* names[4]) +{ + return names[2*instruction->flags.aa + instruction->flags.lk]; +} + +static const char* AaLkHintMnemonic(const Instruction* instruction, const char* names[16]) +{ + return names[4*instruction->flags.branchLikelyHint + 2*instruction->flags.aa + instruction->flags.lk]; +} + +static const char* Round2OddMnemonic(const Instruction* instruction, const char* names[2]) +{ + return names[instruction->flags.round2odd]; +} + +static const char* InexactMnemonic(const Instruction* instruction, const char* names[2]) +{ + return names[instruction->flags.inexact]; +} + +const char* GetMnemonic(const Instruction* instruction) +{ + switch (instruction->id) + { + case PPC_ID_ADDx: return OeRcMnemonic(instruction, SubMnemADDx); + case PPC_ID_ADDCx: return OeRcMnemonic(instruction, SubMnemADDCx); + case PPC_ID_ADDEx: return OeRcMnemonic(instruction, SubMnemADDEx); + case PPC_ID_ADDIx: return OeRcMnemonic(instruction, SubMnemADDIx); + case PPC_ID_ADDICx: return RcMnemonic(instruction, SubMnemADDICx); + case PPC_ID_ADDIS: return "addis"; + case PPC_ID_ADDMEx: return OeRcMnemonic(instruction, SubMnemADDMEx); + case PPC_ID_ADDPCIS: return "addpcis"; + case PPC_ID_ADDZEx: return OeRcMnemonic(instruction, SubMnemADDZEx); + case PPC_ID_ANDx: return RcMnemonic(instruction, SubMnemANDx); + case PPC_ID_ANDCx: return RcMnemonic(instruction, SubMnemANDCx); + case PPC_ID_ANDIx: return RcMnemonic(instruction, SubMnemANDIx); + case PPC_ID_ANDIS: return "andis."; + case PPC_ID_ATTN: return "attn"; + case PPC_ID_Bx: return AaLkMnemonic(instruction, SubMnemBx); + case PPC_ID_BCx: + { + uint32_t bo = instruction->operands[0].uimm; + uint32_t bi = instruction->operands[1].uimm; + + const char** mnemonics = NULL; + const char** mnemonicsHint = NULL; + + // mask away the "y" bit + switch (bo & 0x1e) + { + case 0: + mnemonics = SubMnemBDNZFx; + break; + + case 2: + mnemonics = SubMnemBDZFx; + break; + + case 4: + case 6: + switch (bi & 0x3) + { + case 0: + mnemonicsHint = SubMnemBGEx; + break; + case 1: + mnemonicsHint = SubMnemBLEx; + break; + case 2: + mnemonicsHint = SubMnemBNEx; + break; + case 3: + mnemonicsHint = SubMnemBNSx; + break; + + // should be unreachable + default: + return NULL; + } + + break; + + case 8: + mnemonics = SubMnemBDNZTx; + break; + + case 10: + mnemonics = SubMnemBDZTx; + break; + + case 12: + case 14: + switch (bi & 0x3) + { + case 0: + mnemonicsHint = SubMnemBLTx; + break; + + case 1: + mnemonicsHint = SubMnemBGTx; + break; + + case 2: + mnemonicsHint = SubMnemBEQx; + break; + + case 3: + mnemonicsHint = SubMnemBSOx; + break; + + // should be unreachable + default: + return NULL; + } + break; + + // technically these aren't terribly well defined + // when BI != 0, since these BOs don't involve + // a condition bit to test in BI to test against + case 16: + case 24: + mnemonicsHint = SubMnemBDNZx; + break; + + // these represent "branch always" in the BO field, so it's + // not super clear why these disassemble to bdnz + case 20: + case 28: + mnemonicsHint = SubMnemBDNZx; + break; + + case 18: + case 22: + case 26: + mnemonicsHint = SubMnemBDZx; + break; + + // these represent "branch always" in the BO field, so it's + // not super clear why these disassemble to bdz + case 30: + mnemonicsHint = SubMnemBDZx; + break; + + default: + mnemonics = SubMnemBCx; + } + + if (mnemonicsHint) + return AaLkHintMnemonic(instruction, mnemonicsHint); + + if (mnemonics) + return AaLkMnemonic(instruction, mnemonics); + + // should be unreachable + return NULL; + } + + case PPC_ID_BCCTRx: + { + uint32_t bo = instruction->operands[0].uimm; + uint32_t bi = instruction->operands[1].uimm; + + // mask away the "y" bit + switch (bo & 0x1e) + { + case 4: + case 6: + switch (bi & 0x3) + { + case 0: return LkHintMnemonic(instruction, SubMnemBGECTRx); + case 1: return LkHintMnemonic(instruction, SubMnemBLECTRx); + case 2: return LkHintMnemonic(instruction, SubMnemBNECTRx); + case 3: return LkHintMnemonic(instruction, SubMnemBNSCTRx); + + // should be unreachable + default: return NULL; + } + + break; + + case 12: + case 14: + switch (bi & 0x3) + { + case 0: return LkHintMnemonic(instruction, SubMnemBLTCTRx); + case 1: return LkHintMnemonic(instruction, SubMnemBGTCTRx); + case 2: return LkHintMnemonic(instruction, SubMnemBEQCTRx); + case 3: return LkHintMnemonic(instruction, SubMnemBSOCTRx); + + // should be unreachable + default: return NULL; + } + + break; + + case 20: + return LkMnemonic(instruction, SubMnemBCTRx); + + default: + return LkMnemonic(instruction, SubMnemBCCTRx); + } + } + + case PPC_ID_BCLRx: + { + uint32_t bo = instruction->operands[0].uimm; + uint32_t bi = instruction->operands[1].uimm; + + // mask away the "y" bit + switch (bo & 0x1e) + { + case 0: + return LkMnemonic(instruction, SubMnemBDNZFLRx); + + case 2: + return LkMnemonic(instruction, SubMnemBDZFLRx); + + case 4: + case 6: + switch (bi & 0x3) + { + case 0: return LkHintMnemonic(instruction, SubMnemBGELRx); + case 1: return LkHintMnemonic(instruction, SubMnemBLELRx); + case 2: return LkHintMnemonic(instruction, SubMnemBNELRx); + case 3: return LkHintMnemonic(instruction, SubMnemBNSLRx); + + // should be unreachable + default: return NULL; + } + + case 8: + return LkMnemonic(instruction, SubMnemBDNZTLRx); + + case 10: + return LkMnemonic(instruction, SubMnemBDZTLRx); + + case 12: + case 14: + switch (bi & 0x3) + { + case 0: return LkHintMnemonic(instruction, SubMnemBLTLRx); + case 1: return LkHintMnemonic(instruction, SubMnemBGTLRx); + case 2: return LkHintMnemonic(instruction, SubMnemBEQLRx); + case 3: return LkHintMnemonic(instruction, SubMnemBSOLRx); + + // should be unreachable + default: return NULL; + } + + // technically these aren't terribly well defined + // when BI != 0, since these BOs don't involve + // a condition bit to test in BI to test against + case 16: + case 24: + return LkHintMnemonic(instruction, SubMnemBDNZLRx); + + case 18: + case 26: + return LkHintMnemonic(instruction, SubMnemBDZLRx); + + case 20: + return LkHintMnemonic(instruction, SubMnemBLRx); + + default: + return LkMnemonic(instruction, SubMnemBCLRx); + } + } + + case PPC_ID_BPERMD: return "bpermd"; + case PPC_ID_CLRBHRB: return "clrbhrb"; + case PPC_ID_CLRLDIx: return RcMnemonic(instruction, SubMnemCLRLDIx); + case PPC_ID_CLRRDIx: return RcMnemonic(instruction, SubMnemCLRRDIx); + case PPC_ID_CLRLWIx: return RcMnemonic(instruction, SubMnemCLRLWIx); + case PPC_ID_CLRRWIx: return RcMnemonic(instruction, SubMnemCLRRWIx); + case PPC_ID_CMPB: return "cmpb"; + case PPC_ID_CMPD: return "cmpd"; + case PPC_ID_CMPDI: return "cmpdi"; + case PPC_ID_CMPEQB: return "cmpeqb"; + case PPC_ID_CMPRB: return "cmprb"; + case PPC_ID_CMPW: return "cmpw"; + case PPC_ID_CMPWI: return "cmpwi"; + case PPC_ID_CMPLD: return "cmpld"; + case PPC_ID_CMPLDI: return "cmpldi"; + case PPC_ID_CMPLW: return "cmplw"; + case PPC_ID_CMPLWI: return "cmplwi"; + case PPC_ID_CNTLZDx: return RcMnemonic(instruction, SubMnemCNTLZDx); + case PPC_ID_CNTLZWx: return RcMnemonic(instruction, SubMnemCNTLZWx); + case PPC_ID_CNTTZDx: return RcMnemonic(instruction, SubMnemCNTTZDx); + case PPC_ID_CNTTZWx: return RcMnemonic(instruction, SubMnemCNTTZWx); + case PPC_ID_COPY: return "copy"; + case PPC_ID_CP_ABORT: return "cp_abort"; + case PPC_ID_CRAND: return "crand"; + case PPC_ID_CRANDC: return "crandc"; + case PPC_ID_CRCLR: return "crclr"; + case PPC_ID_CREQV: return "creqv"; + case PPC_ID_CRMOVE: return "crmove"; + case PPC_ID_CRNAND: return "crnand"; + case PPC_ID_CRNOR: return "crnor"; + case PPC_ID_CRNOT: return "crnot"; + case PPC_ID_CROR: return "cror"; + case PPC_ID_CRORC: return "crorc"; + case PPC_ID_CRSET: return "crset"; + case PPC_ID_CRXOR: return "crxor"; + case PPC_ID_DARN: return "darn"; + case PPC_ID_DCBA: return "dcba"; + case PPC_ID_DCBF: return "dcbf"; + case PPC_ID_DCBFEP: return "dcbfep"; + case PPC_ID_DCBFL: return "dcbfl"; + case PPC_ID_DCBFLP: return "dcbflp"; + case PPC_ID_DCBI: return "dcbi"; + case PPC_ID_DCBST: return "dcbst"; + case PPC_ID_DCBSTEP: return "dcbstep"; + case PPC_ID_DCBT: return "dcbt"; + case PPC_ID_DCBTT: return "dcbtt"; + case PPC_ID_DCBTEP: return "dcbtep"; + case PPC_ID_DCBTST: return "dcbtst"; + case PPC_ID_DCBTSTEP: return "dcbtstep"; + case PPC_ID_DCBTSTT: return "dcbtstt"; + case PPC_ID_DCBZ: return "dcbz"; + case PPC_ID_DCBZEP: return "dcbzep"; + case PPC_ID_DCBZL: return "dcbzl"; + case PPC_ID_DCCCI: return "dccci"; + case PPC_ID_DCI: return "dci"; + case PPC_ID_DIVDx: return OeRcMnemonic(instruction, SubMnemDIVDx); + case PPC_ID_DIVDEx: return OeRcMnemonic(instruction, SubMnemDIVDEx); + case PPC_ID_DIVDEUx: return OeRcMnemonic(instruction, SubMnemDIVDEUx); + case PPC_ID_DIVDUx: return OeRcMnemonic(instruction, SubMnemDIVDUx); + case PPC_ID_DIVWx: return OeRcMnemonic(instruction, SubMnemDIVWx); + case PPC_ID_DIVWEx: return OeRcMnemonic(instruction, SubMnemDIVWEx); + case PPC_ID_DIVWEUx: return OeRcMnemonic(instruction, SubMnemDIVWEUx); + case PPC_ID_DIVWUx: return OeRcMnemonic(instruction, SubMnemDIVWUx); + case PPC_ID_ECIWX: return "eciwx"; + case PPC_ID_ECOWX: return "ecowx"; + case PPC_ID_EIEIO: return "eieio"; + case PPC_ID_EQVx: return RcMnemonic(instruction, SubMnemEQVx); + case PPC_ID_EXTLDIx: return RcMnemonic(instruction, SubMnemEXTLDIx); + case PPC_ID_EXTRDIx: return RcMnemonic(instruction, SubMnemEXTRDIx); + case PPC_ID_EXTLWIx: return RcMnemonic(instruction, SubMnemEXTLWIx); + case PPC_ID_EXTRWIx: return RcMnemonic(instruction, SubMnemEXTRWIx); + case PPC_ID_EXTSBx: return RcMnemonic(instruction, SubMnemEXTSBx); + case PPC_ID_EXTSHx: return RcMnemonic(instruction, SubMnemEXTSHx); + case PPC_ID_EXTSWx: return RcMnemonic(instruction, SubMnemEXTSWx); + case PPC_ID_EXTSWSLIx: return RcMnemonic(instruction, SubMnemEXTSWSLIx); + case PPC_ID_FABSx: return RcMnemonic(instruction, SubMnemFABSx); + case PPC_ID_FADDx: return RcMnemonic(instruction, SubMnemFADDx); + case PPC_ID_FADDSx: return RcMnemonic(instruction, SubMnemFADDSx); + case PPC_ID_FCFIDx: return RcMnemonic(instruction, SubMnemFCFIDx); + case PPC_ID_FCFIDSx: return RcMnemonic(instruction, SubMnemFCFIDSx); + case PPC_ID_FCFIDUx: return RcMnemonic(instruction, SubMnemFCFIDUx); + case PPC_ID_FCFIDUSx: return RcMnemonic(instruction, SubMnemFCFIDUSx); + case PPC_ID_FCMPO: return "fcmpo"; + case PPC_ID_FCMPU: return "fcmpu"; + case PPC_ID_FCPSGNx: return RcMnemonic(instruction, SubMnemFCPSGNx); + case PPC_ID_FCTIDx: return RcMnemonic(instruction, SubMnemFCTIDx); + case PPC_ID_FCTIDUx: return RcMnemonic(instruction, SubMnemFCTIDUx); + case PPC_ID_FCTIDUZx: return RcMnemonic(instruction, SubMnemFCTIDUZx); + case PPC_ID_FCTIDZx: return RcMnemonic(instruction, SubMnemFCTIDZx); + case PPC_ID_FCTIWx: return RcMnemonic(instruction, SubMnemFCTIWx); + case PPC_ID_FCTIWUx: return RcMnemonic(instruction, SubMnemFCTIWUx); + case PPC_ID_FCTIWUZx: return RcMnemonic(instruction, SubMnemFCTIWUZx); + case PPC_ID_FCTIWZx: return RcMnemonic(instruction, SubMnemFCTIWZx); + case PPC_ID_FDIVx: return RcMnemonic(instruction, SubMnemFDIVx); + case PPC_ID_FDIVSx: return RcMnemonic(instruction, SubMnemFDIVSx); + case PPC_ID_FMADDx: return RcMnemonic(instruction, SubMnemFMADDx); + case PPC_ID_FMADDSx: return RcMnemonic(instruction, SubMnemFMADDSx); + case PPC_ID_FMRx: return RcMnemonic(instruction, SubMnemFMRx); + case PPC_ID_FMSUBx: return RcMnemonic(instruction, SubMnemFMSUBx); + case PPC_ID_FMSUBSx: return RcMnemonic(instruction, SubMnemFMSUBSx); + case PPC_ID_FMULx: return RcMnemonic(instruction, SubMnemFMULx); + case PPC_ID_FMULSx: return RcMnemonic(instruction, SubMnemFMULSx); + case PPC_ID_FNABSx: return RcMnemonic(instruction, SubMnemFNABSx); + case PPC_ID_FNEGx: return RcMnemonic(instruction, SubMnemFNEGx); + case PPC_ID_FNMADDx: return RcMnemonic(instruction, SubMnemFNMADDx); + case PPC_ID_FNMADDSx: return RcMnemonic(instruction, SubMnemFNMADDSx); + case PPC_ID_FNMSUBx: return RcMnemonic(instruction, SubMnemFNMSUBx); + case PPC_ID_FNMSUBSx: return RcMnemonic(instruction, SubMnemFNMSUBSx); + case PPC_ID_FREx: return RcMnemonic(instruction, SubMnemFREx); + case PPC_ID_FRESx: return RcMnemonic(instruction, SubMnemFRESx); + case PPC_ID_FRIMx: return RcMnemonic(instruction, SubMnemFRIMx); + case PPC_ID_FRINx: return RcMnemonic(instruction, SubMnemFRINx); + case PPC_ID_FRIPx: return RcMnemonic(instruction, SubMnemFRIPx); + case PPC_ID_FRIZx: return RcMnemonic(instruction, SubMnemFRIZx); + case PPC_ID_FRSPx: return RcMnemonic(instruction, SubMnemFRSPx); + case PPC_ID_FRSQRTEx: return RcMnemonic(instruction, SubMnemFRSQRTEx); + case PPC_ID_FRSQRTESx: return RcMnemonic(instruction, SubMnemFRSQRTESx); + case PPC_ID_FSELx: return RcMnemonic(instruction, SubMnemFSELx); + case PPC_ID_FSQRTx: return RcMnemonic(instruction, SubMnemFSQRTx); + case PPC_ID_FSQRTSx: return RcMnemonic(instruction, SubMnemFSQRTSx); + case PPC_ID_FSUBx: return RcMnemonic(instruction, SubMnemFSUBx); + case PPC_ID_FSUBSx: return RcMnemonic(instruction, SubMnemFSUBSx); + case PPC_ID_FTDIV: return "ftdiv"; + case PPC_ID_FTSQRT: return "ftsqrt"; + case PPC_ID_HRFID: return "hrfid"; + case PPC_ID_ICBI: return "icbi"; + case PPC_ID_ICBIEP: return "icbiep"; + case PPC_ID_ICBLC: return "icblc"; + case PPC_ID_ICBLQ: return "icblq."; + case PPC_ID_ICBT: return "icbt"; + case PPC_ID_ICBTLS: return "icbtls"; + case PPC_ID_ICCCI: return "iccci"; + case PPC_ID_ICI: return "ici"; + case PPC_ID_ISEL: return "isel"; + case PPC_ID_ISYNC: return "isync"; + case PPC_ID_LBARX: return "lbarx"; + case PPC_ID_LBEPX: return "lbepx"; + case PPC_ID_LBZ: return "lbz"; + case PPC_ID_LBZCIX: return "lbzcix"; + case PPC_ID_LBZU: return "lbzu"; + case PPC_ID_LBZUX: return "lbzux"; + case PPC_ID_LBZX: return "lbzx"; + case PPC_ID_LDARX: return "ldarx"; + case PPC_ID_LDAT: return "ldat"; + case PPC_ID_LDBRX: return "ldbrx"; + case PPC_ID_LDCIX: return "ldcix"; + case PPC_ID_LD: return "ld"; + case PPC_ID_LDU: return "ldu"; + case PPC_ID_LDUX: return "ldux"; + case PPC_ID_LDX: return "ldx"; + case PPC_ID_LFD: return "lfd"; + case PPC_ID_LFDEPX: return "lfdepx"; + case PPC_ID_LFDU: return "lfdu"; + case PPC_ID_LFDUX: return "lfdux"; + case PPC_ID_LFDX: return "lfdx"; + case PPC_ID_LFIWAX: return "lfiwax"; + case PPC_ID_LFIWZX: return "lfiwzx"; + case PPC_ID_LFS: return "lfs"; + case PPC_ID_LFSU: return "lfsu"; + case PPC_ID_LFSUX: return "lfsux"; + case PPC_ID_LFSX: return "lfsx"; + case PPC_ID_LHA: return "lha"; + case PPC_ID_LHARX: return "lharx"; + case PPC_ID_LHAU: return "lhau"; + case PPC_ID_LHAUX: return "lhaux"; + case PPC_ID_LHAX: return "lhax"; + case PPC_ID_LHBRX: return "lhbrx"; + case PPC_ID_LHEPX: return "lhepx"; + case PPC_ID_LHZ: return "lhz"; + case PPC_ID_LHZCIX: return "lhzcix"; + case PPC_ID_LHZU: return "lhzu"; + case PPC_ID_LHZUX: return "lhzux"; + case PPC_ID_LHZX: return "lhzx"; + case PPC_ID_LI: return "li"; + case PPC_ID_LIS: return "lis"; + case PPC_ID_LMW: return "lmw"; + case PPC_ID_LNIA: return "lnia"; + case PPC_ID_LSWI: return "lswi"; + case PPC_ID_LSWX: return "lswx"; + case PPC_ID_LWA: return "lwa"; + case PPC_ID_LWAT: return "lwat"; + case PPC_ID_LWAX: return "lwax"; + case PPC_ID_LWARX: return "lwarx"; + case PPC_ID_LWAUX: return "lwaux"; + case PPC_ID_LWBRX: return "lwbrx"; + case PPC_ID_LWEPX: return "lwepx"; + case PPC_ID_LWSYNC: return "lwsync"; + case PPC_ID_LWZ: return "lwz"; + case PPC_ID_LWZCIX: return "lwzcix"; + case PPC_ID_LWZU: return "lwzu"; + case PPC_ID_LWZUX: return "lwzux"; + case PPC_ID_LWZX: return "lwzx"; + case PPC_ID_MBAR: return "mbar"; + case PPC_ID_MCRF: return "mcrf"; + case PPC_ID_MCRFS: return "mcrfs"; + case PPC_ID_MCRXR: return "mcrxr"; + case PPC_ID_MCRXRX: return "mcrxrx"; + case PPC_ID_MFBHRBE: return "mfbhrbe"; + case PPC_ID_MFBR0: return "mfbr0"; + case PPC_ID_MFBR1: return "mfbr1"; + case PPC_ID_MFBR2: return "mfbr2"; + case PPC_ID_MFBR3: return "mfbr3"; + case PPC_ID_MFBR4: return "mfbr4"; + case PPC_ID_MFBR5: return "mfbr5"; + case PPC_ID_MFBR6: return "mfbr6"; + case PPC_ID_MFBR7: return "mfbr7"; + case PPC_ID_MFCR: return "mfcr"; + case PPC_ID_MFCTR: return "mfctr"; + case PPC_ID_MFDCR: return "mfdcr"; + case PPC_ID_MFDCRUX: return "mfdcrux"; + case PPC_ID_MFDCRX: return "mfdcrx"; + case PPC_ID_MFFSx: return RcMnemonic(instruction, SubMnemMFFSx); + case PPC_ID_MFFSCDRN: return "mffscdrn"; + case PPC_ID_MFFSCDRNI: return "mffscdrni"; + case PPC_ID_MFFSCE: return "mffsce"; + case PPC_ID_MFFSCRN: return "mffscrn"; + case PPC_ID_MFFSCRNI: return "mffscrni"; + case PPC_ID_MFFSL: return "mffsl"; + case PPC_ID_MFLR: return "mflr"; + case PPC_ID_MFMSR: return "mfmsr"; + case PPC_ID_MFOCRF: return "mfocrf"; + case PPC_ID_MFPMR: return "mfpmr"; + case PPC_ID_MFSPR: return "mfspr"; + case PPC_ID_MFSR: return "mfsr"; + case PPC_ID_MFSRIN: return "mfsrin"; + case PPC_ID_MFTB: return "mftb"; + case PPC_ID_MFTBU: return "mftbu"; + case PPC_ID_MFXER: return "mfxer"; + case PPC_ID_MRx: return RcMnemonic(instruction, SubMnemMRx); + case PPC_ID_MSGSYNC: return "msgsync"; + case PPC_ID_MTAMR: return "mtamr"; + case PPC_ID_MTBR0: return "mtbr0"; + case PPC_ID_MTBR1: return "mtbr1"; + case PPC_ID_MTBR2: return "mtbr2"; + case PPC_ID_MTBR3: return "mtbr3"; + case PPC_ID_MTBR4: return "mtbr4"; + case PPC_ID_MTBR5: return "mtbr5"; + case PPC_ID_MTBR6: return "mtbr6"; + case PPC_ID_MTBR7: return "mtbr7"; + case PPC_ID_MTCRF: return "mtcrf"; + case PPC_ID_MTCTR: return "mtctr"; + case PPC_ID_MTDCR: return "mtdcr"; + case PPC_ID_MTDCRUX: return "mtdcrux"; + case PPC_ID_MTDCRX: return "mtdcrx"; + case PPC_ID_MTFSB0x: return RcMnemonic(instruction, SubMnemMTFSB0x); + case PPC_ID_MTFSB1x: return RcMnemonic(instruction, SubMnemMTFSB1x); + case PPC_ID_MTFSFx: return RcMnemonic(instruction, SubMnemMTFSFx); + case PPC_ID_MTFSFIx: return RcMnemonic(instruction, SubMnemMTFSFIx); + case PPC_ID_MODSD: return "modsd"; + case PPC_ID_MODSW: return "modsw"; + case PPC_ID_MODUD: return "modud"; + case PPC_ID_MODUW: return "moduw"; + case PPC_ID_MTLR: return "mtlr"; + case PPC_ID_MTMSR: return "mtmsr"; + case PPC_ID_MTMSRD: return "mtmsrd"; + case PPC_ID_MTOCRF: return "mtocrf"; + case PPC_ID_MTPMR: return "mtpmr"; + case PPC_ID_MTSPR: return "mtspr"; + case PPC_ID_MTSR: return "mtsr"; + case PPC_ID_MTSRIN: return "mtsrin"; + case PPC_ID_MTXER: return "mtxer"; + case PPC_ID_MULHDx: return RcMnemonic(instruction, SubMnemMULHDx); + case PPC_ID_MULHDUx: return RcMnemonic(instruction, SubMnemMULHDUx); + case PPC_ID_MULHWx: return RcMnemonic(instruction, SubMnemMULHWx); + case PPC_ID_MULHWUx: return RcMnemonic(instruction, SubMnemMULHWUx); + case PPC_ID_MULLI: return "mulli"; + case PPC_ID_MULLDx: return OeRcMnemonic(instruction, SubMnemMULLDx); + case PPC_ID_MULLWx: return OeRcMnemonic(instruction, SubMnemMULLWx); + case PPC_ID_NANDx: return RcMnemonic(instruction, SubMnemNANDx); + case PPC_ID_NAP: return "nap"; + case PPC_ID_NEGx: return OeRcMnemonic(instruction, SubMnemNEGx); + case PPC_ID_NOP: return "nop"; + case PPC_ID_NORx: return RcMnemonic(instruction, SubMnemNORx); + case PPC_ID_ORx: return RcMnemonic(instruction, SubMnemORx); + case PPC_ID_ORCx: return RcMnemonic(instruction, SubMnemORCx); + case PPC_ID_ORIx: return RcMnemonic(instruction, SubMnemORIx); + case PPC_ID_ORIS: return "oris"; + case PPC_ID_PASTE: return "paste."; + case PPC_ID_POPCNTB: return "popcntb"; + case PPC_ID_POPCNTD: return "popcntd"; + case PPC_ID_POPCNTW: return "popcntw"; + case PPC_ID_PTESYNC: return "ptesync"; + case PPC_ID_RFCI: return "rfci"; + case PPC_ID_RFDI: return "rfdi"; + case PPC_ID_RFEBB: return "rfebb"; + case PPC_ID_RFI: return "rfi"; + case PPC_ID_RFID: return "rfid"; + case PPC_ID_RFMCI: return "rfmci"; + case PPC_ID_RLDICLx: return RcMnemonic(instruction, SubMnemRLDICLx); + case PPC_ID_RLDICRx: return RcMnemonic(instruction, SubMnemRLDICRx); + case PPC_ID_RLDICx: return RcMnemonic(instruction, SubMnemRLDICx); + case PPC_ID_RLDIMIx: return RcMnemonic(instruction, SubMnemRLDIMIx); + case PPC_ID_RLDCLx: return RcMnemonic(instruction, SubMnemRLDCLx); + case PPC_ID_RLDCRx: return RcMnemonic(instruction, SubMnemRLDCRx); + case PPC_ID_RLWIMIx: return RcMnemonic(instruction, SubMnemRLWIMIx); + case PPC_ID_RLWINMx: return RcMnemonic(instruction, SubMnemRLWINMx); + case PPC_ID_RLWNMx: return RcMnemonic(instruction, SubMnemRLWNMx); + case PPC_ID_ROTLDx: return RcMnemonic(instruction, SubMnemROTLDx); + case PPC_ID_ROTLDIx: return RcMnemonic(instruction, SubMnemROTLDIx); + case PPC_ID_ROTLWx: return RcMnemonic(instruction, SubMnemROTLWx); + case PPC_ID_ROTLWIx: return RcMnemonic(instruction, SubMnemROTLWIx); + case PPC_ID_ROTRDIx: return RcMnemonic(instruction, SubMnemROTRDIx); + case PPC_ID_ROTRWIx: return RcMnemonic(instruction, SubMnemROTRWIx); + case PPC_ID_SC: return "sc"; + case PPC_ID_SETB: return "setb"; + case PPC_ID_SLBIA: return "slbia"; + case PPC_ID_SLBIE: return "slbie"; + case PPC_ID_SLBIEG: return "slbieg"; + case PPC_ID_SLBMFEE: return "slbmfee"; + case PPC_ID_SLBMFEV: return "slbmfev"; + case PPC_ID_SLBMTE: return "slbmte"; + case PPC_ID_SLBSYNC: return "slbsync"; + case PPC_ID_SLDx: return RcMnemonic(instruction, SubMnemSLDx); + case PPC_ID_SLDIx: return RcMnemonic(instruction, SubMnemSLDIx); + case PPC_ID_SLWx: return RcMnemonic(instruction, SubMnemSLWx); + case PPC_ID_SLWIx: return RcMnemonic(instruction, SubMnemSLWIx); + case PPC_ID_SRADx: return RcMnemonic(instruction, SubMnemSRADx); + case PPC_ID_SRADIx: return RcMnemonic(instruction, SubMnemSRADIx); + case PPC_ID_SRAWx: return RcMnemonic(instruction, SubMnemSRAWx); + case PPC_ID_SRAWIx: return RcMnemonic(instruction, SubMnemSRAWIx); + case PPC_ID_SRDx: return RcMnemonic(instruction, SubMnemSRDx); + case PPC_ID_SRDIx: return RcMnemonic(instruction, SubMnemSRDIx); + case PPC_ID_SRWx: return RcMnemonic(instruction, SubMnemSRWx); + case PPC_ID_SRWIx: return RcMnemonic(instruction, SubMnemSRWIx); + case PPC_ID_STB: return "stb"; + case PPC_ID_STBCIX: return "stbcix"; + case PPC_ID_STBCX: return "stbcx."; + case PPC_ID_STBEPX: return "stbepx"; + case PPC_ID_STBU: return "stbu"; + case PPC_ID_STBUX: return "stbux"; + case PPC_ID_STBX: return "stbx"; + case PPC_ID_STD: return "std"; + case PPC_ID_STDAT: return "stdat"; + case PPC_ID_STDBRX: return "stdbrx"; + case PPC_ID_STDCIX: return "stdcix"; + case PPC_ID_STDCX: return "stdcx."; + case PPC_ID_STDEPX: return "stdepx"; + case PPC_ID_STDU: return "stdu"; + case PPC_ID_STDUX: return "stdux"; + case PPC_ID_STDX: return "stdx"; + case PPC_ID_STFD: return "stfd"; + case PPC_ID_STFDEPX: return "stfdepx"; + case PPC_ID_STFDU: return "stfdu"; + case PPC_ID_STFDUX: return "stfdux"; + case PPC_ID_STFDX: return "stfdx"; + case PPC_ID_STFIWX: return "stfiwx"; + case PPC_ID_STFS: return "stfs"; + case PPC_ID_STFSU: return "stfsu"; + case PPC_ID_STFSUX: return "stfsux"; + case PPC_ID_STFSX: return "stfsx"; + case PPC_ID_STH: return "sth"; + case PPC_ID_STHBRX: return "sthbrx"; + case PPC_ID_STHCIX: return "sthcix"; + case PPC_ID_STHCX: return "sthcx."; + case PPC_ID_STHEPX: return "sthepx"; + case PPC_ID_STHU: return "sthu"; + case PPC_ID_STHUX: return "sthux"; + case PPC_ID_STHX: return "sthx"; + case PPC_ID_STMW: return "stmw"; + case PPC_ID_STOP: return "stop"; + case PPC_ID_STSWI: return "stswi"; + case PPC_ID_STSWX: return "stswx"; + case PPC_ID_STW: return "stw"; + case PPC_ID_STWAT: return "stwat"; + case PPC_ID_STWBRX: return "stwbrx"; + case PPC_ID_STWCIX: return "stwcix"; + case PPC_ID_STWCX: return "stwcx."; + case PPC_ID_STWEPX: return "stwepx"; + case PPC_ID_STWU: return "stwu"; + case PPC_ID_STWUX: return "stwux"; + case PPC_ID_STWX: return "stwx"; + case PPC_ID_SUBFx: return OeRcMnemonic(instruction, SubMnemSUBFx); + case PPC_ID_SUBFCx: return OeRcMnemonic(instruction, SubMnemSUBFCx); + case PPC_ID_SUBFEx: return OeRcMnemonic(instruction, SubMnemSUBFEx); + case PPC_ID_SUBFICx: return OeRcMnemonic(instruction, SubMnemSUBFICx); + case PPC_ID_SUBFMEx: return OeRcMnemonic(instruction, SubMnemSUBFMEx); + case PPC_ID_SUBFZEx: return OeRcMnemonic(instruction, SubMnemSUBFZEx); + case PPC_ID_SYNC: return "sync"; + case PPC_ID_TABORT: return "tabort."; + case PPC_ID_TABORTDC: return "tabortdc."; + case PPC_ID_TABORTDCI: return "tabortdci."; + case PPC_ID_TABORTWC: return "tabortwc."; + case PPC_ID_TABORTWCI: return "tabortwci."; + case PPC_ID_TBEGIN: return "tbegin."; + case PPC_ID_TCHECK: return "tcheck"; + case PPC_ID_TD: return "td"; + case PPC_ID_TDEQ: return "tdeq"; + case PPC_ID_TDEQI: return "tdeqi"; + case PPC_ID_TDGT: return "tdgt"; + case PPC_ID_TDGTI: return "tdgti"; + case PPC_ID_TDI: return "tdi"; + case PPC_ID_TDLGT: return "tdlgt"; + case PPC_ID_TDLGTI: return "tdlgti"; + case PPC_ID_TDLLT: return "tdllt"; + case PPC_ID_TDLLTI: return "tdllti"; + case PPC_ID_TDLT: return "tdlt"; + case PPC_ID_TDLTI: return "tdlti"; + case PPC_ID_TDNE: return "tdne"; + case PPC_ID_TDNEI: return "tdnei"; + case PPC_ID_TDU: return "tdu"; + case PPC_ID_TDUI: return "tdui"; + case PPC_ID_TEND: return "tend."; + case PPC_ID_TLBIA: return "tlbia"; + case PPC_ID_TLBIE: return "tlbie"; + case PPC_ID_TLBIEL: return "tlbiel"; + case PPC_ID_TLBIVAX: return "tlbivax"; + case PPC_ID_TLBLI: return "tlbli"; + case PPC_ID_TLBSX: return "tlbsx"; + case PPC_ID_TLBSYNC: return "tlbsync"; + case PPC_ID_TLBRE: return "tlbre"; + case PPC_ID_TLBRELO: return "tlbrehi"; + case PPC_ID_TLBREHI: return "tlbrelo"; + case PPC_ID_TLBWE: return "tlbwe"; + case PPC_ID_TLBWEHI: return "tlbwehi"; + case PPC_ID_TLBWELO: return "tlbwelo"; + case PPC_ID_TRAP: return "trap"; + case PPC_ID_TRECHKPT: return "trechkpt."; + case PPC_ID_TRECLAIM: return "treclaim."; + case PPC_ID_TSR: return "tsr."; + case PPC_ID_TW: return "tw"; + case PPC_ID_TWEQ: return "tweq"; + case PPC_ID_TWEQI: return "tweqi"; + case PPC_ID_TWGT: return "twgt"; + case PPC_ID_TWGTI: return "twgti"; + case PPC_ID_TWGEI: return "twgei"; + case PPC_ID_TWI: return "twi"; + case PPC_ID_TWLEI: return "twlei"; + case PPC_ID_TWLLEI: return "twllei"; + case PPC_ID_TWLGT: return "twlgt"; + case PPC_ID_TWLGTI: return "twlgti"; + case PPC_ID_TWLLT: return "twllt"; + case PPC_ID_TWLLTI: return "twllti"; + case PPC_ID_TWLT: return "twlt"; + case PPC_ID_TWLTI: return "twlti"; + case PPC_ID_TWNE: return "twne"; + case PPC_ID_TWNEI: return "twnei"; + case PPC_ID_TWU: return "twu"; + case PPC_ID_TWUI: return "twui"; + case PPC_ID_WAIT: return "wait"; + case PPC_ID_WAITIMPL: return "waitimpl"; + case PPC_ID_WAITRSV: return "waitrsv"; + case PPC_ID_WRTEE: return "wrtee"; + case PPC_ID_WRTEEI: return "wrteei"; + case PPC_ID_XNOP: return "xnop"; + case PPC_ID_XORx: return RcMnemonic(instruction, SubMnemXORx); + case PPC_ID_XORIx: return RcMnemonic(instruction, SubMnemXORIx); + case PPC_ID_XORIS: return "xoris"; + + case PPC_ID_AV_VABSDUB: return "vabsdub"; + case PPC_ID_AV_VABSDUH: return "vabsduh"; + case PPC_ID_AV_VABSDUW: return "vabsduw"; + case PPC_ID_AV_VADDUQM: return "vadduqm"; + case PPC_ID_AV_VADDCUQ: return "vaddcuq"; + case PPC_ID_AV_BCDADD: return "bcdadd."; + case PPC_ID_AV_BCDCFN: return "bcdcfn."; + case PPC_ID_AV_BCDCFSQ: return "bcdcfsq."; + case PPC_ID_AV_BCDCFZ: return "bcdcfz."; + case PPC_ID_AV_BCDCPSGN: return "bcdcpsgn."; + case PPC_ID_AV_BCDCTN: return "bcdctn."; + case PPC_ID_AV_BCDCTSQ: return "bcdctsq."; + case PPC_ID_AV_BCDCTZ: return "bcdctz."; + case PPC_ID_AV_BCDS: return "bcds."; + case PPC_ID_AV_BCDSETSGN: return "bcdsetsgn."; + case PPC_ID_AV_BCDSR: return "bcdsr."; + case PPC_ID_AV_BCDSUB: return "bcdsub."; + case PPC_ID_AV_BCDTRUNC: return "bcdtrunc."; + case PPC_ID_AV_BCDUS: return "bcdus."; + case PPC_ID_AV_BCDUTRUNC: return "bcdutrunc."; + case PPC_ID_AV_DSS: return "dss"; + case PPC_ID_AV_DSSALL: return "dssall"; + case PPC_ID_AV_DST: return "dst"; + case PPC_ID_AV_DSTST: return "dstst"; + case PPC_ID_AV_DSTSTT: return "dststt"; + case PPC_ID_AV_DSTT: return "dstt"; + case PPC_ID_AV_LVEBX: return "lvebx"; + case PPC_ID_AV_LVEHX: return "lvehx"; + case PPC_ID_AV_LVEWX: return "lvewx"; + case PPC_ID_AV_LVSL: return "lvsl"; + case PPC_ID_AV_LVSR: return "lvsr"; + case PPC_ID_AV_LVX: return "lvx"; + case PPC_ID_AV_LVXL: return "lvxl"; + case PPC_ID_AV_MADDHD: return "maddhd"; + case PPC_ID_AV_MADDHDU: return "maddhdu"; + case PPC_ID_AV_MADDLD: return "maddld"; + case PPC_ID_AV_MFVSCR: return "mfvscr"; + case PPC_ID_AV_MTVSCR: return "mtvscr"; + case PPC_ID_AV_STVEBX: return "stvebx"; + case PPC_ID_AV_STVEHX: return "stvehx"; + case PPC_ID_AV_STVEWX: return "stvewx"; + case PPC_ID_AV_STVX: return "stvx"; + case PPC_ID_AV_STVXL: return "stvxl"; + case PPC_ID_AV_VADDCUW: return "vaddcuw"; + case PPC_ID_AV_VADDECUQ: return "vaddecuq"; + case PPC_ID_AV_VADDEUQM: return "vaddeuqm"; + case PPC_ID_AV_VADDFP: return "vaddfp"; + case PPC_ID_AV_VADDSBS: return "vaddsbs"; + case PPC_ID_AV_VADDSHS: return "vaddshs"; + case PPC_ID_AV_VADDSWS: return "vaddsws"; + case PPC_ID_AV_VADDUBM: return "vaddubm"; + case PPC_ID_AV_VADDUBS: return "vaddubs"; + case PPC_ID_AV_VADDUDM: return "vaddudm"; + case PPC_ID_AV_VADDUHM: return "vadduhm"; + case PPC_ID_AV_VADDUHS: return "vadduhs"; + case PPC_ID_AV_VADDUWM: return "vadduwm"; + case PPC_ID_AV_VADDUWS: return "vadduws"; + case PPC_ID_AV_VAND: return "vand"; + case PPC_ID_AV_VANDC: return "vandc"; + case PPC_ID_AV_VAVGSB: return "vavgsb"; + case PPC_ID_AV_VAVGSH: return "vavgsh"; + case PPC_ID_AV_VAVGSW: return "vavgsw"; + case PPC_ID_AV_VAVGUB: return "vavgub"; + case PPC_ID_AV_VAVGUH: return "vavguh"; + case PPC_ID_AV_VAVGUW: return "vavguw"; + case PPC_ID_AV_VBPERMD: return "vbpermd"; + case PPC_ID_AV_VBPERMQ: return "vbpermq"; + case PPC_ID_AV_VCFSX: return "vcfsx"; + case PPC_ID_AV_VCFUX: return "vcfux"; + case PPC_ID_AV_VCIPHER: return "vcipher"; + case PPC_ID_AV_VCIPHERLAST: return "vcipherlast"; + case PPC_ID_AV_VCLZB: return "vclzb"; + case PPC_ID_AV_VCLZD: return "vclzd"; + case PPC_ID_AV_VCLZH: return "vclzh"; + case PPC_ID_AV_VCLZLSBB: return "vclzlsbb"; + case PPC_ID_AV_VCLZW: return "vclzw"; + case PPC_ID_AV_VCMPBFPx: return RcMnemonic(instruction, SubMnemVCMPBFPx); + case PPC_ID_AV_VCMPEQFPx: return RcMnemonic(instruction, SubMnemVCMPEQFPx); + case PPC_ID_AV_VCMPEQUBx: return RcMnemonic(instruction, SubMnemVCMPEQUBx); + case PPC_ID_AV_VCMPEQUDx: return RcMnemonic(instruction, SubMnemVCMPEQUDx); + case PPC_ID_AV_VCMPEQUHx: return RcMnemonic(instruction, SubMnemVCMPEQUHx); + case PPC_ID_AV_VCMPEQUWx: return RcMnemonic(instruction, SubMnemVCMPEQUWx); + case PPC_ID_AV_VCMPGEFPx: return RcMnemonic(instruction, SubMnemVCMPGEFPx); + case PPC_ID_AV_VCMPGTFPx: return RcMnemonic(instruction, SubMnemVCMPGTFPx); + case PPC_ID_AV_VCMPGTSBx: return RcMnemonic(instruction, SubMnemVCMPGTSBx); + case PPC_ID_AV_VCMPGTSDx: return RcMnemonic(instruction, SubMnemVCMPGTSDx); + case PPC_ID_AV_VCMPGTSHx: return RcMnemonic(instruction, SubMnemVCMPGTSHx); + case PPC_ID_AV_VCMPGTSWx: return RcMnemonic(instruction, SubMnemVCMPGTSWx); + case PPC_ID_AV_VCMPGTUBx: return RcMnemonic(instruction, SubMnemVCMPGTUBx); + case PPC_ID_AV_VCMPGTUDx: return RcMnemonic(instruction, SubMnemVCMPGTUDx); + case PPC_ID_AV_VCMPGTUHx: return RcMnemonic(instruction, SubMnemVCMPGTUHx); + case PPC_ID_AV_VCMPGTUWx: return RcMnemonic(instruction, SubMnemVCMPGTUWx); + case PPC_ID_AV_VCMPNEBx: return RcMnemonic(instruction, SubMnemVCMPNEBx); + case PPC_ID_AV_VCMPNEHx: return RcMnemonic(instruction, SubMnemVCMPNEHx); + case PPC_ID_AV_VCMPNEWx: return RcMnemonic(instruction, SubMnemVCMPNEWx); + case PPC_ID_AV_VCMPNEZBx: return RcMnemonic(instruction, SubMnemVCMPNEZBx); + case PPC_ID_AV_VCMPNEZHx: return RcMnemonic(instruction, SubMnemVCMPNEZHx); + case PPC_ID_AV_VCMPNEZWx: return RcMnemonic(instruction, SubMnemVCMPNEZWx); + case PPC_ID_AV_VCTSXS: return "vctsxs"; + case PPC_ID_AV_VCTUXS: return "vctuxs"; + case PPC_ID_AV_VCTZB: return "vctzb"; + case PPC_ID_AV_VCTZD: return "vctzd"; + case PPC_ID_AV_VCTZH: return "vctzh"; + case PPC_ID_AV_VCTZLSBB: return "vctzlsbb"; + case PPC_ID_AV_VCTZW: return "vctzw"; + case PPC_ID_AV_VEQV: return "veqv"; + case PPC_ID_AV_VEXPTEFP: return "vexptefp"; + case PPC_ID_AV_VEXTRACTD: return "vextractd"; + case PPC_ID_AV_VEXTRACTUB: return "vextractub"; + case PPC_ID_AV_VEXTRACTUH: return "vextractuh"; + case PPC_ID_AV_VEXTRACTUW: return "vextractuw"; + case PPC_ID_AV_VEXTSB2D: return "vextsb2d"; + case PPC_ID_AV_VEXTSB2W: return "vextsb2w"; + case PPC_ID_AV_VEXTSH2D: return "vextsh2d"; + case PPC_ID_AV_VEXTSH2W: return "vextsh2w"; + case PPC_ID_AV_VEXTSW2D: return "vextsw2d"; + case PPC_ID_AV_VEXTUBLX: return "vextublx"; + case PPC_ID_AV_VEXTUHLX: return "vextuhlx"; + case PPC_ID_AV_VEXTUWLX: return "vextuwlx"; + case PPC_ID_AV_VEXTUBRX: return "vextubrx"; + case PPC_ID_AV_VEXTUHRX: return "vextuhrx"; + case PPC_ID_AV_VEXTUWRX: return "vextuwrx"; + case PPC_ID_AV_VGBBD: return "vgbbd"; + case PPC_ID_AV_VINSERTB: return "vinsertb"; + case PPC_ID_AV_VINSERTD: return "vinsertd"; + case PPC_ID_AV_VINSERTH: return "vinserth"; + case PPC_ID_AV_VINSERTW: return "vinsertw"; + case PPC_ID_AV_VLOGEFP: return "vlogefp"; + case PPC_ID_AV_VMADDFP: return "vmaddfp"; + case PPC_ID_AV_VMAXFP: return "vmaxfp"; + case PPC_ID_AV_VMAXSB: return "vmaxsb"; + case PPC_ID_AV_VMAXSD: return "vmaxsd"; + case PPC_ID_AV_VMAXSH: return "vmaxsh"; + case PPC_ID_AV_VMAXSW: return "vmaxsw"; + case PPC_ID_AV_VMAXUB: return "vmaxub"; + case PPC_ID_AV_VMAXUD: return "vmaxud"; + case PPC_ID_AV_VMAXUH: return "vmaxuh"; + case PPC_ID_AV_VMAXUW: return "vmaxuw"; + case PPC_ID_AV_VMHADDSHS: return "vmhaddshs"; + case PPC_ID_AV_VMHRADDSHS: return "vmhraddshs"; + case PPC_ID_AV_VMINFP: return "vminfp"; + case PPC_ID_AV_VMINSB: return "vminsb"; + case PPC_ID_AV_VMINSD: return "vminsd"; + case PPC_ID_AV_VMINSH: return "vminsh"; + case PPC_ID_AV_VMINSW: return "vminsw"; + case PPC_ID_AV_VMINUB: return "vminub"; + case PPC_ID_AV_VMINUD: return "vminud"; + case PPC_ID_AV_VMINUH: return "vminuh"; + case PPC_ID_AV_VMINUW: return "vminuw"; + case PPC_ID_AV_VMLADDUHM: return "vmladduhm"; + case PPC_ID_AV_VMR: return "vmr"; + case PPC_ID_AV_VMRGEW: return "vmrgew"; + case PPC_ID_AV_VMRGHB: return "vmrghb"; + case PPC_ID_AV_VMRGHH: return "vmrghh"; + case PPC_ID_AV_VMRGHW: return "vmrghw"; + case PPC_ID_AV_VMRGLB: return "vmrglb"; + case PPC_ID_AV_VMRGLH: return "vmrglh"; + case PPC_ID_AV_VMRGLW: return "vmrglw"; + case PPC_ID_AV_VMRGOW: return "vmrgow"; + case PPC_ID_AV_VMSUMMBM: return "vmsummbm"; + case PPC_ID_AV_VMSUMSHM: return "vmsumshm"; + case PPC_ID_AV_VMSUMSHS: return "vmsumshs"; + case PPC_ID_AV_VMSUMUBM: return "vmsumubm"; + case PPC_ID_AV_VMSUMUHM: return "vmsumuhm"; + case PPC_ID_AV_VMSUMUHS: return "vmsumuhs"; + case PPC_ID_AV_VMUL10CUQ: return "vmul10cuq"; + case PPC_ID_AV_VMUL10EUQ: return "vmul10euq"; + case PPC_ID_AV_VMUL10ECUQ: return "vmul10ecuq"; + case PPC_ID_AV_VMUL10UQ: return "vmul10uq"; + case PPC_ID_AV_VMULESB: return "vmulesb"; + case PPC_ID_AV_VMULESH: return "vmulesh"; + case PPC_ID_AV_VMULESW: return "vmulesw"; + case PPC_ID_AV_VMULEUB: return "vmuleub"; + case PPC_ID_AV_VMULEUH: return "vmuleuh"; + case PPC_ID_AV_VMULEUW: return "vmuleuw"; + case PPC_ID_AV_VMULOSB: return "vmulosb"; + case PPC_ID_AV_VMULOSH: return "vmulosh"; + case PPC_ID_AV_VMULOSW: return "vmulosw"; + case PPC_ID_AV_VMULOUB: return "vmuloub"; + case PPC_ID_AV_VMULOUH: return "vmulouh"; + case PPC_ID_AV_VMULOUW: return "vmulouw"; + case PPC_ID_AV_VMULUWM: return "vmuluwm"; + case PPC_ID_AV_VNAND: return "vnand"; + case PPC_ID_AV_VNCIPHER: return "vncipher"; + case PPC_ID_AV_VNCIPHERLAST: return "vncipherlast"; + case PPC_ID_AV_VNMSUBFP: return "vnmsubfp"; + case PPC_ID_AV_VNEGD: return "vnegd"; + case PPC_ID_AV_VNEGW: return "vnegw"; + case PPC_ID_AV_VNOR: return "vnor"; + case PPC_ID_AV_VNOT: return "vnot"; + case PPC_ID_AV_VOR: return "vor"; + case PPC_ID_AV_VORC: return "vorc"; + case PPC_ID_AV_VPERM: return "vperm"; + case PPC_ID_AV_VPERMR: return "vpermr"; + case PPC_ID_AV_VPERMXOR: return "vpermxor"; + case PPC_ID_AV_VPKPX: return "vpkpx"; + case PPC_ID_AV_VPKSDSS: return "vpksdss"; + case PPC_ID_AV_VPKSDUS: return "vpksdus"; + case PPC_ID_AV_VPKSHSS: return "vpkshss"; + case PPC_ID_AV_VPKSHUS: return "vpkshus"; + case PPC_ID_AV_VPKSWSS: return "vpkswss"; + case PPC_ID_AV_VPKSWUS: return "vpkswus"; + case PPC_ID_AV_VPKUDUM: return "vpkudum"; + case PPC_ID_AV_VPKUDUS: return "vpkudus"; + case PPC_ID_AV_VPKUHUM: return "vpkuhum"; + case PPC_ID_AV_VPKUHUS: return "vpkuhus"; + case PPC_ID_AV_VPKUWUM: return "vpkuwum"; + case PPC_ID_AV_VPKUWUS: return "vpkuwus"; + case PPC_ID_AV_VPMSUMB: return "vpmsumb"; + case PPC_ID_AV_VPMSUMD: return "vpmsumd"; + case PPC_ID_AV_VPMSUMH: return "vpmsumh"; + case PPC_ID_AV_VPMSUMW: return "vpmsumw"; + case PPC_ID_AV_VPOPCNTB: return "vpopcntb"; + case PPC_ID_AV_VPOPCNTD: return "vpopcntd"; + case PPC_ID_AV_VPOPCNTH: return "vpopcnth"; + case PPC_ID_AV_VPOPCNTW: return "vpopcntw"; + case PPC_ID_AV_VPRTYBD: return "vprtybd"; + case PPC_ID_AV_VPRTYBQ: return "vprtybq"; + case PPC_ID_AV_VPRTYBW: return "vprtybw"; + case PPC_ID_AV_VREFP: return "vrefp"; + case PPC_ID_AV_VRFIM: return "vrfim"; + case PPC_ID_AV_VRFIN: return "vrfin"; + case PPC_ID_AV_VRFIP: return "vrfip"; + case PPC_ID_AV_VRFIZ: return "vrfiz"; + case PPC_ID_AV_VRLB: return "vrlb"; + case PPC_ID_AV_VRLD: return "vrld"; + case PPC_ID_AV_VRLDNM: return "vrldnm"; + case PPC_ID_AV_VRLDMI: return "vrldmi"; + case PPC_ID_AV_VRLH: return "vrlh"; + case PPC_ID_AV_VRLW: return "vrlw"; + case PPC_ID_AV_VRLWMI: return "vrlwmi"; + case PPC_ID_AV_VRLWNM: return "vrlwnm"; + case PPC_ID_AV_VRSQRTEFP: return "vrsqrtefp"; + case PPC_ID_AV_VSBOX: return "vsbox"; + case PPC_ID_AV_VSEL: return "vsel"; + case PPC_ID_AV_VSHASIGMAD: return "vshasigmad"; + case PPC_ID_AV_VSHASIGMAW: return "vshasigmaw"; + case PPC_ID_AV_VSL: return "vsl"; + case PPC_ID_AV_VSLB: return "vslb"; + case PPC_ID_AV_VSLD: return "vsld"; + case PPC_ID_AV_VSLDOI: return "vsldoi"; + case PPC_ID_AV_VSLH: return "vslh"; + case PPC_ID_AV_VSLO: return "vslo"; + case PPC_ID_AV_VSLV: return "vslv"; + case PPC_ID_AV_VSLW: return "vslw"; + case PPC_ID_AV_VSPLTB: return "vspltb"; + case PPC_ID_AV_VSPLTH: return "vsplth"; + case PPC_ID_AV_VSPLTISB: return "vspltisb"; + case PPC_ID_AV_VSPLTISH: return "vspltish"; + case PPC_ID_AV_VSPLTISW: return "vspltisw"; + case PPC_ID_AV_VSPLTW: return "vspltw"; + case PPC_ID_AV_VSR: return "vsr"; + case PPC_ID_AV_VSRAB: return "vsrab"; + case PPC_ID_AV_VSRAD: return "vsrad"; + case PPC_ID_AV_VSRAH: return "vsrah"; + case PPC_ID_AV_VSRAW: return "vsraw"; + case PPC_ID_AV_VSRB: return "vsrb"; + case PPC_ID_AV_VSRD: return "vsrd"; + case PPC_ID_AV_VSRH: return "vsrh"; + case PPC_ID_AV_VSRO: return "vsro"; + case PPC_ID_AV_VSRV: return "vsrv"; + case PPC_ID_AV_VSRW: return "vsrw"; + case PPC_ID_AV_VSUBCUQ: return "vsubcuq"; + case PPC_ID_AV_VSUBCUW: return "vsubcuw"; + case PPC_ID_AV_VSUBECUQ: return "vsubecuq"; + case PPC_ID_AV_VSUBEUQM: return "vsubeuqm"; + case PPC_ID_AV_VSUBFP: return "vsubfp"; + case PPC_ID_AV_VSUBSBS: return "vsubsbs"; + case PPC_ID_AV_VSUBSHS: return "vsubshs"; + case PPC_ID_AV_VSUBSWS: return "vsubsws"; + case PPC_ID_AV_VSUBUBM: return "vsububm"; + case PPC_ID_AV_VSUBUBS: return "vsububs"; + case PPC_ID_AV_VSUBUDM: return "vsubudm"; + case PPC_ID_AV_VSUBUHM: return "vsubuhm"; + case PPC_ID_AV_VSUBUHS: return "vsubuhs"; + case PPC_ID_AV_VSUBUQM: return "vsubuqm"; + case PPC_ID_AV_VSUBUWM: return "vsubuwm"; + case PPC_ID_AV_VSUBUWS: return "vsubuws"; + case PPC_ID_AV_VSUMSWS: return "vsumsws"; + case PPC_ID_AV_VSUM2SWS: return "vsum2sws"; + case PPC_ID_AV_VSUM4SBS: return "vsum4sbs"; + case PPC_ID_AV_VSUM4SHS: return "vsum4shs"; + case PPC_ID_AV_VSUM4UBS: return "vsum4ubs"; + case PPC_ID_AV_VUPKHPX: return "vupkhpx"; + case PPC_ID_AV_VUPKHSB: return "vupkhsb"; + case PPC_ID_AV_VUPKHSH: return "vupkhsh"; + case PPC_ID_AV_VUPKHSW: return "vupkhsw"; + case PPC_ID_AV_VUPKLPX: return "vupklpx"; + case PPC_ID_AV_VUPKLSB: return "vupklsb"; + case PPC_ID_AV_VUPKLSH: return "vupklsh"; + case PPC_ID_AV_VUPKLSW: return "vupklsw"; + case PPC_ID_AV_VXOR: return "vxor"; + + case PPC_ID_VSX_LXSD: return "lxsd"; + case PPC_ID_VSX_LXSDX: return "lxsdx"; + case PPC_ID_VSX_LXSIBZX: return "lxsibzx"; + case PPC_ID_VSX_LXSIHZX: return "lxsihzx"; + case PPC_ID_VSX_LXSIWAX: return "lxsiwax"; + case PPC_ID_VSX_LXSIWZX: return "lxsiwzx"; + case PPC_ID_VSX_LXSSP: return "lxssp"; + case PPC_ID_VSX_LXSSPX: return "lxsspx"; + case PPC_ID_VSX_LXV: return "lxv"; + case PPC_ID_VSX_LXVB16X: return "lxvb16x"; + case PPC_ID_VSX_LXVD2X: return "lxvd2x"; + case PPC_ID_VSX_LXVDSX: return "lxvdsx"; + case PPC_ID_VSX_LXVH8X: return "lxvh8x"; + case PPC_ID_VSX_LXVL: return "lxvl"; + case PPC_ID_VSX_LXVLL: return "lxvll"; + case PPC_ID_VSX_LXVW4X: return "lxvw4x"; + case PPC_ID_VSX_LXVWSX: return "lxvwsx"; + case PPC_ID_VSX_LXVX: return "lxvx"; + case PPC_ID_VSX_MFFPRD: return "mffprd"; + case PPC_ID_VSX_MFVSRD: return "mfvsrd"; + case PPC_ID_VSX_MFVSRLD: return "mfvsrld"; + case PPC_ID_VSX_MFVSRWZ: return "mfvsrwz"; + case PPC_ID_VSX_MTVSRD: return "mtvsrd"; + case PPC_ID_VSX_MTVSRDD: return "mtvsrdd"; + case PPC_ID_VSX_MTVSRWA: return "mtvsrwa"; + case PPC_ID_VSX_MTVSRWS: return "mtvsrws"; + case PPC_ID_VSX_MTVSRWZ: return "mtvsrwz"; + case PPC_ID_VSX_STXSD: return "stxsd"; + case PPC_ID_VSX_STXSDX: return "stxsdx"; + case PPC_ID_VSX_STXSIBX: return "stxsibx"; + case PPC_ID_VSX_STXSIHX: return "stxsihx"; + case PPC_ID_VSX_STXSIWX: return "stxsiwx"; + case PPC_ID_VSX_STXSSP: return "stxssp"; + case PPC_ID_VSX_STXSSPX: return "stxsspx"; + case PPC_ID_VSX_STXVB16X: return "stxvb16x"; + case PPC_ID_VSX_STXVD2X: return "stxvd2x"; + case PPC_ID_VSX_STXVH8X: return "stxvh8x"; + case PPC_ID_VSX_STXV: return "stxv"; + case PPC_ID_VSX_STXVL: return "stxvl"; + case PPC_ID_VSX_STXVLL: return "stxvll"; + case PPC_ID_VSX_STXVW4X: return "stxvw4x"; + case PPC_ID_VSX_STXVX: return "stxvx"; + case PPC_ID_VSX_XSABSDP: return "xsabsdp"; + case PPC_ID_VSX_XSABSQP: return "xsabsqp"; + case PPC_ID_VSX_XSADDDP: return "xsadddp"; + case PPC_ID_VSX_XSADDSP: return "xsaddsp"; + case PPC_ID_VSX_XSADDQPx: return Round2OddMnemonic(instruction, SubMnemXSADDQPx); + case PPC_ID_VSX_XSCMPEQDP: return "xscmpeqdp"; + case PPC_ID_VSX_XSCMPEXPDP: return "xscmpexpdp"; + case PPC_ID_VSX_XSCMPEXPQP: return "xscmpexpqp"; + case PPC_ID_VSX_XSCMPGEDP: return "xscmpgedp"; + case PPC_ID_VSX_XSCMPGTDP: return "xscmpgtdp"; + case PPC_ID_VSX_XSCMPODP: return "xscmpodp"; + case PPC_ID_VSX_XSCMPOQP: return "xscmpoqp"; + case PPC_ID_VSX_XSCMPUDP: return "xscmpudp"; + case PPC_ID_VSX_XSCMPUQP: return "xscmpuqp"; + case PPC_ID_VSX_XSCPSGNDP: return "xscpsgndp"; + case PPC_ID_VSX_XSCPSGNQP: return "xscpsgnqp"; + case PPC_ID_VSX_XSCVDPHP: return "xscvdphp"; + case PPC_ID_VSX_XSCVDPQP: return "xscvdpqp"; + case PPC_ID_VSX_XSCVDPSP: return "xscvdpsp"; + case PPC_ID_VSX_XSCVDPSPN: return "xscvdpspn"; + case PPC_ID_VSX_XSCVDPSXDS: return "xscvdpsxds"; + case PPC_ID_VSX_XSCVDPSXWS: return "xscvdpsxws"; + case PPC_ID_VSX_XSCVDPUXDS: return "xscvdpuxds"; + case PPC_ID_VSX_XSCVDPUXWS: return "xscvdpuxws"; + case PPC_ID_VSX_XSCVHPDP: return "xscvhpdp"; + case PPC_ID_VSX_XSCVQPDPx: return Round2OddMnemonic(instruction, SubMnemXSCVQPDPx); + case PPC_ID_VSX_XSCVQPSDZ: return "xscvqpsdz"; + case PPC_ID_VSX_XSCVQPSWZ: return "xscvqpswz"; + case PPC_ID_VSX_XSCVQPUDZ: return "xscvqpudz"; + case PPC_ID_VSX_XSCVQPUWZ: return "xscvqpuwz"; + case PPC_ID_VSX_XSCVSDQP: return "xscvsdqp"; + case PPC_ID_VSX_XSCVSPDP: return "xscvspdp"; + case PPC_ID_VSX_XSCVSPDPN: return "xscvspdpn"; + case PPC_ID_VSX_XSCVSXDDP: return "xscvsxddp"; + case PPC_ID_VSX_XSCVSXDSP: return "xscvsxdsp"; + case PPC_ID_VSX_XSCVUDQP: return "xscvudqp"; + case PPC_ID_VSX_XSCVUXDDP: return "xscvuxddp"; + case PPC_ID_VSX_XSCVUXDSP: return "xscvuxdsp"; + case PPC_ID_VSX_XSDIVDP: return "xsdivdp"; + case PPC_ID_VSX_XSDIVSP: return "xsdivsp"; + case PPC_ID_VSX_XSDIVQPx: return Round2OddMnemonic(instruction, SubMnemXSDIVQPx); + case PPC_ID_VSX_XSIEXPDP: return "xsiexpdp"; + case PPC_ID_VSX_XSIEXPQP: return "xsiexpqp"; + case PPC_ID_VSX_XSMADDADP: return "xsmaddadp"; + case PPC_ID_VSX_XSMADDASP: return "xsmaddasp"; + case PPC_ID_VSX_XSMADDMDP: return "xsmaddmdp"; + case PPC_ID_VSX_XSMADDMSP: return "xsmaddmsp"; + case PPC_ID_VSX_XSMADDQPx: return Round2OddMnemonic(instruction, SubMnemXSMADDQPx); + case PPC_ID_VSX_XSMAXCDP: return "xsmaxcdp"; + case PPC_ID_VSX_XSMAXDP: return "xsmaxdp"; + case PPC_ID_VSX_XSMAXJDP: return "xsmaxjdp"; + case PPC_ID_VSX_XSMINDP: return "xsmindp"; + case PPC_ID_VSX_XSMINCDP: return "xsmincdp"; + case PPC_ID_VSX_XSMINJDP: return "xsminjdp"; + case PPC_ID_VSX_XSMSUBADP: return "xsmsubadp"; + case PPC_ID_VSX_XSMSUBASP: return "xsmsubasp"; + case PPC_ID_VSX_XSMSUBMDP: return "xsmsubmdp"; + case PPC_ID_VSX_XSMSUBMSP: return "xsmsubmsp"; + case PPC_ID_VSX_XSMSUBQPx: return Round2OddMnemonic(instruction, SubMnemXSMSUBQPx); + case PPC_ID_VSX_XSMULDP: return "xsmuldp"; + case PPC_ID_VSX_XSMULSP: return "xsmulsp"; + case PPC_ID_VSX_XSMULQPx: return Round2OddMnemonic(instruction, SubMnemXSMULQPx); + case PPC_ID_VSX_XSNABSDP: return "xsnabsdp"; + case PPC_ID_VSX_XSNABSQP: return "xsnabsqp"; + case PPC_ID_VSX_XSNEGDP: return "xsnegdp"; + case PPC_ID_VSX_XSNEGQP: return "xsnegqp"; + case PPC_ID_VSX_XSNMADDADP: return "xsnmaddadp"; + case PPC_ID_VSX_XSNMADDASP: return "xsnmaddasp"; + case PPC_ID_VSX_XSNMADDQPx: return Round2OddMnemonic(instruction, SubMnemXSNMADDQPx); + case PPC_ID_VSX_XSNMADDMDP: return "xsnmaddmdp"; + case PPC_ID_VSX_XSNMADDMSP: return "xsnmaddmsp"; + case PPC_ID_VSX_XSNMSUBADP: return "xsnmsubadp"; + case PPC_ID_VSX_XSNMSUBASP: return "xsnmsubasp"; + case PPC_ID_VSX_XSNMSUBMDP: return "xsnmsubmdp"; + case PPC_ID_VSX_XSNMSUBMSP: return "xsnmsubmsp"; + case PPC_ID_VSX_XSNMSUBQPx: return Round2OddMnemonic(instruction, SubMnemXSNMSUBQPx); + case PPC_ID_VSX_XSRDPI: return "xsrdpi"; + case PPC_ID_VSX_XSRDPIC: return "xsrdpic"; + case PPC_ID_VSX_XSRDPIM: return "xsrdpim"; + case PPC_ID_VSX_XSRDPIP: return "xsrdpip"; + case PPC_ID_VSX_XSRDPIZ: return "xsrdpiz"; + case PPC_ID_VSX_XSREDP: return "xsredp"; + case PPC_ID_VSX_XSRESP: return "xsresp"; + case PPC_ID_VSX_XSRSP: return "xsrsp"; + case PPC_ID_VSX_XSRSQRTEDP: return "xsrsqrtedp"; + case PPC_ID_VSX_XSRSQRTESP: return "xsrsqrtesp"; + case PPC_ID_VSX_XSSQRTDP: return "xssqrtdp"; + case PPC_ID_VSX_XSSQRTQPx: return Round2OddMnemonic(instruction, SubMnemXSSQRTQPx); + case PPC_ID_VSX_XSSQRTSP: return "xssqrtsp"; + case PPC_ID_VSX_XSSUBDP: return "xssubdp"; + case PPC_ID_VSX_XSSUBSP: return "xssubsp"; + case PPC_ID_VSX_XSSUBQPx: return Round2OddMnemonic(instruction, SubMnemXSSUBQPx); + case PPC_ID_VSX_XSRQPIx: return InexactMnemonic(instruction, SubMnemXSRQPIx); + case PPC_ID_VSX_XSRQPXP: return "xsrqpxp"; + case PPC_ID_VSX_XSTDIVDP: return "xstdivdp"; + case PPC_ID_VSX_XSTDIVSP: return "xstdivsp"; + case PPC_ID_VSX_XSTSTDCDP: return "xststdcdp"; + case PPC_ID_VSX_XSTSTDCQP: return "xststdcqp"; + case PPC_ID_VSX_XSTSTDCSP: return "xststdcsp"; + case PPC_ID_VSX_XSTSQRTDP: return "xstsqrtdp"; + case PPC_ID_VSX_XSXEXPDP: return "xsxexpdp"; + case PPC_ID_VSX_XSXEXPQP: return "xsxexpqp"; + case PPC_ID_VSX_XSXSIGDP: return "xsxsigdp"; + case PPC_ID_VSX_XSXSIGQP: return "xsxsigqp"; + case PPC_ID_VSX_XVABSSP: return "xvabssp"; + case PPC_ID_VSX_XVABSDP: return "xvabsdp"; + case PPC_ID_VSX_XVADDSP: return "xvaddsp"; + case PPC_ID_VSX_XVADDDP: return "xvadddp"; + case PPC_ID_VSX_XVCMPEQDPx: return RcMnemonic(instruction, SubMnemXVCMPEQDPx); + case PPC_ID_VSX_XVCMPEQSPx: return RcMnemonic(instruction, SubMnemXVCMPEQSPx); + case PPC_ID_VSX_XVCMPGEDPx: return RcMnemonic(instruction, SubMnemXVCMPGEDPx); + case PPC_ID_VSX_XVCMPGESPx: return RcMnemonic(instruction, SubMnemXVCMPGESPx); + case PPC_ID_VSX_XVCMPGTDPx: return RcMnemonic(instruction, SubMnemXVCMPGTDPx); + case PPC_ID_VSX_XVCMPGTSPx: return RcMnemonic(instruction, SubMnemXVCMPGTSPx); + case PPC_ID_VSX_XVCPSGNDP: return "xvcpsgndp"; + case PPC_ID_VSX_XVCPSGNSP: return "xvcpsgnsp"; + case PPC_ID_VSX_XVCVDPSP: return "xvcvdpsp"; + case PPC_ID_VSX_XVCVDPSXDS: return "xvcvdpsxds"; + case PPC_ID_VSX_XVCVDPSXWS: return "xvcvdpsxws"; + case PPC_ID_VSX_XVCVDPUXDS: return "xvcvdpuxds"; + case PPC_ID_VSX_XVCVDPUXWS: return "xvcvdpuxws"; + case PPC_ID_VSX_XVCVHPSP: return "xvcvhpsp"; + case PPC_ID_VSX_XVCVSPDP: return "xvcvspdp"; + case PPC_ID_VSX_XVCVSPHP: return "xvcvsphp"; + case PPC_ID_VSX_XVCVSPSXDS: return "xvcvspsxds"; + case PPC_ID_VSX_XVCVSPSXWS: return "xvcvspsxws"; + case PPC_ID_VSX_XVCVSPUXDS: return "xvcvspuxds"; + case PPC_ID_VSX_XVCVSPUXWS: return "xvcvspuxws"; + case PPC_ID_VSX_XVCVSXDDP: return "xvcvsxddp"; + case PPC_ID_VSX_XVCVSXDSP: return "xvcvsxdsp"; + case PPC_ID_VSX_XVCVSXWDP: return "xvcvsxwdp"; + case PPC_ID_VSX_XVCVSXWSP: return "xvcvsxwsp"; + case PPC_ID_VSX_XVCVUXDDP: return "xvcvuxddp"; + case PPC_ID_VSX_XVCVUXDSP: return "xvcvuxdsp"; + case PPC_ID_VSX_XVCVUXWDP: return "xvcvuxwdp"; + case PPC_ID_VSX_XVCVUXWSP: return "xvcvuxwsp"; + case PPC_ID_VSX_XVDIVDP: return "xvdivdp"; + case PPC_ID_VSX_XVDIVSP: return "xvdivsp"; + case PPC_ID_VSX_XVIEXPDP: return "xviexpdp"; + case PPC_ID_VSX_XVIEXPSP: return "xviexpsp"; + case PPC_ID_VSX_XVMADDADP: return "xvmaddadp"; + case PPC_ID_VSX_XVMADDASP: return "xvmaddasp"; + case PPC_ID_VSX_XVMADDMDP: return "xvmaddmdp"; + case PPC_ID_VSX_XVMADDMSP: return "xvmaddmsp"; + case PPC_ID_VSX_XVMAXDP: return "xvmaxdp"; + case PPC_ID_VSX_XVMAXSP: return "xvmaxsp"; + case PPC_ID_VSX_XVMINDP: return "xvmindp"; + case PPC_ID_VSX_XVMINSP: return "xvminsp"; + case PPC_ID_VSX_XVMOVDP: return "xvmovdp"; + case PPC_ID_VSX_XVMOVSP: return "xvmovsp"; + case PPC_ID_VSX_XVMSUBADP: return "xvmsubadp"; + case PPC_ID_VSX_XVMSUBASP: return "xvmsubasp"; + case PPC_ID_VSX_XVMSUBMDP: return "xvmsubmdp"; + case PPC_ID_VSX_XVMSUBMSP: return "xvmsubmsp"; + case PPC_ID_VSX_XVMULSP: return "xvmulsp"; + case PPC_ID_VSX_XVMULDP: return "xvmuldp"; + case PPC_ID_VSX_XVNABSDP: return "xvnabsdp"; + case PPC_ID_VSX_XVNABSSP: return "xvnabssp"; + case PPC_ID_VSX_XVNMADDADP: return "xvnmaddadp"; + case PPC_ID_VSX_XVNMADDASP: return "xvnmaddasp"; + case PPC_ID_VSX_XVNMADDMDP: return "xvnmaddmdp"; + case PPC_ID_VSX_XVNMADDMSP: return "xvnmaddmsp"; + case PPC_ID_VSX_XVNEGDP: return "xvnegdp"; + case PPC_ID_VSX_XVNEGSP: return "xvnegsp"; + case PPC_ID_VSX_XVNMSUBADP: return "xvnmsubadp"; + case PPC_ID_VSX_XVNMSUBASP: return "xvnmsubasp"; + case PPC_ID_VSX_XVNMSUBMSP: return "xvnmsubmsp"; + case PPC_ID_VSX_XVNMSUBMDP: return "xvnmsubmdp"; + case PPC_ID_VSX_XVRDPI: return "xvrdpi"; + case PPC_ID_VSX_XVRDPIC: return "xvrdpic"; + case PPC_ID_VSX_XVRDPIM: return "xvrdpim"; + case PPC_ID_VSX_XVRDPIP: return "xvrdpip"; + case PPC_ID_VSX_XVRDPIZ: return "xvrdpiz"; + case PPC_ID_VSX_XVREDP: return "xvredp"; + case PPC_ID_VSX_XVRESP: return "xvresp"; + case PPC_ID_VSX_XVRSPI: return "xvrspi"; + case PPC_ID_VSX_XVRSPIC: return "xvrspic"; + case PPC_ID_VSX_XVRSPIM: return "xvrspim"; + case PPC_ID_VSX_XVRSPIP: return "xvrspip"; + case PPC_ID_VSX_XVRSPIZ: return "xvrspiz"; + case PPC_ID_VSX_XVRSQRTEDP: return "xvrsqrtedp"; + case PPC_ID_VSX_XVRSQRTESP: return "xvrsqrtesp"; + case PPC_ID_VSX_XVSQRTDP: return "xvsqrtdp"; + case PPC_ID_VSX_XVSQRTSP: return "xvsqrtsp"; + case PPC_ID_VSX_XVSUBSP: return "xvsubsp"; + case PPC_ID_VSX_XVSUBDP: return "xvsubdp"; + case PPC_ID_VSX_XVTDIVDP: return "xvtdivdp"; + case PPC_ID_VSX_XVTDIVSP: return "xvtdivsp"; + case PPC_ID_VSX_XVTSQRTDP: return "xvtsqrtdp"; + case PPC_ID_VSX_XVTSQRTSP: return "xvtsqrtsp"; + case PPC_ID_VSX_XVTSTDCDP: return "xvtstdcdp"; + case PPC_ID_VSX_XVTSTDCSP: return "xvtstdcsp"; + case PPC_ID_VSX_XVXEXPDP: return "xvxexpdp"; + case PPC_ID_VSX_XVXEXPSP: return "xvxexpsp"; + case PPC_ID_VSX_XVXSIGDP: return "xvxsigdp"; + case PPC_ID_VSX_XVXSIGSP: return "xvxsigsp"; + case PPC_ID_VSX_XXBRD: return "xxbrd"; + case PPC_ID_VSX_XXBRH: return "xxbrh"; + case PPC_ID_VSX_XXBRQ: return "xxbrq"; + case PPC_ID_VSX_XXBRW: return "xxbrw"; + case PPC_ID_VSX_XXEXTRACTUW: return "xxextractuw"; + case PPC_ID_VSX_XXINSERTW: return "xxinsertw"; + case PPC_ID_VSX_XXLAND: return "xxland"; + case PPC_ID_VSX_XXLANDC: return "xxlandc"; + case PPC_ID_VSX_XXLEQV: return "xxleqv"; + case PPC_ID_VSX_XXLNAND: return "xxlnand"; + case PPC_ID_VSX_XXLNOR: return "xxlnor"; + case PPC_ID_VSX_XXLORC: return "xxlorc"; + case PPC_ID_VSX_XXMRGHD: return "xxmrghd"; + case PPC_ID_VSX_XXMRGHW: return "xxmrghw"; + case PPC_ID_VSX_XXMRGLD: return "xxmrgld"; + case PPC_ID_VSX_XXMRGLW: return "xxmrglw"; + case PPC_ID_VSX_XXLOR: return "xxlor"; + case PPC_ID_VSX_XXLXOR: return "xxlxor"; + case PPC_ID_VSX_XXPERM: return "xxperm"; + case PPC_ID_VSX_XXPERMDI: return "xxpermdi"; + case PPC_ID_VSX_XXPERMR: return "xxpermr"; + case PPC_ID_VSX_XXSEL: return "xxsel"; + case PPC_ID_VSX_XXSLDWI: return "xxsldwi"; + case PPC_ID_VSX_XXSPLTD: return "xxspltd"; + case PPC_ID_VSX_XXSPLTIB: return "xxspltib"; + case PPC_ID_VSX_XXSPLTW: return "xxspltw"; + case PPC_ID_VSX_XXSWAPD: return "xxswapd"; + + case PPC_ID_PSQ_L: return "psq_l"; + case PPC_ID_PSQ_LU: return "psq_lu"; + case PPC_ID_PSQ_LUX: return "psq_lux"; + case PPC_ID_PSQ_LX: return "psq_lx"; + case PPC_ID_PSQ_ST: return "psq_st"; + case PPC_ID_PSQ_STU: return "psq_stu"; + case PPC_ID_PSQ_STUX: return "psq_stux"; + case PPC_ID_PSQ_STX: return "psq_stx"; + + case PPC_ID_PAIREDSINGLE_DCBZ_L: return "dcbz_l"; + case PPC_ID_PAIREDSINGLE_PS_ABSx: return RcMnemonic(instruction, SubMnemPS_ABSx); + case PPC_ID_PAIREDSINGLE_PS_ADDx: return RcMnemonic(instruction, SubMnemPS_ADDx); + case PPC_ID_PAIREDSINGLE_PS_CMPO0: return "ps_cmpo0"; + case PPC_ID_PAIREDSINGLE_PS_CMPO1: return "ps_cmpo1"; + case PPC_ID_PAIREDSINGLE_PS_CMPU0: return "ps_cmpu0"; + case PPC_ID_PAIREDSINGLE_PS_CMPU1: return "ps_cmpu1"; + case PPC_ID_PAIREDSINGLE_PS_DIVx: return RcMnemonic(instruction, SubMnemPS_DIVx); + case PPC_ID_PAIREDSINGLE_PS_MADDx: return RcMnemonic(instruction, SubMnemPS_MADDx); + case PPC_ID_PAIREDSINGLE_PS_MADDS0x: return RcMnemonic(instruction, SubMnemPS_MADDS0x); + case PPC_ID_PAIREDSINGLE_PS_MADDS1x: return RcMnemonic(instruction, SubMnemPS_MADDS1x); + case PPC_ID_PAIREDSINGLE_PS_MERGE00x: return RcMnemonic(instruction, SubMnemPS_MERGE00x); + case PPC_ID_PAIREDSINGLE_PS_MERGE01x: return RcMnemonic(instruction, SubMnemPS_MERGE01x); + case PPC_ID_PAIREDSINGLE_PS_MERGE10x: return RcMnemonic(instruction, SubMnemPS_MERGE10x); + case PPC_ID_PAIREDSINGLE_PS_MERGE11x: return RcMnemonic(instruction, SubMnemPS_MERGE11x); + case PPC_ID_PAIREDSINGLE_PS_MRx: return RcMnemonic(instruction, SubMnemPS_MRx); + case PPC_ID_PAIREDSINGLE_PS_MSUBx: return RcMnemonic(instruction, SubMnemPS_MSUBx); + case PPC_ID_PAIREDSINGLE_PS_MULx: return RcMnemonic(instruction, SubMnemPS_MULx); + case PPC_ID_PAIREDSINGLE_PS_MULS0x: return RcMnemonic(instruction, SubMnemPS_MULS0x); + case PPC_ID_PAIREDSINGLE_PS_MULS1x: return RcMnemonic(instruction, SubMnemPS_MULS1x); + case PPC_ID_PAIREDSINGLE_PS_NABSx: return RcMnemonic(instruction, SubMnemPS_NABSx); + case PPC_ID_PAIREDSINGLE_PS_NEGx: return RcMnemonic(instruction, SubMnemPS_NEGx); + case PPC_ID_PAIREDSINGLE_PS_NMADDx: return RcMnemonic(instruction, SubMnemPS_NMADDx); + case PPC_ID_PAIREDSINGLE_PS_NMSUBx: return RcMnemonic(instruction, SubMnemPS_NMSUBx); + case PPC_ID_PAIREDSINGLE_PS_RESx: return RcMnemonic(instruction, SubMnemPS_RESx); + case PPC_ID_PAIREDSINGLE_PS_RSQRTEx: return RcMnemonic(instruction, SubMnemPS_RSQRTEx); + case PPC_ID_PAIREDSINGLE_PS_SELx: return RcMnemonic(instruction, SubMnemPS_SELx); + case PPC_ID_PAIREDSINGLE_PS_SUBx: return RcMnemonic(instruction, SubMnemPS_SUBx); + case PPC_ID_PAIREDSINGLE_PS_SUM0x: return RcMnemonic(instruction, SubMnemPS_SUM0x); + case PPC_ID_PAIREDSINGLE_PS_SUM1x: return RcMnemonic(instruction, SubMnemPS_SUM1x); + case PPC_ID_PAIREDSINGLE_PSQ_L: return "psq_l"; + case PPC_ID_PAIREDSINGLE_PSQ_LU: return "psq_lu"; + case PPC_ID_PAIREDSINGLE_PSQ_LUX: return "psq_lux"; + case PPC_ID_PAIREDSINGLE_PSQ_LX: return "psq_lx"; + case PPC_ID_PAIREDSINGLE_PSQ_ST: return "psq_st"; + case PPC_ID_PAIREDSINGLE_PSQ_STU: return "psq_stu"; + case PPC_ID_PAIREDSINGLE_PSQ_STUX: return "psq_stux"; + case PPC_ID_PAIREDSINGLE_PSQ_STX: return "psq_stx"; + + case PPC_ID_SPE_BRINC: return "brinc"; + case PPC_ID_SPE_EFDABS: return "efdabs"; + case PPC_ID_SPE_EFDADD: return "efdadd"; + case PPC_ID_SPE_EFDCFS: return "efdcfs"; + case PPC_ID_SPE_EFDCFSF: return "efdcfsf"; + case PPC_ID_SPE_EFDCFSI: return "efdcfsi"; + case PPC_ID_SPE_EFDCFSID: return "efdcfsid"; + case PPC_ID_SPE_EFDCFUF: return "efdcfuf"; + case PPC_ID_SPE_EFDCFUI: return "efdcfui"; + case PPC_ID_SPE_EFDCFUID: return "efdcfuid"; + case PPC_ID_SPE_EFDCMPEQ: return "efdcmpeq"; + case PPC_ID_SPE_EFDCMPGT: return "efdcmpgt"; + case PPC_ID_SPE_EFDCMPLT: return "efdcmplt"; + case PPC_ID_SPE_EFDCTSF: return "efdctsf"; + case PPC_ID_SPE_EFDCTSI: return "efdctsi"; + case PPC_ID_SPE_EFDCTSIDZ: return "efdctsidz"; + case PPC_ID_SPE_EFDCTSIZ: return "efdctsiz"; + case PPC_ID_SPE_EFDCTUF: return "efdctuf"; + case PPC_ID_SPE_EFDCTUI: return "efdctui"; + case PPC_ID_SPE_EFDCTUIDZ: return "efdctuidz"; + case PPC_ID_SPE_EFDCTUIZ: return "efdctuiz"; + case PPC_ID_SPE_EFDDIV: return "efddiv"; + case PPC_ID_SPE_EFDMUL: return "efdmul"; + case PPC_ID_SPE_EFDNABS: return "efdnabs"; + case PPC_ID_SPE_EFDNEG: return "efdneg"; + case PPC_ID_SPE_EFDSUB: return "efdsub"; + case PPC_ID_SPE_EFDTSTEQ: return "efdtsteq"; + case PPC_ID_SPE_EFDTSTGT: return "efdtstgt"; + case PPC_ID_SPE_EFDTSTLT: return "efdtstlt"; + case PPC_ID_SPE_EFSABS: return "efsabs"; + case PPC_ID_SPE_EFSADD: return "efsadd"; + case PPC_ID_SPE_EFSCFD: return "efscfd"; + case PPC_ID_SPE_EFSCFSF: return "efscfsf"; + case PPC_ID_SPE_EFSCFSI: return "efscfsi"; + case PPC_ID_SPE_EFSCFUF: return "efscfuf"; + case PPC_ID_SPE_EFSCFUI: return "efscfui"; + case PPC_ID_SPE_EFSCMPEQ: return "efscmpeq"; + case PPC_ID_SPE_EFSCMPGT: return "efscmpgt"; + case PPC_ID_SPE_EFSCMPLT: return "efscmplt"; + case PPC_ID_SPE_EFSCTSF: return "efsctsf"; + case PPC_ID_SPE_EFSCTSI: return "efsctsi"; + case PPC_ID_SPE_EFSCTSIZ: return "efsctsiz"; + case PPC_ID_SPE_EFSCTUF: return "efsctuf"; + case PPC_ID_SPE_EFSCTUI: return "efsctui"; + case PPC_ID_SPE_EFSCTUIZ: return "efsctuiz"; + case PPC_ID_SPE_EFSDIV: return "efsdiv"; + case PPC_ID_SPE_EFSMUL: return "efsmul"; + case PPC_ID_SPE_EFSNABS: return "efsnabs"; + case PPC_ID_SPE_EFSNEG: return "efsneg"; + case PPC_ID_SPE_EFSSUB: return "efssub"; + case PPC_ID_SPE_EFSTSTEQ: return "efststeq"; + case PPC_ID_SPE_EFSTSTGT: return "efststgt"; + case PPC_ID_SPE_EFSTSTLT: return "efststlt"; + case PPC_ID_SPE_EVABS: return "evabs"; + case PPC_ID_SPE_EVADDIW: return "evaddiw"; + case PPC_ID_SPE_EVADDSMIAAW: return "evaddsmiaaw"; + case PPC_ID_SPE_EVADDSSIAAW: return "evaddssiaaw"; + case PPC_ID_SPE_EVADDUMIAAW: return "evaddumiaaw"; + case PPC_ID_SPE_EVADDUSIAAW: return "evaddusiaaw"; + case PPC_ID_SPE_EVADDW: return "evaddw"; + case PPC_ID_SPE_EVAND: return "evand"; + case PPC_ID_SPE_EVANDC: return "evandc"; + case PPC_ID_SPE_EVCMPEQ: return "evcmpeq"; + case PPC_ID_SPE_EVCMPGTS: return "evcmpgts"; + case PPC_ID_SPE_EVCMPGTU: return "evcmpgtu"; + case PPC_ID_SPE_EVCMPLTS: return "evcmplts"; + case PPC_ID_SPE_EVCMPLTU: return "evcmpltu"; + case PPC_ID_SPE_EVCNTLSW: return "evcntlsw"; + case PPC_ID_SPE_EVCNTLZW: return "evcntlzw"; + case PPC_ID_SPE_EVDIVWS: return "evdivws"; + case PPC_ID_SPE_EVDIVWU: return "evdivwu"; + case PPC_ID_SPE_EVEQV: return "eveqv"; + case PPC_ID_SPE_EVEXTSB: return "evextsb"; + case PPC_ID_SPE_EVEXTSH: return "evextsh"; + case PPC_ID_SPE_EVFSABS: return "evfsabs"; + case PPC_ID_SPE_EVFSADD: return "evfsadd"; + case PPC_ID_SPE_EVFSCFSF: return "evfscfsf"; + case PPC_ID_SPE_EVFSCFSI: return "evfscfsi"; + case PPC_ID_SPE_EVFSCFUF: return "evfscfuf"; + case PPC_ID_SPE_EVFSCFUI: return "evfscfui"; + case PPC_ID_SPE_EVSCFUI: return "evscfui"; + case PPC_ID_SPE_EVFSCMPEQ: return "evfscmpeq"; + case PPC_ID_SPE_EVFSCMPGT: return "evfscmpgt"; + case PPC_ID_SPE_EVFSCMPLT: return "evfscmplt"; + case PPC_ID_SPE_EVFSCTSF: return "evfsctsf"; + case PPC_ID_SPE_EVFSCTSI: return "evfsctsi"; + case PPC_ID_SPE_EVFSCTSIZ: return "evfsctsiz"; + case PPC_ID_SPE_EVFSCTUF: return "evfsctuf"; + case PPC_ID_SPE_EVFSCTUI: return "evfsctui"; + case PPC_ID_SPE_EVFSCTUIZ: return "evfsctuiz"; + case PPC_ID_SPE_EVFSDIV: return "evfsdiv"; + case PPC_ID_SPE_EVFSMUL: return "evfsmul"; + case PPC_ID_SPE_EVFSNABS: return "evfsnabs"; + case PPC_ID_SPE_EVFSNEG: return "evfsneg"; + case PPC_ID_SPE_EVFSSUB: return "evfssub"; + case PPC_ID_SPE_EVFSTSTEQ: return "evfststeq"; + case PPC_ID_SPE_EVFSTSTGT: return "evfststgt"; + case PPC_ID_SPE_EVFSTSTLT: return "evfststlt"; + case PPC_ID_SPE_EVLDD: return "evldd"; + case PPC_ID_SPE_EVLDDX: return "evlddx"; + case PPC_ID_SPE_EVLDH: return "evldh"; + case PPC_ID_SPE_EVLDHX: return "evldhx"; + case PPC_ID_SPE_EVLDW: return "evldw"; + case PPC_ID_SPE_EVLDWX: return "evldwx"; + case PPC_ID_SPE_EVLHHESPLAT: return "evlhhesplat"; + case PPC_ID_SPE_EVLHHESPLATX: return "evlhhesplatx"; + case PPC_ID_SPE_EVLHHOSSPLAT: return "evlhhossplat"; + case PPC_ID_SPE_EVLHHOSSPLATX: return "evlhhossplatx"; + case PPC_ID_SPE_EVLHHOUSPLAT: return "evlhhousplat"; + case PPC_ID_SPE_EVLHHOUSPLATX: return "evlhhousplatx"; + case PPC_ID_SPE_EVLWHE: return "evlwhe"; + case PPC_ID_SPE_EVLWHEX: return "evlwhex"; + case PPC_ID_SPE_EVLWHOS: return "evlwhos"; + case PPC_ID_SPE_EVLWHOSX: return "evlwhosx"; + case PPC_ID_SPE_EVLWHOU: return "evlwhou"; + case PPC_ID_SPE_EVLWHOUX: return "evlwhoux"; + case PPC_ID_SPE_EVLWHSPLAT: return "evlwhsplat"; + case PPC_ID_SPE_EVLWHSPLATX: return "evlwhsplatx"; + case PPC_ID_SPE_EVLWWSPLAT: return "evlwwsplat"; + case PPC_ID_SPE_EVLWWSPLATX: return "evlwwsplatx"; + case PPC_ID_SPE_EVMERGEHI: return "evmergehi"; + case PPC_ID_SPE_EVMERGEHILO: return "evmergehilo"; + case PPC_ID_SPE_EVMERGELO: return "evmergelo"; + case PPC_ID_SPE_EVMERGELOHI: return "evmergelohi"; + case PPC_ID_SPE_EVMHEGSMFAA: return "evmhegsmfaa"; + case PPC_ID_SPE_EVMHEGSMFAN: return "evmhegsmfan"; + case PPC_ID_SPE_EVMHEGSMIAA: return "evmhegsmiaa"; + case PPC_ID_SPE_EVMHEGSMIAN: return "evmhegsmian"; + case PPC_ID_SPE_EVMHEGUMIAA: return "evmhegumiaa"; + case PPC_ID_SPE_EVMHEGUMIAN: return "evmhegumian"; + case PPC_ID_SPE_EVMHESMF: return "evmhesmf"; + case PPC_ID_SPE_EVMHESMFA: return "evmhesmfa"; + case PPC_ID_SPE_EVMHESMFAAW: return "evmhesmfaaw"; + case PPC_ID_SPE_EVMHESMFANW: return "evmhesmfanw"; + case PPC_ID_SPE_EVMHESMI: return "evmhesmi"; + case PPC_ID_SPE_EVMHESMIA: return "evmhesmia"; + case PPC_ID_SPE_EVMHESMIAAW: return "evmhesmiaaw"; + case PPC_ID_SPE_EVMHESMIANW: return "evmhesmianw"; + case PPC_ID_SPE_EVMHESSF: return "evmhessf"; + case PPC_ID_SPE_EVMHESSFA: return "evmhessfa"; + case PPC_ID_SPE_EVMHESSFAAW: return "evmhessfaaw"; + case PPC_ID_SPE_EVMHESSFANW: return "evmhessfanw"; + case PPC_ID_SPE_EVMHESSIAAW: return "evmhessiaaw"; + case PPC_ID_SPE_EVMHESSIANW: return "evmhessianw"; + case PPC_ID_SPE_EVMHEUMI: return "evmheumi"; + case PPC_ID_SPE_EVMHEUMIA: return "evmheumia"; + case PPC_ID_SPE_EVMHEUMIAAW: return "evmheumiaaw"; + case PPC_ID_SPE_EVMHEUMIANW: return "evmheumianw"; + case PPC_ID_SPE_EVMHEUSIAAW: return "evmheusiaaw"; + case PPC_ID_SPE_EVMHEUSIANW: return "evmheusianw"; + case PPC_ID_SPE_EVMHOGSMFAA: return "evmhogsmfaa"; + case PPC_ID_SPE_EVMHOGSMFAN: return "evmhogsmfan"; + case PPC_ID_SPE_EVMHOGSMIAA: return "evmhogsmiaa"; + case PPC_ID_SPE_EVMHOGSMIAN: return "evmhogsmian"; + case PPC_ID_SPE_EVMHOGUMIAA: return "evmhogumiaa"; + case PPC_ID_SPE_EVMHOGUMIAN: return "evmhogumian"; + case PPC_ID_SPE_EVMHOSMF: return "evmhosmf"; + case PPC_ID_SPE_EVMHOSMFA: return "evmhosmfa"; + case PPC_ID_SPE_EVMHOSMFAAW: return "evmhosmfaaw"; + case PPC_ID_SPE_EVMHOSMFANW: return "evmhosmfanw"; + case PPC_ID_SPE_EVMHOSMI: return "evmhosmi"; + case PPC_ID_SPE_EVMHOSMIA: return "evmhosmia"; + case PPC_ID_SPE_EVMHOSMIAAW: return "evmhosmiaaw"; + case PPC_ID_SPE_EVMHOSMIANW: return "evmhosmianw"; + case PPC_ID_SPE_EVMHOSSF: return "evmhossf"; + case PPC_ID_SPE_EVMHOSSFA: return "evmhossfa"; + case PPC_ID_SPE_EVMHOSSFAAW: return "evmhossfaaw"; + case PPC_ID_SPE_EVMHOSSFANW: return "evmhossfanw"; + case PPC_ID_SPE_EVMHOSSIAAW: return "evmhossiaaw"; + case PPC_ID_SPE_EVMHOSSIANW: return "evmhossianw"; + case PPC_ID_SPE_EVMHOUMI: return "evmhoumi"; + case PPC_ID_SPE_EVMHOUMIA: return "evmhoumia"; + case PPC_ID_SPE_EVMHOUMIAAW: return "evmhoumiaaw"; + case PPC_ID_SPE_EVMHOUMIANW: return "evmhoumianw"; + case PPC_ID_SPE_EVMHOUSIAAW: return "evmhousiaaw"; + case PPC_ID_SPE_EVMHOUSIANW: return "evmhousianw"; + case PPC_ID_SPE_EVMR: return "evmr"; + case PPC_ID_SPE_EVMRA: return "evmra"; + case PPC_ID_SPE_EVMWHSMF: return "evmwhsmf"; + case PPC_ID_SPE_EVMWHSMFA: return "evmwhsmfa"; + case PPC_ID_SPE_EVMWHSMI: return "evmwhsmi"; + case PPC_ID_SPE_EVMWHSMIA: return "evmwhsmia"; + case PPC_ID_SPE_EVMWHSSF: return "evmwhssf"; + case PPC_ID_SPE_EVMWHSSFA: return "evmwhssfa"; + case PPC_ID_SPE_EVMWHUMI: return "evmwhumi"; + case PPC_ID_SPE_EVMWHUMIA: return "evmwhumia"; + case PPC_ID_SPE_EVMWHUSIAAW: return "evmwhusiaaw"; + case PPC_ID_SPE_EVMWHUSIANW: return "evmwhusianw"; + case PPC_ID_SPE_EVMWLSMIAAW: return "evmwlsmiaaw"; + case PPC_ID_SPE_EVMWLSMIANW: return "evmwlsmianw"; + case PPC_ID_SPE_EVMWLSSIANW: return "evmwlssianw"; + case PPC_ID_SPE_EVMWLSSIAAW: return "evmwlssiaaw"; + case PPC_ID_SPE_EVMWLUMI: return "evmwlumi"; + case PPC_ID_SPE_EVMWLUMIA: return "evmwlumia"; + case PPC_ID_SPE_EVMWLUMIAAW: return "evmwlumiaaw"; + case PPC_ID_SPE_EVMWLUMIANW: return "evmwlumianw"; + case PPC_ID_SPE_EVMWLUSIAAW: return "evmwlusiaaw"; + case PPC_ID_SPE_EVMWLUSIANW: return "evmwlusianw"; + case PPC_ID_SPE_EVMWSMF: return "evmwsmf"; + case PPC_ID_SPE_EVMWSMFA: return "evmwsmfa"; + case PPC_ID_SPE_EVMWSMFAA: return "evmwsmfaa"; + case PPC_ID_SPE_EVMWSMFAN: return "evmwsmfan"; + case PPC_ID_SPE_EVMWSMI: return "evmwsmi"; + case PPC_ID_SPE_EVMWSMIA: return "evmwsmia"; + case PPC_ID_SPE_EVMWSMIAA: return "evmwsmiaa"; + case PPC_ID_SPE_EVMWSMIAN: return "evmwsmian"; + case PPC_ID_SPE_EVMWSSF: return "evmwssf"; + case PPC_ID_SPE_EVMWSSFA: return "evmwssfa"; + case PPC_ID_SPE_EVMWSSFAA: return "evmwssfaa"; + case PPC_ID_SPE_EVMWSSFAN: return "evmwssfan"; + case PPC_ID_SPE_EVMWUMI: return "evmwumi"; + case PPC_ID_SPE_EVMWUMIA: return "evmwumia"; + case PPC_ID_SPE_EVMWUMIAA: return "evmwumiaa"; + case PPC_ID_SPE_EVMWUMIAN: return "evmwumian"; + case PPC_ID_SPE_EVNAND: return "evnand"; + case PPC_ID_SPE_EVNEG: return "evneg"; + case PPC_ID_SPE_EVNOR: return "evnor"; + case PPC_ID_SPE_EVNOT: return "evnot"; + case PPC_ID_SPE_EVOR: return "evor"; + case PPC_ID_SPE_EVORC: return "evorc"; + case PPC_ID_SPE_EVRLW: return "evrlw"; + case PPC_ID_SPE_EVRLWI: return "evrlwi"; + case PPC_ID_SPE_EVRNDW: return "evrndw"; + case PPC_ID_SPE_EVSEL: return "evsel"; + case PPC_ID_SPE_EVSLW: return "evslw"; + case PPC_ID_SPE_EVSLWI: return "evslwi"; + case PPC_ID_SPE_EVSPLATFI: return "evsplatfi"; + case PPC_ID_SPE_EVSPLATI: return "evsplati"; + case PPC_ID_SPE_EVSRWIS: return "evsrwis"; + case PPC_ID_SPE_EVSRWIU: return "evsrwiu"; + case PPC_ID_SPE_EVSRWS: return "evsrws"; + case PPC_ID_SPE_EVSRWU: return "evsrwu"; + case PPC_ID_SPE_EVSTDD: return "evstdd"; + case PPC_ID_SPE_EVSTDDX: return "evstddx"; + case PPC_ID_SPE_EVSTDH: return "evstdh"; + case PPC_ID_SPE_EVSTDHX: return "evstdhx"; + case PPC_ID_SPE_EVSTDW: return "evstdw"; + case PPC_ID_SPE_EVSTDWX: return "evstdwx"; + case PPC_ID_SPE_EVSTWHE: return "evstwhe"; + case PPC_ID_SPE_EVSTWHEX: return "evstwhex"; + case PPC_ID_SPE_EVSTWHO: return "evstwho"; + case PPC_ID_SPE_EVSTWHOX: return "evstwhox"; + case PPC_ID_SPE_EVSTWWE: return "evstwwe"; + case PPC_ID_SPE_EVSTWWEX: return "evstwwex"; + case PPC_ID_SPE_EVSTWWO: return "evstwwo"; + case PPC_ID_SPE_EVSTWWOX: return "evstwwox"; + case PPC_ID_SPE_EVSUBFSMIAAW: return "evsubfsmiaaw"; + case PPC_ID_SPE_EVSUBFSSIAAW: return "evsubfssiaaw"; + case PPC_ID_SPE_EVSUBFUMIAAW: return "evsubfumiaaw"; + case PPC_ID_SPE_EVSUBFUSIAAW: return "evsubfusiaaw"; + case PPC_ID_SPE_EVSUBFW: return "evsubfw"; + case PPC_ID_SPE_EVSUBIFW: return "evsubifw"; + case PPC_ID_SPE_EVXOR: return "evxor"; + + case PPC_ID_VLE_E_ADDIx: return RcMnemonic(instruction, SubMnemVle32ADDIx); + case PPC_ID_VLE_E_ADDICx: return RcMnemonic(instruction, SubMnemVle32ADDICx); + case PPC_ID_VLE_E_ADD2I: return "e_add2i"; + case PPC_ID_VLE_E_ADD2IS: return "e_add2is"; + case PPC_ID_VLE_E_ADD16I: return "e_add16i"; + case PPC_ID_VLE_E_ANDIx: return RcMnemonic(instruction, SubMnemVle32ANDIx); + case PPC_ID_VLE_E_AND2I: return "e_and2i"; + case PPC_ID_VLE_E_AND2IS: return "e_and2is"; + case PPC_ID_VLE_E_Bx: return LkMnemonic(instruction, SubMnemVle32Bx); + case PPC_ID_VLE_E_BCx: + { + uint32_t bo = instruction->operands[0].uimm; + uint32_t bi = instruction->operands[1].uimm; + + switch (bo) + { + // Branch if false + case 0: + switch (bi & 0x3) + { + case 0: return LkMnemonic(instruction, SubMnemVle32BGEx); + case 1: return LkMnemonic(instruction, SubMnemVle32BLEx); + case 2: return LkMnemonic(instruction, SubMnemVle32BNEx); + case 3: return LkMnemonic(instruction, SubMnemVle32BNSx); + + default: + return NULL; + } + + break; + + // Branch if true + case 1: + switch (bi & 0x3) + { + case 0: return LkMnemonic(instruction, SubMnemVle32BLTx); + case 1: return LkMnemonic(instruction, SubMnemVle32BGTx); + case 2: return LkMnemonic(instruction, SubMnemVle32BEQx); + case 3: return LkMnemonic(instruction, SubMnemVle32BSOx); + + default: + return NULL; + } + + break; + + // Decrement CTR, branch if zero/nonzero + // BI doesn't matter + case 2: return LkMnemonic(instruction, SubMnemVle32BDNZx); + case 3: return LkMnemonic(instruction, SubMnemVle32BDZx); + + // Should be unreachable; bo only 2 bits + default: + return NULL; + } + } + case PPC_ID_VLE_E_CMP16I: return "e_cmp16i"; + case PPC_ID_VLE_E_CMPH16I: return "e_cmph16i"; + case PPC_ID_VLE_E_CMPHL: return "e_cmphl"; + case PPC_ID_VLE_E_CMPHL16I: return "e_cmphl16i"; + case PPC_ID_VLE_E_CMPI: return "e_cmpi"; + case PPC_ID_VLE_E_CMPL16I: return "e_cmpl16i"; + case PPC_ID_VLE_E_CMPLI: return "e_cmpli"; + case PPC_ID_VLE_E_CRAND: return "e_crand"; + case PPC_ID_VLE_E_CRANDC: return "e_crandc"; + case PPC_ID_VLE_E_CREQV: return "e_creqv"; + case PPC_ID_VLE_E_CRNAND: return "e_crnand"; + case PPC_ID_VLE_E_CRNOR: return "e_crnor"; + case PPC_ID_VLE_E_CROR: return "e_cror"; + case PPC_ID_VLE_E_CRORC: return "e_crorc"; + case PPC_ID_VLE_E_CRXOR: return "e_crxor"; + case PPC_ID_VLE_E_LBZ: return "e_lbz"; + case PPC_ID_VLE_E_LBZU: return "e_lbzu"; + case PPC_ID_VLE_E_LHA: return "e_lha"; + case PPC_ID_VLE_E_LHAU: return "e_lhau"; + case PPC_ID_VLE_E_LHZ: return "e_lhz"; + case PPC_ID_VLE_E_LHZU: return "e_lhzu"; + case PPC_ID_VLE_E_LI: return "e_li"; + case PPC_ID_VLE_E_LIS: return "e_lis"; + case PPC_ID_VLE_E_LMW: return "e_lmw"; + case PPC_ID_VLE_E_LWZ: return "e_lwz"; + case PPC_ID_VLE_E_LWZU: return "e_lwzu"; + case PPC_ID_VLE_E_MCRF: return "e_mcrf"; + case PPC_ID_VLE_E_MULL2I: return "e_mull2i"; + case PPC_ID_VLE_E_MULLI: return "e_mulli"; + case PPC_ID_VLE_E_OR2I: return "e_or2i"; + case PPC_ID_VLE_E_OR2IS: return "e_or2is"; + case PPC_ID_VLE_E_ORIx: return RcMnemonic(instruction, SubMnemVle32ORIx); + case PPC_ID_VLE_E_RLWx: return RcMnemonic(instruction, SubMnemVle32RLWx); + case PPC_ID_VLE_E_RLWIx: return RcMnemonic(instruction, SubMnemVle32RLWIx); + case PPC_ID_VLE_E_RLWIMI: return "e_rlwimi"; + case PPC_ID_VLE_E_RLWINM: return "e_rlwinm"; + case PPC_ID_VLE_E_SLWIx: return RcMnemonic(instruction, SubMnemVle32SLWIx); + case PPC_ID_VLE_E_SRWIx: return RcMnemonic(instruction, SubMnemVle32SRWIx); + case PPC_ID_VLE_E_STB: return "e_stb"; + case PPC_ID_VLE_E_STBU: return "e_stbu"; + case PPC_ID_VLE_E_STH: return "e_sth"; + case PPC_ID_VLE_E_STHU: return "e_sthu"; + case PPC_ID_VLE_E_STMW: return "e_stmw"; + case PPC_ID_VLE_E_STW: return "e_stw"; + case PPC_ID_VLE_E_STWU: return "e_stwu"; + case PPC_ID_VLE_E_SUBFICx: return RcMnemonic(instruction, SubMnemVle32SUBFICx); + case PPC_ID_VLE_E_XORIx: return RcMnemonic(instruction, SubMnemVle32XORIx); + + case PPC_ID_VLE_E_LDVGPRW: return "e_ldvgprw"; + case PPC_ID_VLE_E_LDVSPRW: return "e_ldvsprw"; + case PPC_ID_VLE_E_LDVSRRW: return "e_ldvsrrw"; + case PPC_ID_VLE_E_LDVCSRRW: return "e_ldvcsrrw"; + case PPC_ID_VLE_E_LDVDSRRW: return "e_ldvdsrrw"; + case PPC_ID_VLE_E_STMVGPRW: return "e_stmvgprw"; + case PPC_ID_VLE_E_STMVSPRW: return "e_stmvsprw"; + case PPC_ID_VLE_E_STMVSRRW: return "e_stmvsrrw"; + case PPC_ID_VLE_E_STMVCSRRW: return "e_stmvcsrrw"; + case PPC_ID_VLE_E_STMVDSRRW: return "e_stmvdsrrw"; + + case PPC_ID_VLE_SE_ADD: return "se_add"; + case PPC_ID_VLE_SE_ADDI: return "se_addi"; + case PPC_ID_VLE_SE_ANDx: return RcMnemonic(instruction, SubMnemVle16ANDx); + case PPC_ID_VLE_SE_ANDC: return "se_andc"; + case PPC_ID_VLE_SE_ANDI: return "se_andi"; + case PPC_ID_VLE_SE_Bx: return LkMnemonic(instruction, SubMnemVle16Bx); + case PPC_ID_VLE_SE_BC: + { + uint32_t bo = instruction->operands[0].uimm; + uint32_t bi = instruction->operands[1].uimm; + + switch (bo) + { + // Branch if false + case 0: + switch (bi & 0x3) + { + case 0: return "bgex"; + case 1: return "blex"; + case 2: return "bnex"; + case 3: return "bnsx"; + + default: + return NULL; + } + + break; + + // Branch if true + case 1: + switch (bi & 0x3) + { + case 0: return "bltx"; + case 1: return "bgtx"; + case 2: return "beqx"; + case 3: return "bsox"; + + default: + return NULL; + } + + break; + + // Should be unreachable; bo only 1 bit + default: + return NULL; + } + } + case PPC_ID_VLE_SE_BCLRI: return "se_bclri"; + case PPC_ID_VLE_SE_BCTRx: return LkMnemonic(instruction, SubMnemVle16BCTRx); + case PPC_ID_VLE_SE_BGENI: return "se_bgeni"; + case PPC_ID_VLE_SE_BLRx: return LkMnemonic(instruction, SubMnemVle16BLRx); + case PPC_ID_VLE_SE_BMASKI: return "se_bmaski"; + case PPC_ID_VLE_SE_BSETI: return "se_bseti"; + case PPC_ID_VLE_SE_BTSTI: return "se_btsti"; + case PPC_ID_VLE_SE_CMP: return "se_cmp"; + case PPC_ID_VLE_SE_CMPH: return "se_cmph"; + case PPC_ID_VLE_SE_CMPHL: return "se_cmphl"; + case PPC_ID_VLE_SE_CMPI: return "se_cmpi"; + case PPC_ID_VLE_SE_CMPL: return "se_cmpl"; + case PPC_ID_VLE_SE_CMPLI: return "se_cmpli"; + case PPC_ID_VLE_SE_EXTSB: return "se_extsb"; + case PPC_ID_VLE_SE_EXTSH: return "se_extsh"; + case PPC_ID_VLE_SE_EXTZB: return "se_extzb"; + case PPC_ID_VLE_SE_EXTZH: return "se_extzh"; + case PPC_ID_VLE_SE_ILLEGAL: return "se_illegal"; + case PPC_ID_VLE_SE_ISYNC: return "se_isync"; + case PPC_ID_VLE_SE_LBZ: return "se_lbz"; + case PPC_ID_VLE_SE_LHZ: return "se_lhz"; + case PPC_ID_VLE_SE_LI: return "se_li"; + case PPC_ID_VLE_SE_LWZ: return "se_lwz"; + case PPC_ID_VLE_SE_MFAR: return "se_mfar"; + case PPC_ID_VLE_SE_MFCTR: return "se_mfctr"; + case PPC_ID_VLE_SE_MFLR: return "se_mflr"; + case PPC_ID_VLE_SE_MR: return "se_mr"; + case PPC_ID_VLE_SE_MTAR: return "se_mtar"; + case PPC_ID_VLE_SE_MTCTR: return "se_mtctr"; + case PPC_ID_VLE_SE_MTLR: return "se_mtlr"; + case PPC_ID_VLE_SE_MULLW: return "se_mullw"; + case PPC_ID_VLE_SE_NEG: return "se_neg"; + case PPC_ID_VLE_SE_NOP: return "se_nop"; + case PPC_ID_VLE_SE_NOT: return "se_not"; + case PPC_ID_VLE_SE_OR: return "se_or"; + case PPC_ID_VLE_SE_RFCI: return "se_rfci"; + case PPC_ID_VLE_SE_RFDI: return "se_rfdi"; + case PPC_ID_VLE_SE_RFI: return "se_rfi"; + case PPC_ID_VLE_SE_RFMCI: return "se_rfmci"; + case PPC_ID_VLE_SE_SC: return "se_sc"; + case PPC_ID_VLE_SE_SLW: return "se_slw"; + case PPC_ID_VLE_SE_SLWI: return "se_slwi"; + case PPC_ID_VLE_SE_SRAW: return "se_sraw"; + case PPC_ID_VLE_SE_SRAWI: return "se_srawi"; + case PPC_ID_VLE_SE_SRW: return "se_srw"; + case PPC_ID_VLE_SE_SRWI: return "se_srwi"; + case PPC_ID_VLE_SE_STB: return "se_stb"; + case PPC_ID_VLE_SE_STH: return "se_sth"; + case PPC_ID_VLE_SE_STW: return "se_stw"; + case PPC_ID_VLE_SE_SUB: return "se_sub"; + case PPC_ID_VLE_SE_SUBF: return "se_subf"; + case PPC_ID_VLE_SE_SUBIx: return RcMnemonic(instruction, SubMnemVle16SUBIx); + + default: return NULL; + } +} |
