From 214957da3a9b5ec8724a4d63acb48fc3ff7e6a42 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Tue, 29 Dec 2015 11:02:00 -0800 Subject: [PATCH] Adding finer-grained instruction classification. --- src/xenia/cpu/ppc/ppc_opcode.h | 1 - src/xenia/cpu/ppc/ppc_opcode_disasm.cc | 299 ++++++++++++------------- src/xenia/cpu/ppc/ppc_opcode_info.h | 9 +- src/xenia/cpu/ppc/ppc_opcode_lookup.cc | 1 - src/xenia/cpu/ppc/ppc_opcode_table.cc | 283 ++++++++++++----------- tools/ppc-instructions.xml | 293 ++++++++++++------------ tools/ppc-table-gen.py | 8 +- 7 files changed, 440 insertions(+), 454 deletions(-) diff --git a/src/xenia/cpu/ppc/ppc_opcode.h b/src/xenia/cpu/ppc/ppc_opcode.h index 7bda98615..a15526b78 100644 --- a/src/xenia/cpu/ppc/ppc_opcode.h +++ b/src/xenia/cpu/ppc/ppc_opcode.h @@ -42,7 +42,6 @@ enum class PPCOpcode : uint32_t { cror, crorc, crxor, - dcba, dcbf, dcbi, dcbst, diff --git a/src/xenia/cpu/ppc/ppc_opcode_disasm.cc b/src/xenia/cpu/ppc/ppc_opcode_disasm.cc index 7dc36bd90..6b19413a6 100644 --- a/src/xenia/cpu/ppc/ppc_opcode_disasm.cc +++ b/src/xenia/cpu/ppc/ppc_opcode_disasm.cc @@ -264,10 +264,9 @@ void PrintDisasm_cmpli(const PPCDecodeData& d, StringBuffer* str) { str->AppendFormat("0x%X", d.D.UIMM()); } void PrintDisasm_cntlzdx(const PPCDecodeData& d, StringBuffer* str) { - // cntlzd[Rc] [RA], [RS] + // cntlzd [RA], [RS] size_t str_start = str->length(); str->Append("cntlzd"); - if (d.X.Rc()) str->Append('.'); PadStringBuffer(str, str_start, kNamePad); str->AppendFormat("r%d", d.X.RA()); str->Append(", "); @@ -371,15 +370,6 @@ void PrintDisasm_crxor(const PPCDecodeData& d, StringBuffer* str) { str->Append(", "); str->AppendFormat("crb%d", d.XL.CRBB()); } -void PrintDisasm_dcba(const PPCDecodeData& d, StringBuffer* str) { - // dcba [RA0], [RB] - size_t str_start = str->length(); - str->Append("dcba"); - PadStringBuffer(str, str_start, kNamePad); - str->AppendFormat("r%d", d.X.RA0()); - str->Append(", "); - str->AppendFormat("r%d", d.X.RB()); -} void PrintDisasm_dcbf(const PPCDecodeData& d, StringBuffer* str) { // dcbf [RA0], [RB] size_t str_start = str->length(); @@ -4977,8 +4967,8 @@ void PrintDisasm_xorx(const PPCDecodeData& d, StringBuffer* str) { #define INSTRUCTION(opcode, mnem, form, group, type, desc, reads, writes, fn) \ {PPCOpcodeGroup::group, PPCOpcodeFormat::form, opcode, mnem, desc, INIT_LIST reads, INIT_LIST writes, fn} PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = { - INSTRUCTION(0x7c000014, "addcx" , kXO , kI, kGeneral, "Add Carrying" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_addcx), - INSTRUCTION(0x7c000114, "addex" , kXO , kI, kGeneral, "Add Extended" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB,PPCOpcodeField::kCR), (PPCOpcodeField::kRD,PPCOpcodeField::kOEcond,PPCOpcodeField::kCRcond), PrintDisasm_addex), + 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), @@ -4990,32 +4980,31 @@ PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = { 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 , kI, kSync , "Branch Conditional to Count Register" , (PPCOpcodeField::kLK,PPCOpcodeField::kBO,PPCOpcodeField::kBI,PPCOpcodeField::kCR,PPCOpcodeField::kCTR), (PPCOpcodeField::kLRcond), PrintDisasm_bcctrx), - INSTRUCTION(0x4c000020, "bclrx" , kXL , kI, 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 , kI, 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 , kI, kSync , "Branch" , (PPCOpcodeField::kLK,PPCOpcodeField::kAA,PPCOpcodeField::kADDR), (PPCOpcodeField::kLRcond), PrintDisasm_bx), + 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 , kI, kGeneral, "Condition Register AND" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crand), - INSTRUCTION(0x4c000102, "crandc" , kXL , kI, kGeneral, "Condition Register AND with Complement" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crandc), - INSTRUCTION(0x4c000242, "creqv" , kXL , kI, kGeneral, "Condition Register Equivalent" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_creqv), - INSTRUCTION(0x4c0001c2, "crnand" , kXL , kI, kGeneral, "Condition Register NAND" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crnand), - INSTRUCTION(0x4c000042, "crnor" , kXL , kI, kGeneral, "Condition Register NOR" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crnor), - INSTRUCTION(0x4c000382, "cror" , kXL , kI, kGeneral, "Condition Register OR" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_cror), - INSTRUCTION(0x4c000342, "crorc" , kXL , kI, kGeneral, "Condition Register OR with Complement" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crorc), - INSTRUCTION(0x4c000182, "crxor" , kXL , kI, kGeneral, "Condition Register XOR" , (PPCOpcodeField::kCRBA,PPCOpcodeField::kCRBB), (PPCOpcodeField::kCRBD), PrintDisasm_crxor), - INSTRUCTION(0x7c0005ec, "dcba" , kX , kI, kGeneral, "Data Cache Block Allocate" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcba), + 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 , kI, kGeneral, "Data Cache Block Flush" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbf), INSTRUCTION(0x7c0003ac, "dcbi" , kX , kI, kGeneral, "Data Cache Block Invalidate" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbi), INSTRUCTION(0x7c00006c, "dcbst" , kX , kI, kGeneral, "Data Cache Block Store" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbst), INSTRUCTION(0x7c00022c, "dcbt" , kX , kI, kGeneral, "Data Cache Block Touch" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbt), INSTRUCTION(0x7c0001ec, "dcbtst" , kX , kI, kGeneral, "Data Cache Block Touch for Store" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbtst), - INSTRUCTION(0x7c0007ec, "dcbz" , kDCBZ , kI, kGeneral, "Data Cache Block Clear to Zero" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbz), - INSTRUCTION(0x7c2007ec, "dcbz128" , kDCBZ , kI, kGeneral, "Data Cache Block Clear to Zero 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_dcbz128), + 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), @@ -5060,83 +5049,83 @@ PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = { INSTRUCTION(0xfc000028, "fsubx" , kA , kF, kGeneral, "Floating Subtract" , (PPCOpcodeField::kFA,PPCOpcodeField::kFB), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond,PPCOpcodeField::kFPSCR), PrintDisasm_fsubx), INSTRUCTION(0x7c0007ac, "icbi" , kX , kI, 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 , kI, kGeneral, "Load Byte and Zero" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kRD), PrintDisasm_lbz), - INSTRUCTION(0x8c000000, "lbzu" , kD , kI, kGeneral, "Load Byte and Zero with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lbzu), - INSTRUCTION(0x7c0000ee, "lbzux" , kX , kI, kGeneral, "Load Byte and Zero with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lbzux), - INSTRUCTION(0x7c0000ae, "lbzx" , kX , kI, kGeneral, "Load Byte and Zero Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lbzx), - INSTRUCTION(0xe8000000, "ld" , kDS , kI, kGeneral, "Load Doubleword" , (PPCOpcodeField::kRA0,PPCOpcodeField::kds), (PPCOpcodeField::kRD), PrintDisasm_ld), - INSTRUCTION(0x7c0000a8, "ldarx" , kX , kI, kGeneral, "Load Doubleword and Reserve Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_ldarx), - INSTRUCTION(0x7c000428, "ldbrx" , kX , kI, kGeneral, "Load Doubleword Byte-Reverse Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_ldbrx), - INSTRUCTION(0xe8000001, "ldu" , kDS , kI, kGeneral, "Load Doubleword with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kds), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_ldu), - INSTRUCTION(0x7c00006a, "ldux" , kX , kI, kGeneral, "Load Doubleword with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_ldux), - INSTRUCTION(0x7c00002a, "ldx" , kX , kI, kGeneral, "Load Doubleword Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_ldx), - INSTRUCTION(0xc8000000, "lfd" , kD , kF, kGeneral, "Load Floating-Point Double" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kFD), PrintDisasm_lfd), - INSTRUCTION(0xcc000000, "lfdu" , kD , kF, kGeneral, "Load Floating-Point Double with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kFD,PPCOpcodeField::kRA), PrintDisasm_lfdu), - INSTRUCTION(0x7c0004ee, "lfdux" , kX , kF, kGeneral, "Load Floating-Point Double with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kFD,PPCOpcodeField::kRA), PrintDisasm_lfdux), - INSTRUCTION(0x7c0004ae, "lfdx" , kX , kF, kGeneral, "Load Floating-Point Double Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kFD), PrintDisasm_lfdx), - INSTRUCTION(0xc0000000, "lfs" , kD , kF, kGeneral, "Load Floating-Point Single" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kFD), PrintDisasm_lfs), - INSTRUCTION(0xc4000000, "lfsu" , kD , kF, kGeneral, "Load Floating-Point Single with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kFD,PPCOpcodeField::kRA), PrintDisasm_lfsu), - INSTRUCTION(0x7c00046e, "lfsux" , kX , kF, kGeneral, "Load Floating-Point Single with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kFD,PPCOpcodeField::kRA), PrintDisasm_lfsux), - INSTRUCTION(0x7c00042e, "lfsx" , kX , kF, kGeneral, "Load Floating-Point Single Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kFD), PrintDisasm_lfsx), - INSTRUCTION(0xa8000000, "lha" , kD , kI, kGeneral, "Load Half Word Algebraic" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kRD), PrintDisasm_lha), - INSTRUCTION(0xac000000, "lhau" , kD , kI, kGeneral, "Load Half Word Algebraic with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lhau), - INSTRUCTION(0x7c0002ee, "lhaux" , kX , kI, kGeneral, "Load Half Word Algebraic with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lhaux), - INSTRUCTION(0x7c0002ae, "lhax" , kX , kI, kGeneral, "Load Half Word Algebraic Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lhax), - INSTRUCTION(0x7c00062c, "lhbrx" , kX , kI, kGeneral, "Load Half Word Byte-Reverse Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lhbrx), - INSTRUCTION(0xa0000000, "lhz" , kD , kI, kGeneral, "Load Half Word and Zero" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kRD), PrintDisasm_lhz), - INSTRUCTION(0xa4000000, "lhzu" , kD , kI, kGeneral, "Load Half Word and Zero with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lhzu), - INSTRUCTION(0x7c00026e, "lhzux" , kX , kI, kGeneral, "Load Half Word and Zero with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lhzux), - INSTRUCTION(0x7c00022e, "lhzx" , kX , kI, kGeneral, "Load Half Word and Zero Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lhzx), - INSTRUCTION(0xb8000000, "lmw" , kD , kI, kGeneral, "Load Multiple Word" , (), (), nullptr), - INSTRUCTION(0x7c0004aa, "lswi" , kX , kI, kGeneral, "Load String Word Immediate" , (), (), nullptr), - INSTRUCTION(0x7c00042a, "lswx" , kX , kI, kGeneral, "Load String Word Indexed" , (), (), nullptr), - INSTRUCTION(0x7c00000e, "lvebx" , kX , kV, kGeneral, "Load Vector Element Byte Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvebx), - INSTRUCTION(0x7c00004e, "lvehx" , kX , kV, kGeneral, "Load Vector Element Half Word Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvehx), - INSTRUCTION(0x7c00008e, "lvewx" , kX , kV, kGeneral, "Load Vector Element Word Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvewx), - INSTRUCTION(0x10000083, "lvewx128" , kVX128_1, kV, kGeneral, "Load Vector Element Word Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvewx128), - INSTRUCTION(0x7c00040e, "lvlx" , kX , kV, kGeneral, "Load Vector Left Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvlx), - INSTRUCTION(0x10000403, "lvlx128" , kVX128_1, kV, kGeneral, "Load Vector Left Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvlx128), - INSTRUCTION(0x7c00060e, "lvlxl" , kX , kV, kGeneral, "Load Vector Left Indexed LRU" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvlxl), - INSTRUCTION(0x10000603, "lvlxl128" , kVX128_1, kV, kGeneral, "Load Vector Left Indexed LRU 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvlxl128), - INSTRUCTION(0x7c00044e, "lvrx" , kX , kV, kGeneral, "Load Vector Right Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvrx), - INSTRUCTION(0x10000443, "lvrx128" , kVX128_1, kV, kGeneral, "Load Vector Right Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvrx128), - INSTRUCTION(0x7c00064e, "lvrxl" , kX , kV, kGeneral, "Load Vector Right Indexed LRU" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvrxl), - INSTRUCTION(0x10000643, "lvrxl128" , kVX128_1, kV, kGeneral, "Load Vector Right Indexed LRU 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvrxl128), + 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 , kV, kGeneral, "Load Vector Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvx), - INSTRUCTION(0x100000c3, "lvx128" , kVX128_1, kV, kGeneral, "Load Vector Indexed 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvx128), - INSTRUCTION(0x7c0002ce, "lvxl" , kX , kV, kGeneral, "Load Vector Indexed LRU" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvxl), - INSTRUCTION(0x100002c3, "lvxl128" , kVX128_1, kV, kGeneral, "Load Vector Indexed LRU 128" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kVD), PrintDisasm_lvxl128), - INSTRUCTION(0xe8000002, "lwa" , kDS , kI, kGeneral, "Load Word Algebraic" , (PPCOpcodeField::kRA0,PPCOpcodeField::kds), (PPCOpcodeField::kRD), PrintDisasm_lwa), - INSTRUCTION(0x7c000028, "lwarx" , kX , kI, kGeneral, "Load Word and Reserve Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lwarx), - INSTRUCTION(0x7c0002ea, "lwaux" , kX , kI, kGeneral, "Load Word Algebraic with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lwaux), - INSTRUCTION(0x7c0002aa, "lwax" , kX , kI, kGeneral, "Load Word Algebraic Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lwax), - INSTRUCTION(0x7c00042c, "lwbrx" , kX , kI, kGeneral, "Load Word Byte-Reverse Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lwbrx), - INSTRUCTION(0x80000000, "lwz" , kD , kI, kGeneral, "Load Word and Zero" , (PPCOpcodeField::kRA0,PPCOpcodeField::kd), (PPCOpcodeField::kRD), PrintDisasm_lwz), - INSTRUCTION(0x84000000, "lwzu" , kD , kI, kGeneral, "Load Word and Zero with Update" , (PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lwzu), - INSTRUCTION(0x7c00006e, "lwzux" , kX , kI, kGeneral, "Load Word and Zero with Update Indexed" , (PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRD,PPCOpcodeField::kRA), PrintDisasm_lwzux), - INSTRUCTION(0x7c00002e, "lwzx" , kX , kI, kGeneral, "Load Word and Zero Indexed" , (PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kRD), PrintDisasm_lwzx), - INSTRUCTION(0x4c000000, "mcrf" , kXL , kI, kGeneral, "Move Condition Register Field" , (PPCOpcodeField::kCRFS), (PPCOpcodeField::kCRFD), PrintDisasm_mcrf), - INSTRUCTION(0xfc000080, "mcrfs" , kX , kF, kGeneral, "Move to Condition Register from FPSCR" , (PPCOpcodeField::kCRFS,PPCOpcodeField::kFPSCR), (PPCOpcodeField::kCRFD,PPCOpcodeField::kFPSCR), PrintDisasm_mcrfs), - INSTRUCTION(0x7c000400, "mcrxr" , kX , kI, kGeneral, "Move to Condition Register from XER" , (PPCOpcodeField::kCR), (PPCOpcodeField::kCRFD), PrintDisasm_mcrxr), - INSTRUCTION(0x7c000026, "mfcr" , kX , kI, kGeneral, "Move from Condition Register" , (PPCOpcodeField::kCR), (PPCOpcodeField::kRD), PrintDisasm_mfcr), - INSTRUCTION(0xfc00048e, "mffsx" , kX , kF, kGeneral, "Move from FPSCR" , (PPCOpcodeField::kFPSCR), (PPCOpcodeField::kFD,PPCOpcodeField::kCRcond), PrintDisasm_mffsx), - INSTRUCTION(0x7c0000a6, "mfmsr" , kX , kI, kGeneral, "Move from Machine State Register" , (PPCOpcodeField::kMSR), (PPCOpcodeField::kRD), PrintDisasm_mfmsr), - INSTRUCTION(0x7c0002a6, "mfspr" , kXFX , kI, kGeneral, "Move from Special-Purpose Register" , (PPCOpcodeField::kSPR), (PPCOpcodeField::kRD), PrintDisasm_mfspr), - INSTRUCTION(0x7c0002e6, "mftb" , kXFX , kI, kGeneral, "Move from Time Base" , (PPCOpcodeField::kTBR), (PPCOpcodeField::kRD), PrintDisasm_mftb), - INSTRUCTION(0x10000604, "mfvscr" , kVX , kV, kGeneral, "Move from VSCR" , (PPCOpcodeField::kVSCR), (PPCOpcodeField::kVD), nullptr), - INSTRUCTION(0x7c000120, "mtcrf" , kXFX , kI, kGeneral, "Move to Condition Register Fields" , (PPCOpcodeField::kRS), (PPCOpcodeField::kCRM), PrintDisasm_mtcrf), - INSTRUCTION(0xfc00008c, "mtfsb0x" , kX , kF, kGeneral, "Move to FPSCR Bit 0" , (), (PPCOpcodeField::kFPSCRD,PPCOpcodeField::kCRcond), PrintDisasm_mtfsb0x), - INSTRUCTION(0xfc00004c, "mtfsb1x" , kX , kF, kGeneral, "Move to FPSCR Bit 1" , (), (PPCOpcodeField::kFPSCRD,PPCOpcodeField::kCRcond), PrintDisasm_mtfsb1x), - INSTRUCTION(0xfc00010c, "mtfsfix" , kX , kF, kGeneral, "Move to FPSCR Field Immediate" , (PPCOpcodeField::kIMM), (PPCOpcodeField::kCRFD,PPCOpcodeField::kCRcond), PrintDisasm_mtfsfix), - INSTRUCTION(0xfc00058e, "mtfsfx" , kXFL , kF, kGeneral, "Move to FPSCR Fields" , (PPCOpcodeField::kFM,PPCOpcodeField::kFB), (PPCOpcodeField::kFPSCR,PPCOpcodeField::kCRcond), PrintDisasm_mtfsfx), - INSTRUCTION(0x7c000124, "mtmsr" , kX , kI, kGeneral, "Move to Machine State Register" , (PPCOpcodeField::kRS), (PPCOpcodeField::kMSR), PrintDisasm_mtmsr), - INSTRUCTION(0x7c000164, "mtmsrd" , kX , kI, kGeneral, "Move to Machine State Register Doubleword" , (PPCOpcodeField::kRS), (PPCOpcodeField::kMSR), PrintDisasm_mtmsrd), - INSTRUCTION(0x7c0003a6, "mtspr" , kXFX , kI, kGeneral, "Move to Special-Purpose Register" , (PPCOpcodeField::kRS), (PPCOpcodeField::kSPR), PrintDisasm_mtspr), - INSTRUCTION(0x10000644, "mtvscr" , kVX , kV, kGeneral, "Move to VSCR" , (PPCOpcodeField::kVB), (PPCOpcodeField::kVSCR), nullptr), + 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, kGeneral, "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, kGeneral, "Move to Machine State Register" , (PPCOpcodeField::kRS), (PPCOpcodeField::kMSR), PrintDisasm_mtmsr), + INSTRUCTION(0x7c000164, "mtmsrd" , kX , kC, kGeneral, "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), @@ -5160,7 +5149,7 @@ PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = { 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 , kI, kSync , "System Call" , (), (), PrintDisasm_sc), + INSTRUCTION(0x44000002, "sc" , kSC , kB, kSync , "System Call" , (), (), 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), @@ -5169,55 +5158,55 @@ PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = { 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 , kI, kGeneral, "Store Byte" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_stb), - INSTRUCTION(0x9c000000, "stbu" , kD , kI, kGeneral, "Store Byte with Update" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_stbu), - INSTRUCTION(0x7c0001ee, "stbux" , kX , kI, kGeneral, "Store Byte with Update Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stbux), - INSTRUCTION(0x7c0001ae, "stbx" , kX , kI, kGeneral, "Store Byte Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stbx), - INSTRUCTION(0xf8000000, "std" , kDS , kI, kGeneral, "Store Doubleword" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kds), (), PrintDisasm_std), - INSTRUCTION(0x7c000528, "stdbrx" , kX , kI, kGeneral, "Store Doubleword Byte-Reverse Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stdbrx), - INSTRUCTION(0x7c0001ad, "stdcx" , kX , kI, kGeneral, "Store Doubleword Conditional Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kCR), PrintDisasm_stdcx), - INSTRUCTION(0xf8000001, "stdu" , kDS , kI, kGeneral, "Store Doubleword with Update" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kds), (PPCOpcodeField::kRA), PrintDisasm_stdu), - INSTRUCTION(0x7c00016a, "stdux" , kX , kI, kGeneral, "Store Doubleword with Update Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stdux), - INSTRUCTION(0x7c00012a, "stdx" , kX , kI, kGeneral, "Store Doubleword Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stdx), - INSTRUCTION(0xd8000000, "stfd" , kD , kF, kGeneral, "Store Floating-Point Double" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_stfd), - INSTRUCTION(0xdc000000, "stfdu" , kD , kF, kGeneral, "Store Floating-Point Double with Update" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_stfdu), - INSTRUCTION(0x7c0005ee, "stfdux" , kX , kF, kGeneral, "Store Floating-Point Double with Update Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stfdux), - INSTRUCTION(0x7c0005ae, "stfdx" , kX , kF, kGeneral, "Store Floating-Point Double Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stfdx), - INSTRUCTION(0x7c0007ae, "stfiwx" , kX , kF, kGeneral, "Store Floating-Point as Integer Word Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stfiwx), - INSTRUCTION(0xd0000000, "stfs" , kD , kF, kGeneral, "Store Floating-Point Single" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_stfs), - INSTRUCTION(0xd4000000, "stfsu" , kD , kF, kGeneral, "Store Floating-Point Single with Update" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_stfsu), - INSTRUCTION(0x7c00056e, "stfsux" , kX , kF, kGeneral, "Store Floating-Point Single with Update Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stfsux), - INSTRUCTION(0x7c00052e, "stfsx" , kX , kF, kGeneral, "Store Floating-Point Single Indexed" , (PPCOpcodeField::kFS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stfsx), - INSTRUCTION(0xb0000000, "sth" , kD , kI, kGeneral, "Store Half Word" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_sth), - INSTRUCTION(0x7c00072c, "sthbrx" , kX , kI, kGeneral, "Store Half Word Byte-Reverse Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_sthbrx), - INSTRUCTION(0xb4000000, "sthu" , kD , kI, kGeneral, "Store Half Word with Update" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_sthu), - INSTRUCTION(0x7c00036e, "sthux" , kX , kI, kGeneral, "Store Half Word with Update Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_sthux), - INSTRUCTION(0x7c00032e, "sthx" , kX , kI, kGeneral, "Store Half Word Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_sthx), - INSTRUCTION(0xbc000000, "stmw" , kD , kI, kGeneral, "Store Multiple Word" , (), (), nullptr), - INSTRUCTION(0x7c0005aa, "stswi" , kX , kI, kGeneral, "Store String Word Immediate" , (), (), nullptr), - INSTRUCTION(0x7c00052a, "stswx" , kX , kI, kGeneral, "Store String Word Indexed" , (), (), nullptr), - INSTRUCTION(0x7c00010e, "stvebx" , kX , kV, kGeneral, "Store Vector Element Byte Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvebx), - INSTRUCTION(0x7c00014e, "stvehx" , kX , kV, kGeneral, "Store Vector Element Half Word Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvehx), - INSTRUCTION(0x7c00018e, "stvewx" , kX , kV, kGeneral, "Store Vector Element Word Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvewx), - INSTRUCTION(0x10000183, "stvewx128" , kVX128_1, kV, kGeneral, "Store Vector Element Word Indexed 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvewx128), - INSTRUCTION(0x7c00050e, "stvlx" , kX , kV, kGeneral, "Store Vector Left Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvlx), - INSTRUCTION(0x10000503, "stvlx128" , kVX128_1, kV, kGeneral, "Store Vector Left Indexed 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvlx128), - INSTRUCTION(0x7c00070e, "stvlxl" , kX , kV, kGeneral, "Store Vector Left Indexed LRU" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvlxl), - INSTRUCTION(0x10000703, "stvlxl128" , kVX128_1, kV, kGeneral, "Store Vector Left Indexed LRU 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvlxl128), - INSTRUCTION(0x7c00054e, "stvrx" , kX , kV, kGeneral, "Store Vector Right Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvrx), - INSTRUCTION(0x10000543, "stvrx128" , kVX128_1, kV, kGeneral, "Store Vector Right Indexed 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvrx128), - INSTRUCTION(0x7c00074e, "stvrxl" , kX , kV, kGeneral, "Store Vector Right Indexed LRU" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvrxl), - INSTRUCTION(0x10000743, "stvrxl128" , kVX128_1, kV, kGeneral, "Store Vector Right Indexed LRU 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvrxl128), - INSTRUCTION(0x7c0001ce, "stvx" , kX , kV, kGeneral, "Store Vector Indexed" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvx), - INSTRUCTION(0x100001c3, "stvx128" , kVX128_1, kV, kGeneral, "Store Vector Indexed 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvx128), - INSTRUCTION(0x7c0003ce, "stvxl" , kX , kV, kGeneral, "Store Vector Indexed LRU" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvxl), - INSTRUCTION(0x100003c3, "stvxl128" , kVX128_1, kV, kGeneral, "Store Vector Indexed LRU 128" , (PPCOpcodeField::kVS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stvxl128), - INSTRUCTION(0x90000000, "stw" , kD , kI, kGeneral, "Store Word" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kd), (), PrintDisasm_stw), - INSTRUCTION(0x7c00052c, "stwbrx" , kX , kI, kGeneral, "Store Word Byte-Reverse Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stwbrx), - INSTRUCTION(0x7c00012d, "stwcx" , kX , kI, kGeneral, "Store Word Conditional Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (PPCOpcodeField::kCR), PrintDisasm_stwcx), - INSTRUCTION(0x94000000, "stwu" , kD , kI, kGeneral, "Store Word with Update" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kd), (PPCOpcodeField::kRA), PrintDisasm_stwu), - INSTRUCTION(0x7c00016e, "stwux" , kX , kI, kGeneral, "Store Word with Update Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (PPCOpcodeField::kRA), PrintDisasm_stwux), - INSTRUCTION(0x7c00012e, "stwx" , kX , kI, kGeneral, "Store Word Indexed" , (PPCOpcodeField::kRS,PPCOpcodeField::kRA0,PPCOpcodeField::kRB), (), PrintDisasm_stwx), + 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), @@ -5225,10 +5214,10 @@ PPCOpcodeDisasmInfo ppc_opcode_disasm_table[] = { 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 , kI, kGeneral, "Trap Doubleword" , (PPCOpcodeField::kTO,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (), PrintDisasm_td), - INSTRUCTION(0x08000000, "tdi" , kD , kI, kGeneral, "Trap Doubleword Immediate" , (PPCOpcodeField::kTO,PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (), PrintDisasm_tdi), - INSTRUCTION(0x7c000008, "tw" , kX , kI, kGeneral, "Trap Word" , (PPCOpcodeField::kTO,PPCOpcodeField::kRA,PPCOpcodeField::kRB), (), PrintDisasm_tw), - INSTRUCTION(0x0c000000, "twi" , kD , kI, kGeneral, "Trap Word Immediate" , (PPCOpcodeField::kTO,PPCOpcodeField::kRA,PPCOpcodeField::kSIMM), (), PrintDisasm_twi), + 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), diff --git a/src/xenia/cpu/ppc/ppc_opcode_info.h b/src/xenia/cpu/ppc/ppc_opcode_info.h index 4bf99eb1a..2fb0fc060 100644 --- a/src/xenia/cpu/ppc/ppc_opcode_info.h +++ b/src/xenia/cpu/ppc/ppc_opcode_info.h @@ -53,9 +53,12 @@ enum class PPCOpcodeFormat { }; enum class PPCOpcodeGroup { - kI, - kF, - kV, + kB, // Branching/traps/etc. + kC, // Control. + kM, // Memory load/store (of all types). + kI, // Integer. + kF, // Floating-point. + kV, // VMX. }; enum class PPCOpcodeType { diff --git a/src/xenia/cpu/ppc/ppc_opcode_lookup.cc b/src/xenia/cpu/ppc/ppc_opcode_lookup.cc index 7591c3e62..eeb4362e6 100644 --- a/src/xenia/cpu/ppc/ppc_opcode_lookup.cc +++ b/src/xenia/cpu/ppc/ppc_opcode_lookup.cc @@ -411,7 +411,6 @@ PPCOpcode LookupOpcode(uint32_t code) { case 0b1010110111: PPC_DECODER_HIT(stfsux); case 0b1011010101: PPC_DECODER_HIT(stswi); case 0b1011010111: PPC_DECODER_HIT(stfdx); - case 0b1011110110: PPC_DECODER_HIT(dcba); case 0b1011110111: PPC_DECODER_HIT(stfdux); case 0b1100000111: PPC_DECODER_HIT(lvlxl); case 0b1100010110: PPC_DECODER_HIT(lhbrx); diff --git a/src/xenia/cpu/ppc/ppc_opcode_table.cc b/src/xenia/cpu/ppc/ppc_opcode_table.cc index 1982d9161..7cc0ea257 100644 --- a/src/xenia/cpu/ppc/ppc_opcode_table.cc +++ b/src/xenia/cpu/ppc/ppc_opcode_table.cc @@ -26,32 +26,31 @@ PPCOpcodeInfo ppc_opcode_table[] = { INSTRUCTION(0x74000000, "andisx" , kD , kI, kGeneral), INSTRUCTION(0x70000000, "andix" , kD , kI, kGeneral), INSTRUCTION(0x7c000038, "andx" , kX , kI, kGeneral), - INSTRUCTION(0x4c000420, "bcctrx" , kXL , kI, kSync ), - INSTRUCTION(0x4c000020, "bclrx" , kXL , kI, kSync ), - INSTRUCTION(0x40000000, "bcx" , kB , kI, kSync ), - INSTRUCTION(0x48000000, "bx" , kI , kI, kSync ), + INSTRUCTION(0x4c000420, "bcctrx" , kXL , kB, kSync ), + INSTRUCTION(0x4c000020, "bclrx" , kXL , kB, kSync ), + INSTRUCTION(0x40000000, "bcx" , kB , kB, kSync ), + INSTRUCTION(0x48000000, "bx" , kI , kB, kSync ), INSTRUCTION(0x7c000000, "cmp" , kX , kI, kGeneral), INSTRUCTION(0x2c000000, "cmpi" , kD , kI, kGeneral), INSTRUCTION(0x7c000040, "cmpl" , kX , kI, kGeneral), INSTRUCTION(0x28000000, "cmpli" , kD , kI, kGeneral), INSTRUCTION(0x7c000074, "cntlzdx" , kX , kI, kGeneral), INSTRUCTION(0x7c000034, "cntlzwx" , kX , kI, kGeneral), - INSTRUCTION(0x4c000202, "crand" , kXL , kI, kGeneral), - INSTRUCTION(0x4c000102, "crandc" , kXL , kI, kGeneral), - INSTRUCTION(0x4c000242, "creqv" , kXL , kI, kGeneral), - INSTRUCTION(0x4c0001c2, "crnand" , kXL , kI, kGeneral), - INSTRUCTION(0x4c000042, "crnor" , kXL , kI, kGeneral), - INSTRUCTION(0x4c000382, "cror" , kXL , kI, kGeneral), - INSTRUCTION(0x4c000342, "crorc" , kXL , kI, kGeneral), - INSTRUCTION(0x4c000182, "crxor" , kXL , kI, kGeneral), - INSTRUCTION(0x7c0005ec, "dcba" , kX , kI, kGeneral), + INSTRUCTION(0x4c000202, "crand" , kXL , kC, kGeneral), + INSTRUCTION(0x4c000102, "crandc" , kXL , kC, kGeneral), + INSTRUCTION(0x4c000242, "creqv" , kXL , kC, kGeneral), + INSTRUCTION(0x4c0001c2, "crnand" , kXL , kC, kGeneral), + INSTRUCTION(0x4c000042, "crnor" , kXL , kC, kGeneral), + INSTRUCTION(0x4c000382, "cror" , kXL , kC, kGeneral), + INSTRUCTION(0x4c000342, "crorc" , kXL , kC, kGeneral), + INSTRUCTION(0x4c000182, "crxor" , kXL , kC, kGeneral), INSTRUCTION(0x7c0000ac, "dcbf" , kX , kI, kGeneral), INSTRUCTION(0x7c0003ac, "dcbi" , kX , kI, kGeneral), INSTRUCTION(0x7c00006c, "dcbst" , kX , kI, kGeneral), INSTRUCTION(0x7c00022c, "dcbt" , kX , kI, kGeneral), INSTRUCTION(0x7c0001ec, "dcbtst" , kX , kI, kGeneral), - INSTRUCTION(0x7c0007ec, "dcbz" , kDCBZ , kI, kGeneral), - INSTRUCTION(0x7c2007ec, "dcbz128" , kDCBZ , kI, kGeneral), + INSTRUCTION(0x7c0007ec, "dcbz" , kDCBZ , kM, kGeneral), + INSTRUCTION(0x7c2007ec, "dcbz128" , kDCBZ , kM, kGeneral), INSTRUCTION(0x7c000392, "divdux" , kXO , kI, kGeneral), INSTRUCTION(0x7c0003d2, "divdx" , kXO , kI, kGeneral), INSTRUCTION(0x7c000396, "divwux" , kXO , kI, kGeneral), @@ -96,83 +95,83 @@ PPCOpcodeInfo ppc_opcode_table[] = { INSTRUCTION(0xfc000028, "fsubx" , kA , kF, kGeneral), INSTRUCTION(0x7c0007ac, "icbi" , kX , kI, kGeneral), INSTRUCTION(0x4c00012c, "isync" , kXL , kI, kGeneral), - INSTRUCTION(0x88000000, "lbz" , kD , kI, kGeneral), - INSTRUCTION(0x8c000000, "lbzu" , kD , kI, kGeneral), - INSTRUCTION(0x7c0000ee, "lbzux" , kX , kI, kGeneral), - INSTRUCTION(0x7c0000ae, "lbzx" , kX , kI, kGeneral), - INSTRUCTION(0xe8000000, "ld" , kDS , kI, kGeneral), - INSTRUCTION(0x7c0000a8, "ldarx" , kX , kI, kGeneral), - INSTRUCTION(0x7c000428, "ldbrx" , kX , kI, kGeneral), - INSTRUCTION(0xe8000001, "ldu" , kDS , kI, kGeneral), - INSTRUCTION(0x7c00006a, "ldux" , kX , kI, kGeneral), - INSTRUCTION(0x7c00002a, "ldx" , kX , kI, kGeneral), - INSTRUCTION(0xc8000000, "lfd" , kD , kF, kGeneral), - INSTRUCTION(0xcc000000, "lfdu" , kD , kF, kGeneral), - INSTRUCTION(0x7c0004ee, "lfdux" , kX , kF, kGeneral), - INSTRUCTION(0x7c0004ae, "lfdx" , kX , kF, kGeneral), - INSTRUCTION(0xc0000000, "lfs" , kD , kF, kGeneral), - INSTRUCTION(0xc4000000, "lfsu" , kD , kF, kGeneral), - INSTRUCTION(0x7c00046e, "lfsux" , kX , kF, kGeneral), - INSTRUCTION(0x7c00042e, "lfsx" , kX , kF, kGeneral), - INSTRUCTION(0xa8000000, "lha" , kD , kI, kGeneral), - INSTRUCTION(0xac000000, "lhau" , kD , kI, kGeneral), - INSTRUCTION(0x7c0002ee, "lhaux" , kX , kI, kGeneral), - INSTRUCTION(0x7c0002ae, "lhax" , kX , kI, kGeneral), - INSTRUCTION(0x7c00062c, "lhbrx" , kX , kI, kGeneral), - INSTRUCTION(0xa0000000, "lhz" , kD , kI, kGeneral), - INSTRUCTION(0xa4000000, "lhzu" , kD , kI, kGeneral), - INSTRUCTION(0x7c00026e, "lhzux" , kX , kI, kGeneral), - INSTRUCTION(0x7c00022e, "lhzx" , kX , kI, kGeneral), - INSTRUCTION(0xb8000000, "lmw" , kD , kI, kGeneral), - INSTRUCTION(0x7c0004aa, "lswi" , kX , kI, kGeneral), - INSTRUCTION(0x7c00042a, "lswx" , kX , kI, kGeneral), - INSTRUCTION(0x7c00000e, "lvebx" , kX , kV, kGeneral), - INSTRUCTION(0x7c00004e, "lvehx" , kX , kV, kGeneral), - INSTRUCTION(0x7c00008e, "lvewx" , kX , kV, kGeneral), - INSTRUCTION(0x10000083, "lvewx128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c00040e, "lvlx" , kX , kV, kGeneral), - INSTRUCTION(0x10000403, "lvlx128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c00060e, "lvlxl" , kX , kV, kGeneral), - INSTRUCTION(0x10000603, "lvlxl128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c00044e, "lvrx" , kX , kV, kGeneral), - INSTRUCTION(0x10000443, "lvrx128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c00064e, "lvrxl" , kX , kV, kGeneral), - INSTRUCTION(0x10000643, "lvrxl128" , kVX128_1, kV, kGeneral), + INSTRUCTION(0x88000000, "lbz" , kD , kM, kGeneral), + INSTRUCTION(0x8c000000, "lbzu" , kD , kM, kGeneral), + INSTRUCTION(0x7c0000ee, "lbzux" , kX , kM, kGeneral), + INSTRUCTION(0x7c0000ae, "lbzx" , kX , kM, kGeneral), + INSTRUCTION(0xe8000000, "ld" , kDS , kM, kGeneral), + INSTRUCTION(0x7c0000a8, "ldarx" , kX , kM, kGeneral), + INSTRUCTION(0x7c000428, "ldbrx" , kX , kM, kGeneral), + INSTRUCTION(0xe8000001, "ldu" , kDS , kM, kGeneral), + INSTRUCTION(0x7c00006a, "ldux" , kX , kM, kGeneral), + INSTRUCTION(0x7c00002a, "ldx" , kX , kM, kGeneral), + INSTRUCTION(0xc8000000, "lfd" , kD , kM, kGeneral), + INSTRUCTION(0xcc000000, "lfdu" , kD , kM, kGeneral), + INSTRUCTION(0x7c0004ee, "lfdux" , kX , kM, kGeneral), + INSTRUCTION(0x7c0004ae, "lfdx" , kX , kM, kGeneral), + INSTRUCTION(0xc0000000, "lfs" , kD , kM, kGeneral), + INSTRUCTION(0xc4000000, "lfsu" , kD , kM, kGeneral), + INSTRUCTION(0x7c00046e, "lfsux" , kX , kM, kGeneral), + INSTRUCTION(0x7c00042e, "lfsx" , kX , kM, kGeneral), + INSTRUCTION(0xa8000000, "lha" , kD , kM, kGeneral), + INSTRUCTION(0xac000000, "lhau" , kD , kM, kGeneral), + INSTRUCTION(0x7c0002ee, "lhaux" , kX , kM, kGeneral), + INSTRUCTION(0x7c0002ae, "lhax" , kX , kM, kGeneral), + INSTRUCTION(0x7c00062c, "lhbrx" , kX , kM, kGeneral), + INSTRUCTION(0xa0000000, "lhz" , kD , kM, kGeneral), + INSTRUCTION(0xa4000000, "lhzu" , kD , kM, kGeneral), + INSTRUCTION(0x7c00026e, "lhzux" , kX , kM, kGeneral), + INSTRUCTION(0x7c00022e, "lhzx" , kX , kM, kGeneral), + INSTRUCTION(0xb8000000, "lmw" , kD , kM, kGeneral), + INSTRUCTION(0x7c0004aa, "lswi" , kX , kM, kGeneral), + INSTRUCTION(0x7c00042a, "lswx" , kX , kM, kGeneral), + INSTRUCTION(0x7c00000e, "lvebx" , kX , kM, kGeneral), + INSTRUCTION(0x7c00004e, "lvehx" , kX , kM, kGeneral), + INSTRUCTION(0x7c00008e, "lvewx" , kX , kM, kGeneral), + INSTRUCTION(0x10000083, "lvewx128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c00040e, "lvlx" , kX , kM, kGeneral), + INSTRUCTION(0x10000403, "lvlx128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c00060e, "lvlxl" , kX , kM, kGeneral), + INSTRUCTION(0x10000603, "lvlxl128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c00044e, "lvrx" , kX , kM, kGeneral), + INSTRUCTION(0x10000443, "lvrx128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c00064e, "lvrxl" , kX , kM, kGeneral), + INSTRUCTION(0x10000643, "lvrxl128" , kVX128_1, kM, kGeneral), INSTRUCTION(0x7c00000c, "lvsl" , kX , kV, kGeneral), INSTRUCTION(0x10000003, "lvsl128" , kVX128_1, kV, kGeneral), INSTRUCTION(0x7c00004c, "lvsr" , kX , kV, kGeneral), INSTRUCTION(0x10000043, "lvsr128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c0000ce, "lvx" , kX , kV, kGeneral), - INSTRUCTION(0x100000c3, "lvx128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c0002ce, "lvxl" , kX , kV, kGeneral), - INSTRUCTION(0x100002c3, "lvxl128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0xe8000002, "lwa" , kDS , kI, kGeneral), - INSTRUCTION(0x7c000028, "lwarx" , kX , kI, kGeneral), - INSTRUCTION(0x7c0002ea, "lwaux" , kX , kI, kGeneral), - INSTRUCTION(0x7c0002aa, "lwax" , kX , kI, kGeneral), - INSTRUCTION(0x7c00042c, "lwbrx" , kX , kI, kGeneral), - INSTRUCTION(0x80000000, "lwz" , kD , kI, kGeneral), - INSTRUCTION(0x84000000, "lwzu" , kD , kI, kGeneral), - INSTRUCTION(0x7c00006e, "lwzux" , kX , kI, kGeneral), - INSTRUCTION(0x7c00002e, "lwzx" , kX , kI, kGeneral), - INSTRUCTION(0x4c000000, "mcrf" , kXL , kI, kGeneral), - INSTRUCTION(0xfc000080, "mcrfs" , kX , kF, kGeneral), - INSTRUCTION(0x7c000400, "mcrxr" , kX , kI, kGeneral), - INSTRUCTION(0x7c000026, "mfcr" , kX , kI, kGeneral), - INSTRUCTION(0xfc00048e, "mffsx" , kX , kF, kGeneral), - INSTRUCTION(0x7c0000a6, "mfmsr" , kX , kI, kGeneral), - INSTRUCTION(0x7c0002a6, "mfspr" , kXFX , kI, kGeneral), - INSTRUCTION(0x7c0002e6, "mftb" , kXFX , kI, kGeneral), - INSTRUCTION(0x10000604, "mfvscr" , kVX , kV, kGeneral), - INSTRUCTION(0x7c000120, "mtcrf" , kXFX , kI, kGeneral), - INSTRUCTION(0xfc00008c, "mtfsb0x" , kX , kF, kGeneral), - INSTRUCTION(0xfc00004c, "mtfsb1x" , kX , kF, kGeneral), - INSTRUCTION(0xfc00010c, "mtfsfix" , kX , kF, kGeneral), - INSTRUCTION(0xfc00058e, "mtfsfx" , kXFL , kF, kGeneral), - INSTRUCTION(0x7c000124, "mtmsr" , kX , kI, kGeneral), - INSTRUCTION(0x7c000164, "mtmsrd" , kX , kI, kGeneral), - INSTRUCTION(0x7c0003a6, "mtspr" , kXFX , kI, kGeneral), - INSTRUCTION(0x10000644, "mtvscr" , kVX , kV, kGeneral), + INSTRUCTION(0x7c0000ce, "lvx" , kX , kM, kGeneral), + INSTRUCTION(0x100000c3, "lvx128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c0002ce, "lvxl" , kX , kM, kGeneral), + INSTRUCTION(0x100002c3, "lvxl128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0xe8000002, "lwa" , kDS , kM, kGeneral), + INSTRUCTION(0x7c000028, "lwarx" , kX , kM, kGeneral), + INSTRUCTION(0x7c0002ea, "lwaux" , kX , kM, kGeneral), + INSTRUCTION(0x7c0002aa, "lwax" , kX , kM, kGeneral), + INSTRUCTION(0x7c00042c, "lwbrx" , kX , kM, kGeneral), + INSTRUCTION(0x80000000, "lwz" , kD , kM, kGeneral), + INSTRUCTION(0x84000000, "lwzu" , kD , kM, kGeneral), + INSTRUCTION(0x7c00006e, "lwzux" , kX , kM, kGeneral), + INSTRUCTION(0x7c00002e, "lwzx" , kX , kM, kGeneral), + INSTRUCTION(0x4c000000, "mcrf" , kXL , kC, kGeneral), + INSTRUCTION(0xfc000080, "mcrfs" , kX , kC, kGeneral), + INSTRUCTION(0x7c000400, "mcrxr" , kX , kC, kGeneral), + INSTRUCTION(0x7c000026, "mfcr" , kX , kC, kGeneral), + INSTRUCTION(0xfc00048e, "mffsx" , kX , kC, kGeneral), + INSTRUCTION(0x7c0000a6, "mfmsr" , kX , kC, kGeneral), + INSTRUCTION(0x7c0002a6, "mfspr" , kXFX , kC, kGeneral), + INSTRUCTION(0x7c0002e6, "mftb" , kXFX , kC, kGeneral), + INSTRUCTION(0x10000604, "mfvscr" , kVX , kC, kGeneral), + INSTRUCTION(0x7c000120, "mtcrf" , kXFX , kC, kGeneral), + INSTRUCTION(0xfc00008c, "mtfsb0x" , kX , kC, kGeneral), + INSTRUCTION(0xfc00004c, "mtfsb1x" , kX , kC, kGeneral), + INSTRUCTION(0xfc00010c, "mtfsfix" , kX , kC, kGeneral), + INSTRUCTION(0xfc00058e, "mtfsfx" , kXFL , kC, kGeneral), + INSTRUCTION(0x7c000124, "mtmsr" , kX , kC, kGeneral), + INSTRUCTION(0x7c000164, "mtmsrd" , kX , kC, kGeneral), + INSTRUCTION(0x7c0003a6, "mtspr" , kXFX , kC, kGeneral), + INSTRUCTION(0x10000644, "mtvscr" , kVX , kC, kGeneral), INSTRUCTION(0x7c000012, "mulhdux" , kXO , kI, kGeneral), INSTRUCTION(0x7c000092, "mulhdx" , kXO , kI, kGeneral), INSTRUCTION(0x7c000016, "mulhwux" , kXO , kI, kGeneral), @@ -196,7 +195,7 @@ PPCOpcodeInfo ppc_opcode_table[] = { INSTRUCTION(0x50000000, "rlwimix" , kM , kI, kGeneral), INSTRUCTION(0x54000000, "rlwinmx" , kM , kI, kGeneral), INSTRUCTION(0x5c000000, "rlwnmx" , kM , kI, kGeneral), - INSTRUCTION(0x44000002, "sc" , kSC , kI, kSync ), + INSTRUCTION(0x44000002, "sc" , kSC , kB, kSync ), INSTRUCTION(0x7c000036, "sldx" , kX , kI, kGeneral), INSTRUCTION(0x7c000030, "slwx" , kX , kI, kGeneral), INSTRUCTION(0x7c000674, "sradix" , kXS , kI, kGeneral), @@ -205,55 +204,55 @@ PPCOpcodeInfo ppc_opcode_table[] = { INSTRUCTION(0x7c000630, "srawx" , kX , kI, kGeneral), INSTRUCTION(0x7c000436, "srdx" , kX , kI, kGeneral), INSTRUCTION(0x7c000430, "srwx" , kX , kI, kGeneral), - INSTRUCTION(0x98000000, "stb" , kD , kI, kGeneral), - INSTRUCTION(0x9c000000, "stbu" , kD , kI, kGeneral), - INSTRUCTION(0x7c0001ee, "stbux" , kX , kI, kGeneral), - INSTRUCTION(0x7c0001ae, "stbx" , kX , kI, kGeneral), - INSTRUCTION(0xf8000000, "std" , kDS , kI, kGeneral), - INSTRUCTION(0x7c000528, "stdbrx" , kX , kI, kGeneral), - INSTRUCTION(0x7c0001ad, "stdcx" , kX , kI, kGeneral), - INSTRUCTION(0xf8000001, "stdu" , kDS , kI, kGeneral), - INSTRUCTION(0x7c00016a, "stdux" , kX , kI, kGeneral), - INSTRUCTION(0x7c00012a, "stdx" , kX , kI, kGeneral), - INSTRUCTION(0xd8000000, "stfd" , kD , kF, kGeneral), - INSTRUCTION(0xdc000000, "stfdu" , kD , kF, kGeneral), - INSTRUCTION(0x7c0005ee, "stfdux" , kX , kF, kGeneral), - INSTRUCTION(0x7c0005ae, "stfdx" , kX , kF, kGeneral), - INSTRUCTION(0x7c0007ae, "stfiwx" , kX , kF, kGeneral), - INSTRUCTION(0xd0000000, "stfs" , kD , kF, kGeneral), - INSTRUCTION(0xd4000000, "stfsu" , kD , kF, kGeneral), - INSTRUCTION(0x7c00056e, "stfsux" , kX , kF, kGeneral), - INSTRUCTION(0x7c00052e, "stfsx" , kX , kF, kGeneral), - INSTRUCTION(0xb0000000, "sth" , kD , kI, kGeneral), - INSTRUCTION(0x7c00072c, "sthbrx" , kX , kI, kGeneral), - INSTRUCTION(0xb4000000, "sthu" , kD , kI, kGeneral), - INSTRUCTION(0x7c00036e, "sthux" , kX , kI, kGeneral), - INSTRUCTION(0x7c00032e, "sthx" , kX , kI, kGeneral), - INSTRUCTION(0xbc000000, "stmw" , kD , kI, kGeneral), - INSTRUCTION(0x7c0005aa, "stswi" , kX , kI, kGeneral), - INSTRUCTION(0x7c00052a, "stswx" , kX , kI, kGeneral), - INSTRUCTION(0x7c00010e, "stvebx" , kX , kV, kGeneral), - INSTRUCTION(0x7c00014e, "stvehx" , kX , kV, kGeneral), - INSTRUCTION(0x7c00018e, "stvewx" , kX , kV, kGeneral), - INSTRUCTION(0x10000183, "stvewx128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c00050e, "stvlx" , kX , kV, kGeneral), - INSTRUCTION(0x10000503, "stvlx128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c00070e, "stvlxl" , kX , kV, kGeneral), - INSTRUCTION(0x10000703, "stvlxl128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c00054e, "stvrx" , kX , kV, kGeneral), - INSTRUCTION(0x10000543, "stvrx128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c00074e, "stvrxl" , kX , kV, kGeneral), - INSTRUCTION(0x10000743, "stvrxl128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c0001ce, "stvx" , kX , kV, kGeneral), - INSTRUCTION(0x100001c3, "stvx128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x7c0003ce, "stvxl" , kX , kV, kGeneral), - INSTRUCTION(0x100003c3, "stvxl128" , kVX128_1, kV, kGeneral), - INSTRUCTION(0x90000000, "stw" , kD , kI, kGeneral), - INSTRUCTION(0x7c00052c, "stwbrx" , kX , kI, kGeneral), - INSTRUCTION(0x7c00012d, "stwcx" , kX , kI, kGeneral), - INSTRUCTION(0x94000000, "stwu" , kD , kI, kGeneral), - INSTRUCTION(0x7c00016e, "stwux" , kX , kI, kGeneral), - INSTRUCTION(0x7c00012e, "stwx" , kX , kI, kGeneral), + INSTRUCTION(0x98000000, "stb" , kD , kM, kGeneral), + INSTRUCTION(0x9c000000, "stbu" , kD , kM, kGeneral), + INSTRUCTION(0x7c0001ee, "stbux" , kX , kM, kGeneral), + INSTRUCTION(0x7c0001ae, "stbx" , kX , kM, kGeneral), + INSTRUCTION(0xf8000000, "std" , kDS , kM, kGeneral), + INSTRUCTION(0x7c000528, "stdbrx" , kX , kM, kGeneral), + INSTRUCTION(0x7c0001ad, "stdcx" , kX , kM, kGeneral), + INSTRUCTION(0xf8000001, "stdu" , kDS , kM, kGeneral), + INSTRUCTION(0x7c00016a, "stdux" , kX , kM, kGeneral), + INSTRUCTION(0x7c00012a, "stdx" , kX , kM, kGeneral), + INSTRUCTION(0xd8000000, "stfd" , kD , kM, kGeneral), + INSTRUCTION(0xdc000000, "stfdu" , kD , kM, kGeneral), + INSTRUCTION(0x7c0005ee, "stfdux" , kX , kM, kGeneral), + INSTRUCTION(0x7c0005ae, "stfdx" , kX , kM, kGeneral), + INSTRUCTION(0x7c0007ae, "stfiwx" , kX , kM, kGeneral), + INSTRUCTION(0xd0000000, "stfs" , kD , kM, kGeneral), + INSTRUCTION(0xd4000000, "stfsu" , kD , kM, kGeneral), + INSTRUCTION(0x7c00056e, "stfsux" , kX , kM, kGeneral), + INSTRUCTION(0x7c00052e, "stfsx" , kX , kM, kGeneral), + INSTRUCTION(0xb0000000, "sth" , kD , kM, kGeneral), + INSTRUCTION(0x7c00072c, "sthbrx" , kX , kM, kGeneral), + INSTRUCTION(0xb4000000, "sthu" , kD , kM, kGeneral), + INSTRUCTION(0x7c00036e, "sthux" , kX , kM, kGeneral), + INSTRUCTION(0x7c00032e, "sthx" , kX , kM, kGeneral), + INSTRUCTION(0xbc000000, "stmw" , kD , kM, kGeneral), + INSTRUCTION(0x7c0005aa, "stswi" , kX , kM, kGeneral), + INSTRUCTION(0x7c00052a, "stswx" , kX , kM, kGeneral), + INSTRUCTION(0x7c00010e, "stvebx" , kX , kM, kGeneral), + INSTRUCTION(0x7c00014e, "stvehx" , kX , kM, kGeneral), + INSTRUCTION(0x7c00018e, "stvewx" , kX , kM, kGeneral), + INSTRUCTION(0x10000183, "stvewx128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c00050e, "stvlx" , kX , kM, kGeneral), + INSTRUCTION(0x10000503, "stvlx128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c00070e, "stvlxl" , kX , kM, kGeneral), + INSTRUCTION(0x10000703, "stvlxl128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c00054e, "stvrx" , kX , kM, kGeneral), + INSTRUCTION(0x10000543, "stvrx128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c00074e, "stvrxl" , kX , kM, kGeneral), + INSTRUCTION(0x10000743, "stvrxl128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c0001ce, "stvx" , kX , kM, kGeneral), + INSTRUCTION(0x100001c3, "stvx128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x7c0003ce, "stvxl" , kX , kM, kGeneral), + INSTRUCTION(0x100003c3, "stvxl128" , kVX128_1, kM, kGeneral), + INSTRUCTION(0x90000000, "stw" , kD , kM, kGeneral), + INSTRUCTION(0x7c00052c, "stwbrx" , kX , kM, kGeneral), + INSTRUCTION(0x7c00012d, "stwcx" , kX , kM, kGeneral), + INSTRUCTION(0x94000000, "stwu" , kD , kM, kGeneral), + INSTRUCTION(0x7c00016e, "stwux" , kX , kM, kGeneral), + INSTRUCTION(0x7c00012e, "stwx" , kX , kM, kGeneral), INSTRUCTION(0x7c000010, "subfcx" , kXO , kI, kGeneral), INSTRUCTION(0x7c000110, "subfex" , kXO , kI, kGeneral), INSTRUCTION(0x20000000, "subficx" , kD , kI, kGeneral), @@ -261,10 +260,10 @@ PPCOpcodeInfo ppc_opcode_table[] = { INSTRUCTION(0x7c000050, "subfx" , kXO , kI, kGeneral), INSTRUCTION(0x7c000190, "subfzex" , kXO , kI, kGeneral), INSTRUCTION(0x7c0004ac, "sync" , kX , kI, kGeneral), - INSTRUCTION(0x7c000088, "td" , kX , kI, kGeneral), - INSTRUCTION(0x08000000, "tdi" , kD , kI, kGeneral), - INSTRUCTION(0x7c000008, "tw" , kX , kI, kGeneral), - INSTRUCTION(0x0c000000, "twi" , kD , kI, kGeneral), + INSTRUCTION(0x7c000088, "td" , kX , kB, kGeneral), + INSTRUCTION(0x08000000, "tdi" , kD , kB, kGeneral), + INSTRUCTION(0x7c000008, "tw" , kX , kB, kGeneral), + INSTRUCTION(0x0c000000, "twi" , kD , kB, kGeneral), INSTRUCTION(0x10000180, "vaddcuw" , kVX , kV, kGeneral), INSTRUCTION(0x1000000a, "vaddfp" , kVX , kV, kGeneral), INSTRUCTION(0x14000010, "vaddfp128" , kVX128 , kV, kGeneral), diff --git a/tools/ppc-instructions.xml b/tools/ppc-instructions.xml index 059a0c829..d43de7519 100644 --- a/tools/ppc-instructions.xml +++ b/tools/ppc-instructions.xml @@ -14,6 +14,7 @@ + addc[OE][Rc] [RD], [RA], [RB] @@ -21,7 +22,7 @@ - + @@ -100,14 +101,14 @@ andis. [RA], [RS], [UIMM] - + b[LK][AA] [ADDR] - + @@ -119,7 +120,7 @@ bc[LK][AA] [BO], [BI], [ADDR] - + @@ -128,7 +129,7 @@ bcctr[LK] [BO], [BI] - + @@ -171,7 +172,8 @@ - cntlzd[Rc] [RA], [RS] + + cntlzd [RA], [RS] @@ -179,59 +181,54 @@ cntlzw[Rc] [RA], [RS] - + crand [CRBD], [CRBA], [CRBB] - + crandc [CRBD], [CRBA], [CRBB] - + creqv [CRBD], [CRBA], [CRBB] - + crnand [CRBD], [CRBA], [CRBB] - + crnor [CRBD], [CRBA], [CRBB] - + cror [CRBD], [CRBA], [CRBB] - + crorc [CRBD], [CRBA], [CRBB] - + crxor [CRBD], [CRBA], [CRBB] - - - - dcba [RA0], [RB] - @@ -257,12 +254,12 @@ dcbtst [RA0], [RB] - + dcbz [RA0], [RB] - + dcbz128 [RA0], [RB] @@ -587,328 +584,328 @@ isync - + lbz [RD], [d]([RA0]) - + lbzu [RD], [d]([RA]) - + lbzux [RD], [RA], [RB] - + lbzx [RD], [RA0], [RB] - + ld [RD], [ds]([RA0]) - + ldarx [RD], [RA0], [RB] - + ldbrx [RD], [RA0], [RB] - + ldu [RD], [ds]([RA]) - + ldux [RD], [RA], [RB] - + ldx [RD], [RA0], [RB] - + lfd [FD], [d]([RA0]) - + lfdu [FD], [d]([RA]) - + lfdux [FD], [RA], [RB] - + lfdx [FD], [RA0], [RB] - + lfs [FD], [d]([RA0]) - + lfsu [FD], [d]([RA]) - + lfsux [FD], [RA], [RB] - + lfsx [FD], [RA0], [RB] - + lha [RD], [d]([RA0]) - + lhau [RD], [d]([RA]) - + lhaux [RD], [RA], [RB] - + lhax [RD], [RA0], [RB] - + lhbrx [RD], [RA0], [RB] - + lhz [RD], [d]([RA0]) - + lhzu [RD], [d]([RA]) - + lhzux [RD], [RA], [RB] - + lhzx [RD], [RA0], [RB] - + - + - + - + lwa [RD], [ds]([RA0]) - + lwarx [RD], [RA0], [RB] - + lwaux [RD], [RA], [RB] - + lwax [RD], [RA0], [RB] - + lwbrx [RD], [RA0], [RB] - + lwz [RD], [d]([RA0]) - + lwzu [RD], [d]([RA]) - + lwzux [RD], [RA], [RB] - + lwzx [RD], [RA0], [RB] - + mcrf [CRFD], [CRFS] - + mcrfs [CRFD], [CRFS] - + mcrxr [CRFD] - + mfcr [RD] - + mffs[Rc] [RD] - + mfmsr [RD] - + mfspr [RD], [SPR] - + mftb [RD], [TBR] - + mtcrf [CRM], [RS] - + mtfsb0[Rc] [FPSCRD] - + mtfsb1[Rc] [FPSCRD] - + mtfsf[Rc] [FM], [FB] - + mtfsfi[Rc] [CRFD], [IMM] - + mtmsr [RS] - + mtmsrd [RS] - + mtmspr [SPR], [RS] @@ -1085,7 +1082,7 @@ rlwnm[Rc] [RA], [RS], [RB], [MB], [ME] - + sc @@ -1148,204 +1145,204 @@ srw[Rc] [RA], [RS], [RB] - + stb [RS], [d]([RA0]) - + stbu [RS], [d]([RA]) - + stbux [RS], [RA], [RB] - + stbx [RS], [RA0], [RB] - + std [RS], [ds]([RA0]) - + stdbrx [RS], [RA0], [RB] - + stdcx. [RS], [RA0], [RB] - + stdu [RS], [ds]([RA]) - + stdux [RS], [RA], [RB] - + stdx [RS], [RA0], [RB] - + stfd [FS], [d]([RA0]) - + stfdu [FS], [d]([RA]) - + stfdux [FS], [RA], [RB] - + stfdx [FS], [RA0], [RB] - + stfiwx [FS], [RA0], [RB] - + stfs [FS], [d]([RA0]) - + stfsu [FS], [d]([RA]) - + stfsux [FS], [RA], [RB] - + stfsx [FS], [RA], [RB] - + sth [RS], [d]([RA0]) - + sthbrx [RS], [RA0], [RB] - + sthu [RS], [d]([RA]) - + sthux [RS], [RA], [RB] - + sthx [RS], [RA0], [RB] - + - + - + - + stw [RS], [d]([RA0]) - + stwbrx [RS], [RA0], [RB] - + stwcx. [RS], [RA0], [RB] - + stwu [RS], [d]([RA]) - + stwux [RS], [RA], [RB] - + @@ -1403,25 +1400,25 @@ sync - + td [TO], [RA], [RB] - + tdi [TO], [RA], [SIMM] - + tw [TO], [RA], [RB] - + @@ -1449,25 +1446,25 @@ - + lvebx [VD], [RA0], [RB] - + lvehx [VD], [RA0], [RB] - + lvewx [VD], [RA0], [RB] - + @@ -1497,177 +1494,177 @@ lvsr128 [VD], [RA0], [RB] - + lvx [VD], [RA0], [RB] - + lvx128 [VD], [RA0], [RB] - + lvslx [VD], [RA0], [RB] - + lvxl128 [VD], [RA0], [RB] - + lvlx [VD], [RA0], [RB] - + lvlx128 [VD], [RA0], [RB] - + lvlxl [VD], [RA0], [RB] - + lvlxl128 [VD], [RA0], [RB] - + lvrx [VD], [RA0], [RB] - + lvrx128 [VD], [RA0], [RB] - + lvrxl [VD], [RA0], [RB] - + lvrxl128 [VD], [RA0], [RB] - + - + - + stvebx [VS], [RA0], [RB] - + stvehx [VS], [RA0], [RB] - + stvewx [VS], [RA0], [RB] - + stvewx128 [VS], [RA0], [RB] - + stvx [VS], [RA0], [RB] - + stvx128 [VS], [RA0], [RB] - + stvxl [VS], [RA0], [RB] - + stvxl128 [VS], [RA0], [RB] - + stvlx [VS], [RA0], [RB] - + stvlx128 [VS], [RA0], [RB] - + stvlxl [VS], [RA0], [RB] - + stvlxl128 [VS], [RA0], [RB] - + stvrx [VS], [RA0], [RB] - + stvrx128 [VS], [RA0], [RB] - + stvrxl [VS], [RA0], [RB] - + diff --git a/tools/ppc-table-gen.py b/tools/ppc-table-gen.py index 7eaf944f4..db0278697 100644 --- a/tools/ppc-table-gen.py +++ b/tools/ppc-table-gen.py @@ -20,10 +20,6 @@ from xml.etree.ElementTree import ElementTree, Element, SubElement, tostring, du self_path = os.path.dirname(os.path.abspath(__file__)) -class Insn: - pass - - def bit_extract(x, leftmost, rightmost): return (x >> (32 - 1 - rightmost)) & ((1 << (rightmost - leftmost + 1)) - 1) @@ -74,6 +70,10 @@ def opcode_extended(insn, form): return -1 +class Insn: + pass + + def parse_insns(filename): root = ElementTree(file = filename) insns = []