[CPU] Fix ppc-opcode-gen script and regen the opcodes

This commit is contained in:
Herman S.
2025-10-19 13:47:16 +09:00
parent 9b41d1d614
commit 563a6459d3
5 changed files with 467 additions and 475 deletions

View File

@@ -1,4 +1,4 @@
// This code was autogenerated by ./tools/ppc-table-gen.py. Do not modify!
// This code was autogenerated by tools/ppc-table-gen.py. Do not modify!
// clang-format off
#ifndef XENIA_CPU_PPC_PPC_OPCODE_H_
#define XENIA_CPU_PPC_PPC_OPCODE_H_

View File

@@ -1,4 +1,4 @@
// This code was autogenerated by ./tools/ppc-table-gen.py. Do not modify!
// This code was autogenerated by tools/ppc-table-gen.py. Do not modify!
// clang-format off
#include <cstdint>
#include <cstdlib>
@@ -4946,467 +4946,465 @@ void PrintDisasm_xorx(const PPCDecodeData& d, StringBuffer* str) {
str->Append(", ");
str->AppendFormat("r{}", d.X.RB());
}
#define INIT_LIST(...) {__VA_ARGS__}
#define INSTRUCTION(opcode, mnem, form, group, type, desc, reads, writes, fn) \
{PPCOpcodeGroup::group, PPCOpcodeFormat::form, opcode, mnem, desc, fn}
static constexpr PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = {
INSTRUCTION(0x7c000014, "addcx" , kXO , kI, kGeneral, "Add Carrying" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCA,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_addcx),
INSTRUCTION(0x7c000114, "addex" , kXO , kI, kGeneral, "Add Extended" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB,PPCOpcodeField::kCA), (PPCOpcodeField::kRD,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_addex),
INSTRUCTION(0x38000000, "addi" , kD , kI, kGeneral, "Add Immediate" , (PPCOpcodeField::kRA0,PPCOpcodeField::kSIMM), (PPCOpcodeField::kRD), PrintDisasm_addi),
INSTRUCTION(0x30000000, "addic" , kD , kI, kGeneral, "Add Immediate Carrying" , (PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (PPCOpcodeField::kRD,PPCOpcodeField::kCA), PrintDisasm_addic),
INSTRUCTION(0x34000000, "addicx" , kD , kI, kGeneral, "Add Immediate Carrying and Record" , (PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (PPCOpcodeField::kRD,PPCOpcodeField::kCA,PPCOpcodeField::kCR), PrintDisasm_addicx),
INSTRUCTION(0x3c000000, "addis" , kD , kI, kGeneral, "Add Immediate Shifted" , (PPCOpcodeField::kRA0,PPCOpcodeField::kSIMM), (PPCOpcodeField::kRD), PrintDisasm_addis),
INSTRUCTION(0x7c0001d4, "addmex" , kXO , kI, kGeneral, "Add to Minus One Extended" , (PPCOpcodeField::kRA,PPCOpcodeField::kCA), (PPCOpcodeField::kRD,PPCOpcodeField::kCA,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_addmex),
INSTRUCTION(0x7c000214, "addx" , kXO , kI, kGeneral, "Add" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_addx),
INSTRUCTION(0x7c000194, "addzex" , kXO , kI, kGeneral, "Add to Zero Extended" , (PPCOpcodeField::kRA,PPCOpcodeField::kCA), (PPCOpcodeField::kRD,PPCOpcodeField::kCA,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_addzex),
INSTRUCTION(0x7c000078, "andcx" , kX , kI, kGeneral, "AND with Complement" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_andcx),
INSTRUCTION(0x74000000, "andisx" , kD , kI, kGeneral, "AND Immediate Shifted" , (PPCOpcodeField::kRS,PPCOpcodeField::kUIMM), (PPCOpcodeField::kRA,PPCOpcodeField::kCR), PrintDisasm_andisx),
INSTRUCTION(0x70000000, "andix" , kD , kI, kGeneral, "AND Immediate" , (PPCOpcodeField::kRS,PPCOpcodeField::kUIMM), (PPCOpcodeField::kRA,PPCOpcodeField::kCR), PrintDisasm_andix),
INSTRUCTION(0x7c000038, "andx" , kX , kI, kGeneral, "AND" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_andx),
INSTRUCTION(0x4c000420, "bcctrx" , kXL , kB, kSync , "Branch Conditional to Count Register" , (PPCOpcodeField::kLK,PPCOpcodeField::kBO,PPCOpcodeField::kBI,PPCOpcodeField::kCR,PPCOpcodeField::kCTR), (PPCOpcodeField::kLRcond), PrintDisasm_bcctrx),
INSTRUCTION(0x4c000020, "bclrx" , kXL , kB, kSync , "Branch Conditional to Link Register" , (PPCOpcodeField::kLK,PPCOpcodeField::kBO,PPCOpcodeField::kBI,PPCOpcodeField::kCRcond,PPCOpcodeField::kCTRcond), (PPCOpcodeField::kCTRcond,PPCOpcodeField::kLRcond), PrintDisasm_bclrx),
INSTRUCTION(0x40000000, "bcx" , kB , kB, kSync , "Branch Conditional" , (PPCOpcodeField::kLK,PPCOpcodeField::kAA,PPCOpcodeField::kBO,PPCOpcodeField::kBI,PPCOpcodeField::kADDR,PPCOpcodeField::kCRcond,PPCOpcodeField::kCTRcond), (PPCOpcodeField::kCTRcond,PPCOpcodeField::kLRcond), PrintDisasm_bcx),
INSTRUCTION(0x48000000, "bx" , kI , kB, kSync , "Branch" , (PPCOpcodeField::kLK,PPCOpcodeField::kAA,PPCOpcodeField::kADDR), (PPCOpcodeField::kLRcond), PrintDisasm_bx),
INSTRUCTION(0x7c000000, "cmp" , kX , kI, kGeneral, "Compare" , (PPCOpcodeField::kL,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kCRFD), PrintDisasm_cmp),
INSTRUCTION(0x2c000000, "cmpi" , kD , kI, kGeneral, "Compare Immediate" , (PPCOpcodeField::kL,PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (PPCOpcodeField::kRD,PPCOpcodeField::kCRFD), PrintDisasm_cmpi),
INSTRUCTION(0x7c000040, "cmpl" , kX , kI, kGeneral, "Compare Logical" , (PPCOpcodeField::kL,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kCRFD), PrintDisasm_cmpl),
INSTRUCTION(0x28000000, "cmpli" , kD , kI, kGeneral, "Compare Logical Immediate" , (PPCOpcodeField::kL,PPCOpcodeField::kRA,PPCOpcodeField::kUIMM), (PPCOpcodeField::kCRFD), PrintDisasm_cmpli),
INSTRUCTION(0x7c000074, "cntlzdx" , kX , kI, kGeneral, "Count Leading Zeros Doubleword" , (PPCOpcodeField::kRS), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_cntlzdx),
INSTRUCTION(0x7c000034, "cntlzwx" , kX , kI, kGeneral, "Count Leading Zeros Word" , (PPCOpcodeField::kRS), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_cntlzwx),
INSTRUCTION(0x4c000202, "crand" , kXL , kC, kGeneral, "Condition Register AND" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crand),
INSTRUCTION(0x4c000102, "crandc" , kXL , kC, kGeneral, "Condition Register AND with Complement" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crandc),
INSTRUCTION(0x4c000242, "creqv" , kXL , kC, kGeneral, "Condition Register Equivalent" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_creqv),
INSTRUCTION(0x4c0001c2, "crnand" , kXL , kC, kGeneral, "Condition Register NAND" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crnand),
INSTRUCTION(0x4c000042, "crnor" , kXL , kC, kGeneral, "Condition Register NOR" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crnor),
INSTRUCTION(0x4c000382, "cror" , kXL , kC, kGeneral, "Condition Register OR" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_cror),
INSTRUCTION(0x4c000342, "crorc" , kXL , kC, kGeneral, "Condition Register OR with Complement" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crorc),
INSTRUCTION(0x4c000182, "crxor" , kXL , kC, kGeneral, "Condition Register XOR" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crxor),
INSTRUCTION(0x7c0000ac, "dcbf" , kX , kM, kGeneral, "Data Cache Block Flush" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbf),
INSTRUCTION(0x7c0003ac, "dcbi" , kX , kM, kGeneral, "Data Cache Block Invalidate" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbi),
INSTRUCTION(0x7c00006c, "dcbst" , kX , kM, kGeneral, "Data Cache Block Store" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbst),
INSTRUCTION(0x7c00022c, "dcbt" , kX , kM, kGeneral, "Data Cache Block Touch" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbt),
INSTRUCTION(0x7c0001ec, "dcbtst" , kX , kM, kGeneral, "Data Cache Block Touch for Store" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbtst),
INSTRUCTION(0x7c0007ec, "dcbz" , kDCBZ , kM, kGeneral, "Data Cache Block Clear to Zero" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbz),
INSTRUCTION(0x7c2007ec, "dcbz128" , kDCBZ , kM, kGeneral, "Data Cache Block Clear to Zero 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbz128),
INSTRUCTION(0x7c000392, "divdux" , kXO , kI, kGeneral, "Divide Doubleword Unsigned" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_divdux),
INSTRUCTION(0x7c0003d2, "divdx" , kXO , kI, kGeneral, "Divide Doubleword" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_divdx),
INSTRUCTION(0x7c000396, "divwux" , kXO , kI, kGeneral, "Divide Word Unsigned" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_divwux),
INSTRUCTION(0x7c0003d6, "divwx" , kXO , kI, kGeneral, "Divide Word" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_divwx),
INSTRUCTION(0x7c0006ac, "eieio" , kX , kI, kGeneral, "Enforce In-Order Execution of I/O" , (), (), PrintDisasm_eieio),
INSTRUCTION(0x7c000238, "eqvx" , kX , kI, kGeneral, "Equivalent" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_eqvx),
INSTRUCTION(0x7c000774, "extsbx" , kX , kI, kGeneral, "Extend Sign Byte" , (PPCOpcodeField::kRS), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_extsbx),
INSTRUCTION(0x7c000734, "extshx" , kX , kI, kGeneral, "Extend Sign Half Word" , (PPCOpcodeField::kRS), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_extshx),
INSTRUCTION(0x7c0007b4, "extswx" , kX , kI, kGeneral, "Extend Sign Word" , (PPCOpcodeField::kRS), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_extswx),
INSTRUCTION(0xfc000210, "fabsx" , kX , kF, kGeneral, "Floating Absolute Value" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond), PrintDisasm_fabsx),
INSTRUCTION(0xec00002a, "faddsx" , kA , kF, kGeneral, "Floating Add Single" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_faddsx),
INSTRUCTION(0xfc00002a, "faddx" , kA , kF, kGeneral, "Floating Add" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_faddx),
INSTRUCTION(0xfc00069c, "fcfidx" , kX , kF, kGeneral, "Floating Convert From Integer Doubleword" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fcfidx),
INSTRUCTION(0xfc000040, "fcmpo" , kX , kF, kGeneral, "Floating Compare Ordered" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kCRFD,PPCOpcodeField::kFPSCR), PrintDisasm_fcmpo),
INSTRUCTION(0xfc000000, "fcmpu" , kX , kF, kGeneral, "Floating Compare Unordered" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kCRFD,PPCOpcodeField::kFPSCR), PrintDisasm_fcmpu),
INSTRUCTION(0xfc00065c, "fctidx" , kX , kF, kGeneral, "Floating Convert to Integer Doubleword" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fctidx),
INSTRUCTION(0xfc00065e, "fctidzx" , kX , kF, kGeneral, "Floating Convert to Integer Doubleword with Round Toward Zero" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fctidzx),
INSTRUCTION(0xfc00001c, "fctiwx" , kX , kF, kGeneral, "Floating Convert to Integer Word" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fctiwx),
INSTRUCTION(0xfc00001e, "fctiwzx" , kX , kF, kGeneral, "Floating Convert to Integer Word with Round Toward Zero" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fctiwzx),
INSTRUCTION(0xec000024, "fdivsx" , kA , kF, kGeneral, "Floating Divide Single" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fdivsx),
INSTRUCTION(0xfc000024, "fdivx" , kA , kF, kGeneral, "Floating Divide" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fdivx),
INSTRUCTION(0xec00003a, "fmaddsx" , kA , kF, kGeneral, "Floating Multiply-Add Single" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fmaddsx),
INSTRUCTION(0xfc00003a, "fmaddx" , kA , kF, kGeneral, "Floating Multiply-Add" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fmaddx),
INSTRUCTION(0xfc000090, "fmrx" , kX , kF, kGeneral, "Floating Move Register" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond), PrintDisasm_fmrx),
INSTRUCTION(0xec000038, "fmsubsx" , kA , kF, kGeneral, "Floating Multiply-Subtract Single" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fmsubsx),
INSTRUCTION(0xfc000038, "fmsubx" , kA , kF, kGeneral, "Floating Multiply-Subtract" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fmsubx),
INSTRUCTION(0xec000032, "fmulsx" , kA , kF, kGeneral, "Floating Multiply Single" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fmulsx),
INSTRUCTION(0xfc000032, "fmulx" , kA , kF, kGeneral, "Floating Multiply" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fmulx),
INSTRUCTION(0xfc000110, "fnabsx" , kX , kF, kGeneral, "Floating Negative Absolute Value" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond), PrintDisasm_fnabsx),
INSTRUCTION(0xfc000050, "fnegx" , kX , kF, kGeneral, "Floating Negate" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond), PrintDisasm_fnegx),
INSTRUCTION(0xec00003e, "fnmaddsx" , kA , kF, kGeneral, "Floating Negative Multiply-Add Single" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fnmaddsx),
INSTRUCTION(0xfc00003e, "fnmaddx" , kA , kF, kGeneral, "Floating Negative Multiply-Add" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fnmaddx),
INSTRUCTION(0xec00003c, "fnmsubsx" , kA , kF, kGeneral, "Floating Negative Multiply-Subtract Single" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fnmsubsx),
INSTRUCTION(0xfc00003c, "fnmsubx" , kA , kF, kGeneral, "Floating Negative Multiply-Subtract" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fnmsubx),
INSTRUCTION(0xec000030, "fresx" , kA , kF, kGeneral, "Floating Reciprocal Estimate Single" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fresx),
INSTRUCTION(0xfc000018, "frspx" , kX , kF, kGeneral, "Floating Round to Single" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_frspx),
INSTRUCTION(0xfc000034, "frsqrtex" , kA , kF, kGeneral, "Floating Reciprocal Square Root Estimate" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_frsqrtex),
INSTRUCTION(0xfc00002e, "fselx" , kA , kF, kGeneral, "Floating Select" , (PPCOpcodeField::kFA,PPCOpcodeField::kFC,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond), PrintDisasm_fselx),
INSTRUCTION(0xec00002c, "fsqrtsx" , kA , kF, kGeneral, "Floating Square Root Single" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fsqrtsx),
INSTRUCTION(0xfc00002c, "fsqrtx" , kA , kF, kGeneral, "Floating Square Root" , (PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fsqrtx),
INSTRUCTION(0xec000028, "fsubsx" , kA , kF, kGeneral, "Floating Subtract Single" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fsubsx),
INSTRUCTION(0xfc000028, "fsubx" , kA , kF, kGeneral, "Floating Subtract" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fsubx),
INSTRUCTION(0x7c0007ac, "icbi" , kX , kM, kGeneral, "Instruction Cache Block Invalidate" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_icbi),
INSTRUCTION(0x4c00012c, "isync" , kXL , kI, kGeneral, "Instruction Synchronize" , (), (), PrintDisasm_isync),
INSTRUCTION(0x88000000, "lbz" , kD , kM, kGeneral, "Load Byte and Zero" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kRD), PrintDisasm_lbz),
INSTRUCTION(0x8c000000, "lbzu" , kD , kM, kGeneral, "Load Byte and Zero with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lbzu),
INSTRUCTION(0x7c0000ee, "lbzux" , kX , kM, kGeneral, "Load Byte and Zero with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lbzux),
INSTRUCTION(0x7c0000ae, "lbzx" , kX , kM, kGeneral, "Load Byte and Zero Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lbzx),
INSTRUCTION(0xe8000000, "ld" , kDS , kM, kGeneral, "Load Doubleword" , (PPCOpcodeField::kRA0,PPCOpcodeField::kds), (PPCOpcodeField::kRD), PrintDisasm_ld),
INSTRUCTION(0x7c0000a8, "ldarx" , kX , kM, kGeneral, "Load Doubleword and Reserve Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_ldarx),
INSTRUCTION(0x7c000428, "ldbrx" , kX , kM, kGeneral, "Load Doubleword Byte-Reverse Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_ldbrx),
INSTRUCTION(0xe8000001, "ldu" , kDS , kM, kGeneral, "Load Doubleword with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kds), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_ldu),
INSTRUCTION(0x7c00006a, "ldux" , kX , kM, kGeneral, "Load Doubleword with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_ldux),
INSTRUCTION(0x7c00002a, "ldx" , kX , kM, kGeneral, "Load Doubleword Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_ldx),
INSTRUCTION(0xc8000000, "lfd" , kD , kM, kGeneral, "Load Floating-Point Double" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kFD), PrintDisasm_lfd),
INSTRUCTION(0xcc000000, "lfdu" , kD , kM, kGeneral, "Load Floating-Point Double with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kFD,PPCOpcodeField::kRA), PrintDisasm_lfdu),
INSTRUCTION(0x7c0004ee, "lfdux" , kX , kM, kGeneral, "Load Floating-Point Double with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kFD,PPCOpcodeField::kRA), PrintDisasm_lfdux),
INSTRUCTION(0x7c0004ae, "lfdx" , kX , kM, kGeneral, "Load Floating-Point Double Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kFD), PrintDisasm_lfdx),
INSTRUCTION(0xc0000000, "lfs" , kD , kM, kGeneral, "Load Floating-Point Single" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kFD), PrintDisasm_lfs),
INSTRUCTION(0xc4000000, "lfsu" , kD , kM, kGeneral, "Load Floating-Point Single with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kFD,PPCOpcodeField::kRA), PrintDisasm_lfsu),
INSTRUCTION(0x7c00046e, "lfsux" , kX , kM, kGeneral, "Load Floating-Point Single with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kFD,PPCOpcodeField::kRA), PrintDisasm_lfsux),
INSTRUCTION(0x7c00042e, "lfsx" , kX , kM, kGeneral, "Load Floating-Point Single Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kFD), PrintDisasm_lfsx),
INSTRUCTION(0xa8000000, "lha" , kD , kM, kGeneral, "Load Half Word Algebraic" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kRD), PrintDisasm_lha),
INSTRUCTION(0xac000000, "lhau" , kD , kM, kGeneral, "Load Half Word Algebraic with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lhau),
INSTRUCTION(0x7c0002ee, "lhaux" , kX , kM, kGeneral, "Load Half Word Algebraic with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lhaux),
INSTRUCTION(0x7c0002ae, "lhax" , kX , kM, kGeneral, "Load Half Word Algebraic Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lhax),
INSTRUCTION(0x7c00062c, "lhbrx" , kX , kM, kGeneral, "Load Half Word Byte-Reverse Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lhbrx),
INSTRUCTION(0xa0000000, "lhz" , kD , kM, kGeneral, "Load Half Word and Zero" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kRD), PrintDisasm_lhz),
INSTRUCTION(0xa4000000, "lhzu" , kD , kM, kGeneral, "Load Half Word and Zero with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lhzu),
INSTRUCTION(0x7c00026e, "lhzux" , kX , kM, kGeneral, "Load Half Word and Zero with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lhzux),
INSTRUCTION(0x7c00022e, "lhzx" , kX , kM, kGeneral, "Load Half Word and Zero Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lhzx),
INSTRUCTION(0xb8000000, "lmw" , kD , kM, kGeneral, "Load Multiple Word" , (), (), nullptr),
INSTRUCTION(0x7c0004aa, "lswi" , kX , kM, kGeneral, "Load String Word Immediate" , (), (), nullptr),
INSTRUCTION(0x7c00042a, "lswx" , kX , kM, kGeneral, "Load String Word Indexed" , (), (), nullptr),
INSTRUCTION(0x7c00000e, "lvebx" , kX , kM, kGeneral, "Load Vector Element Byte Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvebx),
INSTRUCTION(0x7c00004e, "lvehx" , kX , kM, kGeneral, "Load Vector Element Half Word Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvehx),
INSTRUCTION(0x7c00008e, "lvewx" , kX , kM, kGeneral, "Load Vector Element Word Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvewx),
INSTRUCTION(0x10000083, "lvewx128" , kVX128_1, kM, kGeneral, "Load Vector Element Word Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvewx128),
INSTRUCTION(0x7c00040e, "lvlx" , kX , kM, kGeneral, "Load Vector Left Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvlx),
INSTRUCTION(0x10000403, "lvlx128" , kVX128_1, kM, kGeneral, "Load Vector Left Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvlx128),
INSTRUCTION(0x7c00060e, "lvlxl" , kX , kM, kGeneral, "Load Vector Left Indexed LRU" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvlxl),
INSTRUCTION(0x10000603, "lvlxl128" , kVX128_1, kM, kGeneral, "Load Vector Left Indexed LRU 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvlxl128),
INSTRUCTION(0x7c00044e, "lvrx" , kX , kM, kGeneral, "Load Vector Right Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvrx),
INSTRUCTION(0x10000443, "lvrx128" , kVX128_1, kM, kGeneral, "Load Vector Right Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvrx128),
INSTRUCTION(0x7c00064e, "lvrxl" , kX , kM, kGeneral, "Load Vector Right Indexed LRU" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvrxl),
INSTRUCTION(0x10000643, "lvrxl128" , kVX128_1, kM, kGeneral, "Load Vector Right Indexed LRU 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvrxl128),
INSTRUCTION(0x7c00000c, "lvsl" , kX , kV, kGeneral, "Load Vector for Shift Left Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvsl),
INSTRUCTION(0x10000003, "lvsl128" , kVX128_1, kV, kGeneral, "Load Vector for Shift Left Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvsl128),
INSTRUCTION(0x7c00004c, "lvsr" , kX , kV, kGeneral, "Load Vector for Shift Right Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvsr),
INSTRUCTION(0x10000043, "lvsr128" , kVX128_1, kV, kGeneral, "Load Vector for Shift Right Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvsr128),
INSTRUCTION(0x7c0000ce, "lvx" , kX , kM, kGeneral, "Load Vector Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvx),
INSTRUCTION(0x100000c3, "lvx128" , kVX128_1, kM, kGeneral, "Load Vector Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvx128),
INSTRUCTION(0x7c0002ce, "lvxl" , kX , kM, kGeneral, "Load Vector Indexed LRU" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvxl),
INSTRUCTION(0x100002c3, "lvxl128" , kVX128_1, kM, kGeneral, "Load Vector Indexed LRU 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvxl128),
INSTRUCTION(0xe8000002, "lwa" , kDS , kM, kGeneral, "Load Word Algebraic" , (PPCOpcodeField::kRA0,PPCOpcodeField::kds), (PPCOpcodeField::kRD), PrintDisasm_lwa),
INSTRUCTION(0x7c000028, "lwarx" , kX , kM, kGeneral, "Load Word and Reserve Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lwarx),
INSTRUCTION(0x7c0002ea, "lwaux" , kX , kM, kGeneral, "Load Word Algebraic with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lwaux),
INSTRUCTION(0x7c0002aa, "lwax" , kX , kM, kGeneral, "Load Word Algebraic Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lwax),
INSTRUCTION(0x7c00042c, "lwbrx" , kX , kM, kGeneral, "Load Word Byte-Reverse Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lwbrx),
INSTRUCTION(0x80000000, "lwz" , kD , kM, kGeneral, "Load Word and Zero" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kRD), PrintDisasm_lwz),
INSTRUCTION(0x84000000, "lwzu" , kD , kM, kGeneral, "Load Word and Zero with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lwzu),
INSTRUCTION(0x7c00006e, "lwzux" , kX , kM, kGeneral, "Load Word and Zero with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lwzux),
INSTRUCTION(0x7c00002e, "lwzx" , kX , kM, kGeneral, "Load Word and Zero Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lwzx),
INSTRUCTION(0x4c000000, "mcrf" , kXL , kC, kGeneral, "Move Condition Register Field" , (PPCOpcodeField::kCRFS), (PPCOpcodeField::kCRFD), PrintDisasm_mcrf),
INSTRUCTION(0xfc000080, "mcrfs" , kX , kC, kGeneral, "Move to Condition Register from FPSCR" , (PPCOpcodeField::kCRFS,PPCOpcodeField::kFPSCR), (PPCOpcodeField::kCRFD,PPCOpcodeField::kFPSCR), PrintDisasm_mcrfs),
INSTRUCTION(0x7c000400, "mcrxr" , kX , kC, kGeneral, "Move to Condition Register from XER" , (PPCOpcodeField::kCR), (PPCOpcodeField::kCRFD), PrintDisasm_mcrxr),
INSTRUCTION(0x7c000026, "mfcr" , kX , kC, kGeneral, "Move from Condition Register" , (PPCOpcodeField::kCR), (PPCOpcodeField::kRD), PrintDisasm_mfcr),
INSTRUCTION(0xfc00048e, "mffsx" , kX , kC, kGeneral, "Move from FPSCR" , (PPCOpcodeField::kFPSCR), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond), PrintDisasm_mffsx),
INSTRUCTION(0x7c0000a6, "mfmsr" , kX , kC, kSync , "Move from Machine State Register" , (PPCOpcodeField::kMSR), (PPCOpcodeField::kRD), PrintDisasm_mfmsr),
INSTRUCTION(0x7c0002a6, "mfspr" , kXFX , kC, kGeneral, "Move from Special-Purpose Register" , (PPCOpcodeField::kSPR), (PPCOpcodeField::kRD), PrintDisasm_mfspr),
INSTRUCTION(0x7c0002e6, "mftb" , kXFX , kC, kGeneral, "Move from Time Base" , (PPCOpcodeField::kTBR), (PPCOpcodeField::kRD), PrintDisasm_mftb),
INSTRUCTION(0x10000604, "mfvscr" , kVX , kC, kGeneral, "Move from VSCR" , (PPCOpcodeField::kVSCR), (PPCOpcodeField::kVD), nullptr),
INSTRUCTION(0x7c000120, "mtcrf" , kXFX , kC, kGeneral, "Move to Condition Register Fields" , (PPCOpcodeField::kRS), (PPCOpcodeField::kCRM), PrintDisasm_mtcrf),
INSTRUCTION(0xfc00008c, "mtfsb0x" , kX , kC, kGeneral, "Move to FPSCR Bit 0" , (), (PPCOpcodeField::kFPSCRD,PPCOpcodeField::kCRcond), PrintDisasm_mtfsb0x),
INSTRUCTION(0xfc00004c, "mtfsb1x" , kX , kC, kGeneral, "Move to FPSCR Bit 1" , (), (PPCOpcodeField::kFPSCRD,PPCOpcodeField::kCRcond), PrintDisasm_mtfsb1x),
INSTRUCTION(0xfc00010c, "mtfsfix" , kX , kC, kGeneral, "Move to FPSCR Field Immediate" , (PPCOpcodeField::kIMM), (PPCOpcodeField::kCRFD,PPCOpcodeField::kCRcond), PrintDisasm_mtfsfix),
INSTRUCTION(0xfc00058e, "mtfsfx" , kXFL , kC, kGeneral, "Move to FPSCR Fields" , (PPCOpcodeField::kFM,PPCOpcodeField::kFB), (PPCOpcodeField::kFPSCR,PPCOpcodeField::kCRcond), PrintDisasm_mtfsfx),
INSTRUCTION(0x7c000124, "mtmsr" , kX , kC, kSync , "Move to Machine State Register" , (PPCOpcodeField::kRS), (PPCOpcodeField::kMSR), PrintDisasm_mtmsr),
INSTRUCTION(0x7c000164, "mtmsrd" , kX , kC, kSync , "Move to Machine State Register Doubleword" , (PPCOpcodeField::kRS), (PPCOpcodeField::kMSR), PrintDisasm_mtmsrd),
INSTRUCTION(0x7c0003a6, "mtspr" , kXFX , kC, kGeneral, "Move to Special-Purpose Register" , (PPCOpcodeField::kRS), (PPCOpcodeField::kSPR), PrintDisasm_mtspr),
INSTRUCTION(0x10000644, "mtvscr" , kVX , kC, kGeneral, "Move to VSCR" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVSCR), nullptr),
INSTRUCTION(0x7c000012, "mulhdux" , kXO , kI, kGeneral, "Multiply High Doubleword Unsigned" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond), PrintDisasm_mulhdux),
INSTRUCTION(0x7c000092, "mulhdx" , kXO , kI, kGeneral, "Multiply High Doubleword" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond), PrintDisasm_mulhdx),
INSTRUCTION(0x7c000016, "mulhwux" , kXO , kI, kGeneral, "Multiply High Word Unsigned" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond), PrintDisasm_mulhwux),
INSTRUCTION(0x7c000096, "mulhwx" , kXO , kI, kGeneral, "Multiply High Word" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond), PrintDisasm_mulhwx),
INSTRUCTION(0x7c0001d2, "mulldx" , kXO , kI, kGeneral, "Multiply Low Doubleword" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond,PPCOpcodeField::kOEcond), PrintDisasm_mulldx),
INSTRUCTION(0x1c000000, "mulli" , kD , kI, kGeneral, "Multiply Low Immediate" , (PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (PPCOpcodeField::kRD), PrintDisasm_mulli),
INSTRUCTION(0x7c0001d6, "mullwx" , kXO , kI, kGeneral, "Multiply Low Word" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond,PPCOpcodeField::kOEcond), PrintDisasm_mullwx),
INSTRUCTION(0x7c0003b8, "nandx" , kX , kI, kGeneral, "NAND" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_nandx),
INSTRUCTION(0x7c0000d0, "negx" , kXO , kI, kGeneral, "Negate" , (PPCOpcodeField::kRA), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond,PPCOpcodeField::kOEcond), PrintDisasm_negx),
INSTRUCTION(0x7c0000f8, "norx" , kX , kI, kGeneral, "NOR" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_norx),
INSTRUCTION(0x7c000338, "orcx" , kX , kI, kGeneral, "OR with Complement" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_orcx),
INSTRUCTION(0x60000000, "ori" , kD , kI, kGeneral, "OR Immediate" , (PPCOpcodeField::kRS,PPCOpcodeField::kUIMM), (PPCOpcodeField::kRA), PrintDisasm_ori),
INSTRUCTION(0x64000000, "oris" , kD , kI, kGeneral, "OR Immediate Shifted" , (PPCOpcodeField::kRS,PPCOpcodeField::kUIMM), (PPCOpcodeField::kRA), PrintDisasm_oris),
INSTRUCTION(0x7c000378, "orx" , kX , kI, kGeneral, "OR" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_orx),
INSTRUCTION(0x78000010, "rldclx" , kMDS , kI, kGeneral, "Rotate Left Doubleword then Clear Left" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB,PPCOpcodeField::kMB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rldclx),
INSTRUCTION(0x78000012, "rldcrx" , kMDS , kI, kGeneral, "Rotate Left Doubleword then Clear Right" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB,PPCOpcodeField::kME), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rldcrx),
INSTRUCTION(0x78000000, "rldiclx" , kMD , kI, kGeneral, "Rotate Left Doubleword Immediate then Clear Left" , (PPCOpcodeField::kRS,PPCOpcodeField::kSH,PPCOpcodeField::kMB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rldiclx),
INSTRUCTION(0x78000004, "rldicrx" , kMD , kI, kGeneral, "Rotate Left Doubleword Immediate then Clear Right" , (PPCOpcodeField::kRS,PPCOpcodeField::kSH,PPCOpcodeField::kME), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rldicrx),
INSTRUCTION(0x78000008, "rldicx" , kMD , kI, kGeneral, "Rotate Left Doubleword Immediate then Clear" , (PPCOpcodeField::kRS,PPCOpcodeField::kSH,PPCOpcodeField::kMB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rldicx),
INSTRUCTION(0x7800000c, "rldimix" , kMD , kI, kGeneral, "Rotate Left Doubleword Immediate then Mask Insert" , (PPCOpcodeField::kRS,PPCOpcodeField::kSH,PPCOpcodeField::kMB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rldimix),
INSTRUCTION(0x50000000, "rlwimix" , kM , kI, kGeneral, "Rotate Left Word Immediate then Mask Insert" , (PPCOpcodeField::kRS,PPCOpcodeField::kSH,PPCOpcodeField::kMB,PPCOpcodeField::kME), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rlwimix),
INSTRUCTION(0x54000000, "rlwinmx" , kM , kI, kGeneral, "Rotate Left Word Immediate then AND with Mask" , (PPCOpcodeField::kRS,PPCOpcodeField::kSH,PPCOpcodeField::kMB,PPCOpcodeField::kME), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rlwinmx),
INSTRUCTION(0x5c000000, "rlwnmx" , kM , kI, kGeneral, "Rotate Left Word then AND with Mask" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB,PPCOpcodeField::kMB,PPCOpcodeField::kME), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_rlwnmx),
INSTRUCTION(0x44000002, "sc" , kSC , kB, kSync , "System Call" , (PPCOpcodeField::kLEV), (), PrintDisasm_sc),
INSTRUCTION(0x7c000036, "sldx" , kX , kI, kGeneral, "Shift Left Doubleword" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_sldx),
INSTRUCTION(0x7c000030, "slwx" , kX , kI, kGeneral, "Shift Left Word" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_slwx),
INSTRUCTION(0x7c000674, "sradix" , kXS , kI, kGeneral, "Shift Right Algebraic Doubleword Immediate" , (PPCOpcodeField::kRS,PPCOpcodeField::kSH), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond,PPCOpcodeField::kCA), PrintDisasm_sradix),
INSTRUCTION(0x7c000634, "sradx" , kX , kI, kGeneral, "Shift Right Algebraic Doubleword" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond,PPCOpcodeField::kCA), PrintDisasm_sradx),
INSTRUCTION(0x7c000670, "srawix" , kX , kI, kGeneral, "Shift Right Algebraic Word Immediate" , (PPCOpcodeField::kRS,PPCOpcodeField::kSH), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond,PPCOpcodeField::kCA), PrintDisasm_srawix),
INSTRUCTION(0x7c000630, "srawx" , kX , kI, kGeneral, "Shift Right Algebraic Word" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond,PPCOpcodeField::kCA), PrintDisasm_srawx),
INSTRUCTION(0x7c000436, "srdx" , kX , kI, kGeneral, "Shift Right Doubleword" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_srdx),
INSTRUCTION(0x7c000430, "srwx" , kX , kI, kGeneral, "Shift Right Word" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_srwx),
INSTRUCTION(0x98000000, "stb" , kD , kM, kGeneral, "Store Byte" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_stb),
INSTRUCTION(0x9c000000, "stbu" , kD , kM, kGeneral, "Store Byte with Update" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_stbu),
INSTRUCTION(0x7c0001ee, "stbux" , kX , kM, kGeneral, "Store Byte with Update Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stbux),
INSTRUCTION(0x7c0001ae, "stbx" , kX , kM, kGeneral, "Store Byte Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stbx),
INSTRUCTION(0xf8000000, "std" , kDS , kM, kGeneral, "Store Doubleword" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kds), (), PrintDisasm_std),
INSTRUCTION(0x7c000528, "stdbrx" , kX , kM, kGeneral, "Store Doubleword Byte-Reverse Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stdbrx),
INSTRUCTION(0x7c0001ad, "stdcx" , kX , kM, kGeneral, "Store Doubleword Conditional Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kCR), PrintDisasm_stdcx),
INSTRUCTION(0xf8000001, "stdu" , kDS , kM, kGeneral, "Store Doubleword with Update" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kds), (PPCOpcodeField::kRA), PrintDisasm_stdu),
INSTRUCTION(0x7c00016a, "stdux" , kX , kM, kGeneral, "Store Doubleword with Update Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stdux),
INSTRUCTION(0x7c00012a, "stdx" , kX , kM, kGeneral, "Store Doubleword Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stdx),
INSTRUCTION(0xd8000000, "stfd" , kD , kM, kGeneral, "Store Floating-Point Double" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_stfd),
INSTRUCTION(0xdc000000, "stfdu" , kD , kM, kGeneral, "Store Floating-Point Double with Update" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_stfdu),
INSTRUCTION(0x7c0005ee, "stfdux" , kX , kM, kGeneral, "Store Floating-Point Double with Update Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stfdux),
INSTRUCTION(0x7c0005ae, "stfdx" , kX , kM, kGeneral, "Store Floating-Point Double Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stfdx),
INSTRUCTION(0x7c0007ae, "stfiwx" , kX , kM, kGeneral, "Store Floating-Point as Integer Word Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stfiwx),
INSTRUCTION(0xd0000000, "stfs" , kD , kM, kGeneral, "Store Floating-Point Single" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_stfs),
INSTRUCTION(0xd4000000, "stfsu" , kD , kM, kGeneral, "Store Floating-Point Single with Update" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_stfsu),
INSTRUCTION(0x7c00056e, "stfsux" , kX , kM, kGeneral, "Store Floating-Point Single with Update Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stfsux),
INSTRUCTION(0x7c00052e, "stfsx" , kX , kM, kGeneral, "Store Floating-Point Single Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stfsx),
INSTRUCTION(0xb0000000, "sth" , kD , kM, kGeneral, "Store Half Word" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_sth),
INSTRUCTION(0x7c00072c, "sthbrx" , kX , kM, kGeneral, "Store Half Word Byte-Reverse Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_sthbrx),
INSTRUCTION(0xb4000000, "sthu" , kD , kM, kGeneral, "Store Half Word with Update" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_sthu),
INSTRUCTION(0x7c00036e, "sthux" , kX , kM, kGeneral, "Store Half Word with Update Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_sthux),
INSTRUCTION(0x7c00032e, "sthx" , kX , kM, kGeneral, "Store Half Word Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_sthx),
INSTRUCTION(0xbc000000, "stmw" , kD , kM, kGeneral, "Store Multiple Word" , (), (), nullptr),
INSTRUCTION(0x7c0005aa, "stswi" , kX , kM, kGeneral, "Store String Word Immediate" , (), (), nullptr),
INSTRUCTION(0x7c00052a, "stswx" , kX , kM, kGeneral, "Store String Word Indexed" , (), (), nullptr),
INSTRUCTION(0x7c00010e, "stvebx" , kX , kM, kGeneral, "Store Vector Element Byte Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvebx),
INSTRUCTION(0x7c00014e, "stvehx" , kX , kM, kGeneral, "Store Vector Element Half Word Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvehx),
INSTRUCTION(0x7c00018e, "stvewx" , kX , kM, kGeneral, "Store Vector Element Word Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvewx),
INSTRUCTION(0x10000183, "stvewx128" , kVX128_1, kM, kGeneral, "Store Vector Element Word Indexed 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvewx128),
INSTRUCTION(0x7c00050e, "stvlx" , kX , kM, kGeneral, "Store Vector Left Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvlx),
INSTRUCTION(0x10000503, "stvlx128" , kVX128_1, kM, kGeneral, "Store Vector Left Indexed 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvlx128),
INSTRUCTION(0x7c00070e, "stvlxl" , kX , kM, kGeneral, "Store Vector Left Indexed LRU" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvlxl),
INSTRUCTION(0x10000703, "stvlxl128" , kVX128_1, kM, kGeneral, "Store Vector Left Indexed LRU 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvlxl128),
INSTRUCTION(0x7c00054e, "stvrx" , kX , kM, kGeneral, "Store Vector Right Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvrx),
INSTRUCTION(0x10000543, "stvrx128" , kVX128_1, kM, kGeneral, "Store Vector Right Indexed 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvrx128),
INSTRUCTION(0x7c00074e, "stvrxl" , kX , kM, kGeneral, "Store Vector Right Indexed LRU" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvrxl),
INSTRUCTION(0x10000743, "stvrxl128" , kVX128_1, kM, kGeneral, "Store Vector Right Indexed LRU 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvrxl128),
INSTRUCTION(0x7c0001ce, "stvx" , kX , kM, kGeneral, "Store Vector Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvx),
INSTRUCTION(0x100001c3, "stvx128" , kVX128_1, kM, kGeneral, "Store Vector Indexed 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvx128),
INSTRUCTION(0x7c0003ce, "stvxl" , kX , kM, kGeneral, "Store Vector Indexed LRU" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvxl),
INSTRUCTION(0x100003c3, "stvxl128" , kVX128_1, kM, kGeneral, "Store Vector Indexed LRU 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvxl128),
INSTRUCTION(0x90000000, "stw" , kD , kM, kGeneral, "Store Word" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_stw),
INSTRUCTION(0x7c00052c, "stwbrx" , kX , kM, kGeneral, "Store Word Byte-Reverse Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stwbrx),
INSTRUCTION(0x7c00012d, "stwcx" , kX , kM, kGeneral, "Store Word Conditional Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kCR), PrintDisasm_stwcx),
INSTRUCTION(0x94000000, "stwu" , kD , kM, kGeneral, "Store Word with Update" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_stwu),
INSTRUCTION(0x7c00016e, "stwux" , kX , kM, kGeneral, "Store Word with Update Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stwux),
INSTRUCTION(0x7c00012e, "stwx" , kX , kM, kGeneral, "Store Word Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stwx),
INSTRUCTION(0x7c000010, "subfcx" , kXO , kI, kGeneral, "Subtract From Carrying" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond,PPCOpcodeField::kOEcond), PrintDisasm_subfcx),
INSTRUCTION(0x7c000110, "subfex" , kXO , kI, kGeneral, "Subtract From Extended" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond,PPCOpcodeField::kOEcond), PrintDisasm_subfex),
INSTRUCTION(0x20000000, "subficx" , kD , kI, kGeneral, "Subtract From Immediate Carrying" , (PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (PPCOpcodeField::kRD,PPCOpcodeField::kCA), PrintDisasm_subficx),
INSTRUCTION(0x7c0001d0, "subfmex" , kXO , kI, kGeneral, "Subtract From Minus One Extended" , (PPCOpcodeField::kRA,PPCOpcodeField::kCA), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond,PPCOpcodeField::kOEcond,PPCOpcodeField::kCA), PrintDisasm_subfmex),
INSTRUCTION(0x7c000050, "subfx" , kXO , kI, kGeneral, "Subtract From" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond,PPCOpcodeField::kOEcond), PrintDisasm_subfx),
INSTRUCTION(0x7c000190, "subfzex" , kXO , kI, kGeneral, "Subtract From Zero Extended" , (PPCOpcodeField::kRA,PPCOpcodeField::kCA), (PPCOpcodeField::kRD,PPCOpcodeField::kCRcond,PPCOpcodeField::kOEcond,PPCOpcodeField::kCA), PrintDisasm_subfzex),
INSTRUCTION(0x7c0004ac, "sync" , kX , kI, kGeneral, "Synchronize" , (), (), PrintDisasm_sync),
INSTRUCTION(0x7c000088, "td" , kX , kB, kGeneral, "Trap Doubleword" , (PPCOpcodeField::kTO,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (), PrintDisasm_td),
INSTRUCTION(0x08000000, "tdi" , kD , kB, kGeneral, "Trap Doubleword Immediate" , (PPCOpcodeField::kTO,PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (), PrintDisasm_tdi),
INSTRUCTION(0x7c000008, "tw" , kX , kB, kGeneral, "Trap Word" , (PPCOpcodeField::kTO,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (), PrintDisasm_tw),
INSTRUCTION(0x0c000000, "twi" , kD , kB, kGeneral, "Trap Word Immediate" , (PPCOpcodeField::kTO,PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (), PrintDisasm_twi),
INSTRUCTION(0x10000180, "vaddcuw" , kVX , kV, kGeneral, "Vector Add Carryout Unsigned Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vaddcuw),
INSTRUCTION(0x1000000a, "vaddfp" , kVX , kV, kGeneral, "Vector Add Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vaddfp),
INSTRUCTION(0x14000010, "vaddfp128" , kVX128 , kV, kGeneral, "Vector128 Add Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vaddfp128),
INSTRUCTION(0x10000300, "vaddsbs" , kVX , kV, kGeneral, "Vector Add Signed Byte Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vaddsbs),
INSTRUCTION(0x10000340, "vaddshs" , kVX , kV, kGeneral, "Vector Add Signed Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vaddshs),
INSTRUCTION(0x10000380, "vaddsws" , kVX , kV, kGeneral, "Vector Add Signed Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vaddsws),
INSTRUCTION(0x10000000, "vaddubm" , kVX , kV, kGeneral, "Vector Add Unsigned Byte Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vaddubm),
INSTRUCTION(0x10000200, "vaddubs" , kVX , kV, kGeneral, "Vector Add Unsigned Byte Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vaddubs),
INSTRUCTION(0x10000040, "vadduhm" , kVX , kV, kGeneral, "Vector Add Unsigned Half Word Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vadduhm),
INSTRUCTION(0x10000240, "vadduhs" , kVX , kV, kGeneral, "Vector Add Unsigned Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vadduhs),
INSTRUCTION(0x10000080, "vadduwm" , kVX , kV, kGeneral, "Vector Add Unsigned Word Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vadduwm),
INSTRUCTION(0x10000280, "vadduws" , kVX , kV, kGeneral, "Vector Add Unsigned Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vadduws),
INSTRUCTION(0x10000404, "vand" , kVX , kV, kGeneral, "Vector Logical AND" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vand),
INSTRUCTION(0x14000210, "vand128" , kVX128 , kV, kGeneral, "Vector128 Logical AND" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vand128),
INSTRUCTION(0x10000444, "vandc" , kVX , kV, kGeneral, "Vector Logical AND with Complement" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vandc),
INSTRUCTION(0x14000250, "vandc128" , kVX128 , kV, kGeneral, "Vector128 Logical AND with Complement" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vandc128),
INSTRUCTION(0x10000502, "vavgsb" , kVX , kV, kGeneral, "Vector Average Signed Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vavgsb),
INSTRUCTION(0x10000542, "vavgsh" , kVX , kV, kGeneral, "Vector Average Signed Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vavgsh),
INSTRUCTION(0x10000582, "vavgsw" , kVX , kV, kGeneral, "Vector Average Signed Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vavgsw),
INSTRUCTION(0x10000402, "vavgub" , kVX , kV, kGeneral, "Vector Average Unsigned Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vavgub),
INSTRUCTION(0x10000442, "vavguh" , kVX , kV, kGeneral, "Vector Average Unsigned Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vavguh),
INSTRUCTION(0x10000482, "vavguw" , kVX , kV, kGeneral, "Vector Average Unsigned Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vavguw),
INSTRUCTION(0x18000230, "vcfpsxws128" , kVX128_3, kV, kGeneral, "Vector128 Convert From Floating-Point to Signed Fixed-Point Word Saturate" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vcfpsxws128),
INSTRUCTION(0x18000270, "vcfpuxws128" , kVX128_3, kV, kGeneral, "Vector128 Convert From Floating-Point to Unsigned Fixed-Point Word Saturate", (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vcfpuxws128),
INSTRUCTION(0x1000034a, "vcfsx" , kVX , kV, kGeneral, "Vector Convert from Signed Fixed-Point Word" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vcfsx),
INSTRUCTION(0x1000030a, "vcfux" , kVX , kV, kGeneral, "Vector Convert from Unsigned Fixed-Point Word" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vcfux),
INSTRUCTION(0x100003c6, "vcmpbfp" , kVC , kV, kGeneral, "Vector Compare Bounds Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpbfp),
INSTRUCTION(0x18000180, "vcmpbfp128" , kVX128_R, kV, kGeneral, "Vector128 Compare Bounds Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpbfp128),
INSTRUCTION(0x100000c6, "vcmpeqfp" , kVC , kV, kGeneral, "Vector Compare Equal-to Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpeqfp),
INSTRUCTION(0x18000000, "vcmpeqfp128" , kVX128_R, kV, kGeneral, "Vector128 Compare Equal-to Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpeqfp128),
INSTRUCTION(0x10000006, "vcmpequb" , kVC , kV, kGeneral, "Vector Compare Equal-to Unsigned Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpequb),
INSTRUCTION(0x10000046, "vcmpequh" , kVC , kV, kGeneral, "Vector Compare Equal-to Unsigned Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpequh),
INSTRUCTION(0x10000086, "vcmpequw" , kVC , kV, kGeneral, "Vector Compare Equal-to Unsigned Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpequw),
INSTRUCTION(0x18000200, "vcmpequw128" , kVX128_R, kV, kGeneral, "Vector128 Compare Equal-to Unsigned Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpequw128),
INSTRUCTION(0x100001c6, "vcmpgefp" , kVC , kV, kGeneral, "Vector Compare Greater-Than-or-Equal-to Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgefp),
INSTRUCTION(0x18000080, "vcmpgefp128" , kVX128_R, kV, kGeneral, "Vector128 Compare Greater-Than-or-Equal-to Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgefp128),
INSTRUCTION(0x100002c6, "vcmpgtfp" , kVC , kV, kGeneral, "Vector Compare Greater-Than Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgtfp),
INSTRUCTION(0x18000100, "vcmpgtfp128" , kVX128_R, kV, kGeneral, "Vector128 Compare Greater-Than Floating-Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgtfp128),
INSTRUCTION(0x10000306, "vcmpgtsb" , kVC , kV, kGeneral, "Vector Compare Greater-Than Signed Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgtsb),
INSTRUCTION(0x10000346, "vcmpgtsh" , kVC , kV, kGeneral, "Vector Compare Greater-Than Signed Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgtsh),
INSTRUCTION(0x10000386, "vcmpgtsw" , kVC , kV, kGeneral, "Vector Compare Greater-Than Signed Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgtsw),
INSTRUCTION(0x10000206, "vcmpgtub" , kVC , kV, kGeneral, "Vector Compare Greater-Than Unsigned Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgtub),
INSTRUCTION(0x10000246, "vcmpgtuh" , kVC , kV, kGeneral, "Vector Compare Greater-Than Unsigned Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgtuh),
INSTRUCTION(0x10000286, "vcmpgtuw" , kVC , kV, kGeneral, "Vector Compare Greater-Than Unsigned Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kCRcond), PrintDisasm_vcmpgtuw),
INSTRUCTION(0x180002b0, "vcsxwfp128" , kVX128_3, kV, kGeneral, "Vector128 Convert From Signed Fixed-Point Word to Floating-Point" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vcsxwfp128),
INSTRUCTION(0x100003ca, "vctsxs" , kVX , kV, kGeneral, "Vector Convert to Signed Fixed-Point Word Saturate" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vctsxs),
INSTRUCTION(0x1000038a, "vctuxs" , kVX , kV, kGeneral, "Vector Convert to Unsigned Fixed-Point Word Saturate" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vctuxs),
INSTRUCTION(0x180002f0, "vcuxwfp128" , kVX128_3, kV, kGeneral, "Vector128 Convert From Unsigned Fixed-Point Word to Floating-Point" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vcuxwfp128),
INSTRUCTION(0x1000018a, "vexptefp" , kVX , kV, kGeneral, "Vector 2 Raised to the Exponent Estimate Floating Point" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vexptefp),
INSTRUCTION(0x180006b0, "vexptefp128" , kVX128_3, kV, kGeneral, "Vector128 Log2 Estimate Floating Point" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vexptefp128),
INSTRUCTION(0x100001ca, "vlogefp" , kVX , kV, kGeneral, "Vector Log2 Estimate Floating Point" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vlogefp),
INSTRUCTION(0x180006f0, "vlogefp128" , kVX128_3, kV, kGeneral, "Vector128 Log2 Estimate Floating Point" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vlogefp128),
INSTRUCTION(0x14000110, "vmaddcfp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Add Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVD,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaddcfp128),
INSTRUCTION(0x1000002e, "vmaddfp" , kVA , kV, kGeneral, "Vector Multiply-Add Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVC,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaddfp),
INSTRUCTION(0x140000d0, "vmaddfp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Add Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVC,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaddfp128),
INSTRUCTION(0x1000040a, "vmaxfp" , kVX , kV, kGeneral, "Vector Maximum Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaxfp),
INSTRUCTION(0x18000280, "vmaxfp128" , kVX128 , kV, kGeneral, "Vector128 Maximum Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaxfp128),
INSTRUCTION(0x10000102, "vmaxsb" , kVX , kV, kGeneral, "Vector Maximum Signed Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaxsb),
INSTRUCTION(0x10000142, "vmaxsh" , kVX , kV, kGeneral, "Vector Maximum Signed Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaxsh),
INSTRUCTION(0x10000182, "vmaxsw" , kVX , kV, kGeneral, "Vector Maximum Signed Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaxsw),
INSTRUCTION(0x10000002, "vmaxub" , kVX , kV, kGeneral, "Vector Maximum Unsigned Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaxub),
INSTRUCTION(0x10000042, "vmaxuh" , kVX , kV, kGeneral, "Vector Maximum Unsigned Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaxuh),
INSTRUCTION(0x10000082, "vmaxuw" , kVX , kV, kGeneral, "Vector Maximum Unsigned Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmaxuw),
INSTRUCTION(0x10000020, "vmhaddshs" , kVA , kV, kGeneral, "Vector Multiply-High and Add Signed Signed Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vmhaddshs),
INSTRUCTION(0x10000021, "vmhraddshs" , kVA , kV, kGeneral, "Vector Multiply-High Round and Add Signed Signed Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vmhraddshs),
INSTRUCTION(0x1000044a, "vminfp" , kVX , kV, kGeneral, "Vector Minimum Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vminfp),
INSTRUCTION(0x180002c0, "vminfp128" , kVX128 , kV, kGeneral, "Vector128 Minimum Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vminfp128),
INSTRUCTION(0x10000302, "vminsb" , kVX , kV, kGeneral, "Vector Minimum Signed Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vminsb),
INSTRUCTION(0x10000342, "vminsh" , kVX , kV, kGeneral, "Vector Minimum Signed Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vminsh),
INSTRUCTION(0x10000382, "vminsw" , kVX , kV, kGeneral, "Vector Minimum Signed Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vminsw),
INSTRUCTION(0x10000202, "vminub" , kVX , kV, kGeneral, "Vector Minimum Unsigned Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vminub),
INSTRUCTION(0x10000242, "vminuh" , kVX , kV, kGeneral, "Vector Minimum Unsigned Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vminuh),
INSTRUCTION(0x10000282, "vminuw" , kVX , kV, kGeneral, "Vector Minimum Unsigned Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vminuw),
INSTRUCTION(0x10000022, "vmladduhm" , kVA , kV, kGeneral, "Vector Multiply-Low and Add Unsigned Half Word Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD), PrintDisasm_vmladduhm),
INSTRUCTION(0x1000000c, "vmrghb" , kVX , kV, kGeneral, "Vector Merge High Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmrghb),
INSTRUCTION(0x1000004c, "vmrghh" , kVX , kV, kGeneral, "Vector Merge High Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmrghh),
INSTRUCTION(0x1000008c, "vmrghw" , kVX , kV, kGeneral, "Vector Merge High Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmrghw),
INSTRUCTION(0x18000300, "vmrghw128" , kVX128 , kV, kGeneral, "Vector128 Merge High Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmrghw128),
INSTRUCTION(0x1000010c, "vmrglb" , kVX , kV, kGeneral, "Vector Merge Low Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmrglb),
INSTRUCTION(0x1000014c, "vmrglh" , kVX , kV, kGeneral, "Vector Merge Low Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmrglh),
INSTRUCTION(0x1000018c, "vmrglw" , kVX , kV, kGeneral, "Vector Merge Low Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmrglw),
INSTRUCTION(0x18000340, "vmrglw128" , kVX128 , kV, kGeneral, "Vector128 Merge Low Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmrglw128),
INSTRUCTION(0x14000190, "vmsum3fp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Sum 3-way Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmsum3fp128),
INSTRUCTION(0x140001d0, "vmsum4fp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Sum 4-way Floating-Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmsum4fp128),
INSTRUCTION(0x10000025, "vmsummbm" , kVA , kV, kGeneral, "Vector Multiply-Sum Mixed-Sign Byte Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD), PrintDisasm_vmsummbm),
INSTRUCTION(0x10000028, "vmsumshm" , kVA , kV, kGeneral, "Vector Multiply-Sum Signed Half Word Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD), PrintDisasm_vmsumshm),
INSTRUCTION(0x10000029, "vmsumshs" , kVA , kV, kGeneral, "Vector Multiply-Sum Signed Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vmsumshs),
INSTRUCTION(0x10000024, "vmsumubm" , kVA , kV, kGeneral, "Vector Multiply-Sum Unsigned Byte Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD), PrintDisasm_vmsumubm),
INSTRUCTION(0x10000026, "vmsumuhm" , kVA , kV, kGeneral, "Vector Multiply-Sum Unsigned Half Word Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD), PrintDisasm_vmsumuhm),
INSTRUCTION(0x10000027, "vmsumuhs" , kVA , kV, kGeneral, "Vector Multiply-Sum Unsigned Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vmsumuhs),
INSTRUCTION(0x10000308, "vmulesb" , kVX , kV, kGeneral, "Vector Multiply Even Signed Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmulesb),
INSTRUCTION(0x10000348, "vmulesh" , kVX , kV, kGeneral, "Vector Multiply Even Signed Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmulesh),
INSTRUCTION(0x10000208, "vmuleub" , kVX , kV, kGeneral, "Vector Multiply Even Unsigned Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmuleub),
INSTRUCTION(0x10000248, "vmuleuh" , kVX , kV, kGeneral, "Vector Multiply Even Unsigned Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmuleuh),
INSTRUCTION(0x14000090, "vmulfp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Floating-Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmulfp128),
INSTRUCTION(0x10000108, "vmulosb" , kVX , kV, kGeneral, "Vector Multiply Odd Signed Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmulosb),
INSTRUCTION(0x10000148, "vmulosh" , kVX , kV, kGeneral, "Vector Multiply Odd Signed Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmulosh),
INSTRUCTION(0x10000008, "vmuloub" , kVX , kV, kGeneral, "Vector Multiply Odd Unsigned Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmuloub),
INSTRUCTION(0x10000048, "vmulouh" , kVX , kV, kGeneral, "Vector Multiply Odd Unsigned Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vmulouh),
INSTRUCTION(0x1000002f, "vnmsubfp" , kVA , kV, kGeneral, "Vector Negative Multiply-Subtract Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVC,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vnmsubfp),
INSTRUCTION(0x14000150, "vnmsubfp128" , kVX128 , kV, kGeneral, "Vector128 Negative Multiply-Subtract Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVD,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vnmsubfp128),
INSTRUCTION(0x10000504, "vnor" , kVX , kV, kGeneral, "Vector Logical NOR" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vnor),
INSTRUCTION(0x14000290, "vnor128" , kVX128 , kV, kGeneral, "Vector128 Logical NOR" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vnor128),
INSTRUCTION(0x10000484, "vor" , kVX , kV, kGeneral, "Vector Logical OR" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vor),
INSTRUCTION(0x140002d0, "vor128" , kVX128 , kV, kGeneral, "Vector128 Logical OR" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vor128),
INSTRUCTION(0x1000002b, "vperm" , kVA , kV, kGeneral, "Vector Permute" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD), PrintDisasm_vperm),
INSTRUCTION(0x14000000, "vperm128" , kVX128_2, kV, kGeneral, "Vector128 Permute" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD), PrintDisasm_vperm128),
INSTRUCTION(0x18000210, "vpermwi128" , kVX128_P, kV, kGeneral, "Vector128 Permutate Word Immediate" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vpermwi128),
INSTRUCTION(0x18000610, "vpkd3d128" , kVX128_4, kV, kGeneral, "Vector128 Pack D3Dtype, Rotate Left Immediate and Mask Insert" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), nullptr),
INSTRUCTION(0x1000030e, "vpkpx" , kVX , kV, kGeneral, "Vector Pack Pixel" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vpkpx),
INSTRUCTION(0x1000018e, "vpkshss" , kVX , kV, kGeneral, "Vector Pack Signed Half Word Signed Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkshss),
INSTRUCTION(0x14000200, "vpkshss128" , kVX128 , kV, kGeneral, "Vector128 Pack Signed Half Word Signed Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkshss128),
INSTRUCTION(0x1000010e, "vpkshus" , kVX , kV, kGeneral, "Vector Pack Signed Half Word Unsigned Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkshus),
INSTRUCTION(0x14000240, "vpkshus128" , kVX128 , kV, kGeneral, "Vector128 Pack Signed Half Word Unsigned Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkshus128),
INSTRUCTION(0x100001ce, "vpkswss" , kVX , kV, kGeneral, "Vector Pack Signed Word Signed Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkswss),
INSTRUCTION(0x14000280, "vpkswss128" , kVX128 , kV, kGeneral, "Vector128 Pack Signed Word Signed Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkswss128),
INSTRUCTION(0x1000014e, "vpkswus" , kVX , kV, kGeneral, "Vector Pack Signed Word Unsigned Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkswus),
INSTRUCTION(0x140002c0, "vpkswus128" , kVX128 , kV, kGeneral, "Vector128 Pack Signed Word Unsigned Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkswus128),
INSTRUCTION(0x1000000e, "vpkuhum" , kVX , kV, kGeneral, "Vector Pack Unsigned Half Word Unsigned Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vpkuhum),
INSTRUCTION(0x14000300, "vpkuhum128" , kVX128 , kV, kGeneral, "Vector128 Pack Unsigned Half Word Unsigned Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vpkuhum128),
INSTRUCTION(0x1000008e, "vpkuhus" , kVX , kV, kGeneral, "Vector Pack Unsigned Half Word Unsigned Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkuhus),
INSTRUCTION(0x14000340, "vpkuhus128" , kVX128 , kV, kGeneral, "Vector128 Pack Unsigned Half Word Unsigned Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkuhus128),
INSTRUCTION(0x1000004e, "vpkuwum" , kVX , kV, kGeneral, "Vector Pack Unsigned Word Unsigned Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vpkuwum),
INSTRUCTION(0x14000380, "vpkuwum128" , kVX128 , kV, kGeneral, "Vector128 Pack Unsigned Word Unsigned Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vpkuwum128),
INSTRUCTION(0x100000ce, "vpkuwus" , kVX , kV, kGeneral, "Vector Pack Unsigned Word Unsigned Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkuwus),
INSTRUCTION(0x140003c0, "vpkuwus128" , kVX128 , kV, kGeneral, "Vector128 Pack Unsigned Word Unsigned Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vpkuwus128),
INSTRUCTION(0x1000010a, "vrefp" , kVX , kV, kGeneral, "Vector Reciprocal Estimate Floating Point" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrefp),
INSTRUCTION(0x18000630, "vrefp128" , kVX128_3, kV, kGeneral, "Vector128 Reciprocal Estimate Floating Point" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrefp128),
INSTRUCTION(0x100002ca, "vrfim" , kVX , kV, kGeneral, "Vector Round to Floating-Point Integer toward -Infinity" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrfim),
INSTRUCTION(0x18000330, "vrfim128" , kVX128_3, kV, kGeneral, "Vector128 Round to Floating-Point Integer toward -Infinity" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrfim128),
INSTRUCTION(0x1000020a, "vrfin" , kVX , kV, kGeneral, "Vector Round to Floating-Point Integer Nearest" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrfin),
INSTRUCTION(0x18000370, "vrfin128" , kVX128_3, kV, kGeneral, "Vector128 Round to Floating-Point Integer Nearest" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrfin128),
INSTRUCTION(0x1000028a, "vrfip" , kVX , kV, kGeneral, "Vector Round to Floating-Point Integer toward +Infinity" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrfip),
INSTRUCTION(0x180003b0, "vrfip128" , kVX128_3, kV, kGeneral, "Vector128 Round to Floating-Point Integer toward +Infinity" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrfip128),
INSTRUCTION(0x1000024a, "vrfiz" , kVX , kV, kGeneral, "Vector Round to Floating-Point Integer toward Zero" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrfiz),
INSTRUCTION(0x180003f0, "vrfiz128" , kVX128_3, kV, kGeneral, "Vector128 Round to Floating-Point Integer toward Zero" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrfiz128),
INSTRUCTION(0x10000004, "vrlb" , kVX , kV, kGeneral, "Vector Rotate Left Integer Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrlb),
INSTRUCTION(0x10000044, "vrlh" , kVX , kV, kGeneral, "Vector Rotate Left Integer Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrlh),
INSTRUCTION(0x18000710, "vrlimi128" , kVX128_4, kV, kGeneral, "Vector128 Rotate Left Immediate and Mask Insert" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrlimi128),
INSTRUCTION(0x10000084, "vrlw" , kVX , kV, kGeneral, "Vector Rotate Left Integer Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrlw),
INSTRUCTION(0x18000050, "vrlw128" , kVX128 , kV, kGeneral, "Vector128 Rotate Left Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrlw128),
INSTRUCTION(0x1000014a, "vrsqrtefp" , kVX , kV, kGeneral, "Vector Reciprocal Square Root Estimate Floating Point" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrsqrtefp),
INSTRUCTION(0x18000670, "vrsqrtefp128", kVX128_3, kV, kGeneral, "Vector128 Reciprocal Square Root Estimate Floating Point" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vrsqrtefp128),
INSTRUCTION(0x1000002a, "vsel" , kVA , kV, kGeneral, "Vector Conditional Select" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVC), (PPCOpcodeField::kVD), PrintDisasm_vsel),
INSTRUCTION(0x14000350, "vsel128" , kVX128 , kV, kGeneral, "Vector128 Conditional Select" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kVD), (PPCOpcodeField::kVD), PrintDisasm_vsel128),
INSTRUCTION(0x100001c4, "vsl" , kVX , kV, kGeneral, "Vector Shift Left" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsl),
INSTRUCTION(0x10000104, "vslb" , kVX , kV, kGeneral, "Vector Shift Left Integer Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vslb),
INSTRUCTION(0x1000002c, "vsldoi" , kVA , kV, kGeneral, "Vector Shift Left Double by Octet Immediate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kSHB), (PPCOpcodeField::kVD), PrintDisasm_vsldoi),
INSTRUCTION(0x10000010, "vsldoi128" , kVX128_5, kV, kGeneral, "Vector128 Shift Left Double by Octet Immediate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB,PPCOpcodeField::kSHB), (PPCOpcodeField::kVD), PrintDisasm_vsldoi128),
INSTRUCTION(0x10000144, "vslh" , kVX , kV, kGeneral, "Vector Shift Left Integer Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vslh),
INSTRUCTION(0x1000040c, "vslo" , kVX , kV, kGeneral, "Vector Shift Left by Octet" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vslo),
INSTRUCTION(0x14000390, "vslo128" , kVX128 , kV, kGeneral, "Vector128 Shift Left Octet" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vslo128),
INSTRUCTION(0x10000184, "vslw" , kVX , kV, kGeneral, "Vector Shift Left Integer Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vslw),
INSTRUCTION(0x180000d0, "vslw128" , kVX128 , kV, kGeneral, "Vector128 Shift Left Integer Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vslw128),
INSTRUCTION(0x1000020c, "vspltb" , kVX , kV, kGeneral, "Vector Splat Byte" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vspltb),
INSTRUCTION(0x1000024c, "vsplth" , kVX , kV, kGeneral, "Vector Splat Half Word" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vsplth),
INSTRUCTION(0x1000030c, "vspltisb" , kVX , kV, kGeneral, "Vector Splat Immediate Signed Byte" , (PPCOpcodeField::kSIMM), (PPCOpcodeField::kVD), PrintDisasm_vspltisb),
INSTRUCTION(0x1000034c, "vspltish" , kVX , kV, kGeneral, "Vector Splat Immediate Signed Half Word" , (PPCOpcodeField::kSIMM), (PPCOpcodeField::kVD), PrintDisasm_vspltish),
INSTRUCTION(0x1000038c, "vspltisw" , kVX , kV, kGeneral, "Vector Splat Immediate Signed Word" , (PPCOpcodeField::kSIMM), (PPCOpcodeField::kVD), PrintDisasm_vspltisw),
INSTRUCTION(0x18000770, "vspltisw128" , kVX128_3, kV, kGeneral, "Vector128 Splat Immediate Signed Word" , (PPCOpcodeField::kSIMM), (PPCOpcodeField::kVD), PrintDisasm_vspltisw128),
INSTRUCTION(0x1000028c, "vspltw" , kVX , kV, kGeneral, "Vector Splat Word" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vspltw),
INSTRUCTION(0x18000730, "vspltw128" , kVX128_3, kV, kGeneral, "Vector128 Splat Word" , (PPCOpcodeField::kVB,PPCOpcodeField::kUIMM), (PPCOpcodeField::kVD), PrintDisasm_vspltw128),
INSTRUCTION(0x100002c4, "vsr" , kVX , kV, kGeneral, "Vector Shift Right" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsr),
INSTRUCTION(0x10000304, "vsrab" , kVX , kV, kGeneral, "Vector Shift Right Algebraic Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsrab),
INSTRUCTION(0x10000344, "vsrah" , kVX , kV, kGeneral, "Vector Shift Right Algebraic Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsrah),
INSTRUCTION(0x10000384, "vsraw" , kVX , kV, kGeneral, "Vector Shift Right Algebraic Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsraw),
INSTRUCTION(0x18000150, "vsraw128" , kVX128 , kV, kGeneral, "Vector128 Shift Right Arithmetic Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsraw128),
INSTRUCTION(0x10000204, "vsrb" , kVX , kV, kGeneral, "Vector Shift Right Byte" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsrb),
INSTRUCTION(0x10000244, "vsrh" , kVX , kV, kGeneral, "Vector Shift Right Half Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsrh),
INSTRUCTION(0x1000044c, "vsro" , kVX , kV, kGeneral, "Vector Shift Right Octet" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsro),
INSTRUCTION(0x140003d0, "vsro128" , kVX128 , kV, kGeneral, "Vector128 Shift Right Octet" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsro128),
INSTRUCTION(0x10000284, "vsrw" , kVX , kV, kGeneral, "Vector Shift Right Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsrw),
INSTRUCTION(0x180001d0, "vsrw128" , kVX128 , kV, kGeneral, "Vector128 Shift Right Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsrw128),
INSTRUCTION(0x10000580, "vsubcuw" , kVX , kV, kGeneral, "Vector Subtract Carryout Unsigned Word" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsubcuw),
INSTRUCTION(0x1000004a, "vsubfp" , kVX , kV, kGeneral, "Vector Subtract Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsubfp),
INSTRUCTION(0x14000050, "vsubfp128" , kVX128 , kV, kGeneral, "Vector128 Subtract Floating Point" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsubfp128),
INSTRUCTION(0x10000700, "vsubsbs" , kVX , kV, kGeneral, "Vector Subtract Signed Byte Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsubsbs),
INSTRUCTION(0x10000740, "vsubshs" , kVX , kV, kGeneral, "Vector Subtract Signed Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsubshs),
INSTRUCTION(0x10000780, "vsubsws" , kVX , kV, kGeneral, "Vector Subtract Signed Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsubsws),
INSTRUCTION(0x10000400, "vsububm" , kVX , kV, kGeneral, "Vector Subtract Unsigned Byte Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsububm),
INSTRUCTION(0x10000600, "vsububs" , kVX , kV, kGeneral, "Vector Subtract Unsigned Byte Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsububs),
INSTRUCTION(0x10000440, "vsubuhm" , kVX , kV, kGeneral, "Vector Subtract Unsigned Half Word Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsubuhm),
INSTRUCTION(0x10000640, "vsubuhs" , kVX , kV, kGeneral, "Vector Subtract Unsigned Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsubuhs),
INSTRUCTION(0x10000480, "vsubuwm" , kVX , kV, kGeneral, "Vector Subtract Unsigned Word Modulo" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vsubuwm),
INSTRUCTION(0x10000680, "vsubuws" , kVX , kV, kGeneral, "Vector Subtract Unsigned Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsubuws),
INSTRUCTION(0x10000688, "vsum2sws" , kVX , kV, kGeneral, "Vector Sum Across Partial (1/2) Signed Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsum2sws),
INSTRUCTION(0x10000708, "vsum4sbs" , kVX , kV, kGeneral, "Vector Sum Across Partial (1/4) Signed Byte Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsum4sbs),
INSTRUCTION(0x10000648, "vsum4shs" , kVX , kV, kGeneral, "Vector Sum Across Partial (1/4) Signed Half Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsum4shs),
INSTRUCTION(0x10000608, "vsum4ubs" , kVX , kV, kGeneral, "Vector Sum Across Partial (1/4) Unsigned Byte Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsum4ubs),
INSTRUCTION(0x10000788, "vsumsws" , kVX , kV, kGeneral, "Vector Sum Across Signed Word Saturate" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD,PPCOpcodeField::kVSCR), PrintDisasm_vsumsws),
INSTRUCTION(0x180007f0, "vupkd3d128" , kVX128_3, kV, kGeneral, "Vector128 Unpack D3Dtype" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), nullptr),
INSTRUCTION(0x1000034e, "vupkhpx" , kVX , kV, kGeneral, "Vector Unpack High Pixel" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vupkhpx),
INSTRUCTION(0x1000020e, "vupkhsb" , kVX , kV, kGeneral, "Vector Unpack High Signed Byte" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vupkhsb),
INSTRUCTION(0x18000380, "vupkhsb128" , kVX128 , kV, kGeneral, "Vector128 Unpack High Signed Byte" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vupkhsb128),
INSTRUCTION(0x1000024e, "vupkhsh" , kVX , kV, kGeneral, "Vector Unpack High Signed Half Word" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vupkhsh),
INSTRUCTION(0x100003ce, "vupklpx" , kVX , kV, kGeneral, "Vector Unpack Low Pixel" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vupklpx),
INSTRUCTION(0x1000028e, "vupklsb" , kVX , kV, kGeneral, "Vector Unpack Low Signed Byte" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vupklsb),
INSTRUCTION(0x180003c0, "vupklsb128" , kVX128 , kV, kGeneral, "Vector128 Unpack Low Signed Byte" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vupklsb128),
INSTRUCTION(0x100002ce, "vupklsh" , kVX , kV, kGeneral, "Vector Unpack Low Signed Half Word" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vupklsh),
INSTRUCTION(0x100004c4, "vxor" , kVX , kV, kGeneral, "Vector Logical XOR" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vxor),
INSTRUCTION(0x14000310, "vxor128" , kVX128 , kV, kGeneral, "Vector128 Logical XOR" , (PPCOpcodeField::kVA,PPCOpcodeField::kVB), (PPCOpcodeField::kVD), PrintDisasm_vxor128),
INSTRUCTION(0x68000000, "xori" , kD , kI, kGeneral, "XOR Immediate" , (PPCOpcodeField::kRS,PPCOpcodeField::kUIMM), (PPCOpcodeField::kRA), PrintDisasm_xori),
INSTRUCTION(0x6c000000, "xoris" , kD , kI, kGeneral, "XOR Immediate Shifted" , (PPCOpcodeField::kRS,PPCOpcodeField::kUIMM), (PPCOpcodeField::kRA), PrintDisasm_xoris),
INSTRUCTION(0x7c000278, "xorx" , kX , kI, kGeneral, "XOR" , (PPCOpcodeField::kRS,PPCOpcodeField::kRB), (PPCOpcodeField::kRA,PPCOpcodeField::kCRcond), PrintDisasm_xorx),
#define INSTRUCTION(opcode, mnem, form, group, type, desc, fn) \
{PPCOpcodeGroup::group, PPCOpcodeFormat::form, opcode, mnem, desc, fn}
PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = {
INSTRUCTION(0x7c000014, "addcx" , kXO , kI, kGeneral, "Add Carrying" , PrintDisasm_addcx),
INSTRUCTION(0x7c000114, "addex" , kXO , kI, kGeneral, "Add Extended" , PrintDisasm_addex),
INSTRUCTION(0x38000000, "addi" , kD , kI, kGeneral, "Add Immediate" , PrintDisasm_addi),
INSTRUCTION(0x30000000, "addic" , kD , kI, kGeneral, "Add Immediate Carrying" , PrintDisasm_addic),
INSTRUCTION(0x34000000, "addicx" , kD , kI, kGeneral, "Add Immediate Carrying and Record" , PrintDisasm_addicx),
INSTRUCTION(0x3c000000, "addis" , kD , kI, kGeneral, "Add Immediate Shifted" , PrintDisasm_addis),
INSTRUCTION(0x7c0001d4, "addmex" , kXO , kI, kGeneral, "Add to Minus One Extended" , PrintDisasm_addmex),
INSTRUCTION(0x7c000214, "addx" , kXO , kI, kGeneral, "Add" , PrintDisasm_addx),
INSTRUCTION(0x7c000194, "addzex" , kXO , kI, kGeneral, "Add to Zero Extended" , PrintDisasm_addzex),
INSTRUCTION(0x7c000078, "andcx" , kX , kI, kGeneral, "AND with Complement" , PrintDisasm_andcx),
INSTRUCTION(0x74000000, "andisx" , kD , kI, kGeneral, "AND Immediate Shifted" , PrintDisasm_andisx),
INSTRUCTION(0x70000000, "andix" , kD , kI, kGeneral, "AND Immediate" , PrintDisasm_andix),
INSTRUCTION(0x7c000038, "andx" , kX , kI, kGeneral, "AND" , PrintDisasm_andx),
INSTRUCTION(0x4c000420, "bcctrx" , kXL , kB, kSync , "Branch Conditional to Count Register" , PrintDisasm_bcctrx),
INSTRUCTION(0x4c000020, "bclrx" , kXL , kB, kSync , "Branch Conditional to Link Register" , PrintDisasm_bclrx),
INSTRUCTION(0x40000000, "bcx" , kB , kB, kSync , "Branch Conditional" , PrintDisasm_bcx),
INSTRUCTION(0x48000000, "bx" , kI , kB, kSync , "Branch" , PrintDisasm_bx),
INSTRUCTION(0x7c000000, "cmp" , kX , kI, kGeneral, "Compare" , PrintDisasm_cmp),
INSTRUCTION(0x2c000000, "cmpi" , kD , kI, kGeneral, "Compare Immediate" , PrintDisasm_cmpi),
INSTRUCTION(0x7c000040, "cmpl" , kX , kI, kGeneral, "Compare Logical" , PrintDisasm_cmpl),
INSTRUCTION(0x28000000, "cmpli" , kD , kI, kGeneral, "Compare Logical Immediate" , PrintDisasm_cmpli),
INSTRUCTION(0x7c000074, "cntlzdx" , kX , kI, kGeneral, "Count Leading Zeros Doubleword" , PrintDisasm_cntlzdx),
INSTRUCTION(0x7c000034, "cntlzwx" , kX , kI, kGeneral, "Count Leading Zeros Word" , PrintDisasm_cntlzwx),
INSTRUCTION(0x4c000202, "crand" , kXL , kC, kGeneral, "Condition Register AND" , PrintDisasm_crand),
INSTRUCTION(0x4c000102, "crandc" , kXL , kC, kGeneral, "Condition Register AND with Complement" , PrintDisasm_crandc),
INSTRUCTION(0x4c000242, "creqv" , kXL , kC, kGeneral, "Condition Register Equivalent" , PrintDisasm_creqv),
INSTRUCTION(0x4c0001c2, "crnand" , kXL , kC, kGeneral, "Condition Register NAND" , PrintDisasm_crnand),
INSTRUCTION(0x4c000042, "crnor" , kXL , kC, kGeneral, "Condition Register NOR" , PrintDisasm_crnor),
INSTRUCTION(0x4c000382, "cror" , kXL , kC, kGeneral, "Condition Register OR" , PrintDisasm_cror),
INSTRUCTION(0x4c000342, "crorc" , kXL , kC, kGeneral, "Condition Register OR with Complement" , PrintDisasm_crorc),
INSTRUCTION(0x4c000182, "crxor" , kXL , kC, kGeneral, "Condition Register XOR" , PrintDisasm_crxor),
INSTRUCTION(0x7c0000ac, "dcbf" , kX , kM, kGeneral, "Data Cache Block Flush" , PrintDisasm_dcbf),
INSTRUCTION(0x7c0003ac, "dcbi" , kX , kM, kGeneral, "Data Cache Block Invalidate" , PrintDisasm_dcbi),
INSTRUCTION(0x7c00006c, "dcbst" , kX , kM, kGeneral, "Data Cache Block Store" , PrintDisasm_dcbst),
INSTRUCTION(0x7c00022c, "dcbt" , kX , kM, kGeneral, "Data Cache Block Touch" , PrintDisasm_dcbt),
INSTRUCTION(0x7c0001ec, "dcbtst" , kX , kM, kGeneral, "Data Cache Block Touch for Store" , PrintDisasm_dcbtst),
INSTRUCTION(0x7c0007ec, "dcbz" , kDCBZ , kM, kGeneral, "Data Cache Block Clear to Zero" , PrintDisasm_dcbz),
INSTRUCTION(0x7c2007ec, "dcbz128" , kDCBZ , kM, kGeneral, "Data Cache Block Clear to Zero 128" , PrintDisasm_dcbz128),
INSTRUCTION(0x7c000392, "divdux" , kXO , kI, kGeneral, "Divide Doubleword Unsigned" , PrintDisasm_divdux),
INSTRUCTION(0x7c0003d2, "divdx" , kXO , kI, kGeneral, "Divide Doubleword" , PrintDisasm_divdx),
INSTRUCTION(0x7c000396, "divwux" , kXO , kI, kGeneral, "Divide Word Unsigned" , PrintDisasm_divwux),
INSTRUCTION(0x7c0003d6, "divwx" , kXO , kI, kGeneral, "Divide Word" , PrintDisasm_divwx),
INSTRUCTION(0x7c0006ac, "eieio" , kX , kI, kGeneral, "Enforce In-Order Execution of I/O" , PrintDisasm_eieio),
INSTRUCTION(0x7c000238, "eqvx" , kX , kI, kGeneral, "Equivalent" , PrintDisasm_eqvx),
INSTRUCTION(0x7c000774, "extsbx" , kX , kI, kGeneral, "Extend Sign Byte" , PrintDisasm_extsbx),
INSTRUCTION(0x7c000734, "extshx" , kX , kI, kGeneral, "Extend Sign Half Word" , PrintDisasm_extshx),
INSTRUCTION(0x7c0007b4, "extswx" , kX , kI, kGeneral, "Extend Sign Word" , PrintDisasm_extswx),
INSTRUCTION(0xfc000210, "fabsx" , kX , kF, kGeneral, "Floating Absolute Value" , PrintDisasm_fabsx),
INSTRUCTION(0xec00002a, "faddsx" , kA , kF, kGeneral, "Floating Add Single" , PrintDisasm_faddsx),
INSTRUCTION(0xfc00002a, "faddx" , kA , kF, kGeneral, "Floating Add" , PrintDisasm_faddx),
INSTRUCTION(0xfc00069c, "fcfidx" , kX , kF, kGeneral, "Floating Convert From Integer Doubleword" , PrintDisasm_fcfidx),
INSTRUCTION(0xfc000040, "fcmpo" , kX , kF, kGeneral, "Floating Compare Ordered" , PrintDisasm_fcmpo),
INSTRUCTION(0xfc000000, "fcmpu" , kX , kF, kGeneral, "Floating Compare Unordered" , PrintDisasm_fcmpu),
INSTRUCTION(0xfc00065c, "fctidx" , kX , kF, kGeneral, "Floating Convert to Integer Doubleword" , PrintDisasm_fctidx),
INSTRUCTION(0xfc00065e, "fctidzx" , kX , kF, kGeneral, "Floating Convert to Integer Doubleword with Round Toward Zero" , PrintDisasm_fctidzx),
INSTRUCTION(0xfc00001c, "fctiwx" , kX , kF, kGeneral, "Floating Convert to Integer Word" , PrintDisasm_fctiwx),
INSTRUCTION(0xfc00001e, "fctiwzx" , kX , kF, kGeneral, "Floating Convert to Integer Word with Round Toward Zero" , PrintDisasm_fctiwzx),
INSTRUCTION(0xec000024, "fdivsx" , kA , kF, kGeneral, "Floating Divide Single" , PrintDisasm_fdivsx),
INSTRUCTION(0xfc000024, "fdivx" , kA , kF, kGeneral, "Floating Divide" , PrintDisasm_fdivx),
INSTRUCTION(0xec00003a, "fmaddsx" , kA , kF, kGeneral, "Floating Multiply-Add Single" , PrintDisasm_fmaddsx),
INSTRUCTION(0xfc00003a, "fmaddx" , kA , kF, kGeneral, "Floating Multiply-Add" , PrintDisasm_fmaddx),
INSTRUCTION(0xfc000090, "fmrx" , kX , kF, kGeneral, "Floating Move Register" , PrintDisasm_fmrx),
INSTRUCTION(0xec000038, "fmsubsx" , kA , kF, kGeneral, "Floating Multiply-Subtract Single" , PrintDisasm_fmsubsx),
INSTRUCTION(0xfc000038, "fmsubx" , kA , kF, kGeneral, "Floating Multiply-Subtract" , PrintDisasm_fmsubx),
INSTRUCTION(0xec000032, "fmulsx" , kA , kF, kGeneral, "Floating Multiply Single" , PrintDisasm_fmulsx),
INSTRUCTION(0xfc000032, "fmulx" , kA , kF, kGeneral, "Floating Multiply" , PrintDisasm_fmulx),
INSTRUCTION(0xfc000110, "fnabsx" , kX , kF, kGeneral, "Floating Negative Absolute Value" , PrintDisasm_fnabsx),
INSTRUCTION(0xfc000050, "fnegx" , kX , kF, kGeneral, "Floating Negate" , PrintDisasm_fnegx),
INSTRUCTION(0xec00003e, "fnmaddsx" , kA , kF, kGeneral, "Floating Negative Multiply-Add Single" , PrintDisasm_fnmaddsx),
INSTRUCTION(0xfc00003e, "fnmaddx" , kA , kF, kGeneral, "Floating Negative Multiply-Add" , PrintDisasm_fnmaddx),
INSTRUCTION(0xec00003c, "fnmsubsx" , kA , kF, kGeneral, "Floating Negative Multiply-Subtract Single" , PrintDisasm_fnmsubsx),
INSTRUCTION(0xfc00003c, "fnmsubx" , kA , kF, kGeneral, "Floating Negative Multiply-Subtract" , PrintDisasm_fnmsubx),
INSTRUCTION(0xec000030, "fresx" , kA , kF, kGeneral, "Floating Reciprocal Estimate Single" , PrintDisasm_fresx),
INSTRUCTION(0xfc000018, "frspx" , kX , kF, kGeneral, "Floating Round to Single" , PrintDisasm_frspx),
INSTRUCTION(0xfc000034, "frsqrtex" , kA , kF, kGeneral, "Floating Reciprocal Square Root Estimate" , PrintDisasm_frsqrtex),
INSTRUCTION(0xfc00002e, "fselx" , kA , kF, kGeneral, "Floating Select" , PrintDisasm_fselx),
INSTRUCTION(0xec00002c, "fsqrtsx" , kA , kF, kGeneral, "Floating Square Root Single" , PrintDisasm_fsqrtsx),
INSTRUCTION(0xfc00002c, "fsqrtx" , kA , kF, kGeneral, "Floating Square Root" , PrintDisasm_fsqrtx),
INSTRUCTION(0xec000028, "fsubsx" , kA , kF, kGeneral, "Floating Subtract Single" , PrintDisasm_fsubsx),
INSTRUCTION(0xfc000028, "fsubx" , kA , kF, kGeneral, "Floating Subtract" , PrintDisasm_fsubx),
INSTRUCTION(0x7c0007ac, "icbi" , kX , kM, kGeneral, "Instruction Cache Block Invalidate" , PrintDisasm_icbi),
INSTRUCTION(0x4c00012c, "isync" , kXL , kI, kGeneral, "Instruction Synchronize" , PrintDisasm_isync),
INSTRUCTION(0x88000000, "lbz" , kD , kM, kGeneral, "Load Byte and Zero" , PrintDisasm_lbz),
INSTRUCTION(0x8c000000, "lbzu" , kD , kM, kGeneral, "Load Byte and Zero with Update" , PrintDisasm_lbzu),
INSTRUCTION(0x7c0000ee, "lbzux" , kX , kM, kGeneral, "Load Byte and Zero with Update Indexed" , PrintDisasm_lbzux),
INSTRUCTION(0x7c0000ae, "lbzx" , kX , kM, kGeneral, "Load Byte and Zero Indexed" , PrintDisasm_lbzx),
INSTRUCTION(0xe8000000, "ld" , kDS , kM, kGeneral, "Load Doubleword" , PrintDisasm_ld),
INSTRUCTION(0x7c0000a8, "ldarx" , kX , kM, kGeneral, "Load Doubleword and Reserve Indexed" , PrintDisasm_ldarx),
INSTRUCTION(0x7c000428, "ldbrx" , kX , kM, kGeneral, "Load Doubleword Byte-Reverse Indexed" , PrintDisasm_ldbrx),
INSTRUCTION(0xe8000001, "ldu" , kDS , kM, kGeneral, "Load Doubleword with Update" , PrintDisasm_ldu),
INSTRUCTION(0x7c00006a, "ldux" , kX , kM, kGeneral, "Load Doubleword with Update Indexed" , PrintDisasm_ldux),
INSTRUCTION(0x7c00002a, "ldx" , kX , kM, kGeneral, "Load Doubleword Indexed" , PrintDisasm_ldx),
INSTRUCTION(0xc8000000, "lfd" , kD , kM, kGeneral, "Load Floating-Point Double" , PrintDisasm_lfd),
INSTRUCTION(0xcc000000, "lfdu" , kD , kM, kGeneral, "Load Floating-Point Double with Update" , PrintDisasm_lfdu),
INSTRUCTION(0x7c0004ee, "lfdux" , kX , kM, kGeneral, "Load Floating-Point Double with Update Indexed" , PrintDisasm_lfdux),
INSTRUCTION(0x7c0004ae, "lfdx" , kX , kM, kGeneral, "Load Floating-Point Double Indexed" , PrintDisasm_lfdx),
INSTRUCTION(0xc0000000, "lfs" , kD , kM, kGeneral, "Load Floating-Point Single" , PrintDisasm_lfs),
INSTRUCTION(0xc4000000, "lfsu" , kD , kM, kGeneral, "Load Floating-Point Single with Update" , PrintDisasm_lfsu),
INSTRUCTION(0x7c00046e, "lfsux" , kX , kM, kGeneral, "Load Floating-Point Single with Update Indexed" , PrintDisasm_lfsux),
INSTRUCTION(0x7c00042e, "lfsx" , kX , kM, kGeneral, "Load Floating-Point Single Indexed" , PrintDisasm_lfsx),
INSTRUCTION(0xa8000000, "lha" , kD , kM, kGeneral, "Load Half Word Algebraic" , PrintDisasm_lha),
INSTRUCTION(0xac000000, "lhau" , kD , kM, kGeneral, "Load Half Word Algebraic with Update" , PrintDisasm_lhau),
INSTRUCTION(0x7c0002ee, "lhaux" , kX , kM, kGeneral, "Load Half Word Algebraic with Update Indexed" , PrintDisasm_lhaux),
INSTRUCTION(0x7c0002ae, "lhax" , kX , kM, kGeneral, "Load Half Word Algebraic Indexed" , PrintDisasm_lhax),
INSTRUCTION(0x7c00062c, "lhbrx" , kX , kM, kGeneral, "Load Half Word Byte-Reverse Indexed" , PrintDisasm_lhbrx),
INSTRUCTION(0xa0000000, "lhz" , kD , kM, kGeneral, "Load Half Word and Zero" , PrintDisasm_lhz),
INSTRUCTION(0xa4000000, "lhzu" , kD , kM, kGeneral, "Load Half Word and Zero with Update" , PrintDisasm_lhzu),
INSTRUCTION(0x7c00026e, "lhzux" , kX , kM, kGeneral, "Load Half Word and Zero with Update Indexed" , PrintDisasm_lhzux),
INSTRUCTION(0x7c00022e, "lhzx" , kX , kM, kGeneral, "Load Half Word and Zero Indexed" , PrintDisasm_lhzx),
INSTRUCTION(0xb8000000, "lmw" , kD , kM, kGeneral, "Load Multiple Word" , nullptr),
INSTRUCTION(0x7c0004aa, "lswi" , kX , kM, kGeneral, "Load String Word Immediate" , nullptr),
INSTRUCTION(0x7c00042a, "lswx" , kX , kM, kGeneral, "Load String Word Indexed" , nullptr),
INSTRUCTION(0x7c00000e, "lvebx" , kX , kM, kGeneral, "Load Vector Element Byte Indexed" , PrintDisasm_lvebx),
INSTRUCTION(0x7c00004e, "lvehx" , kX , kM, kGeneral, "Load Vector Element Half Word Indexed" , PrintDisasm_lvehx),
INSTRUCTION(0x7c00008e, "lvewx" , kX , kM, kGeneral, "Load Vector Element Word Indexed" , PrintDisasm_lvewx),
INSTRUCTION(0x10000083, "lvewx128" , kVX128_1, kM, kGeneral, "Load Vector Element Word Indexed 128" , PrintDisasm_lvewx128),
INSTRUCTION(0x7c00040e, "lvlx" , kX , kM, kGeneral, "Load Vector Left Indexed" , PrintDisasm_lvlx),
INSTRUCTION(0x10000403, "lvlx128" , kVX128_1, kM, kGeneral, "Load Vector Left Indexed 128" , PrintDisasm_lvlx128),
INSTRUCTION(0x7c00060e, "lvlxl" , kX , kM, kGeneral, "Load Vector Left Indexed LRU" , PrintDisasm_lvlxl),
INSTRUCTION(0x10000603, "lvlxl128" , kVX128_1, kM, kGeneral, "Load Vector Left Indexed LRU 128" , PrintDisasm_lvlxl128),
INSTRUCTION(0x7c00044e, "lvrx" , kX , kM, kGeneral, "Load Vector Right Indexed" , PrintDisasm_lvrx),
INSTRUCTION(0x10000443, "lvrx128" , kVX128_1, kM, kGeneral, "Load Vector Right Indexed 128" , PrintDisasm_lvrx128),
INSTRUCTION(0x7c00064e, "lvrxl" , kX , kM, kGeneral, "Load Vector Right Indexed LRU" , PrintDisasm_lvrxl),
INSTRUCTION(0x10000643, "lvrxl128" , kVX128_1, kM, kGeneral, "Load Vector Right Indexed LRU 128" , PrintDisasm_lvrxl128),
INSTRUCTION(0x7c00000c, "lvsl" , kX , kV, kGeneral, "Load Vector for Shift Left Indexed" , PrintDisasm_lvsl),
INSTRUCTION(0x10000003, "lvsl128" , kVX128_1, kV, kGeneral, "Load Vector for Shift Left Indexed 128" , PrintDisasm_lvsl128),
INSTRUCTION(0x7c00004c, "lvsr" , kX , kV, kGeneral, "Load Vector for Shift Right Indexed" , PrintDisasm_lvsr),
INSTRUCTION(0x10000043, "lvsr128" , kVX128_1, kV, kGeneral, "Load Vector for Shift Right Indexed 128" , PrintDisasm_lvsr128),
INSTRUCTION(0x7c0000ce, "lvx" , kX , kM, kGeneral, "Load Vector Indexed" , PrintDisasm_lvx),
INSTRUCTION(0x100000c3, "lvx128" , kVX128_1, kM, kGeneral, "Load Vector Indexed 128" , PrintDisasm_lvx128),
INSTRUCTION(0x7c0002ce, "lvxl" , kX , kM, kGeneral, "Load Vector Indexed LRU" , PrintDisasm_lvxl),
INSTRUCTION(0x100002c3, "lvxl128" , kVX128_1, kM, kGeneral, "Load Vector Indexed LRU 128" , PrintDisasm_lvxl128),
INSTRUCTION(0xe8000002, "lwa" , kDS , kM, kGeneral, "Load Word Algebraic" , PrintDisasm_lwa),
INSTRUCTION(0x7c000028, "lwarx" , kX , kM, kGeneral, "Load Word and Reserve Indexed" , PrintDisasm_lwarx),
INSTRUCTION(0x7c0002ea, "lwaux" , kX , kM, kGeneral, "Load Word Algebraic with Update Indexed" , PrintDisasm_lwaux),
INSTRUCTION(0x7c0002aa, "lwax" , kX , kM, kGeneral, "Load Word Algebraic Indexed" , PrintDisasm_lwax),
INSTRUCTION(0x7c00042c, "lwbrx" , kX , kM, kGeneral, "Load Word Byte-Reverse Indexed" , PrintDisasm_lwbrx),
INSTRUCTION(0x80000000, "lwz" , kD , kM, kGeneral, "Load Word and Zero" , PrintDisasm_lwz),
INSTRUCTION(0x84000000, "lwzu" , kD , kM, kGeneral, "Load Word and Zero with Update" , PrintDisasm_lwzu),
INSTRUCTION(0x7c00006e, "lwzux" , kX , kM, kGeneral, "Load Word and Zero with Update Indexed" , PrintDisasm_lwzux),
INSTRUCTION(0x7c00002e, "lwzx" , kX , kM, kGeneral, "Load Word and Zero Indexed" , PrintDisasm_lwzx),
INSTRUCTION(0x4c000000, "mcrf" , kXL , kC, kGeneral, "Move Condition Register Field" , PrintDisasm_mcrf),
INSTRUCTION(0xfc000080, "mcrfs" , kX , kC, kGeneral, "Move to Condition Register from FPSCR" , PrintDisasm_mcrfs),
INSTRUCTION(0x7c000400, "mcrxr" , kX , kC, kGeneral, "Move to Condition Register from XER" , PrintDisasm_mcrxr),
INSTRUCTION(0x7c000026, "mfcr" , kX , kC, kGeneral, "Move from Condition Register" , PrintDisasm_mfcr),
INSTRUCTION(0xfc00048e, "mffsx" , kX , kC, kGeneral, "Move from FPSCR" , PrintDisasm_mffsx),
INSTRUCTION(0x7c0000a6, "mfmsr" , kX , kC, kSync , "Move from Machine State Register" , PrintDisasm_mfmsr),
INSTRUCTION(0x7c0002a6, "mfspr" , kXFX , kC, kGeneral, "Move from Special-Purpose Register" , PrintDisasm_mfspr),
INSTRUCTION(0x7c0002e6, "mftb" , kXFX , kC, kGeneral, "Move from Time Base" , PrintDisasm_mftb),
INSTRUCTION(0x10000604, "mfvscr" , kVX , kC, kGeneral, "Move from VSCR" , nullptr),
INSTRUCTION(0x7c000120, "mtcrf" , kXFX , kC, kGeneral, "Move to Condition Register Fields" , PrintDisasm_mtcrf),
INSTRUCTION(0xfc00008c, "mtfsb0x" , kX , kC, kGeneral, "Move to FPSCR Bit 0" , PrintDisasm_mtfsb0x),
INSTRUCTION(0xfc00004c, "mtfsb1x" , kX , kC, kGeneral, "Move to FPSCR Bit 1" , PrintDisasm_mtfsb1x),
INSTRUCTION(0xfc00010c, "mtfsfix" , kX , kC, kGeneral, "Move to FPSCR Field Immediate" , PrintDisasm_mtfsfix),
INSTRUCTION(0xfc00058e, "mtfsfx" , kXFL , kC, kGeneral, "Move to FPSCR Fields" , PrintDisasm_mtfsfx),
INSTRUCTION(0x7c000124, "mtmsr" , kX , kC, kSync , "Move to Machine State Register" , PrintDisasm_mtmsr),
INSTRUCTION(0x7c000164, "mtmsrd" , kX , kC, kSync , "Move to Machine State Register Doubleword" , PrintDisasm_mtmsrd),
INSTRUCTION(0x7c0003a6, "mtspr" , kXFX , kC, kGeneral, "Move to Special-Purpose Register" , PrintDisasm_mtspr),
INSTRUCTION(0x10000644, "mtvscr" , kVX , kC, kGeneral, "Move to VSCR" , nullptr),
INSTRUCTION(0x7c000012, "mulhdux" , kXO , kI, kGeneral, "Multiply High Doubleword Unsigned" , PrintDisasm_mulhdux),
INSTRUCTION(0x7c000092, "mulhdx" , kXO , kI, kGeneral, "Multiply High Doubleword" , PrintDisasm_mulhdx),
INSTRUCTION(0x7c000016, "mulhwux" , kXO , kI, kGeneral, "Multiply High Word Unsigned" , PrintDisasm_mulhwux),
INSTRUCTION(0x7c000096, "mulhwx" , kXO , kI, kGeneral, "Multiply High Word" , PrintDisasm_mulhwx),
INSTRUCTION(0x7c0001d2, "mulldx" , kXO , kI, kGeneral, "Multiply Low Doubleword" , PrintDisasm_mulldx),
INSTRUCTION(0x1c000000, "mulli" , kD , kI, kGeneral, "Multiply Low Immediate" , PrintDisasm_mulli),
INSTRUCTION(0x7c0001d6, "mullwx" , kXO , kI, kGeneral, "Multiply Low Word" , PrintDisasm_mullwx),
INSTRUCTION(0x7c0003b8, "nandx" , kX , kI, kGeneral, "NAND" , PrintDisasm_nandx),
INSTRUCTION(0x7c0000d0, "negx" , kXO , kI, kGeneral, "Negate" , PrintDisasm_negx),
INSTRUCTION(0x7c0000f8, "norx" , kX , kI, kGeneral, "NOR" , PrintDisasm_norx),
INSTRUCTION(0x7c000338, "orcx" , kX , kI, kGeneral, "OR with Complement" , PrintDisasm_orcx),
INSTRUCTION(0x60000000, "ori" , kD , kI, kGeneral, "OR Immediate" , PrintDisasm_ori),
INSTRUCTION(0x64000000, "oris" , kD , kI, kGeneral, "OR Immediate Shifted" , PrintDisasm_oris),
INSTRUCTION(0x7c000378, "orx" , kX , kI, kGeneral, "OR" , PrintDisasm_orx),
INSTRUCTION(0x78000010, "rldclx" , kMDS , kI, kGeneral, "Rotate Left Doubleword then Clear Left" , PrintDisasm_rldclx),
INSTRUCTION(0x78000012, "rldcrx" , kMDS , kI, kGeneral, "Rotate Left Doubleword then Clear Right" , PrintDisasm_rldcrx),
INSTRUCTION(0x78000000, "rldiclx" , kMD , kI, kGeneral, "Rotate Left Doubleword Immediate then Clear Left" , PrintDisasm_rldiclx),
INSTRUCTION(0x78000004, "rldicrx" , kMD , kI, kGeneral, "Rotate Left Doubleword Immediate then Clear Right" , PrintDisasm_rldicrx),
INSTRUCTION(0x78000008, "rldicx" , kMD , kI, kGeneral, "Rotate Left Doubleword Immediate then Clear" , PrintDisasm_rldicx),
INSTRUCTION(0x7800000c, "rldimix" , kMD , kI, kGeneral, "Rotate Left Doubleword Immediate then Mask Insert" , PrintDisasm_rldimix),
INSTRUCTION(0x50000000, "rlwimix" , kM , kI, kGeneral, "Rotate Left Word Immediate then Mask Insert" , PrintDisasm_rlwimix),
INSTRUCTION(0x54000000, "rlwinmx" , kM , kI, kGeneral, "Rotate Left Word Immediate then AND with Mask" , PrintDisasm_rlwinmx),
INSTRUCTION(0x5c000000, "rlwnmx" , kM , kI, kGeneral, "Rotate Left Word then AND with Mask" , PrintDisasm_rlwnmx),
INSTRUCTION(0x44000002, "sc" , kSC , kB, kSync , "System Call" , PrintDisasm_sc),
INSTRUCTION(0x7c000036, "sldx" , kX , kI, kGeneral, "Shift Left Doubleword" , PrintDisasm_sldx),
INSTRUCTION(0x7c000030, "slwx" , kX , kI, kGeneral, "Shift Left Word" , PrintDisasm_slwx),
INSTRUCTION(0x7c000674, "sradix" , kXS , kI, kGeneral, "Shift Right Algebraic Doubleword Immediate" , PrintDisasm_sradix),
INSTRUCTION(0x7c000634, "sradx" , kX , kI, kGeneral, "Shift Right Algebraic Doubleword" , PrintDisasm_sradx),
INSTRUCTION(0x7c000670, "srawix" , kX , kI, kGeneral, "Shift Right Algebraic Word Immediate" , PrintDisasm_srawix),
INSTRUCTION(0x7c000630, "srawx" , kX , kI, kGeneral, "Shift Right Algebraic Word" , PrintDisasm_srawx),
INSTRUCTION(0x7c000436, "srdx" , kX , kI, kGeneral, "Shift Right Doubleword" , PrintDisasm_srdx),
INSTRUCTION(0x7c000430, "srwx" , kX , kI, kGeneral, "Shift Right Word" , PrintDisasm_srwx),
INSTRUCTION(0x98000000, "stb" , kD , kM, kGeneral, "Store Byte" , PrintDisasm_stb),
INSTRUCTION(0x9c000000, "stbu" , kD , kM, kGeneral, "Store Byte with Update" , PrintDisasm_stbu),
INSTRUCTION(0x7c0001ee, "stbux" , kX , kM, kGeneral, "Store Byte with Update Indexed" , PrintDisasm_stbux),
INSTRUCTION(0x7c0001ae, "stbx" , kX , kM, kGeneral, "Store Byte Indexed" , PrintDisasm_stbx),
INSTRUCTION(0xf8000000, "std" , kDS , kM, kGeneral, "Store Doubleword" , PrintDisasm_std),
INSTRUCTION(0x7c000528, "stdbrx" , kX , kM, kGeneral, "Store Doubleword Byte-Reverse Indexed" , PrintDisasm_stdbrx),
INSTRUCTION(0x7c0001ad, "stdcx" , kX , kM, kGeneral, "Store Doubleword Conditional Indexed" , PrintDisasm_stdcx),
INSTRUCTION(0xf8000001, "stdu" , kDS , kM, kGeneral, "Store Doubleword with Update" , PrintDisasm_stdu),
INSTRUCTION(0x7c00016a, "stdux" , kX , kM, kGeneral, "Store Doubleword with Update Indexed" , PrintDisasm_stdux),
INSTRUCTION(0x7c00012a, "stdx" , kX , kM, kGeneral, "Store Doubleword Indexed" , PrintDisasm_stdx),
INSTRUCTION(0xd8000000, "stfd" , kD , kM, kGeneral, "Store Floating-Point Double" , PrintDisasm_stfd),
INSTRUCTION(0xdc000000, "stfdu" , kD , kM, kGeneral, "Store Floating-Point Double with Update" , PrintDisasm_stfdu),
INSTRUCTION(0x7c0005ee, "stfdux" , kX , kM, kGeneral, "Store Floating-Point Double with Update Indexed" , PrintDisasm_stfdux),
INSTRUCTION(0x7c0005ae, "stfdx" , kX , kM, kGeneral, "Store Floating-Point Double Indexed" , PrintDisasm_stfdx),
INSTRUCTION(0x7c0007ae, "stfiwx" , kX , kM, kGeneral, "Store Floating-Point as Integer Word Indexed" , PrintDisasm_stfiwx),
INSTRUCTION(0xd0000000, "stfs" , kD , kM, kGeneral, "Store Floating-Point Single" , PrintDisasm_stfs),
INSTRUCTION(0xd4000000, "stfsu" , kD , kM, kGeneral, "Store Floating-Point Single with Update" , PrintDisasm_stfsu),
INSTRUCTION(0x7c00056e, "stfsux" , kX , kM, kGeneral, "Store Floating-Point Single with Update Indexed" , PrintDisasm_stfsux),
INSTRUCTION(0x7c00052e, "stfsx" , kX , kM, kGeneral, "Store Floating-Point Single Indexed" , PrintDisasm_stfsx),
INSTRUCTION(0xb0000000, "sth" , kD , kM, kGeneral, "Store Half Word" , PrintDisasm_sth),
INSTRUCTION(0x7c00072c, "sthbrx" , kX , kM, kGeneral, "Store Half Word Byte-Reverse Indexed" , PrintDisasm_sthbrx),
INSTRUCTION(0xb4000000, "sthu" , kD , kM, kGeneral, "Store Half Word with Update" , PrintDisasm_sthu),
INSTRUCTION(0x7c00036e, "sthux" , kX , kM, kGeneral, "Store Half Word with Update Indexed" , PrintDisasm_sthux),
INSTRUCTION(0x7c00032e, "sthx" , kX , kM, kGeneral, "Store Half Word Indexed" , PrintDisasm_sthx),
INSTRUCTION(0xbc000000, "stmw" , kD , kM, kGeneral, "Store Multiple Word" , nullptr),
INSTRUCTION(0x7c0005aa, "stswi" , kX , kM, kGeneral, "Store String Word Immediate" , nullptr),
INSTRUCTION(0x7c00052a, "stswx" , kX , kM, kGeneral, "Store String Word Indexed" , nullptr),
INSTRUCTION(0x7c00010e, "stvebx" , kX , kM, kGeneral, "Store Vector Element Byte Indexed" , PrintDisasm_stvebx),
INSTRUCTION(0x7c00014e, "stvehx" , kX , kM, kGeneral, "Store Vector Element Half Word Indexed" , PrintDisasm_stvehx),
INSTRUCTION(0x7c00018e, "stvewx" , kX , kM, kGeneral, "Store Vector Element Word Indexed" , PrintDisasm_stvewx),
INSTRUCTION(0x10000183, "stvewx128" , kVX128_1, kM, kGeneral, "Store Vector Element Word Indexed 128" , PrintDisasm_stvewx128),
INSTRUCTION(0x7c00050e, "stvlx" , kX , kM, kGeneral, "Store Vector Left Indexed" , PrintDisasm_stvlx),
INSTRUCTION(0x10000503, "stvlx128" , kVX128_1, kM, kGeneral, "Store Vector Left Indexed 128" , PrintDisasm_stvlx128),
INSTRUCTION(0x7c00070e, "stvlxl" , kX , kM, kGeneral, "Store Vector Left Indexed LRU" , PrintDisasm_stvlxl),
INSTRUCTION(0x10000703, "stvlxl128" , kVX128_1, kM, kGeneral, "Store Vector Left Indexed LRU 128" , PrintDisasm_stvlxl128),
INSTRUCTION(0x7c00054e, "stvrx" , kX , kM, kGeneral, "Store Vector Right Indexed" , PrintDisasm_stvrx),
INSTRUCTION(0x10000543, "stvrx128" , kVX128_1, kM, kGeneral, "Store Vector Right Indexed 128" , PrintDisasm_stvrx128),
INSTRUCTION(0x7c00074e, "stvrxl" , kX , kM, kGeneral, "Store Vector Right Indexed LRU" , PrintDisasm_stvrxl),
INSTRUCTION(0x10000743, "stvrxl128" , kVX128_1, kM, kGeneral, "Store Vector Right Indexed LRU 128" , PrintDisasm_stvrxl128),
INSTRUCTION(0x7c0001ce, "stvx" , kX , kM, kGeneral, "Store Vector Indexed" , PrintDisasm_stvx),
INSTRUCTION(0x100001c3, "stvx128" , kVX128_1, kM, kGeneral, "Store Vector Indexed 128" , PrintDisasm_stvx128),
INSTRUCTION(0x7c0003ce, "stvxl" , kX , kM, kGeneral, "Store Vector Indexed LRU" , PrintDisasm_stvxl),
INSTRUCTION(0x100003c3, "stvxl128" , kVX128_1, kM, kGeneral, "Store Vector Indexed LRU 128" , PrintDisasm_stvxl128),
INSTRUCTION(0x90000000, "stw" , kD , kM, kGeneral, "Store Word" , PrintDisasm_stw),
INSTRUCTION(0x7c00052c, "stwbrx" , kX , kM, kGeneral, "Store Word Byte-Reverse Indexed" , PrintDisasm_stwbrx),
INSTRUCTION(0x7c00012d, "stwcx" , kX , kM, kGeneral, "Store Word Conditional Indexed" , PrintDisasm_stwcx),
INSTRUCTION(0x94000000, "stwu" , kD , kM, kGeneral, "Store Word with Update" , PrintDisasm_stwu),
INSTRUCTION(0x7c00016e, "stwux" , kX , kM, kGeneral, "Store Word with Update Indexed" , PrintDisasm_stwux),
INSTRUCTION(0x7c00012e, "stwx" , kX , kM, kGeneral, "Store Word Indexed" , PrintDisasm_stwx),
INSTRUCTION(0x7c000010, "subfcx" , kXO , kI, kGeneral, "Subtract From Carrying" , PrintDisasm_subfcx),
INSTRUCTION(0x7c000110, "subfex" , kXO , kI, kGeneral, "Subtract From Extended" , PrintDisasm_subfex),
INSTRUCTION(0x20000000, "subficx" , kD , kI, kGeneral, "Subtract From Immediate Carrying" , PrintDisasm_subficx),
INSTRUCTION(0x7c0001d0, "subfmex" , kXO , kI, kGeneral, "Subtract From Minus One Extended" , PrintDisasm_subfmex),
INSTRUCTION(0x7c000050, "subfx" , kXO , kI, kGeneral, "Subtract From" , PrintDisasm_subfx),
INSTRUCTION(0x7c000190, "subfzex" , kXO , kI, kGeneral, "Subtract From Zero Extended" , PrintDisasm_subfzex),
INSTRUCTION(0x7c0004ac, "sync" , kX , kI, kGeneral, "Synchronize" , PrintDisasm_sync),
INSTRUCTION(0x7c000088, "td" , kX , kB, kGeneral, "Trap Doubleword" , PrintDisasm_td),
INSTRUCTION(0x08000000, "tdi" , kD , kB, kGeneral, "Trap Doubleword Immediate" , PrintDisasm_tdi),
INSTRUCTION(0x7c000008, "tw" , kX , kB, kGeneral, "Trap Word" , PrintDisasm_tw),
INSTRUCTION(0x0c000000, "twi" , kD , kB, kGeneral, "Trap Word Immediate" , PrintDisasm_twi),
INSTRUCTION(0x10000180, "vaddcuw" , kVX , kV, kGeneral, "Vector Add Carryout Unsigned Word" , PrintDisasm_vaddcuw),
INSTRUCTION(0x1000000a, "vaddfp" , kVX , kV, kGeneral, "Vector Add Floating Point" , PrintDisasm_vaddfp),
INSTRUCTION(0x14000010, "vaddfp128" , kVX128 , kV, kGeneral, "Vector128 Add Floating Point" , PrintDisasm_vaddfp128),
INSTRUCTION(0x10000300, "vaddsbs" , kVX , kV, kGeneral, "Vector Add Signed Byte Saturate" , PrintDisasm_vaddsbs),
INSTRUCTION(0x10000340, "vaddshs" , kVX , kV, kGeneral, "Vector Add Signed Half Word Saturate" , PrintDisasm_vaddshs),
INSTRUCTION(0x10000380, "vaddsws" , kVX , kV, kGeneral, "Vector Add Signed Word Saturate" , PrintDisasm_vaddsws),
INSTRUCTION(0x10000000, "vaddubm" , kVX , kV, kGeneral, "Vector Add Unsigned Byte Modulo" , PrintDisasm_vaddubm),
INSTRUCTION(0x10000200, "vaddubs" , kVX , kV, kGeneral, "Vector Add Unsigned Byte Saturate" , PrintDisasm_vaddubs),
INSTRUCTION(0x10000040, "vadduhm" , kVX , kV, kGeneral, "Vector Add Unsigned Half Word Modulo" , PrintDisasm_vadduhm),
INSTRUCTION(0x10000240, "vadduhs" , kVX , kV, kGeneral, "Vector Add Unsigned Half Word Saturate" , PrintDisasm_vadduhs),
INSTRUCTION(0x10000080, "vadduwm" , kVX , kV, kGeneral, "Vector Add Unsigned Word Modulo" , PrintDisasm_vadduwm),
INSTRUCTION(0x10000280, "vadduws" , kVX , kV, kGeneral, "Vector Add Unsigned Word Saturate" , PrintDisasm_vadduws),
INSTRUCTION(0x10000404, "vand" , kVX , kV, kGeneral, "Vector Logical AND" , PrintDisasm_vand),
INSTRUCTION(0x14000210, "vand128" , kVX128 , kV, kGeneral, "Vector128 Logical AND" , PrintDisasm_vand128),
INSTRUCTION(0x10000444, "vandc" , kVX , kV, kGeneral, "Vector Logical AND with Complement" , PrintDisasm_vandc),
INSTRUCTION(0x14000250, "vandc128" , kVX128 , kV, kGeneral, "Vector128 Logical AND with Complement" , PrintDisasm_vandc128),
INSTRUCTION(0x10000502, "vavgsb" , kVX , kV, kGeneral, "Vector Average Signed Byte" , PrintDisasm_vavgsb),
INSTRUCTION(0x10000542, "vavgsh" , kVX , kV, kGeneral, "Vector Average Signed Half Word" , PrintDisasm_vavgsh),
INSTRUCTION(0x10000582, "vavgsw" , kVX , kV, kGeneral, "Vector Average Signed Word" , PrintDisasm_vavgsw),
INSTRUCTION(0x10000402, "vavgub" , kVX , kV, kGeneral, "Vector Average Unsigned Byte" , PrintDisasm_vavgub),
INSTRUCTION(0x10000442, "vavguh" , kVX , kV, kGeneral, "Vector Average Unsigned Half Word" , PrintDisasm_vavguh),
INSTRUCTION(0x10000482, "vavguw" , kVX , kV, kGeneral, "Vector Average Unsigned Word" , PrintDisasm_vavguw),
INSTRUCTION(0x18000230, "vcfpsxws128" , kVX128_3, kV, kGeneral, "Vector128 Convert From Floating-Point to Signed Fixed-Point Word Saturate" , PrintDisasm_vcfpsxws128),
INSTRUCTION(0x18000270, "vcfpuxws128" , kVX128_3, kV, kGeneral, "Vector128 Convert From Floating-Point to Unsigned Fixed-Point Word Saturate", PrintDisasm_vcfpuxws128),
INSTRUCTION(0x1000034a, "vcfsx" , kVX , kV, kGeneral, "Vector Convert from Signed Fixed-Point Word" , PrintDisasm_vcfsx),
INSTRUCTION(0x1000030a, "vcfux" , kVX , kV, kGeneral, "Vector Convert from Unsigned Fixed-Point Word" , PrintDisasm_vcfux),
INSTRUCTION(0x100003c6, "vcmpbfp" , kVC , kV, kGeneral, "Vector Compare Bounds Floating Point" , PrintDisasm_vcmpbfp),
INSTRUCTION(0x18000180, "vcmpbfp128" , kVX128_R, kV, kGeneral, "Vector128 Compare Bounds Floating Point" , PrintDisasm_vcmpbfp128),
INSTRUCTION(0x100000c6, "vcmpeqfp" , kVC , kV, kGeneral, "Vector Compare Equal-to Floating Point" , PrintDisasm_vcmpeqfp),
INSTRUCTION(0x18000000, "vcmpeqfp128" , kVX128_R, kV, kGeneral, "Vector128 Compare Equal-to Floating Point" , PrintDisasm_vcmpeqfp128),
INSTRUCTION(0x10000006, "vcmpequb" , kVC , kV, kGeneral, "Vector Compare Equal-to Unsigned Byte" , PrintDisasm_vcmpequb),
INSTRUCTION(0x10000046, "vcmpequh" , kVC , kV, kGeneral, "Vector Compare Equal-to Unsigned Half Word" , PrintDisasm_vcmpequh),
INSTRUCTION(0x10000086, "vcmpequw" , kVC , kV, kGeneral, "Vector Compare Equal-to Unsigned Word" , PrintDisasm_vcmpequw),
INSTRUCTION(0x18000200, "vcmpequw128" , kVX128_R, kV, kGeneral, "Vector128 Compare Equal-to Unsigned Word" , PrintDisasm_vcmpequw128),
INSTRUCTION(0x100001c6, "vcmpgefp" , kVC , kV, kGeneral, "Vector Compare Greater-Than-or-Equal-to Floating Point" , PrintDisasm_vcmpgefp),
INSTRUCTION(0x18000080, "vcmpgefp128" , kVX128_R, kV, kGeneral, "Vector128 Compare Greater-Than-or-Equal-to Floating Point" , PrintDisasm_vcmpgefp128),
INSTRUCTION(0x100002c6, "vcmpgtfp" , kVC , kV, kGeneral, "Vector Compare Greater-Than Floating Point" , PrintDisasm_vcmpgtfp),
INSTRUCTION(0x18000100, "vcmpgtfp128" , kVX128_R, kV, kGeneral, "Vector128 Compare Greater-Than Floating-Point" , PrintDisasm_vcmpgtfp128),
INSTRUCTION(0x10000306, "vcmpgtsb" , kVC , kV, kGeneral, "Vector Compare Greater-Than Signed Byte" , PrintDisasm_vcmpgtsb),
INSTRUCTION(0x10000346, "vcmpgtsh" , kVC , kV, kGeneral, "Vector Compare Greater-Than Signed Half Word" , PrintDisasm_vcmpgtsh),
INSTRUCTION(0x10000386, "vcmpgtsw" , kVC , kV, kGeneral, "Vector Compare Greater-Than Signed Word" , PrintDisasm_vcmpgtsw),
INSTRUCTION(0x10000206, "vcmpgtub" , kVC , kV, kGeneral, "Vector Compare Greater-Than Unsigned Byte" , PrintDisasm_vcmpgtub),
INSTRUCTION(0x10000246, "vcmpgtuh" , kVC , kV, kGeneral, "Vector Compare Greater-Than Unsigned Half Word" , PrintDisasm_vcmpgtuh),
INSTRUCTION(0x10000286, "vcmpgtuw" , kVC , kV, kGeneral, "Vector Compare Greater-Than Unsigned Word" , PrintDisasm_vcmpgtuw),
INSTRUCTION(0x180002b0, "vcsxwfp128" , kVX128_3, kV, kGeneral, "Vector128 Convert From Signed Fixed-Point Word to Floating-Point" , PrintDisasm_vcsxwfp128),
INSTRUCTION(0x100003ca, "vctsxs" , kVX , kV, kGeneral, "Vector Convert to Signed Fixed-Point Word Saturate" , PrintDisasm_vctsxs),
INSTRUCTION(0x1000038a, "vctuxs" , kVX , kV, kGeneral, "Vector Convert to Unsigned Fixed-Point Word Saturate" , PrintDisasm_vctuxs),
INSTRUCTION(0x180002f0, "vcuxwfp128" , kVX128_3, kV, kGeneral, "Vector128 Convert From Unsigned Fixed-Point Word to Floating-Point" , PrintDisasm_vcuxwfp128),
INSTRUCTION(0x1000018a, "vexptefp" , kVX , kV, kGeneral, "Vector 2 Raised to the Exponent Estimate Floating Point" , PrintDisasm_vexptefp),
INSTRUCTION(0x180006b0, "vexptefp128" , kVX128_3, kV, kGeneral, "Vector128 Log2 Estimate Floating Point" , PrintDisasm_vexptefp128),
INSTRUCTION(0x100001ca, "vlogefp" , kVX , kV, kGeneral, "Vector Log2 Estimate Floating Point" , PrintDisasm_vlogefp),
INSTRUCTION(0x180006f0, "vlogefp128" , kVX128_3, kV, kGeneral, "Vector128 Log2 Estimate Floating Point" , PrintDisasm_vlogefp128),
INSTRUCTION(0x14000110, "vmaddcfp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Add Floating Point" , PrintDisasm_vmaddcfp128),
INSTRUCTION(0x1000002e, "vmaddfp" , kVA , kV, kGeneral, "Vector Multiply-Add Floating Point" , PrintDisasm_vmaddfp),
INSTRUCTION(0x140000d0, "vmaddfp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Add Floating Point" , PrintDisasm_vmaddfp128),
INSTRUCTION(0x1000040a, "vmaxfp" , kVX , kV, kGeneral, "Vector Maximum Floating Point" , PrintDisasm_vmaxfp),
INSTRUCTION(0x18000280, "vmaxfp128" , kVX128 , kV, kGeneral, "Vector128 Maximum Floating Point" , PrintDisasm_vmaxfp128),
INSTRUCTION(0x10000102, "vmaxsb" , kVX , kV, kGeneral, "Vector Maximum Signed Byte" , PrintDisasm_vmaxsb),
INSTRUCTION(0x10000142, "vmaxsh" , kVX , kV, kGeneral, "Vector Maximum Signed Half Word" , PrintDisasm_vmaxsh),
INSTRUCTION(0x10000182, "vmaxsw" , kVX , kV, kGeneral, "Vector Maximum Signed Word" , PrintDisasm_vmaxsw),
INSTRUCTION(0x10000002, "vmaxub" , kVX , kV, kGeneral, "Vector Maximum Unsigned Byte" , PrintDisasm_vmaxub),
INSTRUCTION(0x10000042, "vmaxuh" , kVX , kV, kGeneral, "Vector Maximum Unsigned Half Word" , PrintDisasm_vmaxuh),
INSTRUCTION(0x10000082, "vmaxuw" , kVX , kV, kGeneral, "Vector Maximum Unsigned Word" , PrintDisasm_vmaxuw),
INSTRUCTION(0x10000020, "vmhaddshs" , kVA , kV, kGeneral, "Vector Multiply-High and Add Signed Signed Half Word Saturate" , PrintDisasm_vmhaddshs),
INSTRUCTION(0x10000021, "vmhraddshs" , kVA , kV, kGeneral, "Vector Multiply-High Round and Add Signed Signed Half Word Saturate" , PrintDisasm_vmhraddshs),
INSTRUCTION(0x1000044a, "vminfp" , kVX , kV, kGeneral, "Vector Minimum Floating Point" , PrintDisasm_vminfp),
INSTRUCTION(0x180002c0, "vminfp128" , kVX128 , kV, kGeneral, "Vector128 Minimum Floating Point" , PrintDisasm_vminfp128),
INSTRUCTION(0x10000302, "vminsb" , kVX , kV, kGeneral, "Vector Minimum Signed Byte" , PrintDisasm_vminsb),
INSTRUCTION(0x10000342, "vminsh" , kVX , kV, kGeneral, "Vector Minimum Signed Half Word" , PrintDisasm_vminsh),
INSTRUCTION(0x10000382, "vminsw" , kVX , kV, kGeneral, "Vector Minimum Signed Word" , PrintDisasm_vminsw),
INSTRUCTION(0x10000202, "vminub" , kVX , kV, kGeneral, "Vector Minimum Unsigned Byte" , PrintDisasm_vminub),
INSTRUCTION(0x10000242, "vminuh" , kVX , kV, kGeneral, "Vector Minimum Unsigned Half Word" , PrintDisasm_vminuh),
INSTRUCTION(0x10000282, "vminuw" , kVX , kV, kGeneral, "Vector Minimum Unsigned Word" , PrintDisasm_vminuw),
INSTRUCTION(0x10000022, "vmladduhm" , kVA , kV, kGeneral, "Vector Multiply-Low and Add Unsigned Half Word Modulo" , PrintDisasm_vmladduhm),
INSTRUCTION(0x1000000c, "vmrghb" , kVX , kV, kGeneral, "Vector Merge High Byte" , PrintDisasm_vmrghb),
INSTRUCTION(0x1000004c, "vmrghh" , kVX , kV, kGeneral, "Vector Merge High Half Word" , PrintDisasm_vmrghh),
INSTRUCTION(0x1000008c, "vmrghw" , kVX , kV, kGeneral, "Vector Merge High Word" , PrintDisasm_vmrghw),
INSTRUCTION(0x18000300, "vmrghw128" , kVX128 , kV, kGeneral, "Vector128 Merge High Word" , PrintDisasm_vmrghw128),
INSTRUCTION(0x1000010c, "vmrglb" , kVX , kV, kGeneral, "Vector Merge Low Byte" , PrintDisasm_vmrglb),
INSTRUCTION(0x1000014c, "vmrglh" , kVX , kV, kGeneral, "Vector Merge Low Half Word" , PrintDisasm_vmrglh),
INSTRUCTION(0x1000018c, "vmrglw" , kVX , kV, kGeneral, "Vector Merge Low Word" , PrintDisasm_vmrglw),
INSTRUCTION(0x18000340, "vmrglw128" , kVX128 , kV, kGeneral, "Vector128 Merge Low Word" , PrintDisasm_vmrglw128),
INSTRUCTION(0x14000190, "vmsum3fp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Sum 3-way Floating Point" , PrintDisasm_vmsum3fp128),
INSTRUCTION(0x140001d0, "vmsum4fp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Sum 4-way Floating-Point" , PrintDisasm_vmsum4fp128),
INSTRUCTION(0x10000025, "vmsummbm" , kVA , kV, kGeneral, "Vector Multiply-Sum Mixed-Sign Byte Modulo" , PrintDisasm_vmsummbm),
INSTRUCTION(0x10000028, "vmsumshm" , kVA , kV, kGeneral, "Vector Multiply-Sum Signed Half Word Modulo" , PrintDisasm_vmsumshm),
INSTRUCTION(0x10000029, "vmsumshs" , kVA , kV, kGeneral, "Vector Multiply-Sum Signed Half Word Saturate" , PrintDisasm_vmsumshs),
INSTRUCTION(0x10000024, "vmsumubm" , kVA , kV, kGeneral, "Vector Multiply-Sum Unsigned Byte Modulo" , PrintDisasm_vmsumubm),
INSTRUCTION(0x10000026, "vmsumuhm" , kVA , kV, kGeneral, "Vector Multiply-Sum Unsigned Half Word Modulo" , PrintDisasm_vmsumuhm),
INSTRUCTION(0x10000027, "vmsumuhs" , kVA , kV, kGeneral, "Vector Multiply-Sum Unsigned Half Word Saturate" , PrintDisasm_vmsumuhs),
INSTRUCTION(0x10000308, "vmulesb" , kVX , kV, kGeneral, "Vector Multiply Even Signed Byte" , PrintDisasm_vmulesb),
INSTRUCTION(0x10000348, "vmulesh" , kVX , kV, kGeneral, "Vector Multiply Even Signed Half Word" , PrintDisasm_vmulesh),
INSTRUCTION(0x10000208, "vmuleub" , kVX , kV, kGeneral, "Vector Multiply Even Unsigned Byte" , PrintDisasm_vmuleub),
INSTRUCTION(0x10000248, "vmuleuh" , kVX , kV, kGeneral, "Vector Multiply Even Unsigned Half Word" , PrintDisasm_vmuleuh),
INSTRUCTION(0x14000090, "vmulfp128" , kVX128 , kV, kGeneral, "Vector128 Multiply Floating-Point" , PrintDisasm_vmulfp128),
INSTRUCTION(0x10000108, "vmulosb" , kVX , kV, kGeneral, "Vector Multiply Odd Signed Byte" , PrintDisasm_vmulosb),
INSTRUCTION(0x10000148, "vmulosh" , kVX , kV, kGeneral, "Vector Multiply Odd Signed Half Word" , PrintDisasm_vmulosh),
INSTRUCTION(0x10000008, "vmuloub" , kVX , kV, kGeneral, "Vector Multiply Odd Unsigned Byte" , PrintDisasm_vmuloub),
INSTRUCTION(0x10000048, "vmulouh" , kVX , kV, kGeneral, "Vector Multiply Odd Unsigned Half Word" , PrintDisasm_vmulouh),
INSTRUCTION(0x1000002f, "vnmsubfp" , kVA , kV, kGeneral, "Vector Negative Multiply-Subtract Floating Point" , PrintDisasm_vnmsubfp),
INSTRUCTION(0x14000150, "vnmsubfp128" , kVX128 , kV, kGeneral, "Vector128 Negative Multiply-Subtract Floating Point" , PrintDisasm_vnmsubfp128),
INSTRUCTION(0x10000504, "vnor" , kVX , kV, kGeneral, "Vector Logical NOR" , PrintDisasm_vnor),
INSTRUCTION(0x14000290, "vnor128" , kVX128 , kV, kGeneral, "Vector128 Logical NOR" , PrintDisasm_vnor128),
INSTRUCTION(0x10000484, "vor" , kVX , kV, kGeneral, "Vector Logical OR" , PrintDisasm_vor),
INSTRUCTION(0x140002d0, "vor128" , kVX128 , kV, kGeneral, "Vector128 Logical OR" , PrintDisasm_vor128),
INSTRUCTION(0x1000002b, "vperm" , kVA , kV, kGeneral, "Vector Permute" , PrintDisasm_vperm),
INSTRUCTION(0x14000000, "vperm128" , kVX128_2, kV, kGeneral, "Vector128 Permute" , PrintDisasm_vperm128),
INSTRUCTION(0x18000210, "vpermwi128" , kVX128_P, kV, kGeneral, "Vector128 Permutate Word Immediate" , PrintDisasm_vpermwi128),
INSTRUCTION(0x18000610, "vpkd3d128" , kVX128_4, kV, kGeneral, "Vector128 Pack D3Dtype, Rotate Left Immediate and Mask Insert" , nullptr),
INSTRUCTION(0x1000030e, "vpkpx" , kVX , kV, kGeneral, "Vector Pack Pixel" , PrintDisasm_vpkpx),
INSTRUCTION(0x1000018e, "vpkshss" , kVX , kV, kGeneral, "Vector Pack Signed Half Word Signed Saturate" , PrintDisasm_vpkshss),
INSTRUCTION(0x14000200, "vpkshss128" , kVX128 , kV, kGeneral, "Vector128 Pack Signed Half Word Signed Saturate" , PrintDisasm_vpkshss128),
INSTRUCTION(0x1000010e, "vpkshus" , kVX , kV, kGeneral, "Vector Pack Signed Half Word Unsigned Saturate" , PrintDisasm_vpkshus),
INSTRUCTION(0x14000240, "vpkshus128" , kVX128 , kV, kGeneral, "Vector128 Pack Signed Half Word Unsigned Saturate" , PrintDisasm_vpkshus128),
INSTRUCTION(0x100001ce, "vpkswss" , kVX , kV, kGeneral, "Vector Pack Signed Word Signed Saturate" , PrintDisasm_vpkswss),
INSTRUCTION(0x14000280, "vpkswss128" , kVX128 , kV, kGeneral, "Vector128 Pack Signed Word Signed Saturate" , PrintDisasm_vpkswss128),
INSTRUCTION(0x1000014e, "vpkswus" , kVX , kV, kGeneral, "Vector Pack Signed Word Unsigned Saturate" , PrintDisasm_vpkswus),
INSTRUCTION(0x140002c0, "vpkswus128" , kVX128 , kV, kGeneral, "Vector128 Pack Signed Word Unsigned Saturate" , PrintDisasm_vpkswus128),
INSTRUCTION(0x1000000e, "vpkuhum" , kVX , kV, kGeneral, "Vector Pack Unsigned Half Word Unsigned Modulo" , PrintDisasm_vpkuhum),
INSTRUCTION(0x14000300, "vpkuhum128" , kVX128 , kV, kGeneral, "Vector128 Pack Unsigned Half Word Unsigned Modulo" , PrintDisasm_vpkuhum128),
INSTRUCTION(0x1000008e, "vpkuhus" , kVX , kV, kGeneral, "Vector Pack Unsigned Half Word Unsigned Saturate" , PrintDisasm_vpkuhus),
INSTRUCTION(0x14000340, "vpkuhus128" , kVX128 , kV, kGeneral, "Vector128 Pack Unsigned Half Word Unsigned Saturate" , PrintDisasm_vpkuhus128),
INSTRUCTION(0x1000004e, "vpkuwum" , kVX , kV, kGeneral, "Vector Pack Unsigned Word Unsigned Modulo" , PrintDisasm_vpkuwum),
INSTRUCTION(0x14000380, "vpkuwum128" , kVX128 , kV, kGeneral, "Vector128 Pack Unsigned Word Unsigned Modulo" , PrintDisasm_vpkuwum128),
INSTRUCTION(0x100000ce, "vpkuwus" , kVX , kV, kGeneral, "Vector Pack Unsigned Word Unsigned Saturate" , PrintDisasm_vpkuwus),
INSTRUCTION(0x140003c0, "vpkuwus128" , kVX128 , kV, kGeneral, "Vector128 Pack Unsigned Word Unsigned Saturate" , PrintDisasm_vpkuwus128),
INSTRUCTION(0x1000010a, "vrefp" , kVX , kV, kGeneral, "Vector Reciprocal Estimate Floating Point" , PrintDisasm_vrefp),
INSTRUCTION(0x18000630, "vrefp128" , kVX128_3, kV, kGeneral, "Vector128 Reciprocal Estimate Floating Point" , PrintDisasm_vrefp128),
INSTRUCTION(0x100002ca, "vrfim" , kVX , kV, kGeneral, "Vector Round to Floating-Point Integer toward -Infinity" , PrintDisasm_vrfim),
INSTRUCTION(0x18000330, "vrfim128" , kVX128_3, kV, kGeneral, "Vector128 Round to Floating-Point Integer toward -Infinity" , PrintDisasm_vrfim128),
INSTRUCTION(0x1000020a, "vrfin" , kVX , kV, kGeneral, "Vector Round to Floating-Point Integer Nearest" , PrintDisasm_vrfin),
INSTRUCTION(0x18000370, "vrfin128" , kVX128_3, kV, kGeneral, "Vector128 Round to Floating-Point Integer Nearest" , PrintDisasm_vrfin128),
INSTRUCTION(0x1000028a, "vrfip" , kVX , kV, kGeneral, "Vector Round to Floating-Point Integer toward +Infinity" , PrintDisasm_vrfip),
INSTRUCTION(0x180003b0, "vrfip128" , kVX128_3, kV, kGeneral, "Vector128 Round to Floating-Point Integer toward +Infinity" , PrintDisasm_vrfip128),
INSTRUCTION(0x1000024a, "vrfiz" , kVX , kV, kGeneral, "Vector Round to Floating-Point Integer toward Zero" , PrintDisasm_vrfiz),
INSTRUCTION(0x180003f0, "vrfiz128" , kVX128_3, kV, kGeneral, "Vector128 Round to Floating-Point Integer toward Zero" , PrintDisasm_vrfiz128),
INSTRUCTION(0x10000004, "vrlb" , kVX , kV, kGeneral, "Vector Rotate Left Integer Byte" , PrintDisasm_vrlb),
INSTRUCTION(0x10000044, "vrlh" , kVX , kV, kGeneral, "Vector Rotate Left Integer Half Word" , PrintDisasm_vrlh),
INSTRUCTION(0x18000710, "vrlimi128" , kVX128_4, kV, kGeneral, "Vector128 Rotate Left Immediate and Mask Insert" , PrintDisasm_vrlimi128),
INSTRUCTION(0x10000084, "vrlw" , kVX , kV, kGeneral, "Vector Rotate Left Integer Word" , PrintDisasm_vrlw),
INSTRUCTION(0x18000050, "vrlw128" , kVX128 , kV, kGeneral, "Vector128 Rotate Left Word" , PrintDisasm_vrlw128),
INSTRUCTION(0x1000014a, "vrsqrtefp" , kVX , kV, kGeneral, "Vector Reciprocal Square Root Estimate Floating Point" , PrintDisasm_vrsqrtefp),
INSTRUCTION(0x18000670, "vrsqrtefp128", kVX128_3, kV, kGeneral, "Vector128 Reciprocal Square Root Estimate Floating Point" , PrintDisasm_vrsqrtefp128),
INSTRUCTION(0x1000002a, "vsel" , kVA , kV, kGeneral, "Vector Conditional Select" , PrintDisasm_vsel),
INSTRUCTION(0x14000350, "vsel128" , kVX128 , kV, kGeneral, "Vector128 Conditional Select" , PrintDisasm_vsel128),
INSTRUCTION(0x100001c4, "vsl" , kVX , kV, kGeneral, "Vector Shift Left" , PrintDisasm_vsl),
INSTRUCTION(0x10000104, "vslb" , kVX , kV, kGeneral, "Vector Shift Left Integer Byte" , PrintDisasm_vslb),
INSTRUCTION(0x1000002c, "vsldoi" , kVA , kV, kGeneral, "Vector Shift Left Double by Octet Immediate" , PrintDisasm_vsldoi),
INSTRUCTION(0x10000010, "vsldoi128" , kVX128_5, kV, kGeneral, "Vector128 Shift Left Double by Octet Immediate" , PrintDisasm_vsldoi128),
INSTRUCTION(0x10000144, "vslh" , kVX , kV, kGeneral, "Vector Shift Left Integer Half Word" , PrintDisasm_vslh),
INSTRUCTION(0x1000040c, "vslo" , kVX , kV, kGeneral, "Vector Shift Left by Octet" , PrintDisasm_vslo),
INSTRUCTION(0x14000390, "vslo128" , kVX128 , kV, kGeneral, "Vector128 Shift Left Octet" , PrintDisasm_vslo128),
INSTRUCTION(0x10000184, "vslw" , kVX , kV, kGeneral, "Vector Shift Left Integer Word" , PrintDisasm_vslw),
INSTRUCTION(0x180000d0, "vslw128" , kVX128 , kV, kGeneral, "Vector128 Shift Left Integer Word" , PrintDisasm_vslw128),
INSTRUCTION(0x1000020c, "vspltb" , kVX , kV, kGeneral, "Vector Splat Byte" , PrintDisasm_vspltb),
INSTRUCTION(0x1000024c, "vsplth" , kVX , kV, kGeneral, "Vector Splat Half Word" , PrintDisasm_vsplth),
INSTRUCTION(0x1000030c, "vspltisb" , kVX , kV, kGeneral, "Vector Splat Immediate Signed Byte" , PrintDisasm_vspltisb),
INSTRUCTION(0x1000034c, "vspltish" , kVX , kV, kGeneral, "Vector Splat Immediate Signed Half Word" , PrintDisasm_vspltish),
INSTRUCTION(0x1000038c, "vspltisw" , kVX , kV, kGeneral, "Vector Splat Immediate Signed Word" , PrintDisasm_vspltisw),
INSTRUCTION(0x18000770, "vspltisw128" , kVX128_3, kV, kGeneral, "Vector128 Splat Immediate Signed Word" , PrintDisasm_vspltisw128),
INSTRUCTION(0x1000028c, "vspltw" , kVX , kV, kGeneral, "Vector Splat Word" , PrintDisasm_vspltw),
INSTRUCTION(0x18000730, "vspltw128" , kVX128_3, kV, kGeneral, "Vector128 Splat Word" , PrintDisasm_vspltw128),
INSTRUCTION(0x100002c4, "vsr" , kVX , kV, kGeneral, "Vector Shift Right" , PrintDisasm_vsr),
INSTRUCTION(0x10000304, "vsrab" , kVX , kV, kGeneral, "Vector Shift Right Algebraic Byte" , PrintDisasm_vsrab),
INSTRUCTION(0x10000344, "vsrah" , kVX , kV, kGeneral, "Vector Shift Right Algebraic Half Word" , PrintDisasm_vsrah),
INSTRUCTION(0x10000384, "vsraw" , kVX , kV, kGeneral, "Vector Shift Right Algebraic Word" , PrintDisasm_vsraw),
INSTRUCTION(0x18000150, "vsraw128" , kVX128 , kV, kGeneral, "Vector128 Shift Right Arithmetic Word" , PrintDisasm_vsraw128),
INSTRUCTION(0x10000204, "vsrb" , kVX , kV, kGeneral, "Vector Shift Right Byte" , PrintDisasm_vsrb),
INSTRUCTION(0x10000244, "vsrh" , kVX , kV, kGeneral, "Vector Shift Right Half Word" , PrintDisasm_vsrh),
INSTRUCTION(0x1000044c, "vsro" , kVX , kV, kGeneral, "Vector Shift Right Octet" , PrintDisasm_vsro),
INSTRUCTION(0x140003d0, "vsro128" , kVX128 , kV, kGeneral, "Vector128 Shift Right Octet" , PrintDisasm_vsro128),
INSTRUCTION(0x10000284, "vsrw" , kVX , kV, kGeneral, "Vector Shift Right Word" , PrintDisasm_vsrw),
INSTRUCTION(0x180001d0, "vsrw128" , kVX128 , kV, kGeneral, "Vector128 Shift Right Word" , PrintDisasm_vsrw128),
INSTRUCTION(0x10000580, "vsubcuw" , kVX , kV, kGeneral, "Vector Subtract Carryout Unsigned Word" , PrintDisasm_vsubcuw),
INSTRUCTION(0x1000004a, "vsubfp" , kVX , kV, kGeneral, "Vector Subtract Floating Point" , PrintDisasm_vsubfp),
INSTRUCTION(0x14000050, "vsubfp128" , kVX128 , kV, kGeneral, "Vector128 Subtract Floating Point" , PrintDisasm_vsubfp128),
INSTRUCTION(0x10000700, "vsubsbs" , kVX , kV, kGeneral, "Vector Subtract Signed Byte Saturate" , PrintDisasm_vsubsbs),
INSTRUCTION(0x10000740, "vsubshs" , kVX , kV, kGeneral, "Vector Subtract Signed Half Word Saturate" , PrintDisasm_vsubshs),
INSTRUCTION(0x10000780, "vsubsws" , kVX , kV, kGeneral, "Vector Subtract Signed Word Saturate" , PrintDisasm_vsubsws),
INSTRUCTION(0x10000400, "vsububm" , kVX , kV, kGeneral, "Vector Subtract Unsigned Byte Modulo" , PrintDisasm_vsububm),
INSTRUCTION(0x10000600, "vsububs" , kVX , kV, kGeneral, "Vector Subtract Unsigned Byte Saturate" , PrintDisasm_vsububs),
INSTRUCTION(0x10000440, "vsubuhm" , kVX , kV, kGeneral, "Vector Subtract Unsigned Half Word Modulo" , PrintDisasm_vsubuhm),
INSTRUCTION(0x10000640, "vsubuhs" , kVX , kV, kGeneral, "Vector Subtract Unsigned Half Word Saturate" , PrintDisasm_vsubuhs),
INSTRUCTION(0x10000480, "vsubuwm" , kVX , kV, kGeneral, "Vector Subtract Unsigned Word Modulo" , PrintDisasm_vsubuwm),
INSTRUCTION(0x10000680, "vsubuws" , kVX , kV, kGeneral, "Vector Subtract Unsigned Word Saturate" , PrintDisasm_vsubuws),
INSTRUCTION(0x10000688, "vsum2sws" , kVX , kV, kGeneral, "Vector Sum Across Partial (1/2) Signed Word Saturate" , PrintDisasm_vsum2sws),
INSTRUCTION(0x10000708, "vsum4sbs" , kVX , kV, kGeneral, "Vector Sum Across Partial (1/4) Signed Byte Saturate" , PrintDisasm_vsum4sbs),
INSTRUCTION(0x10000648, "vsum4shs" , kVX , kV, kGeneral, "Vector Sum Across Partial (1/4) Signed Half Word Saturate" , PrintDisasm_vsum4shs),
INSTRUCTION(0x10000608, "vsum4ubs" , kVX , kV, kGeneral, "Vector Sum Across Partial (1/4) Unsigned Byte Saturate" , PrintDisasm_vsum4ubs),
INSTRUCTION(0x10000788, "vsumsws" , kVX , kV, kGeneral, "Vector Sum Across Signed Word Saturate" , PrintDisasm_vsumsws),
INSTRUCTION(0x180007f0, "vupkd3d128" , kVX128_3, kV, kGeneral, "Vector128 Unpack D3Dtype" , nullptr),
INSTRUCTION(0x1000034e, "vupkhpx" , kVX , kV, kGeneral, "Vector Unpack High Pixel" , PrintDisasm_vupkhpx),
INSTRUCTION(0x1000020e, "vupkhsb" , kVX , kV, kGeneral, "Vector Unpack High Signed Byte" , PrintDisasm_vupkhsb),
INSTRUCTION(0x18000380, "vupkhsb128" , kVX128 , kV, kGeneral, "Vector128 Unpack High Signed Byte" , PrintDisasm_vupkhsb128),
INSTRUCTION(0x1000024e, "vupkhsh" , kVX , kV, kGeneral, "Vector Unpack High Signed Half Word" , PrintDisasm_vupkhsh),
INSTRUCTION(0x100003ce, "vupklpx" , kVX , kV, kGeneral, "Vector Unpack Low Pixel" , PrintDisasm_vupklpx),
INSTRUCTION(0x1000028e, "vupklsb" , kVX , kV, kGeneral, "Vector Unpack Low Signed Byte" , PrintDisasm_vupklsb),
INSTRUCTION(0x180003c0, "vupklsb128" , kVX128 , kV, kGeneral, "Vector128 Unpack Low Signed Byte" , PrintDisasm_vupklsb128),
INSTRUCTION(0x100002ce, "vupklsh" , kVX , kV, kGeneral, "Vector Unpack Low Signed Half Word" , PrintDisasm_vupklsh),
INSTRUCTION(0x100004c4, "vxor" , kVX , kV, kGeneral, "Vector Logical XOR" , PrintDisasm_vxor),
INSTRUCTION(0x14000310, "vxor128" , kVX128 , kV, kGeneral, "Vector128 Logical XOR" , PrintDisasm_vxor128),
INSTRUCTION(0x68000000, "xori" , kD , kI, kGeneral, "XOR Immediate" , PrintDisasm_xori),
INSTRUCTION(0x6c000000, "xoris" , kD , kI, kGeneral, "XOR Immediate Shifted" , PrintDisasm_xoris),
INSTRUCTION(0x7c000278, "xorx" , kX , kI, kGeneral, "XOR" , PrintDisasm_xorx),
};
#undef INSTRUCTION
static_assert(sizeof(ppc_opcode_disasm_table) / sizeof(PPCOpcodeDisasmInfo) == static_cast<int>(PPCOpcode::kInvalid), "PPC table mismatch - rerun ppc-table-gen.py");
const PPCOpcodeDisasmInfo& GetOpcodeDisasmInfo(PPCOpcode opcode) {
@@ -5414,7 +5412,7 @@ const PPCOpcodeDisasmInfo& GetOpcodeDisasmInfo(PPCOpcode opcode) {
}
void RegisterOpcodeDisasm(PPCOpcode opcode, InstrDisasmFn fn) {
assert_null(ppc_opcode_disasm_table[static_cast<int>(opcode)].disasm);
const_cast<PPCOpcodeDisasmInfo*>( &ppc_opcode_disasm_table[static_cast<int>(opcode)])->disasm = fn;
ppc_opcode_disasm_table[static_cast<int>(opcode)].disasm = fn;
}
} // namespace ppc

View File

@@ -1,4 +1,4 @@
// This code was autogenerated by ./tools/ppc-table-gen.py. Do not modify!
// This code was autogenerated by tools/ppc-table-gen.py. Do not modify!
// clang-format off
#include <cstdint>
#include <cstdlib>

View File

@@ -1,4 +1,4 @@
// This code was autogenerated by ./tools/ppc-table-gen.py. Do not modify!
// This code was autogenerated by tools/ppc-table-gen.py. Do not modify!
// clang-format off
#include <cstdint>
#include <cstdlib>
@@ -470,7 +470,6 @@ PPCOpcodeInfo ppc_opcode_table[] = {
INSTRUCTION(0x6c000000, "xoris" , kD , kI, kGeneral),
INSTRUCTION(0x7c000278, "xorx" , kX , kI, kGeneral),
};
#undef INSTRUCTION
static_assert(sizeof(ppc_opcode_table) / sizeof(PPCOpcodeInfo) == static_cast<int>(PPCOpcode::kInvalid), "PPC table mismatch - rerun ppc-table-gen.py");
const PPCOpcodeInfo& GetOpcodeInfo(PPCOpcode opcode) {

View File

@@ -351,9 +351,8 @@ def generate_disasm(insns):
w1('PadStringBuffer(str, str_start, kNamePad);')
w0('}')
w0('#define INIT_LIST(...) {__VA_ARGS__}')
w0('#define INSTRUCTION(opcode, mnem, form, group, type, desc, reads, writes, fn) \\')
w0(' {PPCOpcodeGroup::group, PPCOpcodeFormat::form, opcode, mnem, desc, INIT_LIST reads, INIT_LIST writes, fn}')
w0('#define INSTRUCTION(opcode, mnem, form, group, type, desc, fn) \\')
w0(' {PPCOpcodeGroup::group, PPCOpcodeFormat::form, opcode, mnem, desc, fn}')
w0('PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = {')
fmt = 'INSTRUCTION(' + ', '.join([
'0x%08x',
@@ -362,8 +361,6 @@ def generate_disasm(insns):
'%-' + str(group_len) + 's',
'%-' + str(type_len) + 's',
'%-' + str(desc_len) + 's',
'(%s)',
'(%s)',
'%s',
]) + '),'
for i in insns:
@@ -374,8 +371,6 @@ def generate_disasm(insns):
i.group,
i.type,
i.desc,
','.join(['PPCOpcodeField::' + c_field(r) for r in i.reads]),
','.join(['PPCOpcodeField::' + c_field(w) for w in i.writes]),
('PrintDisasm_' + literal_mnem(i.mnem)) if i.disasm_str else 'nullptr',
))
w0('};')
@@ -437,7 +432,7 @@ def generate_lookup(insns):
if i.op_primary not in subtables: subtables[i.op_primary] = []
subtables[i.op_primary].append(i)
for pri in sorted(subtables.iterkeys()):
for pri in sorted(subtables.keys()):
# all the extended encodings (which we care about) end with bit 30. So we want to
# do the rest of the seach by bitscanning left from bit 30. This is simulated
# in the C switch-statement by creating leafs for each extended opcode,
@@ -464,7 +459,7 @@ def generate_lookup(insns):
extract_groups[extract_expression][2].append(i)
w1('case %i:' % (pri))
for extract_expression in sorted(extract_groups.iterkeys()):
for extract_expression in sorted(extract_groups.keys()):
(form, extract_expression, group_insns) = extract_groups[extract_expression]
bit_span_low = 31
bit_span_high = 0