summaryrefslogtreecommitdiff
path: root/arch/powerpc/decode/decode.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/decode/decode.h')
-rw-r--r--arch/powerpc/decode/decode.h1901
1 files changed, 1901 insertions, 0 deletions
diff --git a/arch/powerpc/decode/decode.h b/arch/powerpc/decode/decode.h
new file mode 100644
index 00000000..f88fd50a
--- /dev/null
+++ b/arch/powerpc/decode/decode.h
@@ -0,0 +1,1901 @@
+#ifndef DECODE_PPC_H
+#define DECODE_PPC_H
+
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+// Procedure for adding a new instruction:
+// * Add its enum to the InstructionId in this file (decode.h)
+// * Add logic to convert instruction bits to the new instruction in decode.c
+// * Add its mnemonic in `GetMnemonic` in `mnemonic.c`
+// * Add its operands in `FillOperands` in `operands.c`
+//
+// This only handles instruction decoding (going from bits --> a powerpc
+// instruction), and not anything like lifting or the behavior of the
+// instruction itself.
+
+#define DECODE_FLAGS_PPC64 0x01
+#define DECODE_FLAGS_ALTIVEC 0x02
+#define DECODE_FLAGS_VSX 0x04
+#define DECODE_FLAGS_QPX 0x08
+#define DECODE_FLAGS_PS 0x10
+#define DECODE_FLAGS_SPE 0x20
+#define DECODE_FLAGS_VLE 0x40
+// When set, disassembly translates to a "normal" PowerPC instruction, which
+// usually amounts to simply dropping the "e_"/"se_" prefix and adding an extra
+// register (changing rX, rY --> rD, rA, rB) , but sometimes totally change the
+// instruction (for example, replacing `se_bgeni` with `li`)
+//
+// Should always be set in `flags` for LLIL, to maximize code reuse
+#define DECODE_FLAGS_VLE_TRANSLATE 0x80
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ enum Register
+ {
+
+ PPC_REG_INVALID = 0,
+
+ PPC_REG_CARRY = 2,
+ PPC_REG_CTR = 3,
+ PPC_REG_LR = 5,
+ PPC_REG_RM = 6,
+ PPC_REG_VRSAVE = 8,
+ PPC_REG_XER = 9,
+ PPC_REG_ZERO = 10,
+ PPC_REG_CTR8 = 20,
+
+ PPC_REG_GPR0 = 87,
+ PPC_REG_GPR1,
+ PPC_REG_GPR2,
+ PPC_REG_GPR3,
+ PPC_REG_GPR4,
+ PPC_REG_GPR5,
+ PPC_REG_GPR6,
+ PPC_REG_GPR7,
+ PPC_REG_GPR8,
+ PPC_REG_GPR9,
+ PPC_REG_GPR10,
+ PPC_REG_GPR11,
+ PPC_REG_GPR12,
+ PPC_REG_GPR13,
+ PPC_REG_GPR14,
+ PPC_REG_GPR15,
+ PPC_REG_GPR16,
+ PPC_REG_GPR17,
+ PPC_REG_GPR18,
+ PPC_REG_GPR19,
+ PPC_REG_GPR20,
+ PPC_REG_GPR21,
+ PPC_REG_GPR22,
+ PPC_REG_GPR23,
+ PPC_REG_GPR24,
+ PPC_REG_GPR25,
+ PPC_REG_GPR26,
+ PPC_REG_GPR27,
+ PPC_REG_GPR28,
+ PPC_REG_GPR29,
+ PPC_REG_GPR30,
+ PPC_REG_GPR31,
+
+ PPC_REG_FR0 = 21,
+ PPC_REG_FR1,
+ PPC_REG_FR2,
+ PPC_REG_FR3,
+ PPC_REG_FR4,
+ PPC_REG_FR5,
+ PPC_REG_FR6,
+ PPC_REG_FR7,
+ PPC_REG_FR8,
+ PPC_REG_FR9,
+ PPC_REG_FR10,
+ PPC_REG_FR11,
+ PPC_REG_FR12,
+ PPC_REG_FR13,
+ PPC_REG_FR14,
+ PPC_REG_FR15,
+ PPC_REG_FR16,
+ PPC_REG_FR17,
+ PPC_REG_FR18,
+ PPC_REG_FR19,
+ PPC_REG_FR20,
+ PPC_REG_FR21,
+ PPC_REG_FR22,
+ PPC_REG_FR23,
+ PPC_REG_FR24,
+ PPC_REG_FR25,
+ PPC_REG_FR26,
+ PPC_REG_FR27,
+ PPC_REG_FR28,
+ PPC_REG_FR29,
+ PPC_REG_FR30,
+ PPC_REG_FR31,
+
+ // each 4-bit CR register
+ PPC_REG_CRF0 = 12,
+ PPC_REG_CRF1,
+ PPC_REG_CRF2,
+ PPC_REG_CRF3,
+ PPC_REG_CRF4,
+ PPC_REG_CRF5,
+ PPC_REG_CRF6,
+ PPC_REG_CRF7,
+
+ PPC_REG_AV_VR0 = 121,
+ PPC_REG_AV_VR1,
+ PPC_REG_AV_VR2,
+ PPC_REG_AV_VR3,
+ PPC_REG_AV_VR4,
+ PPC_REG_AV_VR5,
+ PPC_REG_AV_VR6,
+ PPC_REG_AV_VR7,
+ PPC_REG_AV_VR8,
+ PPC_REG_AV_VR9,
+ PPC_REG_AV_VR10,
+ PPC_REG_AV_VR11,
+ PPC_REG_AV_VR12,
+ PPC_REG_AV_VR13,
+ PPC_REG_AV_VR14,
+ PPC_REG_AV_VR15,
+ PPC_REG_AV_VR16,
+ PPC_REG_AV_VR17,
+ PPC_REG_AV_VR18,
+ PPC_REG_AV_VR19,
+ PPC_REG_AV_VR20,
+ PPC_REG_AV_VR21,
+ PPC_REG_AV_VR22,
+ PPC_REG_AV_VR23,
+ PPC_REG_AV_VR24,
+ PPC_REG_AV_VR25,
+ PPC_REG_AV_VR26,
+ PPC_REG_AV_VR27,
+ PPC_REG_AV_VR28,
+ PPC_REG_AV_VR29,
+ PPC_REG_AV_VR30,
+ PPC_REG_AV_VR31,
+
+ PPC_REG_VSX_VR0 = 215,
+ PPC_REG_VSX_VR1,
+ PPC_REG_VSX_VR2,
+ PPC_REG_VSX_VR3,
+ PPC_REG_VSX_VR4,
+ PPC_REG_VSX_VR5,
+ PPC_REG_VSX_VR6,
+ PPC_REG_VSX_VR7,
+ PPC_REG_VSX_VR8,
+ PPC_REG_VSX_VR9,
+ PPC_REG_VSX_VR10,
+ PPC_REG_VSX_VR11,
+ PPC_REG_VSX_VR12,
+ PPC_REG_VSX_VR13,
+ PPC_REG_VSX_VR14,
+ PPC_REG_VSX_VR15,
+ PPC_REG_VSX_VR16,
+ PPC_REG_VSX_VR17,
+ PPC_REG_VSX_VR18,
+ PPC_REG_VSX_VR19,
+ PPC_REG_VSX_VR20,
+ PPC_REG_VSX_VR21,
+ PPC_REG_VSX_VR22,
+ PPC_REG_VSX_VR23,
+ PPC_REG_VSX_VR24,
+ PPC_REG_VSX_VR25,
+ PPC_REG_VSX_VR26,
+ PPC_REG_VSX_VR27,
+ PPC_REG_VSX_VR28,
+ PPC_REG_VSX_VR29,
+ PPC_REG_VSX_VR30,
+ PPC_REG_VSX_VR31,
+ PPC_REG_VSX_VR32,
+ PPC_REG_VSX_VR33,
+ PPC_REG_VSX_VR34,
+ PPC_REG_VSX_VR35,
+ PPC_REG_VSX_VR36,
+ PPC_REG_VSX_VR37,
+ PPC_REG_VSX_VR38,
+ PPC_REG_VSX_VR39,
+ PPC_REG_VSX_VR40,
+ PPC_REG_VSX_VR41,
+ PPC_REG_VSX_VR42,
+ PPC_REG_VSX_VR43,
+ PPC_REG_VSX_VR44,
+ PPC_REG_VSX_VR45,
+ PPC_REG_VSX_VR46,
+ PPC_REG_VSX_VR47,
+ PPC_REG_VSX_VR48,
+ PPC_REG_VSX_VR49,
+ PPC_REG_VSX_VR50,
+ PPC_REG_VSX_VR51,
+ PPC_REG_VSX_VR52,
+ PPC_REG_VSX_VR53,
+ PPC_REG_VSX_VR54,
+ PPC_REG_VSX_VR55,
+ PPC_REG_VSX_VR56,
+ PPC_REG_VSX_VR57,
+ PPC_REG_VSX_VR58,
+ PPC_REG_VSX_VR59,
+ PPC_REG_VSX_VR60,
+ PPC_REG_VSX_VR61,
+ PPC_REG_VSX_VR62,
+ PPC_REG_VSX_VR63,
+
+ PPC_REG_GQR0 = 345,
+ PPC_REG_GQR1,
+ PPC_REG_GQR2,
+ PPC_REG_GQR3,
+ PPC_REG_GQR4,
+ PPC_REG_GQR5,
+ PPC_REG_GQR6,
+ PPC_REG_GQR7,
+ };
+
+#ifndef __cplusplus
+ typedef enum Register Register;
+#endif
+
+ enum OperandClass
+ {
+ PPC_OP_NONE = 0,
+ PPC_OP_UIMM,
+ PPC_OP_SIMM,
+ PPC_OP_LABEL,
+ PPC_OP_MEM_RA,
+
+ PPC_OP_REG_RA,
+ PPC_OP_REG_RB,
+ PPC_OP_REG_RC,
+ PPC_OP_REG_RD,
+ PPC_OP_REG_RS,
+
+ PPC_OP_REG_FRA,
+ PPC_OP_REG_FRB,
+ PPC_OP_REG_FRC,
+ PPC_OP_REG_FRD,
+ PPC_OP_REG_FRS,
+
+ PPC_OP_REG_CRFD,
+ PPC_OP_REG_CRFD_IMPLY0,
+ PPC_OP_REG_CRFS,
+ PPC_OP_REG_CRFS_IMPLY0,
+ PPC_OP_CRBIT,
+ PPC_OP_CRBIT_A,
+ PPC_OP_CRBIT_B,
+ PPC_OP_CRBIT_D,
+
+ PPC_OP_REG_AV_VA,
+ PPC_OP_REG_AV_VB,
+ PPC_OP_REG_AV_VC,
+ PPC_OP_REG_AV_VD,
+ PPC_OP_REG_AV_VS,
+
+ // DWORD0 means that only the 0th dword is affected, which
+ // has an overlap with floating registers
+ PPC_OP_REG_VSX_RA,
+ PPC_OP_REG_VSX_RA_DWORD0,
+
+ PPC_OP_REG_VSX_RB,
+ PPC_OP_REG_VSX_RB_DWORD0,
+
+ PPC_OP_REG_VSX_RC,
+ PPC_OP_REG_VSX_RC_DWORD0,
+
+ PPC_OP_REG_VSX_RD,
+ PPC_OP_REG_VSX_RD_DWORD0,
+
+ PPC_OP_REG_VSX_RS,
+ PPC_OP_REG_VSX_RS_DWORD0,
+ };
+
+#ifndef __cplusplus
+ typedef enum OperandClass OperandClass;
+#endif
+
+ enum VsxWidth
+ {
+ VSX_WIDTH_FULL,
+ VSX_WIDTH_DWORD0,
+ };
+
+#ifndef __cplusplus
+ typedef enum VsxWidth VsxWidth;
+#endif
+
+ struct MemoryOperand
+ {
+ enum Register reg;
+ int32_t offset;
+ };
+
+#ifndef __cplusplus
+ typedef struct MemoryOperand MemoryOperand;
+#endif
+
+ struct Operand
+ {
+ OperandClass cls;
+ union {
+ enum Register reg;
+ uint64_t uimm;
+ int64_t simm;
+ MemoryOperand mem;
+ uint64_t label;
+ uint32_t crbit;
+ };
+ };
+
+#ifndef __cplusplus
+ typedef struct Operand Operand;
+#endif
+
+ struct OperandsList
+ {
+ size_t numOperands;
+ Operand operands[8];
+ };
+
+#ifndef __cplusplus
+ typedef struct OperandsList OperandsList;
+#endif
+
+ // trailing lowercase 'x' indicates potential other mnemonics (rc, oe, lk,
+ // etc. bits)
+ enum InstructionId
+ {
+ PPC_ID_INVALID,
+
+ PPC_ID_ADDx,
+ PPC_ID_ADDCx,
+ PPC_ID_ADDEx,
+ PPC_ID_ADDIx,
+ PPC_ID_ADDICx,
+ PPC_ID_ADDIS,
+ PPC_ID_ADDMEx,
+ PPC_ID_ADDPCIS,
+ PPC_ID_ADDZEx,
+ PPC_ID_ANDx,
+ PPC_ID_ANDCx,
+ PPC_ID_ANDIx,
+ PPC_ID_ANDIS,
+ PPC_ID_ATTN,
+ PPC_ID_Bx,
+ PPC_ID_BCx,
+ PPC_ID_BCCTRx,
+ PPC_ID_BCLRx,
+ PPC_ID_BPERMD,
+ PPC_ID_CLRBHRB,
+ PPC_ID_CLRLDIx,
+ PPC_ID_CLRRDIx,
+ PPC_ID_CLRLWIx,
+ PPC_ID_CLRRWIx,
+ PPC_ID_CMPB,
+ PPC_ID_CMPD,
+ PPC_ID_CMPDI,
+ PPC_ID_CMPEQB,
+ PPC_ID_CMPRB,
+ PPC_ID_CMPW,
+ PPC_ID_CMPWI,
+ PPC_ID_CMPLD,
+ PPC_ID_CMPLDI,
+ PPC_ID_CMPLW,
+ PPC_ID_CMPLWI,
+ PPC_ID_CNTLZDx,
+ PPC_ID_CNTLZWx,
+ PPC_ID_CNTTZDx,
+ PPC_ID_CNTTZWx,
+ PPC_ID_COPY,
+ PPC_ID_CP_ABORT,
+ PPC_ID_CRAND,
+ PPC_ID_CRANDC,
+ PPC_ID_CRCLR,
+ PPC_ID_CREQV,
+ PPC_ID_CRMOVE,
+ PPC_ID_CRNAND,
+ PPC_ID_CRNOR,
+ PPC_ID_CRNOT,
+ PPC_ID_CROR,
+ PPC_ID_CRORC,
+ PPC_ID_CRSET,
+ PPC_ID_CRXOR,
+ PPC_ID_DARN,
+ PPC_ID_DCBA,
+ PPC_ID_DCBF,
+ PPC_ID_DCBFEP,
+ PPC_ID_DCBFL,
+ PPC_ID_DCBFLP,
+ PPC_ID_DCBI,
+ PPC_ID_DCBST,
+ PPC_ID_DCBSTEP,
+ PPC_ID_DCBT,
+ PPC_ID_DCBTEP,
+ PPC_ID_DCBTST,
+ PPC_ID_DCBTSTEP,
+ PPC_ID_DCBTSTT,
+ PPC_ID_DCBTT,
+ PPC_ID_DCBZ,
+ PPC_ID_DCBZEP,
+ PPC_ID_DCBZL,
+ PPC_ID_DCBZLEP,
+ PPC_ID_DCCCI,
+ PPC_ID_DCI,
+ PPC_ID_DIVDx,
+ PPC_ID_DIVDEx,
+ PPC_ID_DIVDEUx,
+ PPC_ID_DIVDUx,
+ PPC_ID_DIVWx,
+ PPC_ID_DIVWEx,
+ PPC_ID_DIVWEUx,
+ PPC_ID_DIVWUx,
+ PPC_ID_ECIWX,
+ PPC_ID_ECOWX,
+ PPC_ID_EIEIO,
+ PPC_ID_EQVx,
+ PPC_ID_EXTLDIx,
+ PPC_ID_EXTLWIx,
+ PPC_ID_EXTRDIx,
+ PPC_ID_EXTRWIx,
+ PPC_ID_EXTSBx,
+ PPC_ID_EXTSHx,
+ PPC_ID_EXTSWx,
+ PPC_ID_EXTSWSLIx,
+ PPC_ID_FABSx,
+ PPC_ID_FADDx,
+ PPC_ID_FADDSx,
+ PPC_ID_FCFIDx,
+ PPC_ID_FCFIDSx,
+ PPC_ID_FCFIDUx,
+ PPC_ID_FCFIDUSx,
+ PPC_ID_FCMPO,
+ PPC_ID_FCMPU,
+ PPC_ID_FCPSGNx,
+ PPC_ID_FCTIDx,
+ PPC_ID_FCTIDUx,
+ PPC_ID_FCTIDUZx,
+ PPC_ID_FCTIDZx,
+ PPC_ID_FCTIWx,
+ PPC_ID_FCTIWUx,
+ PPC_ID_FCTIWUZx,
+ PPC_ID_FCTIWZx,
+ PPC_ID_FDIVx,
+ PPC_ID_FDIVSx,
+ PPC_ID_FMADDx,
+ PPC_ID_FMADDSx,
+ PPC_ID_FMRx,
+ PPC_ID_FMSUBx,
+ PPC_ID_FMSUBSx,
+ PPC_ID_FMULx,
+ PPC_ID_FMULSx,
+ PPC_ID_FNABSx,
+ PPC_ID_FNEGx,
+ PPC_ID_FNMADDx,
+ PPC_ID_FNMADDSx,
+ PPC_ID_FNMSUBx,
+ PPC_ID_FNMSUBSx,
+ PPC_ID_FREx,
+ PPC_ID_FRESx,
+ PPC_ID_FRIMx,
+ PPC_ID_FRINx,
+ PPC_ID_FRIPx,
+ PPC_ID_FRIZx,
+ PPC_ID_FRSPx,
+ PPC_ID_FRSQRTEx,
+ PPC_ID_FRSQRTESx,
+ PPC_ID_FSELx,
+ PPC_ID_FSQRTx,
+ PPC_ID_FSQRTSx,
+ PPC_ID_FSUBx,
+ PPC_ID_FSUBSx,
+ PPC_ID_FTDIV,
+ PPC_ID_FTSQRT,
+ PPC_ID_HRFID,
+ PPC_ID_ICBI,
+ PPC_ID_ICBIEP,
+ PPC_ID_ICBLC,
+ PPC_ID_ICBLQ,
+ PPC_ID_ICBT,
+ PPC_ID_ICBTLS,
+ PPC_ID_ICCCI,
+ PPC_ID_ICI,
+ PPC_ID_ISEL,
+ PPC_ID_ISYNC,
+ PPC_ID_LBARX,
+ PPC_ID_LBEPX,
+ PPC_ID_LBZ,
+ PPC_ID_LBZCIX,
+ PPC_ID_LBZU,
+ PPC_ID_LBZUX,
+ PPC_ID_LBZX,
+ PPC_ID_LD,
+ PPC_ID_LDAT,
+ PPC_ID_LDARX,
+ PPC_ID_LDBRX,
+ PPC_ID_LDCIX,
+ PPC_ID_LDU,
+ PPC_ID_LDUX,
+ PPC_ID_LDX,
+ PPC_ID_LFD,
+ PPC_ID_LFDEPX,
+ PPC_ID_LFDU,
+ PPC_ID_LFDUX,
+ PPC_ID_LFDX,
+ PPC_ID_LFIWAX,
+ PPC_ID_LFIWZX,
+ PPC_ID_LFS,
+ PPC_ID_LFSU,
+ PPC_ID_LFSUX,
+ PPC_ID_LFSX,
+ PPC_ID_LHA,
+ PPC_ID_LHAU,
+ PPC_ID_LHAUX,
+ PPC_ID_LHAX,
+ PPC_ID_LHARX,
+ PPC_ID_LHBRX,
+ PPC_ID_LHEPX,
+ PPC_ID_LHZ,
+ PPC_ID_LHZCIX,
+ PPC_ID_LHZU,
+ PPC_ID_LHZUX,
+ PPC_ID_LHZX,
+ PPC_ID_LI,
+ PPC_ID_LIS,
+ PPC_ID_LMW,
+ PPC_ID_LNIA,
+ PPC_ID_LSWI,
+ PPC_ID_LSWX,
+ PPC_ID_LWA,
+ PPC_ID_LWAT,
+ PPC_ID_LWAX,
+ PPC_ID_LWARX,
+ PPC_ID_LWAUX,
+ PPC_ID_LWBRX,
+ PPC_ID_LWEPX,
+ PPC_ID_LWSYNC,
+ PPC_ID_LWZ,
+ PPC_ID_LWZCIX,
+ PPC_ID_LWZU,
+ PPC_ID_LWZUX,
+ PPC_ID_LWZX,
+ PPC_ID_MBAR,
+ PPC_ID_MCRF,
+ PPC_ID_MCRFS,
+ PPC_ID_MCRXR,
+ PPC_ID_MCRXRX,
+ PPC_ID_MFBHRBE,
+ PPC_ID_MFBR0,
+ PPC_ID_MFBR1,
+ PPC_ID_MFBR2,
+ PPC_ID_MFBR3,
+ PPC_ID_MFBR4,
+ PPC_ID_MFBR5,
+ PPC_ID_MFBR6,
+ PPC_ID_MFBR7,
+ PPC_ID_MFCR,
+ PPC_ID_MFCTR,
+ PPC_ID_MFDCR,
+ PPC_ID_MFDCRUX,
+ PPC_ID_MFDCRX,
+ PPC_ID_MFFSx,
+ PPC_ID_MFFSCDRN,
+ PPC_ID_MFFSCDRNI,
+ PPC_ID_MFFSCE,
+ PPC_ID_MFFSCRN,
+ PPC_ID_MFFSCRNI,
+ PPC_ID_MFFSL,
+ PPC_ID_MFLR,
+ PPC_ID_MFMSR,
+ PPC_ID_MFOCRF,
+ PPC_ID_MFPMR,
+ PPC_ID_MFSPR,
+ PPC_ID_MFSR,
+ PPC_ID_MFSRIN,
+ PPC_ID_MFTB,
+ PPC_ID_MFTBU,
+ PPC_ID_MFXER,
+ PPC_ID_MRx,
+ PPC_ID_MSGSYNC,
+ PPC_ID_MTAMR,
+ PPC_ID_MTBR0,
+ PPC_ID_MTBR1,
+ PPC_ID_MTBR2,
+ PPC_ID_MTBR3,
+ PPC_ID_MTBR4,
+ PPC_ID_MTBR5,
+ PPC_ID_MTBR6,
+ PPC_ID_MTBR7,
+ PPC_ID_MTCFAR,
+ PPC_ID_MTCRF,
+ PPC_ID_MTCTR,
+ PPC_ID_MTDAR,
+ PPC_ID_MTDCCR,
+ PPC_ID_MTDCR,
+ PPC_ID_MTDCRUX,
+ PPC_ID_MTDCRX,
+ PPC_ID_MTFSB0x,
+ PPC_ID_MTFSB1x,
+ PPC_ID_MTFSFx,
+ PPC_ID_MTFSFIx,
+ PPC_ID_MODSD,
+ PPC_ID_MODSW,
+ PPC_ID_MODUD,
+ PPC_ID_MODUW,
+ PPC_ID_MTICCR,
+ PPC_ID_MTLR,
+ PPC_ID_MTMSR,
+ PPC_ID_MTMSRD,
+ PPC_ID_MTOCRF,
+ PPC_ID_MTPMR,
+ PPC_ID_MTSPR,
+ PPC_ID_MTSR,
+ PPC_ID_MTSRIN,
+ PPC_ID_MTSRR2,
+ PPC_ID_MTSRR3,
+ PPC_ID_MTTBHI,
+ PPC_ID_MTTBL,
+ PPC_ID_MTTBU,
+ PPC_ID_MTXER,
+ PPC_ID_MULHDx,
+ PPC_ID_MULHDUx,
+ PPC_ID_MULHWx,
+ PPC_ID_MULHWUx,
+ PPC_ID_MULLDx,
+ PPC_ID_MULLI,
+ PPC_ID_MULLWx,
+ PPC_ID_NAP,
+ PPC_ID_NANDx,
+ PPC_ID_NEGx,
+ PPC_ID_NOP,
+ PPC_ID_NORx,
+ PPC_ID_ORx,
+ PPC_ID_ORCx,
+ PPC_ID_ORIx,
+ PPC_ID_ORIS,
+ PPC_ID_PASTE,
+ PPC_ID_POPCNTB,
+ PPC_ID_POPCNTD,
+ PPC_ID_POPCNTW,
+ PPC_ID_PTESYNC,
+ PPC_ID_RFCI,
+ PPC_ID_RFDI,
+ PPC_ID_RFEBB,
+ PPC_ID_RFI,
+ PPC_ID_RFID,
+ PPC_ID_RFMCI,
+ PPC_ID_RLDICLx,
+ PPC_ID_RLDICRx,
+ PPC_ID_RLDICx,
+ PPC_ID_RLDIMIx,
+ PPC_ID_RLDCLx,
+ PPC_ID_RLDCRx,
+ PPC_ID_RLWIMIx,
+ PPC_ID_RLWINMx,
+ PPC_ID_RLWNMx,
+ PPC_ID_ROTLDx,
+ PPC_ID_ROTLDIx,
+ PPC_ID_ROTLWx,
+ PPC_ID_ROTLWIx,
+ PPC_ID_ROTRDIx,
+ PPC_ID_ROTRWIx,
+ PPC_ID_SC,
+ PPC_ID_SETB,
+ PPC_ID_SLBIA,
+ PPC_ID_SLBIE,
+ PPC_ID_SLBIEG,
+ PPC_ID_SLBMFEE,
+ PPC_ID_SLBMFEV,
+ PPC_ID_SLBMTE,
+ PPC_ID_SLBSYNC,
+ PPC_ID_SLDx,
+ PPC_ID_SLDIx,
+ PPC_ID_SLWx,
+ PPC_ID_SLWIx,
+ PPC_ID_SRADx,
+ PPC_ID_SRADIx,
+ PPC_ID_SRAWx,
+ PPC_ID_SRAWIx,
+ PPC_ID_SRDx,
+ PPC_ID_SRDIx,
+ PPC_ID_SRWx,
+ PPC_ID_SRWIx,
+ PPC_ID_STB,
+ PPC_ID_STBCX,
+ PPC_ID_STBU,
+ PPC_ID_STBUX,
+ PPC_ID_STBX,
+ PPC_ID_STBCIX,
+ PPC_ID_STBEPX,
+ PPC_ID_STD,
+ PPC_ID_STDAT,
+ PPC_ID_STDBRX,
+ PPC_ID_STDCIX,
+ PPC_ID_STDCX,
+ PPC_ID_STDEPX,
+ PPC_ID_STDU,
+ PPC_ID_STDUX,
+ PPC_ID_STDX,
+ PPC_ID_STFD,
+ PPC_ID_STFDEPX,
+ PPC_ID_STFDU,
+ PPC_ID_STFDUX,
+ PPC_ID_STFDX,
+ PPC_ID_STFIWX,
+ PPC_ID_STFS,
+ PPC_ID_STFSU,
+ PPC_ID_STFSUX,
+ PPC_ID_STFSX,
+ PPC_ID_STH,
+ PPC_ID_STHBRX,
+ PPC_ID_STHCX,
+ PPC_ID_STHCIX,
+ PPC_ID_STHEPX,
+ PPC_ID_STHU,
+ PPC_ID_STHUX,
+ PPC_ID_STHX,
+ PPC_ID_STMW,
+ PPC_ID_STOP,
+ PPC_ID_STSWI,
+ PPC_ID_STSWX,
+ PPC_ID_STW,
+ PPC_ID_STWAT,
+ PPC_ID_STWBRX,
+ PPC_ID_STWCIX,
+ PPC_ID_STWCX,
+ PPC_ID_STWEPX,
+ PPC_ID_STWU,
+ PPC_ID_STWUX,
+ PPC_ID_STWX,
+ PPC_ID_SUBFx,
+ PPC_ID_SUBFCx,
+ PPC_ID_SUBFEx,
+ PPC_ID_SUBFICx,
+ PPC_ID_SUBFMEx,
+ PPC_ID_SUBFZEx,
+ PPC_ID_SYNC,
+ PPC_ID_TABORT,
+ PPC_ID_TABORTDC,
+ PPC_ID_TABORTDCI,
+ PPC_ID_TABORTWC,
+ PPC_ID_TABORTWCI,
+ PPC_ID_TBEGIN,
+ PPC_ID_TCHECK,
+ PPC_ID_TD,
+ PPC_ID_TDEQ,
+ PPC_ID_TDEQI,
+ PPC_ID_TDGT,
+ PPC_ID_TDGTI,
+ PPC_ID_TDI,
+ PPC_ID_TDLGT,
+ PPC_ID_TDLGTI,
+ PPC_ID_TDLLT,
+ PPC_ID_TDLLTI,
+ PPC_ID_TDLT,
+ PPC_ID_TDLTI,
+ PPC_ID_TDNE,
+ PPC_ID_TDNEI,
+ PPC_ID_TDU,
+ PPC_ID_TDUI,
+ PPC_ID_TEND,
+ PPC_ID_TLBIA,
+ PPC_ID_TLBIE,
+ PPC_ID_TLBIEL,
+ PPC_ID_TLBIVAX,
+ PPC_ID_TLBLI,
+ PPC_ID_TLBSX,
+ PPC_ID_TLBSYNC,
+ PPC_ID_TLBRE,
+ PPC_ID_TLBRELO,
+ PPC_ID_TLBREHI,
+ PPC_ID_TLBWE,
+ PPC_ID_TLBWEHI,
+ PPC_ID_TLBWELO,
+ PPC_ID_TRAP,
+ PPC_ID_TRECHKPT,
+ PPC_ID_TRECLAIM,
+ PPC_ID_TSR,
+ PPC_ID_TW,
+ PPC_ID_TWEQ,
+ PPC_ID_TWEQI,
+ PPC_ID_TWGT,
+ PPC_ID_TWGTI,
+ PPC_ID_TWGEI,
+ PPC_ID_TWI,
+ PPC_ID_TWLEI,
+ PPC_ID_TWLLEI,
+ PPC_ID_TWLGT,
+ PPC_ID_TWLGTI,
+ PPC_ID_TWLLT,
+ PPC_ID_TWLLTI,
+ PPC_ID_TWLT,
+ PPC_ID_TWLTI,
+ PPC_ID_TWNE,
+ PPC_ID_TWNEI,
+ PPC_ID_TWU,
+ PPC_ID_TWUI,
+ PPC_ID_WAIT,
+ PPC_ID_WAITIMPL,
+ PPC_ID_WAITRSV,
+ PPC_ID_WRTEE,
+ PPC_ID_WRTEEI,
+ PPC_ID_XNOP,
+ PPC_ID_XORx,
+ PPC_ID_XORIx,
+ PPC_ID_XORIS,
+
+ // AltiVec instructions
+ PPC_ID_AV_VABSDUB,
+ PPC_ID_AV_VABSDUH,
+ PPC_ID_AV_VABSDUW,
+ PPC_ID_AV_VADDUQM,
+ PPC_ID_AV_VADDCUQ,
+ PPC_ID_AV_BCDADD,
+ PPC_ID_AV_BCDCFN,
+ PPC_ID_AV_BCDCFSQ,
+ PPC_ID_AV_BCDCFZ,
+ PPC_ID_AV_BCDCPSGN,
+ PPC_ID_AV_BCDCTN,
+ PPC_ID_AV_BCDCTSQ,
+ PPC_ID_AV_BCDCTZ,
+ PPC_ID_AV_BCDS,
+ PPC_ID_AV_BCDSETSGN,
+ PPC_ID_AV_BCDSR,
+ PPC_ID_AV_BCDSUB,
+ PPC_ID_AV_BCDTRUNC,
+ PPC_ID_AV_BCDUS,
+ PPC_ID_AV_BCDUTRUNC,
+ PPC_ID_AV_DSS,
+ PPC_ID_AV_DSSALL,
+ PPC_ID_AV_DST,
+ PPC_ID_AV_DSTST,
+ PPC_ID_AV_DSTSTT,
+ PPC_ID_AV_DSTT,
+ PPC_ID_AV_LVEBX,
+ PPC_ID_AV_LVEHX,
+ PPC_ID_AV_LVEWX,
+ PPC_ID_AV_LVSL,
+ PPC_ID_AV_LVSR,
+ PPC_ID_AV_LVX,
+ PPC_ID_AV_LVXL,
+ PPC_ID_AV_MADDHD,
+ PPC_ID_AV_MADDHDU,
+ PPC_ID_AV_MADDLD,
+ PPC_ID_AV_MFVSCR,
+ PPC_ID_AV_MTVSCR,
+ PPC_ID_AV_STVEBX,
+ PPC_ID_AV_STVEHX,
+ PPC_ID_AV_STVEWX,
+ PPC_ID_AV_STVX,
+ PPC_ID_AV_STVXL,
+ PPC_ID_AV_VADDCUW,
+ PPC_ID_AV_VADDECUQ,
+ PPC_ID_AV_VADDEUQM,
+ PPC_ID_AV_VADDFP,
+ PPC_ID_AV_VADDSBS,
+ PPC_ID_AV_VADDSHS,
+ PPC_ID_AV_VADDSWS,
+ PPC_ID_AV_VADDUBM,
+ PPC_ID_AV_VADDUBS,
+ PPC_ID_AV_VADDUDM,
+ PPC_ID_AV_VADDUHM,
+ PPC_ID_AV_VADDUHS,
+ PPC_ID_AV_VADDUWM,
+ PPC_ID_AV_VADDUWS,
+ PPC_ID_AV_VAND,
+ PPC_ID_AV_VANDC,
+ PPC_ID_AV_VAVGSB,
+ PPC_ID_AV_VAVGSH,
+ PPC_ID_AV_VAVGSW,
+ PPC_ID_AV_VAVGUB,
+ PPC_ID_AV_VAVGUH,
+ PPC_ID_AV_VAVGUW,
+ PPC_ID_AV_VBPERMD,
+ PPC_ID_AV_VBPERMQ,
+ PPC_ID_AV_VCFSX,
+ PPC_ID_AV_VCFUX,
+ PPC_ID_AV_VCIPHER,
+ PPC_ID_AV_VCIPHERLAST,
+ PPC_ID_AV_VCLZB,
+ PPC_ID_AV_VCLZD,
+ PPC_ID_AV_VCLZH,
+ PPC_ID_AV_VCLZLSBB,
+ PPC_ID_AV_VCLZW,
+ PPC_ID_AV_VCMPBFPx,
+ PPC_ID_AV_VCMPEQFPx,
+ PPC_ID_AV_VCMPEQUBx,
+ PPC_ID_AV_VCMPEQUDx,
+ PPC_ID_AV_VCMPEQUHx,
+ PPC_ID_AV_VCMPEQUWx,
+ PPC_ID_AV_VCMPGEFPx,
+ PPC_ID_AV_VCMPGTFPx,
+ PPC_ID_AV_VCMPGTSBx,
+ PPC_ID_AV_VCMPGTSDx,
+ PPC_ID_AV_VCMPGTSHx,
+ PPC_ID_AV_VCMPGTSWx,
+ PPC_ID_AV_VCMPGTUBx,
+ PPC_ID_AV_VCMPGTUDx,
+ PPC_ID_AV_VCMPGTUHx,
+ PPC_ID_AV_VCMPGTUWx,
+ PPC_ID_AV_VCMPNEBx,
+ PPC_ID_AV_VCMPNEHx,
+ PPC_ID_AV_VCMPNEWx,
+ PPC_ID_AV_VCMPNEZBx,
+ PPC_ID_AV_VCMPNEZHx,
+ PPC_ID_AV_VCMPNEZWx,
+ PPC_ID_AV_VCTSXS,
+ PPC_ID_AV_VCTUXS,
+ PPC_ID_AV_VCTZB,
+ PPC_ID_AV_VCTZD,
+ PPC_ID_AV_VCTZH,
+ PPC_ID_AV_VCTZLSBB,
+ PPC_ID_AV_VCTZW,
+ PPC_ID_AV_VEQV,
+ PPC_ID_AV_VEXPTEFP,
+ PPC_ID_AV_VEXTRACTD,
+ PPC_ID_AV_VEXTRACTUB,
+ PPC_ID_AV_VEXTRACTUH,
+ PPC_ID_AV_VEXTRACTUW,
+ PPC_ID_AV_VEXTSB2D,
+ PPC_ID_AV_VEXTSB2W,
+ PPC_ID_AV_VEXTSH2D,
+ PPC_ID_AV_VEXTSH2W,
+ PPC_ID_AV_VEXTSW2D,
+ PPC_ID_AV_VEXTUBLX,
+ PPC_ID_AV_VEXTUHLX,
+ PPC_ID_AV_VEXTUWLX,
+ PPC_ID_AV_VEXTUBRX,
+ PPC_ID_AV_VEXTUHRX,
+ PPC_ID_AV_VEXTUWRX,
+ PPC_ID_AV_VGBBD,
+ PPC_ID_AV_VINSERTB,
+ PPC_ID_AV_VINSERTD,
+ PPC_ID_AV_VINSERTH,
+ PPC_ID_AV_VINSERTW,
+ PPC_ID_AV_VLOGEFP,
+ PPC_ID_AV_VMADDFP,
+ PPC_ID_AV_VMAXFP,
+ PPC_ID_AV_VMAXSB,
+ PPC_ID_AV_VMAXSD,
+ PPC_ID_AV_VMAXSH,
+ PPC_ID_AV_VMAXSW,
+ PPC_ID_AV_VMAXUB,
+ PPC_ID_AV_VMAXUD,
+ PPC_ID_AV_VMAXUH,
+ PPC_ID_AV_VMAXUW,
+ PPC_ID_AV_VMHADDSHS,
+ PPC_ID_AV_VMHRADDSHS,
+ PPC_ID_AV_VMINFP,
+ PPC_ID_AV_VMINSB,
+ PPC_ID_AV_VMINSD,
+ PPC_ID_AV_VMINSH,
+ PPC_ID_AV_VMINSW,
+ PPC_ID_AV_VMINUB,
+ PPC_ID_AV_VMINUD,
+ PPC_ID_AV_VMINUH,
+ PPC_ID_AV_VMINUW,
+ PPC_ID_AV_VMLADDUHM,
+ PPC_ID_AV_VMR,
+ PPC_ID_AV_VMRGEW,
+ PPC_ID_AV_VMRGHB,
+ PPC_ID_AV_VMRGHH,
+ PPC_ID_AV_VMRGHW,
+ PPC_ID_AV_VMRGLB,
+ PPC_ID_AV_VMRGLH,
+ PPC_ID_AV_VMRGLW,
+ PPC_ID_AV_VMRGOW,
+ PPC_ID_AV_VMSUMMBM,
+ PPC_ID_AV_VMSUMSHM,
+ PPC_ID_AV_VMSUMSHS,
+ PPC_ID_AV_VMSUMUBM,
+ PPC_ID_AV_VMSUMUHM,
+ PPC_ID_AV_VMSUMUHS,
+ PPC_ID_AV_VMUL10CUQ,
+ PPC_ID_AV_VMUL10EUQ,
+ PPC_ID_AV_VMUL10ECUQ,
+ PPC_ID_AV_VMUL10UQ,
+ PPC_ID_AV_VMULESB,
+ PPC_ID_AV_VMULESH,
+ PPC_ID_AV_VMULESW,
+ PPC_ID_AV_VMULEUB,
+ PPC_ID_AV_VMULEUH,
+ PPC_ID_AV_VMULEUW,
+ PPC_ID_AV_VMULOSB,
+ PPC_ID_AV_VMULOSH,
+ PPC_ID_AV_VMULOSW,
+ PPC_ID_AV_VMULOUB,
+ PPC_ID_AV_VMULOUH,
+ PPC_ID_AV_VMULOUW,
+ PPC_ID_AV_VMULUWM,
+ PPC_ID_AV_VNAND,
+ PPC_ID_AV_VNCIPHER,
+ PPC_ID_AV_VNCIPHERLAST,
+ PPC_ID_AV_VNMSUBFP,
+ PPC_ID_AV_VNEGD,
+ PPC_ID_AV_VNEGW,
+ PPC_ID_AV_VNOR,
+ PPC_ID_AV_VNOT,
+ PPC_ID_AV_VOR,
+ PPC_ID_AV_VORC,
+ PPC_ID_AV_VPERM,
+ PPC_ID_AV_VPERMR,
+ PPC_ID_AV_VPERMXOR,
+ PPC_ID_AV_VPKPX,
+ PPC_ID_AV_VPKSDSS,
+ PPC_ID_AV_VPKSDUS,
+ PPC_ID_AV_VPKSHSS,
+ PPC_ID_AV_VPKSHUS,
+ PPC_ID_AV_VPKSWSS,
+ PPC_ID_AV_VPKSWUS,
+ PPC_ID_AV_VPKUDUM,
+ PPC_ID_AV_VPKUDUS,
+ PPC_ID_AV_VPKUHUM,
+ PPC_ID_AV_VPKUHUS,
+ PPC_ID_AV_VPKUWUM,
+ PPC_ID_AV_VPKUWUS,
+ PPC_ID_AV_VPMSUMB,
+ PPC_ID_AV_VPMSUMD,
+ PPC_ID_AV_VPMSUMH,
+ PPC_ID_AV_VPMSUMW,
+ PPC_ID_AV_VPOPCNTB,
+ PPC_ID_AV_VPOPCNTD,
+ PPC_ID_AV_VPOPCNTH,
+ PPC_ID_AV_VPOPCNTW,
+ PPC_ID_AV_VPRTYBD,
+ PPC_ID_AV_VPRTYBQ,
+ PPC_ID_AV_VPRTYBW,
+ PPC_ID_AV_VREFP,
+ PPC_ID_AV_VRFIM,
+ PPC_ID_AV_VRFIN,
+ PPC_ID_AV_VRFIP,
+ PPC_ID_AV_VRFIZ,
+ PPC_ID_AV_VRLB,
+ PPC_ID_AV_VRLD,
+ PPC_ID_AV_VRLDNM,
+ PPC_ID_AV_VRLDMI,
+ PPC_ID_AV_VRLH,
+ PPC_ID_AV_VRLW,
+ PPC_ID_AV_VRLWMI,
+ PPC_ID_AV_VRLWNM,
+ PPC_ID_AV_VRSQRTEFP,
+ PPC_ID_AV_VSBOX,
+ PPC_ID_AV_VSEL,
+ PPC_ID_AV_VSHASIGMAD,
+ PPC_ID_AV_VSHASIGMAW,
+ PPC_ID_AV_VSL,
+ PPC_ID_AV_VSLB,
+ PPC_ID_AV_VSLD,
+ PPC_ID_AV_VSLDOI,
+ PPC_ID_AV_VSLH,
+ PPC_ID_AV_VSLO,
+ PPC_ID_AV_VSLV,
+ PPC_ID_AV_VSLW,
+ PPC_ID_AV_VSPLTB,
+ PPC_ID_AV_VSPLTH,
+ PPC_ID_AV_VSPLTISB,
+ PPC_ID_AV_VSPLTISH,
+ PPC_ID_AV_VSPLTISW,
+ PPC_ID_AV_VSPLTW,
+ PPC_ID_AV_VSR,
+ PPC_ID_AV_VSRAB,
+ PPC_ID_AV_VSRAD,
+ PPC_ID_AV_VSRAH,
+ PPC_ID_AV_VSRAW,
+ PPC_ID_AV_VSRB,
+ PPC_ID_AV_VSRD,
+ PPC_ID_AV_VSRH,
+ PPC_ID_AV_VSRO,
+ PPC_ID_AV_VSRV,
+ PPC_ID_AV_VSRW,
+ PPC_ID_AV_VSUBCUQ,
+ PPC_ID_AV_VSUBCUW,
+ PPC_ID_AV_VSUBECUQ,
+ PPC_ID_AV_VSUBEUQM,
+ PPC_ID_AV_VSUBFP,
+ PPC_ID_AV_VSUBSBS,
+ PPC_ID_AV_VSUBSHS,
+ PPC_ID_AV_VSUBSWS,
+ PPC_ID_AV_VSUBUBM,
+ PPC_ID_AV_VSUBUBS,
+ PPC_ID_AV_VSUBUDM,
+ PPC_ID_AV_VSUBUHM,
+ PPC_ID_AV_VSUBUHS,
+ PPC_ID_AV_VSUBUQM,
+ PPC_ID_AV_VSUBUWM,
+ PPC_ID_AV_VSUBUWS,
+ PPC_ID_AV_VSUMSWS,
+ PPC_ID_AV_VSUM2SWS,
+ PPC_ID_AV_VSUM4SBS,
+ PPC_ID_AV_VSUM4SHS,
+ PPC_ID_AV_VSUM4UBS,
+ PPC_ID_AV_VUPKHPX,
+ PPC_ID_AV_VUPKHSB,
+ PPC_ID_AV_VUPKHSH,
+ PPC_ID_AV_VUPKHSW,
+ PPC_ID_AV_VUPKLPX,
+ PPC_ID_AV_VUPKLSB,
+ PPC_ID_AV_VUPKLSH,
+ PPC_ID_AV_VUPKLSW,
+ PPC_ID_AV_VXOR,
+
+ // VSX instructions
+ PPC_ID_VSX_LXSD,
+ PPC_ID_VSX_LXSDX,
+ PPC_ID_VSX_LXSIBZX,
+ PPC_ID_VSX_LXSIHZX,
+ PPC_ID_VSX_LXSIWAX,
+ PPC_ID_VSX_LXSIWZX,
+ PPC_ID_VSX_LXSSP,
+ PPC_ID_VSX_LXSSPX,
+ PPC_ID_VSX_LXV,
+ PPC_ID_VSX_LXVB16X,
+ PPC_ID_VSX_LXVD2X,
+ PPC_ID_VSX_LXVDSX,
+ PPC_ID_VSX_LXVH8X,
+ PPC_ID_VSX_LXVL,
+ PPC_ID_VSX_LXVLL,
+ PPC_ID_VSX_LXVW4X,
+ PPC_ID_VSX_LXVWSX,
+ PPC_ID_VSX_LXVX,
+ PPC_ID_VSX_MFFPRD,
+ PPC_ID_VSX_MFVSRD,
+ PPC_ID_VSX_MFVSRLD,
+ PPC_ID_VSX_MFVSRWZ,
+ PPC_ID_VSX_MTVSRD,
+ PPC_ID_VSX_MTVSRDD,
+ PPC_ID_VSX_MTVSRWA,
+ PPC_ID_VSX_MTVSRWS,
+ PPC_ID_VSX_MTVSRWZ,
+ PPC_ID_VSX_STXSD,
+ PPC_ID_VSX_STXSDX,
+ PPC_ID_VSX_STXSIBX,
+ PPC_ID_VSX_STXSIHX,
+ PPC_ID_VSX_STXSIWX,
+ PPC_ID_VSX_STXSSP,
+ PPC_ID_VSX_STXSSPX,
+ PPC_ID_VSX_STXV,
+ PPC_ID_VSX_STXVB16X,
+ PPC_ID_VSX_STXVD2X,
+ PPC_ID_VSX_STXVH8X,
+ PPC_ID_VSX_STXVL,
+ PPC_ID_VSX_STXVLL,
+ PPC_ID_VSX_STXVW4X,
+ PPC_ID_VSX_STXVX,
+ PPC_ID_VSX_XSABSDP,
+ PPC_ID_VSX_XSABSQP,
+ PPC_ID_VSX_XSADDDP,
+ PPC_ID_VSX_XSADDSP,
+ PPC_ID_VSX_XSADDQPx,
+ PPC_ID_VSX_XSCMPEQDP,
+ PPC_ID_VSX_XSCMPEXPDP,
+ PPC_ID_VSX_XSCMPEXPQP,
+ PPC_ID_VSX_XSCMPGEDP,
+ PPC_ID_VSX_XSCMPGTDP,
+ PPC_ID_VSX_XSCMPODP,
+ PPC_ID_VSX_XSCMPOQP,
+ PPC_ID_VSX_XSCMPUDP,
+ PPC_ID_VSX_XSCMPUQP,
+ PPC_ID_VSX_XSCPSGNDP,
+ PPC_ID_VSX_XSCPSGNQP,
+ PPC_ID_VSX_XSCVDPHP,
+ PPC_ID_VSX_XSCVDPQP,
+ PPC_ID_VSX_XSCVDPSP,
+ PPC_ID_VSX_XSCVDPSPN,
+ PPC_ID_VSX_XSCVDPSXDS,
+ PPC_ID_VSX_XSCVDPSXWS,
+ PPC_ID_VSX_XSCVDPUXDS,
+ PPC_ID_VSX_XSCVDPUXWS,
+ PPC_ID_VSX_XSCVHPDP,
+ PPC_ID_VSX_XSCVQPDPx,
+ PPC_ID_VSX_XSCVQPSDZ,
+ PPC_ID_VSX_XSCVQPSWZ,
+ PPC_ID_VSX_XSCVQPUDZ,
+ PPC_ID_VSX_XSCVQPUWZ,
+ PPC_ID_VSX_XSCVSDQP,
+ PPC_ID_VSX_XSCVSPDP,
+ PPC_ID_VSX_XSCVSPDPN,
+ PPC_ID_VSX_XSCVSXDDP,
+ PPC_ID_VSX_XSCVSXDSP,
+ PPC_ID_VSX_XSCVUDQP,
+ PPC_ID_VSX_XSCVUXDDP,
+ PPC_ID_VSX_XSCVUXDSP,
+ PPC_ID_VSX_XSDIVDP,
+ PPC_ID_VSX_XSDIVSP,
+ PPC_ID_VSX_XSDIVQPx,
+ PPC_ID_VSX_XSIEXPDP,
+ PPC_ID_VSX_XSIEXPQP,
+ PPC_ID_VSX_XSMADDADP,
+ PPC_ID_VSX_XSMADDASP,
+ PPC_ID_VSX_XSMADDMDP,
+ PPC_ID_VSX_XSMADDMSP,
+ PPC_ID_VSX_XSMADDQPx,
+ PPC_ID_VSX_XSMAXCDP,
+ PPC_ID_VSX_XSMAXDP,
+ PPC_ID_VSX_XSMAXJDP,
+ PPC_ID_VSX_XSMINCDP,
+ PPC_ID_VSX_XSMINDP,
+ PPC_ID_VSX_XSMINJDP,
+ PPC_ID_VSX_XSMSUBADP,
+ PPC_ID_VSX_XSMSUBASP,
+ PPC_ID_VSX_XSMSUBMDP,
+ PPC_ID_VSX_XSMSUBMSP,
+ PPC_ID_VSX_XSMSUBQPx,
+ PPC_ID_VSX_XSMULDP,
+ PPC_ID_VSX_XSMULSP,
+ PPC_ID_VSX_XSMULQPx,
+ PPC_ID_VSX_XSNABSDP,
+ PPC_ID_VSX_XSNABSQP,
+ PPC_ID_VSX_XSNEGDP,
+ PPC_ID_VSX_XSNEGQP,
+ PPC_ID_VSX_XSNMADDADP,
+ PPC_ID_VSX_XSNMADDASP,
+ PPC_ID_VSX_XSNMADDMDP,
+ PPC_ID_VSX_XSNMADDMSP,
+ PPC_ID_VSX_XSNMADDQPx,
+ PPC_ID_VSX_XSNMSUBADP,
+ PPC_ID_VSX_XSNMSUBASP,
+ PPC_ID_VSX_XSNMSUBMDP,
+ PPC_ID_VSX_XSNMSUBMSP,
+ PPC_ID_VSX_XSNMSUBQPx,
+ PPC_ID_VSX_XSRDPI,
+ PPC_ID_VSX_XSRDPIC,
+ PPC_ID_VSX_XSRDPIM,
+ PPC_ID_VSX_XSRDPIP,
+ PPC_ID_VSX_XSRDPIZ,
+ PPC_ID_VSX_XSREDP,
+ PPC_ID_VSX_XSRESP,
+ PPC_ID_VSX_XSRQPIx,
+ PPC_ID_VSX_XSRQPXP,
+ PPC_ID_VSX_XSRSP,
+ PPC_ID_VSX_XSRSQRTEDP,
+ PPC_ID_VSX_XSRSQRTESP,
+ PPC_ID_VSX_XSSQRTDP,
+ PPC_ID_VSX_XSSQRTQPx,
+ PPC_ID_VSX_XSSQRTSP,
+ PPC_ID_VSX_XSSUBDP,
+ PPC_ID_VSX_XSSUBSP,
+ PPC_ID_VSX_XSSUBQPx,
+ PPC_ID_VSX_XSTDIVDP,
+ PPC_ID_VSX_XSTDIVSP,
+ PPC_ID_VSX_XSTSTDCQP,
+ PPC_ID_VSX_XSTSTDCDP,
+ PPC_ID_VSX_XSTSTDCSP,
+ PPC_ID_VSX_XSTSQRTDP,
+ PPC_ID_VSX_XSXEXPDP,
+ PPC_ID_VSX_XSXEXPQP,
+ PPC_ID_VSX_XSXSIGDP,
+ PPC_ID_VSX_XSXSIGQP,
+ PPC_ID_VSX_XVABSDP,
+ PPC_ID_VSX_XVABSSP,
+ PPC_ID_VSX_XVADDDP,
+ PPC_ID_VSX_XVADDSP,
+ PPC_ID_VSX_XVCMPEQDPx,
+ PPC_ID_VSX_XVCMPEQSPx,
+ PPC_ID_VSX_XVCMPGEDPx,
+ PPC_ID_VSX_XVCMPGESPx,
+ PPC_ID_VSX_XVCMPGTDPx,
+ PPC_ID_VSX_XVCMPGTSPx,
+ PPC_ID_VSX_XVCPSGNDP,
+ PPC_ID_VSX_XVCPSGNSP,
+ PPC_ID_VSX_XVCVDPSP,
+ PPC_ID_VSX_XVCVDPSXDS,
+ PPC_ID_VSX_XVCVDPSXWS,
+ PPC_ID_VSX_XVCVDPUXDS,
+ PPC_ID_VSX_XVCVDPUXWS,
+ PPC_ID_VSX_XVCVHPSP,
+ PPC_ID_VSX_XVCVSPDP,
+ PPC_ID_VSX_XVCVSPHP,
+ PPC_ID_VSX_XVCVSPSXDS,
+ PPC_ID_VSX_XVCVSPSXWS,
+ PPC_ID_VSX_XVCVSPUXDS,
+ PPC_ID_VSX_XVCVSPUXWS,
+ PPC_ID_VSX_XVCVSXDDP,
+ PPC_ID_VSX_XVCVSXDSP,
+ PPC_ID_VSX_XVCVSXWDP,
+ PPC_ID_VSX_XVCVSXWSP,
+ PPC_ID_VSX_XVCVUXDDP,
+ PPC_ID_VSX_XVCVUXDSP,
+ PPC_ID_VSX_XVCVUXWDP,
+ PPC_ID_VSX_XVCVUXWSP,
+ PPC_ID_VSX_XVDIVDP,
+ PPC_ID_VSX_XVDIVSP,
+ PPC_ID_VSX_XVIEXPDP,
+ PPC_ID_VSX_XVIEXPSP,
+ PPC_ID_VSX_XVMADDADP,
+ PPC_ID_VSX_XVMADDASP,
+ PPC_ID_VSX_XVMADDMDP,
+ PPC_ID_VSX_XVMADDMSP,
+ PPC_ID_VSX_XVMAXDP,
+ PPC_ID_VSX_XVMAXSP,
+ PPC_ID_VSX_XVMINDP,
+ PPC_ID_VSX_XVMINSP,
+ PPC_ID_VSX_XVMOVDP,
+ PPC_ID_VSX_XVMOVSP,
+ PPC_ID_VSX_XVMSUBADP,
+ PPC_ID_VSX_XVMSUBASP,
+ PPC_ID_VSX_XVMSUBMDP,
+ PPC_ID_VSX_XVMSUBMSP,
+ PPC_ID_VSX_XVMULDP,
+ PPC_ID_VSX_XVMULSP,
+ PPC_ID_VSX_XVNABSDP,
+ PPC_ID_VSX_XVNABSSP,
+ PPC_ID_VSX_XVNMADDADP,
+ PPC_ID_VSX_XVNMADDASP,
+ PPC_ID_VSX_XVNMADDMDP,
+ PPC_ID_VSX_XVNMADDMSP,
+ PPC_ID_VSX_XVNEGDP,
+ PPC_ID_VSX_XVNEGSP,
+ PPC_ID_VSX_XVNMSUBADP,
+ PPC_ID_VSX_XVNMSUBASP,
+ PPC_ID_VSX_XVNMSUBMDP,
+ PPC_ID_VSX_XVNMSUBMSP,
+ PPC_ID_VSX_XVRDPI,
+ PPC_ID_VSX_XVRDPIC,
+ PPC_ID_VSX_XVRDPIM,
+ PPC_ID_VSX_XVRDPIP,
+ PPC_ID_VSX_XVRDPIZ,
+ PPC_ID_VSX_XVREDP,
+ PPC_ID_VSX_XVRESP,
+ PPC_ID_VSX_XVRSPI,
+ PPC_ID_VSX_XVRSPIC,
+ PPC_ID_VSX_XVRSPIM,
+ PPC_ID_VSX_XVRSPIP,
+ PPC_ID_VSX_XVRSPIZ,
+ PPC_ID_VSX_XVRSQRTEDP,
+ PPC_ID_VSX_XVRSQRTESP,
+ PPC_ID_VSX_XVSQRTDP,
+ PPC_ID_VSX_XVSQRTSP,
+ PPC_ID_VSX_XVSUBDP,
+ PPC_ID_VSX_XVSUBSP,
+ PPC_ID_VSX_XVTDIVDP,
+ PPC_ID_VSX_XVTDIVSP,
+ PPC_ID_VSX_XVTSQRTDP,
+ PPC_ID_VSX_XVTSQRTSP,
+ PPC_ID_VSX_XVTSTDCDP,
+ PPC_ID_VSX_XVTSTDCSP,
+ PPC_ID_VSX_XVXEXPDP,
+ PPC_ID_VSX_XVXEXPSP,
+ PPC_ID_VSX_XVXSIGDP,
+ PPC_ID_VSX_XVXSIGSP,
+ PPC_ID_VSX_XXBRD,
+ PPC_ID_VSX_XXBRH,
+ PPC_ID_VSX_XXBRQ,
+ PPC_ID_VSX_XXBRW,
+ PPC_ID_VSX_XXEXTRACTUW,
+ PPC_ID_VSX_XXINSERTW,
+ PPC_ID_VSX_XXLAND,
+ PPC_ID_VSX_XXLANDC,
+ PPC_ID_VSX_XXLEQV,
+ PPC_ID_VSX_XXLNAND,
+ PPC_ID_VSX_XXLNOR,
+ PPC_ID_VSX_XXLOR,
+ PPC_ID_VSX_XXLORC,
+ PPC_ID_VSX_XXLXOR,
+ PPC_ID_VSX_XXMRGHD,
+ PPC_ID_VSX_XXMRGHW,
+ PPC_ID_VSX_XXMRGLD,
+ PPC_ID_VSX_XXMRGLW,
+ PPC_ID_VSX_XXPERM,
+ PPC_ID_VSX_XXPERMDI,
+ PPC_ID_VSX_XXPERMR,
+ PPC_ID_VSX_XXSEL,
+ PPC_ID_VSX_XXSLDWI,
+ PPC_ID_VSX_XXSPLTD,
+ PPC_ID_VSX_XXSPLTIB,
+ PPC_ID_VSX_XXSPLTW,
+ PPC_ID_VSX_XXSWAPD,
+
+ // Pair-stored
+ PPC_ID_PSQ_L,
+ PPC_ID_PSQ_LU,
+ PPC_ID_PSQ_LUX,
+ PPC_ID_PSQ_LX,
+ PPC_ID_PSQ_ST,
+ PPC_ID_PSQ_STU,
+ PPC_ID_PSQ_STUX,
+ PPC_ID_PSQ_STX,
+
+ // Paired-single
+ PPC_ID_PAIREDSINGLE_DCBZ_L,
+ PPC_ID_PAIREDSINGLE_PS_ABSx,
+ PPC_ID_PAIREDSINGLE_PS_ADDx,
+ PPC_ID_PAIREDSINGLE_PS_CMPO0,
+ PPC_ID_PAIREDSINGLE_PS_CMPO1,
+ PPC_ID_PAIREDSINGLE_PS_CMPU0,
+ PPC_ID_PAIREDSINGLE_PS_CMPU1,
+ PPC_ID_PAIREDSINGLE_PS_DIVx,
+ PPC_ID_PAIREDSINGLE_PS_MADDx,
+ PPC_ID_PAIREDSINGLE_PS_MADDS0x,
+ PPC_ID_PAIREDSINGLE_PS_MADDS1x,
+ PPC_ID_PAIREDSINGLE_PS_MERGE00x,
+ PPC_ID_PAIREDSINGLE_PS_MERGE01x,
+ PPC_ID_PAIREDSINGLE_PS_MERGE10x,
+ PPC_ID_PAIREDSINGLE_PS_MERGE11x,
+ PPC_ID_PAIREDSINGLE_PS_MRx,
+ PPC_ID_PAIREDSINGLE_PS_MSUBx,
+ PPC_ID_PAIREDSINGLE_PS_MULx,
+ PPC_ID_PAIREDSINGLE_PS_MULS0x,
+ PPC_ID_PAIREDSINGLE_PS_MULS1x,
+ PPC_ID_PAIREDSINGLE_PS_NABSx,
+ PPC_ID_PAIREDSINGLE_PS_NEGx,
+ PPC_ID_PAIREDSINGLE_PS_NMADDx,
+ PPC_ID_PAIREDSINGLE_PS_NMSUBx,
+ PPC_ID_PAIREDSINGLE_PS_RESx,
+ PPC_ID_PAIREDSINGLE_PS_RSQRTEx,
+ PPC_ID_PAIREDSINGLE_PS_SELx,
+ PPC_ID_PAIREDSINGLE_PS_SUBx,
+ PPC_ID_PAIREDSINGLE_PS_SUM0x,
+ PPC_ID_PAIREDSINGLE_PS_SUM1x,
+ PPC_ID_PAIREDSINGLE_PSQ_L,
+ PPC_ID_PAIREDSINGLE_PSQ_LU,
+ PPC_ID_PAIREDSINGLE_PSQ_LUX,
+ PPC_ID_PAIREDSINGLE_PSQ_LX,
+ PPC_ID_PAIREDSINGLE_PSQ_ST,
+ PPC_ID_PAIREDSINGLE_PSQ_STU,
+ PPC_ID_PAIREDSINGLE_PSQ_STUX,
+ PPC_ID_PAIREDSINGLE_PSQ_STX,
+
+ // SPE (Signal Processing Engine) instructions
+ PPC_ID_SPE_BRINC,
+ PPC_ID_SPE_EFDABS,
+ PPC_ID_SPE_EFDADD,
+ PPC_ID_SPE_EFDCFS,
+ PPC_ID_SPE_EFDCFSF,
+ PPC_ID_SPE_EFDCFSI,
+ PPC_ID_SPE_EFDCFSID,
+ PPC_ID_SPE_EFDCFUF,
+ PPC_ID_SPE_EFDCFUI,
+ PPC_ID_SPE_EFDCFUID,
+ PPC_ID_SPE_EFDCMPEQ,
+ PPC_ID_SPE_EFDCMPGT,
+ PPC_ID_SPE_EFDCMPLT,
+ PPC_ID_SPE_EFDCTSF,
+ PPC_ID_SPE_EFDCTSI,
+ PPC_ID_SPE_EFDCTSIDZ,
+ PPC_ID_SPE_EFDCTSIZ,
+ PPC_ID_SPE_EFDCTUF,
+ PPC_ID_SPE_EFDCTUI,
+ PPC_ID_SPE_EFDCTUIDZ,
+ PPC_ID_SPE_EFDCTUIZ,
+ PPC_ID_SPE_EFDDIV,
+ PPC_ID_SPE_EFDMUL,
+ PPC_ID_SPE_EFDNABS,
+ PPC_ID_SPE_EFDNEG,
+ PPC_ID_SPE_EFDSUB,
+ PPC_ID_SPE_EFDTSTEQ,
+ PPC_ID_SPE_EFDTSTGT,
+ PPC_ID_SPE_EFDTSTLT,
+ PPC_ID_SPE_EFSABS,
+ PPC_ID_SPE_EFSADD,
+ PPC_ID_SPE_EFSCFD,
+ PPC_ID_SPE_EFSCFSF,
+ PPC_ID_SPE_EFSCFSI,
+ PPC_ID_SPE_EFSCFUF,
+ PPC_ID_SPE_EFSCFUI,
+ PPC_ID_SPE_EFSCMPEQ,
+ PPC_ID_SPE_EFSCMPGT,
+ PPC_ID_SPE_EFSCMPLT,
+ PPC_ID_SPE_EFSCTSF,
+ PPC_ID_SPE_EFSCTSI,
+ PPC_ID_SPE_EFSCTSIZ,
+ PPC_ID_SPE_EFSCTUF,
+ PPC_ID_SPE_EFSCTUI,
+ PPC_ID_SPE_EFSCTUIZ,
+ PPC_ID_SPE_EFSDIV,
+ PPC_ID_SPE_EFSMUL,
+ PPC_ID_SPE_EFSNABS,
+ PPC_ID_SPE_EFSNEG,
+ PPC_ID_SPE_EFSSUB,
+ PPC_ID_SPE_EFSTSTEQ,
+ PPC_ID_SPE_EFSTSTGT,
+ PPC_ID_SPE_EFSTSTLT,
+ PPC_ID_SPE_EVABS,
+ PPC_ID_SPE_EVADDIW,
+ PPC_ID_SPE_EVADDSMIAAW,
+ PPC_ID_SPE_EVADDSSIAAW,
+ PPC_ID_SPE_EVADDUMIAAW,
+ PPC_ID_SPE_EVADDUSIAAW,
+ PPC_ID_SPE_EVADDW,
+ PPC_ID_SPE_EVAND,
+ PPC_ID_SPE_EVANDC,
+ PPC_ID_SPE_EVCMPEQ,
+ PPC_ID_SPE_EVCMPGTS,
+ PPC_ID_SPE_EVCMPGTU,
+ PPC_ID_SPE_EVCMPLTS,
+ PPC_ID_SPE_EVCMPLTU,
+ PPC_ID_SPE_EVCNTLSW,
+ PPC_ID_SPE_EVCNTLZW,
+ PPC_ID_SPE_EVDIVWS,
+ PPC_ID_SPE_EVDIVWU,
+ PPC_ID_SPE_EVEQV,
+ PPC_ID_SPE_EVEXTSB,
+ PPC_ID_SPE_EVEXTSH,
+ PPC_ID_SPE_EVFSABS,
+ PPC_ID_SPE_EVFSADD,
+ PPC_ID_SPE_EVFSCFSF,
+ PPC_ID_SPE_EVFSCFSI,
+ PPC_ID_SPE_EVFSCFUF,
+ PPC_ID_SPE_EVFSCFUI,
+ PPC_ID_SPE_EVSCFUI,
+ PPC_ID_SPE_EVFSCMPEQ,
+ PPC_ID_SPE_EVFSCMPGT,
+ PPC_ID_SPE_EVFSCMPLT,
+ PPC_ID_SPE_EVFSCTSF,
+ PPC_ID_SPE_EVFSCTSI,
+ PPC_ID_SPE_EVFSCTSIZ,
+ PPC_ID_SPE_EVFSCTUF,
+ PPC_ID_SPE_EVFSCTUI,
+ PPC_ID_SPE_EVFSCTUIZ,
+ PPC_ID_SPE_EVFSDIV,
+ PPC_ID_SPE_EVFSMUL,
+ PPC_ID_SPE_EVFSNABS,
+ PPC_ID_SPE_EVFSNEG,
+ PPC_ID_SPE_EVFSSUB,
+ PPC_ID_SPE_EVFSTSTEQ,
+ PPC_ID_SPE_EVFSTSTGT,
+ PPC_ID_SPE_EVFSTSTLT,
+ PPC_ID_SPE_EVLDD,
+ PPC_ID_SPE_EVLDDX,
+ PPC_ID_SPE_EVLDH,
+ PPC_ID_SPE_EVLDHX,
+ PPC_ID_SPE_EVLDW,
+ PPC_ID_SPE_EVLDWX,
+ PPC_ID_SPE_EVLHHESPLAT,
+ PPC_ID_SPE_EVLHHESPLATX,
+ PPC_ID_SPE_EVLHHOSSPLAT,
+ PPC_ID_SPE_EVLHHOSSPLATX,
+ PPC_ID_SPE_EVLHHOUSPLAT,
+ PPC_ID_SPE_EVLHHOUSPLATX,
+ PPC_ID_SPE_EVLWHE,
+ PPC_ID_SPE_EVLWHEX,
+ PPC_ID_SPE_EVLWHOS,
+ PPC_ID_SPE_EVLWHOSX,
+ PPC_ID_SPE_EVLWHOU,
+ PPC_ID_SPE_EVLWHOUX,
+ PPC_ID_SPE_EVLWHSPLAT,
+ PPC_ID_SPE_EVLWHSPLATX,
+ PPC_ID_SPE_EVLWWSPLAT,
+ PPC_ID_SPE_EVLWWSPLATX,
+ PPC_ID_SPE_EVMERGEHI,
+ PPC_ID_SPE_EVMERGEHILO,
+ PPC_ID_SPE_EVMERGELO,
+ PPC_ID_SPE_EVMERGELOHI,
+ PPC_ID_SPE_EVMHEGSMFAA,
+ PPC_ID_SPE_EVMHEGSMFAN,
+ PPC_ID_SPE_EVMHEGSMIAA,
+ PPC_ID_SPE_EVMHEGSMIAN,
+ PPC_ID_SPE_EVMHEGUMIAA,
+ PPC_ID_SPE_EVMHEGUMIAN,
+ PPC_ID_SPE_EVMHESMF,
+ PPC_ID_SPE_EVMHESMFA,
+ PPC_ID_SPE_EVMHESMFAAW,
+ PPC_ID_SPE_EVMHESMFANW,
+ PPC_ID_SPE_EVMHESMI,
+ PPC_ID_SPE_EVMHESMIA,
+ PPC_ID_SPE_EVMHESMIAAW,
+ PPC_ID_SPE_EVMHESMIANW,
+ PPC_ID_SPE_EVMHESSF,
+ PPC_ID_SPE_EVMHESSFA,
+ PPC_ID_SPE_EVMHESSFAAW,
+ PPC_ID_SPE_EVMHESSFANW,
+ PPC_ID_SPE_EVMHESSIAAW,
+ PPC_ID_SPE_EVMHESSIANW,
+ PPC_ID_SPE_EVMHEUMI,
+ PPC_ID_SPE_EVMHEUMIA,
+ PPC_ID_SPE_EVMHEUMIAAW,
+ PPC_ID_SPE_EVMHEUMIANW,
+ PPC_ID_SPE_EVMHEUSIAAW,
+ PPC_ID_SPE_EVMHEUSIANW,
+ PPC_ID_SPE_EVMHOGSMFAA,
+ PPC_ID_SPE_EVMHOGSMFAN,
+ PPC_ID_SPE_EVMHOGSMIAA,
+ PPC_ID_SPE_EVMHOGSMIAN,
+ PPC_ID_SPE_EVMHOGUMIAA,
+ PPC_ID_SPE_EVMHOGUMIAN,
+ PPC_ID_SPE_EVMHOSMF,
+ PPC_ID_SPE_EVMHOSMFA,
+ PPC_ID_SPE_EVMHOSMFAAW,
+ PPC_ID_SPE_EVMHOSMFANW,
+ PPC_ID_SPE_EVMHOSMI,
+ PPC_ID_SPE_EVMHOSMIA,
+ PPC_ID_SPE_EVMHOSMIAAW,
+ PPC_ID_SPE_EVMHOSMIANW,
+ PPC_ID_SPE_EVMHOSSF,
+ PPC_ID_SPE_EVMHOSSFA,
+ PPC_ID_SPE_EVMHOSSFAAW,
+ PPC_ID_SPE_EVMHOSSFANW,
+ PPC_ID_SPE_EVMHOSSIAAW,
+ PPC_ID_SPE_EVMHOSSIANW,
+ PPC_ID_SPE_EVMHOUMI,
+ PPC_ID_SPE_EVMHOUMIA,
+ PPC_ID_SPE_EVMHOUMIAAW,
+ PPC_ID_SPE_EVMHOUMIANW,
+ PPC_ID_SPE_EVMHOUSIAAW,
+ PPC_ID_SPE_EVMHOUSIANW,
+ PPC_ID_SPE_EVMR,
+ PPC_ID_SPE_EVMRA,
+ PPC_ID_SPE_EVMWHSMF,
+ PPC_ID_SPE_EVMWHSMFA,
+ PPC_ID_SPE_EVMWHSMI,
+ PPC_ID_SPE_EVMWHSMIA,
+ PPC_ID_SPE_EVMWHSSF,
+ PPC_ID_SPE_EVMWHSSFA,
+ PPC_ID_SPE_EVMWHUMI,
+ PPC_ID_SPE_EVMWHUMIA,
+ PPC_ID_SPE_EVMWHUSIAAW,
+ PPC_ID_SPE_EVMWHUSIANW,
+ PPC_ID_SPE_EVMWLSMIAAW,
+ PPC_ID_SPE_EVMWLSMIANW,
+ PPC_ID_SPE_EVMWLSSIANW,
+ PPC_ID_SPE_EVMWLSSIAAW,
+ PPC_ID_SPE_EVMWLUMI,
+ PPC_ID_SPE_EVMWLUMIA,
+ PPC_ID_SPE_EVMWLUMIAAW,
+ PPC_ID_SPE_EVMWLUMIANW,
+ PPC_ID_SPE_EVMWLUSIAAW,
+ PPC_ID_SPE_EVMWLUSIANW,
+ PPC_ID_SPE_EVMWSMF,
+ PPC_ID_SPE_EVMWSMFA,
+ PPC_ID_SPE_EVMWSMFAA,
+ PPC_ID_SPE_EVMWSMFAN,
+ PPC_ID_SPE_EVMWSMI,
+ PPC_ID_SPE_EVMWSMIA,
+ PPC_ID_SPE_EVMWSMIAA,
+ PPC_ID_SPE_EVMWSMIAN,
+ PPC_ID_SPE_EVMWSSF,
+ PPC_ID_SPE_EVMWSSFA,
+ PPC_ID_SPE_EVMWSSFAA,
+ PPC_ID_SPE_EVMWSSFAN,
+ PPC_ID_SPE_EVMWUMI,
+ PPC_ID_SPE_EVMWUMIA,
+ PPC_ID_SPE_EVMWUMIAA,
+ PPC_ID_SPE_EVMWUMIAN,
+ PPC_ID_SPE_EVNAND,
+ PPC_ID_SPE_EVNEG,
+ PPC_ID_SPE_EVNOR,
+ PPC_ID_SPE_EVNOT,
+ PPC_ID_SPE_EVOR,
+ PPC_ID_SPE_EVORC,
+ PPC_ID_SPE_EVRLW,
+ PPC_ID_SPE_EVRLWI,
+ PPC_ID_SPE_EVRNDW,
+ PPC_ID_SPE_EVSEL,
+ PPC_ID_SPE_EVSLW,
+ PPC_ID_SPE_EVSLWI,
+ PPC_ID_SPE_EVSPLATFI,
+ PPC_ID_SPE_EVSPLATI,
+ PPC_ID_SPE_EVSRWIS,
+ PPC_ID_SPE_EVSRWIU,
+ PPC_ID_SPE_EVSRWS,
+ PPC_ID_SPE_EVSRWU,
+ PPC_ID_SPE_EVSTDD,
+ PPC_ID_SPE_EVSTDDX,
+ PPC_ID_SPE_EVSTDH,
+ PPC_ID_SPE_EVSTDHX,
+ PPC_ID_SPE_EVSTDW,
+ PPC_ID_SPE_EVSTDWX,
+ PPC_ID_SPE_EVSTWHE,
+ PPC_ID_SPE_EVSTWHEX,
+ PPC_ID_SPE_EVSTWHO,
+ PPC_ID_SPE_EVSTWHOX,
+ PPC_ID_SPE_EVSTWWE,
+ PPC_ID_SPE_EVSTWWEX,
+ PPC_ID_SPE_EVSTWWO,
+ PPC_ID_SPE_EVSTWWOX,
+ PPC_ID_SPE_EVSUBFSMIAAW,
+ PPC_ID_SPE_EVSUBFSSIAAW,
+ PPC_ID_SPE_EVSUBFUMIAAW,
+ PPC_ID_SPE_EVSUBFUSIAAW,
+ PPC_ID_SPE_EVSUBFW,
+ PPC_ID_SPE_EVSUBIFW,
+ PPC_ID_SPE_EVXOR,
+
+ // This should be all of the VLE instructions; if any get added
+ // here, make sure `vle32.c:IsVleInstructionId` remains valid
+ //
+ // 32-bit VLE instructions
+ PPC_ID_VLE_E_ADDIx,
+ PPC_ID_VLE_E_ADDICx,
+ PPC_ID_VLE_E_ADD2I,
+ PPC_ID_VLE_E_ADD2IS,
+ PPC_ID_VLE_E_ADD16I,
+ PPC_ID_VLE_E_ANDIx,
+ PPC_ID_VLE_E_AND2I,
+ PPC_ID_VLE_E_AND2IS,
+ PPC_ID_VLE_E_Bx,
+ PPC_ID_VLE_E_BCx,
+ PPC_ID_VLE_E_CMP16I,
+ PPC_ID_VLE_E_CMPH16I,
+ PPC_ID_VLE_E_CMPHL,
+ PPC_ID_VLE_E_CMPHL16I,
+ PPC_ID_VLE_E_CMPI,
+ PPC_ID_VLE_E_CMPL16I,
+ PPC_ID_VLE_E_CMPLI,
+ PPC_ID_VLE_E_CRAND,
+ PPC_ID_VLE_E_CRANDC,
+ PPC_ID_VLE_E_CREQV,
+ PPC_ID_VLE_E_CRNAND,
+ PPC_ID_VLE_E_CRNOR,
+ PPC_ID_VLE_E_CROR,
+ PPC_ID_VLE_E_CRORC,
+ PPC_ID_VLE_E_CRXOR,
+ PPC_ID_VLE_E_LBZ,
+ PPC_ID_VLE_E_LBZU,
+ PPC_ID_VLE_E_LHA,
+ PPC_ID_VLE_E_LHAU,
+ PPC_ID_VLE_E_LHZ,
+ PPC_ID_VLE_E_LHZU,
+ PPC_ID_VLE_E_LI,
+ PPC_ID_VLE_E_LIS,
+ PPC_ID_VLE_E_LMW,
+ PPC_ID_VLE_E_LWZ,
+ PPC_ID_VLE_E_LWZU,
+ PPC_ID_VLE_E_MCRF,
+ PPC_ID_VLE_E_MULL2I,
+ PPC_ID_VLE_E_MULLI,
+ PPC_ID_VLE_E_OR2I,
+ PPC_ID_VLE_E_OR2IS,
+ PPC_ID_VLE_E_ORIx,
+ PPC_ID_VLE_E_RLWx,
+ PPC_ID_VLE_E_RLWIx,
+ PPC_ID_VLE_E_RLWIMI,
+ PPC_ID_VLE_E_RLWINM,
+ PPC_ID_VLE_E_SLWIx,
+ PPC_ID_VLE_E_SRWIx,
+ PPC_ID_VLE_E_STB,
+ PPC_ID_VLE_E_STBU,
+ PPC_ID_VLE_E_STH,
+ PPC_ID_VLE_E_STHU,
+ PPC_ID_VLE_E_STMW,
+ PPC_ID_VLE_E_STW,
+ PPC_ID_VLE_E_STWU,
+ PPC_ID_VLE_E_SUBFICx,
+ PPC_ID_VLE_E_XORIx,
+
+ // Additional 32-bit VLE instructions from NXP EB696
+ //
+ // Note that chapter 3 "Instruction Operation Codes"
+ // and table 4 "Instruction Overview" list these as "LDMxxxx",
+ // but all of the mnemonics used in chapter 5 "Instruction
+ // Listings" are "LDxxxx" (note the lack of M)...assembly
+ // samples from an mpc5744 use the variant without the M, so we
+ // use that.
+ PPC_ID_VLE_E_LDVGPRW,
+ PPC_ID_VLE_E_LDVSPRW,
+ PPC_ID_VLE_E_LDVSRRW,
+ PPC_ID_VLE_E_LDVCSRRW,
+ PPC_ID_VLE_E_LDVDSRRW,
+ PPC_ID_VLE_E_STMVGPRW,
+ PPC_ID_VLE_E_STMVSPRW,
+ PPC_ID_VLE_E_STMVSRRW,
+ PPC_ID_VLE_E_STMVCSRRW,
+ PPC_ID_VLE_E_STMVDSRRW,
+
+ // 16-bit VLE instructions
+ PPC_ID_VLE_SE_ADD,
+ PPC_ID_VLE_SE_ADDI,
+ PPC_ID_VLE_SE_ANDx,
+ PPC_ID_VLE_SE_ANDC,
+ PPC_ID_VLE_SE_ANDI,
+ PPC_ID_VLE_SE_Bx,
+ PPC_ID_VLE_SE_BC,
+ PPC_ID_VLE_SE_BCLRI,
+ PPC_ID_VLE_SE_BCTRx,
+ PPC_ID_VLE_SE_BGENI,
+ PPC_ID_VLE_SE_BLRx,
+ PPC_ID_VLE_SE_BMASKI,
+ PPC_ID_VLE_SE_BSETI,
+ PPC_ID_VLE_SE_BTSTI,
+ PPC_ID_VLE_SE_CMP,
+ PPC_ID_VLE_SE_CMPH,
+ PPC_ID_VLE_SE_CMPHL,
+ PPC_ID_VLE_SE_CMPI,
+ PPC_ID_VLE_SE_CMPL,
+ PPC_ID_VLE_SE_CMPLI,
+ PPC_ID_VLE_SE_EXTSB,
+ PPC_ID_VLE_SE_EXTSH,
+ PPC_ID_VLE_SE_EXTZB,
+ PPC_ID_VLE_SE_EXTZH,
+ PPC_ID_VLE_SE_ILLEGAL,
+ PPC_ID_VLE_SE_ISYNC,
+ PPC_ID_VLE_SE_LBZ,
+ PPC_ID_VLE_SE_LHZ,
+ PPC_ID_VLE_SE_LI,
+ PPC_ID_VLE_SE_LWZ,
+ PPC_ID_VLE_SE_MFAR,
+ PPC_ID_VLE_SE_MFCTR,
+ PPC_ID_VLE_SE_MFLR,
+ PPC_ID_VLE_SE_MR,
+ PPC_ID_VLE_SE_MTAR,
+ PPC_ID_VLE_SE_MTCTR,
+ PPC_ID_VLE_SE_MTLR,
+ PPC_ID_VLE_SE_MULLW,
+ PPC_ID_VLE_SE_NEG,
+ PPC_ID_VLE_SE_NOP,
+ PPC_ID_VLE_SE_NOT,
+ PPC_ID_VLE_SE_OR,
+ PPC_ID_VLE_SE_RFCI,
+ PPC_ID_VLE_SE_RFDI,
+ PPC_ID_VLE_SE_RFI,
+ PPC_ID_VLE_SE_RFMCI,
+ PPC_ID_VLE_SE_SC,
+ PPC_ID_VLE_SE_SLW,
+ PPC_ID_VLE_SE_SLWI,
+ PPC_ID_VLE_SE_SRAW,
+ PPC_ID_VLE_SE_SRAWI,
+ PPC_ID_VLE_SE_SRW,
+ PPC_ID_VLE_SE_SRWI,
+ PPC_ID_VLE_SE_STB,
+ PPC_ID_VLE_SE_STH,
+ PPC_ID_VLE_SE_STW,
+ PPC_ID_VLE_SE_SUB,
+ PPC_ID_VLE_SE_SUBF,
+ PPC_ID_VLE_SE_SUBIx,
+ };
+
+#ifndef __cplusplus
+ typedef enum InstructionId InstructionId;
+#endif
+
+ struct Instruction
+ {
+ // When decoding with VLE -> base PPC translation (ie
+ // `decodeFlags & DECODE_FLAGS_VLE_TRANSLATE != 0), this ID may
+ // not faithfully represent the exact bytes corresponding to this
+ // instruction, but it will always represent something
+ // semantically equivalent; for example, PPC_ID_VLE_SE_BGENI
+ // may end up as a semantically equivalent PPC_ID_LI
+ // instruction.
+ //
+ // When `decodeFlags & DECODE_FLAGS_VLE_TRANSLATE == 0`, this
+ // ID always represents the bytes correspondong to the
+ // instruction
+ InstructionId id;
+
+ // This always represents the number of bytes in the
+ // underlying bytes of the instruction, regardless of whether
+ // it was translated with `DECODE_FLAGS_VLE_TRANSLATE`.
+ size_t numBytes;
+
+ // These acronyms are from the documentation; sometimes they
+ // refer to the same bit (like RC and LK)
+ struct {
+ uint32_t rc: 1;
+ uint32_t oe: 1;
+ uint32_t lk: 1;
+ uint32_t aa: 1;
+ uint32_t branchLikelyHint: 2;
+ uint32_t round2odd: 1;
+ uint32_t inexact: 1;
+ } flags;
+
+ size_t numOperands;
+ Operand operands[8];
+ };
+
+#ifndef __cplusplus
+ typedef struct Instruction Instruction;
+#endif
+
+ // returns 0 if data_length is too small to tell
+ size_t GetInstructionLength(const uint8_t* data, size_t data_length, uint32_t flags);
+
+ bool Decompose16(Instruction* instruction, uint16_t word32, uint64_t address, uint32_t flags);
+ bool Decompose32(Instruction* instruction, uint32_t word32, uint64_t address, uint32_t flags);
+ void FillBcxOperands(OperandsList* bcx, const Instruction* instruction);
+ void FillBcctrxOperands(OperandsList* bcctrx, const Instruction* instruction);
+ void FillBclrxOperands(OperandsList* bclrx, const Instruction* instruction);
+ void FillVle16BcOperands(OperandsList *se_bc, const Instruction *instruction);
+ void FillVle32BcxOperands(OperandsList *e_bcx, const Instruction *instruction);
+ const char* GetMnemonic(const Instruction* instruction);
+ const char* PowerPCRegisterName(uint32_t regId);
+ const char* OperandClassName(uint32_t cls);
+ const char* GetCRBitName(uint32_t crbit);
+
+ size_t VleGetInstructionLength(const uint8_t* data, size_t data_length, uint32_t decodeFlags);
+ bool Decompose16Vle(Instruction* instruction, uint16_t word16, uint64_t address, uint32_t flags);
+ bool Decompose32Vle(Instruction* instruction, uint32_t word32, uint64_t address, uint32_t flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif // DECODE_PPC_H