From 7b1511943e76cdef96b9c7e7ede4989805965d52 Mon Sep 17 00:00:00 2001 From: Benjamin Welton Date: Thu, 20 Sep 2018 14:54:53 -0500 Subject: [PATCH 01/16] Template for adding instructions --- common/h/entryIDs.h | 1 + instructionAPI/src/power_opcode_tables.C | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index af499dd189..78e1f6520f 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1653,6 +1653,7 @@ enum entryID { power_op_popcntw, power_op_popcntd, power_op_wait, + power_op_lxsdx, // *********** // Steve note: diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index 772f60a720..dd290e8e31 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -437,6 +437,10 @@ extended_op_31[566] = power_entry(power_op_tlbsync, "tlbsync", NULL, operandSpec extended_op_31[567] = power_entry(power_op_lfsux, "lfsux", NULL, list_of(fn(FRT))(fn(LUX))); extended_op_31[582] = power_entry(power_op_qvlpcldx, "qvlpcldx", NULL, list_of(fn(QFRTP))(fn(LX))); extended_op_31[583] = power_entry(power_op_qvlfdx, "qvlfdx", NULL, list_of(fn(QFRTP))(fn(LX))); + +// fn(STU) = RA+DS +extended_op_31[588] = power_entry(power_op_lxsdx, "lxsdx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); + extended_op_31[595] = power_entry(power_op_mfsr, "mfsr", NULL, list_of(fn(RT))(fn(SR))); extended_op_31[597] = power_entry(power_op_lswi, "lswi", NULL, list_of(fn(RT))(fn(L))(fn(NB))); extended_op_31[598] = power_entry(power_op_sync, "sync", NULL, operandSpec()); From 1707147ae4e3f6f78aa0eba5952bf45fbbd7793a Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Thu, 20 Sep 2018 16:31:31 -0500 Subject: [PATCH 02/16] added power operations, stopped on pg491 of the manual page, lxvll --- common/h/entryIDs.h | 16 +++++++++++++++- instructionAPI/src/power_opcode_tables.C | 22 ++++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 78e1f6520f..9799b5dd17 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1653,7 +1653,21 @@ enum entryID { power_op_popcntw, power_op_popcntd, power_op_wait, - power_op_lxsdx, + + power_op_lxsd, + power_op_lxsdx, + power_op_lxsibzx, + power_op_lxsihzx, + power_op_lxsiwax, + power_op_lxsiwzx, + power_op_lxssp, + power_op_lxsspx, + power_op_lxvb16x, + power_op_lxvd2x, + power_op_lxvl, + power_op_lxvll, + power_op_lxv, + // *********** // Steve note: diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index dd290e8e31..df1acc9efc 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -103,8 +103,12 @@ void power_entry::buildTables() main_opcode_table.push_back(power_entry(power_op_stfd, "stfd", NULL, list_of(fn(FRS))(fn(ST)))); main_opcode_table.push_back(power_entry(power_op_stfdu, "stfdu", NULL, list_of(fn(FRS))(fn(STU)))); main_opcode_table.push_back(power_entry(power_op_lfq, "lfq", NULL, list_of(fn(FRT2))(fn(L)))); - main_opcode_table.push_back(power_entry(power_op_lfqu, "lfqu", NULL, list_of(fn(FRT2))(fn(LU)))); - main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_58), operandSpec())); + //opcode57: removed + //main_opcode_table.push_back(power_entry(power_op_lfqu, "lfqu", NULL, list_of(fn(FRT2))(fn(LU))));i + //new opcode 57 has extended opcode + main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_57), operandSpec())); + + main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_58), operandSpec())); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_59), operandSpec())); main_opcode_table.push_back(power_entry(power_op_stfq, "stfq", NULL, list_of(fn(FRS2))(fn(ST)))); main_opcode_table.push_back(power_entry(power_op_stfqu, "stfqu", NULL, list_of(fn(FRS2))(fn(STU)))); @@ -305,6 +309,7 @@ extended_op_31[8] = power_entry(power_op_subfc, "subfc", NULL, list_of(fn(RT))(f extended_op_31[9] = power_entry(power_op_mulhdu, "mulhdu", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[10] = power_entry(power_op_addc, "addc", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[11] = power_entry(power_op_mulhwu, "mulhwu", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[12] = power_entry(power_op_lxsiwzx, "lxsiwzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[19] = power_entry(power_op_mfcr, "mfcr", NULL, list_of(fn(RT))(fn(Rc))); extended_op_31[20] = power_entry(power_op_lwarx, "lwarx", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[21] = power_entry(power_op_ldx, "ldx", NULL, list_of(fn(RT))(fn(LX))); @@ -328,6 +333,7 @@ extended_op_31[70] = power_entry(power_op_qvlpcrdx, "qvlpcrdx", NULL, list_of(fn extended_op_31[71] = power_entry(power_op_qvlfcdx, "qvlfcdx", NULL, list_of(fn(QFRTP))(fn(LX))); extended_op_31[73] = power_entry(power_op_mulhd, "mulhd", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[75] = power_entry(power_op_mulhw, "mulhw", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[78] = power_entry(power_op_lxsiwax, "lxsiwax", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[83] = power_entry(power_op_mfmsr, "mfmsr", NULL, list_of(fn(RT))); extended_op_31[84] = power_entry(power_op_ldarx, "ldarx", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[86] = power_entry(power_op_dcbf, "dcbf", NULL, list_of(fn(RA))(fn(RB))); @@ -376,11 +382,13 @@ extended_op_31[247] = power_entry(power_op_stbux, "stbux", NULL, list_of(fn(RS)) extended_op_31[248] = power_entry(power_op_slliq, "slliq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); extended_op_31[264] = power_entry(power_op_doz, "doz", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[266] = power_entry(power_op_add, "add", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); +extended_op_31[269] = power_entry(power_op_lxvl, "lxvl", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[270] = power_entry(power_op_lfxsx, "lfxsx", NULL, list_of(fn(FRTP))(fn(LX))); extended_op_31[277] = power_entry(power_op_lscbx, "lscbx", NULL, list_of(fn(RT))(fn(LX))(fn(Rc))); extended_op_31[278] = power_entry(power_op_dcbt, "dcbt", NULL, list_of(fn(RA))(fn(RB))); extended_op_31[279] = power_entry(power_op_lhzx, "lhzx", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[284] = power_entry(power_op_eqv, "eqv", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[301] = power_entry(power_op_lxvll, "lxvll", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[302] = power_entry(power_op_lfxsux, "lfxsux", NULL, list_of(fn(FRTP))(fn(LUX))); extended_op_31[306] = power_entry(power_op_tlbie, "tlbie", NULL, list_of(fn(RB))); extended_op_31[310] = power_entry(power_op_eciwx, "eciwx", NULL, list_of(fn(RT))(fn(RA))(fn(RB))); @@ -423,6 +431,7 @@ extended_op_31[506] = power_entry(power_op_popcntd, "popcntd", NULL, list_of(fn( extended_op_31[512] = power_entry(power_op_mcrxr, "mcrxr", NULL, list_of(fn(BF))); extended_op_31[518] = power_entry(power_op_qvlpclsx, "qvlpclsx", NULL, list_of(fn(QFRTP))(fn(LX))); extended_op_31[519] = power_entry(power_op_qvlfsx, "qvlfsx", NULL, list_of(fn(QFRTP))(fn(LX))); +extended_op_31[524] = power_entry(power_op_lxsspx, "lxsspx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[526] = power_entry(power_op_stfpiwx, "stfpiwx", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[531] = power_entry(power_op_clcs, "clcs", NULL, list_of(fn(RT))(fn(RA))(fn(Rc))); extended_op_31[533] = power_entry(power_op_lswx, "lswx", NULL, list_of(fn(RT))(fn(LX))); @@ -474,19 +483,23 @@ extended_op_31[743] = power_entry(power_op_qvlstdux, "qvstfdux", NULL, list_of(f extended_op_31[750] = power_entry(power_op_stfsdux, "stfsdux", NULL, list_of(fn(FRSS))(fn(STUX))); extended_op_31[759] = power_entry(power_op_stfdux, "stfdux", NULL, list_of(fn(FRS))(fn(STUX))); extended_op_31[760] = power_entry(power_op_srliq, "srliq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); +extended_op_31[781] = power_entry(power_op_lxsibzx, "lxsibzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[782] = power_entry(power_op_stfxsx, "stfxsx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[790] = power_entry(power_op_lhbrx, "lhbrx", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[791] = power_entry(power_op_lfqx, "lfqx", NULL, list_of(fn(FRT))(fn(LX))(fn(Rc))); extended_op_31[792] = power_entry(power_op_sraw, "sraw", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[794] = power_entry(power_op_srad, "srad", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[813] = power_entry(power_op_lxsihzx, "lxsihzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[814] = power_entry(power_op_stfxsux, "stfxsux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[818] = power_entry(power_op_rac, "rac", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[823] = power_entry(power_op_lfqux, "lfqux", NULL, list_of(fn(FRT))(fn(LUX))(fn(Rc))); extended_op_31[824] = power_entry(power_op_srawi, "srawi", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); extended_op_31[839] = power_entry(power_op_qvlfiwzx, "qvlfiwzx", NULL, list_of(fn(QFRTP))(fn(LX))); +extended_op_31[844] = power_entry(power_op_lxvd2x, "lxvd2x", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[846] = power_entry(power_op_stfxdx, "stfxdx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[854] = power_entry(power_op_eieio, "eieio", NULL, operandSpec()); extended_op_31[871] = power_entry(power_op_qvlfiwax, "qvlfiwax", NULL, list_of(fn(QFRTP))(fn(LX))); +extended_op_31[876] = power_entry(power_op_lxvb16x, "lxvb16x", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[878] = power_entry(power_op_stfxdux, "stfxdux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[910] = power_entry(power_op_stfpsx, "stfpsx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[918] = power_entry(power_op_sthbrx, "sthbrx", NULL, list_of(fn(RS))(fn(STX))); @@ -508,6 +521,11 @@ extended_op_31[1006] = power_entry(power_op_stfpdux, "stfpdux", NULL, list_of(fn extended_op_31[1010] = power_entry(power_op_tlbli, "tlbli", NULL, list_of(fn(RB))); extended_op_31[1014] = power_entry(power_op_dcbz, "dcbz", NULL, list_of(fn(RA))(fn(RB))); +//new extended opcode added by Yuhan +extended_op_57[2] = power_entry(power_op_lxsd, "lxsd", NULL, list_of(fn(VRT))(fn(STU))); +extended_op_57[3] = power_entry(power_op_lxssp, "lxssp", NULL, list_of(fn(VRT))(fn(STU))); + + extended_op_58[0] = power_entry(power_op_ld, "ld", NULL, list_of(fn(RT))(fn(L))); extended_op_58[1] = power_entry(power_op_ldu, "ldu", NULL, list_of(fn(RT))(fn(LU))); extended_op_58[2] = power_entry(power_op_lwa, "lwa", NULL, list_of(fn(RT))(fn(L))); From 1d4fc85ec0ff17ab3d14941253a9f114c7731439 Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Tue, 25 Sep 2018 14:56:35 -0500 Subject: [PATCH 03/16] P492-523 --- common/h/entryIDs.h | 44 +++++++++++++++++++++++- instructionAPI/src/power_opcode_tables.C | 36 +++++++++++++++++-- 2 files changed, 76 insertions(+), 4 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 9799b5dd17..54c5e9bbda 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1666,7 +1666,49 @@ enum entryID { power_op_lxvd2x, power_op_lxvl, power_op_lxvll, - power_op_lxv, + //--skipped: lxv (new keyword DQ; TX not at the last bit), + //-- lxvx (a slash in the memory map) + //power_op_lxv, + //power_op_lxvx, + power_op_lxvdsx, + power_op_lxvh8x, + power_op_lxvw4x, + power_op_lxvwsx, + //--skipped: stxsd (new keyword VRS, stands for VSR[VSR+32].dword[0]) + //power_op_stxsd, + //included new keywords "XS", it should be the storing version of "XT") + power_op_stxsdx, + power_op_stxsibx, + power_op_stxsihx, + power_op_stxsiwx, + //--skipped: stxssp (VRS) + //power_op_stxssp + power_op_stxsspx, + power_op_stvb16x, + power_op_stxvd2x, + power_op_stxvh8x, + power_op_stxvw4x, + //--skipped: stxv (DQ(RA)) + //power_op_stxv, + power_op_stxvl, + power_op_stxvll, + power_op_stxvx, + //included XA, XB (page 512 of manual, using the same pattern as RA, RB but XA and XB are for VSR, and there are AX & BX bits at the end of the instruction) + //ignored the slashes in it + power_op_xsabsdp, + + //--skipped xsabsqp (0 in it) + //power_op_xsabsqp + + power_op_xsadddp, + power_op_xsaddsp, + //included VRA, VRB (page 520 of manual) + //--xsaddqp and xsaddqpo are sharing the same opcode, treated it as frsp and frsp.(page 520 of manual) + power_op_xsaddqp, + power_op_xscmpexpdp, + power_op_xscmpexpqp, + + // *********** diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index df1acc9efc..dcb36bf825 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -110,7 +110,9 @@ void power_entry::buildTables() main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_58), operandSpec())); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_59), operandSpec())); - main_opcode_table.push_back(power_entry(power_op_stfq, "stfq", NULL, list_of(fn(FRS2))(fn(ST)))); + //opcode60 revised, previous: "stfq" + + main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_60), operandSpec())); main_opcode_table.push_back(power_entry(power_op_stfqu, "stfqu", NULL, list_of(fn(FRS2))(fn(STU)))); main_opcode_table.push_back(power_entry(power_op_stdu, "stdu", NULL, list_of(fn(RS))(fn(STU)))); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_63), operandSpec())); @@ -349,6 +351,7 @@ extended_op_31[133] = power_entry(power_op_qvstfcsxi, "qvstfcsxi", NULL, list_o extended_op_31[135] = power_entry(power_op_qvstfcsx, "qvstfcsx", NULL, list_of(fn(QFRSP))(fn(STX))); extended_op_31[136] = power_entry(power_op_subfe, "subfe", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[138] = power_entry(power_op_adde, "adde", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); +extended_op_31[140] = power_entry(power_op_stxsiwx, "stxsiwx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[142] = power_entry(power_op_lfssx, "lfssx", NULL, list_of(fn(FRTS))(fn(LX))); extended_op_31[144] = power_entry(power_op_mtcrf, "mtcrf", NULL, list_of(fn(RS))(fn(FXM))(fn(Rc))); extended_op_31[149] = power_entry(power_op_stdx, "stdx", NULL, list_of(fn(RS))(fn(STX))); @@ -394,12 +397,14 @@ extended_op_31[306] = power_entry(power_op_tlbie, "tlbie", NULL, list_of(fn(RB)) extended_op_31[310] = power_entry(power_op_eciwx, "eciwx", NULL, list_of(fn(RT))(fn(RA))(fn(RB))); extended_op_31[316] = power_entry(power_op_xor, "xor", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[311] = power_entry(power_op_lhzux, "lhzux", NULL, list_of(fn(RT))(fn(LUX))); +extended_op_31[332] = power_entry(power_op_lxvdsx, "lxvdsx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[334] = power_entry(power_op_lfxdx, "lfxdx", NULL, list_of(fn(FRTP))(fn(LX))); extended_op_31[339] = power_entry(power_op_mfspr, "mfspr", NULL, list_of(fn(RT))(fn(spr))(fn(Rc))); extended_op_31[341] = power_entry(power_op_lwax, "lwax", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[343] = power_entry(power_op_lhax, "lhax", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[360] = power_entry(power_op_abs, "abs", NULL, list_of(fn(RT))(fn(RA))(fn(OE))(fn(Rc))); extended_op_31[363] = power_entry(power_op_divs, "divs", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[364] = power_entry(power_op_lxvwsx, "lxvwsx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[366] = power_entry(power_op_lfxdux, "lfxdux", NULL, list_of(fn(FRTP))(fn(LUX))); // xop 371 is mftb (Move from time base). It is phased-out and equivalent to mfspr Rx, 268 @@ -407,11 +412,13 @@ extended_op_31[371] = power_entry(power_op_mfspr, "mfspr", NULL, list_of(fn(RT)) extended_op_31[373] = power_entry(power_op_lwaux, "lwaux", NULL, list_of(fn(RT))(fn(LUX))); extended_op_31[375] = power_entry(power_op_lhaux, "lhaux", NULL, list_of(fn(RT))(fn(LUX))); extended_op_31[378] = power_entry(power_op_popcntw, "popcntw", NULL, list_of(fn(RS))(fn(RA))); - +extended_op_31[396] = power_entry(power_op_stxvx, "stxvx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); +extended_op_31[397] = power_entry(power_op_stxvl, "stxvl", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[398] = power_entry(power_op_lfpsx, "lfpsx", NULL, list_of(fn(FRTP))(fn(LX))); extended_op_31[407] = power_entry(power_op_sthx, "sthx", NULL, list_of(fn(RS))(fn(STX))); extended_op_31[412] = power_entry(power_op_orc, "orc", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[413] = power_entry(power_op_sradi, "sradi", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); +extended_op_31[429] = power_entry(power_op_stxvll, "stxvll", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[430] = power_entry(power_op_lfpsux, "lfpsux", NULL, list_of(fn(FRTP))(fn(LUX))); extended_op_31[438] = power_entry(power_op_ecowx, "ecowx", NULL, list_of(fn(RS))(fn(RA))(fn(RB))); extended_op_31[439] = power_entry(power_op_sthux, "sthux", NULL, list_of(fn(RS))(fn(STUX))); @@ -460,6 +467,7 @@ extended_op_31[630] = power_entry(power_op_dclst, "dclst", NULL, list_of(fn(RA)) extended_op_31[631] = power_entry(power_op_lfdux, "lfdux", NULL, list_of(fn(FRT))(fn(LUX))); extended_op_31[645] = power_entry(power_op_qvstfsxi, "qvstfsxi", NULL, list_of(fn(QFRSP))(fn(STX))); extended_op_31[647] = power_entry(power_op_qvstfsx, "qvstfsx", NULL, list_of(fn(QFRSP))(fn(STX))); +extended_op_31[652] = power_entry(power_op_stxsspx, "stxsspx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[654] = power_entry(power_op_stfssx, "stfssx", NULL, list_of(fn(FRSS))(fn(STX))); extended_op_31[659] = power_entry(power_op_mfsrin, "mfsrin", NULL, list_of(fn(RT))(fn(RB))); extended_op_31[661] = power_entry(power_op_stswx, "stswx", NULL, list_of(fn(RS))(fn(STX))); @@ -473,6 +481,7 @@ extended_op_31[695] = power_entry(power_op_stfsux, "stfsux", NULL, list_of(fn(FR extended_op_31[696] = power_entry(power_op_sriq, "sriq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); extended_op_31[709] = power_entry(power_op_qvstfdxi, "qvstfdxi", NULL, list_of(fn(QFRSP))(fn(STX))); extended_op_31[711] = power_entry(power_op_qvstfdx, "qvstfdx", NULL, list_of(fn(QFRSP))(fn(STX))); +extended_op_31[716] = power_entry(power_op_stxsdx, "stxsdx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[718] = power_entry(power_op_stfsdx, "stfsdx", NULL, list_of(fn(FRSS))(fn(STX))); extended_op_31[725] = power_entry(power_op_stswi, "stswi", NULL, list_of(fn(RS))(fn(ST))(fn(NB))); extended_op_31[727] = power_entry(power_op_stfdx, "stfdx", NULL, list_of(fn(FRS))(fn(STX))); @@ -483,12 +492,15 @@ extended_op_31[743] = power_entry(power_op_qvlstdux, "qvstfdux", NULL, list_of(f extended_op_31[750] = power_entry(power_op_stfsdux, "stfsdux", NULL, list_of(fn(FRSS))(fn(STUX))); extended_op_31[759] = power_entry(power_op_stfdux, "stfdux", NULL, list_of(fn(FRS))(fn(STUX))); extended_op_31[760] = power_entry(power_op_srliq, "srliq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); +extended_op_31[780] = power_entry(power_op_lxvw4x, "lxvw4x", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[781] = power_entry(power_op_lxsibzx, "lxsibzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[782] = power_entry(power_op_stfxsx, "stfxsx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[790] = power_entry(power_op_lhbrx, "lhbrx", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[791] = power_entry(power_op_lfqx, "lfqx", NULL, list_of(fn(FRT))(fn(LX))(fn(Rc))); extended_op_31[792] = power_entry(power_op_sraw, "sraw", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[794] = power_entry(power_op_srad, "srad", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[812] = power_entry(power_op_lxvh8x, "lxvh8x", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); +extended_op_31[813] = power_entry(power_op_lxsihzx, "lxsihzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[813] = power_entry(power_op_lxsihzx, "lxsihzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[814] = power_entry(power_op_stfxsux, "stfxsux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[818] = power_entry(power_op_rac, "rac", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); @@ -501,22 +513,28 @@ extended_op_31[854] = power_entry(power_op_eieio, "eieio", NULL, operandSpec()); extended_op_31[871] = power_entry(power_op_qvlfiwax, "qvlfiwax", NULL, list_of(fn(QFRTP))(fn(LX))); extended_op_31[876] = power_entry(power_op_lxvb16x, "lxvb16x", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[878] = power_entry(power_op_stfxdux, "stfxdux", NULL, list_of(fn(FRSP))(fn(STUX))); +extended_op_31[908] = power_entry(power_op_stxvw4x, "stxvw4x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); +extended_op_31[909] = power_entry(power_op_stxsibx, "stxsibx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[910] = power_entry(power_op_stfpsx, "stfpsx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[918] = power_entry(power_op_sthbrx, "sthbrx", NULL, list_of(fn(RS))(fn(STX))); extended_op_31[919] = power_entry(power_op_stfqx, "stfqx", NULL, list_of(fn(FRS))(fn(STX))(fn(Rc))); extended_op_31[920] = power_entry(power_op_sraq, "sraq", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[921] = power_entry(power_op_srea, "srea", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[922] = power_entry(power_op_extsh, "extsh", NULL, list_of(fn(RS))(fn(RA))(fn(OE))(fn(Rc))); +extended_op_31[940] = power_entry(power_op_stxvh8x, "stxvh8x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); +extended_op_31[941] = power_entry(power_op_stxsihx, "stxsihx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[942] = power_entry(power_op_stfpsux, "stfpsux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[951] = power_entry(power_op_stfqux, "stfqux", NULL, list_of(fn(FRS))(fn(STUX))(fn(Rc))); extended_op_31[952] = power_entry(power_op_sraiq, "sraiq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); extended_op_31[954] = power_entry(power_op_extsb, "extsb", NULL, list_of(fn(RS))(fn(RA))(fn(Rc))); extended_op_31[967] = power_entry(power_op_qvstfiwx, "qvstfiwx", NULL, list_of(fn(QFRSP))(fn(STX))); +extended_op_31[972] = power_entry(power_op_stxsibx, "stxvd2x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[974] = power_entry(power_op_stfpdx, "stfpdx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[978] = power_entry(power_op_tlbld, "tlbld", NULL, list_of(fn(RB))); extended_op_31[982] = power_entry(power_op_icbi, "icbi", NULL, list_of(fn(RA))(fn(RB))); extended_op_31[983] = power_entry(power_op_stfiwx, "stfiwx", NULL, list_of(fn(FRS))(fn(STX))); extended_op_31[986] = power_entry(power_op_extsw, "extsw", NULL, list_of(fn(RS))(fn(RA))(fn(Rc))); +extended_op_31[1004] = power_entry(power_op_stxvb16x, "stxvb16x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[1006] = power_entry(power_op_stfpdux, "stfpdux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[1010] = power_entry(power_op_tlbli, "tlbli", NULL, list_of(fn(RB))); extended_op_31[1014] = power_entry(power_op_dcbz, "dcbz", NULL, list_of(fn(RA))(fn(RB))); @@ -545,7 +563,18 @@ list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); extended_op_59[31] = power_entry(power_op_fnmadds, "fnmadds", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); - extended_op_63[0] = power_entry(power_op_fcmpu, "fcmpu", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); + extended_op_60[0] = power_entry(power_op_xsaddsp, "xsaddsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[32] = power_entry(power_op_xsadddp, "xsadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[59] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[345] = power_entry(power_op_xsabsdp, "xsabsdp", NULL, list_of(fn(XT))(fn(XB))); + + + + extended_op_63[0] = power_entry(power_op_fcmpu, "fcmpu", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); + +//two instructions: xsaddqp and xsaddqpp sharing the same opcode, RO is used for rounding +extended_op_63[12] = power_entry(power_op_xsaddqp, "xsaddqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); + extended_op_63[12] = power_entry(power_op_frsp, "frsp", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[14] = power_entry(power_op_fctiw, "fctiw", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[15] = power_entry(power_op_fctiwz, "fctiwz", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); @@ -572,6 +601,7 @@ extended_op_63[70] = power_entry(power_op_mtfsb0, "mtfsb0", NULL, list_of(fn(BT) extended_op_63[72] = power_entry(power_op_fmr, "fmr", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[134] = power_entry(power_op_mtfsfi, "mtfsfi", NULL, list_of(fn(BF))(fn(U))(fn(Rc))); extended_op_63[136] = power_entry(power_op_fnabs, "fnabs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))); +extended_op_63[164] = power_entry(power_op_xscmpexpqp, "xscmpexpqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); extended_op_63[264] = power_entry(power_op_fabs, "fabs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[583] = power_entry(power_op_mffs, "mffs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(Rc))); extended_op_63[711] = power_entry(power_op_mtfsf, "mtfsf", NULL, list_of(fn(setFPMode))(fn(FLM))(fn(FRB))(fn(Rc))); From 6cbe5730b72f7d67bf9e2b69a0709ea8c0266eca Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Tue, 25 Sep 2018 14:56:35 -0500 Subject: [PATCH 04/16] 09/25 p492-523(not including p523) skipped: lxv (P492, new keyword DQ; TX not at the last bit), lxvx (P492, a slash in the memory map and two numbers are included) stxsd (P498, new keyword VRS, stands for VSR[VSR+32].dword[0]) stxssp (P501, VRS) stxv (P507, new keyword DQ) xsabsqp (P512, 0 in it) new keywords included: -included new keywords "XS", it should be the storing version of "XT") -included XA, XB (page 512 of manual, using the same pattern as RA, RB but XA and XB are for VSR, and there are AX & BX bits at the end of the instruction) -included VRA, VRB (page 520 of manual) Additional: --xsaddqp and xsaddqpo are sharing the same opcode, treated it as frsp and frsp.(page 520 of manual) --- common/h/entryIDs.h | 44 +++++++++++++++++++++++- instructionAPI/src/power_opcode_tables.C | 36 +++++++++++++++++-- 2 files changed, 76 insertions(+), 4 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 9799b5dd17..54c5e9bbda 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1666,7 +1666,49 @@ enum entryID { power_op_lxvd2x, power_op_lxvl, power_op_lxvll, - power_op_lxv, + //--skipped: lxv (new keyword DQ; TX not at the last bit), + //-- lxvx (a slash in the memory map) + //power_op_lxv, + //power_op_lxvx, + power_op_lxvdsx, + power_op_lxvh8x, + power_op_lxvw4x, + power_op_lxvwsx, + //--skipped: stxsd (new keyword VRS, stands for VSR[VSR+32].dword[0]) + //power_op_stxsd, + //included new keywords "XS", it should be the storing version of "XT") + power_op_stxsdx, + power_op_stxsibx, + power_op_stxsihx, + power_op_stxsiwx, + //--skipped: stxssp (VRS) + //power_op_stxssp + power_op_stxsspx, + power_op_stvb16x, + power_op_stxvd2x, + power_op_stxvh8x, + power_op_stxvw4x, + //--skipped: stxv (DQ(RA)) + //power_op_stxv, + power_op_stxvl, + power_op_stxvll, + power_op_stxvx, + //included XA, XB (page 512 of manual, using the same pattern as RA, RB but XA and XB are for VSR, and there are AX & BX bits at the end of the instruction) + //ignored the slashes in it + power_op_xsabsdp, + + //--skipped xsabsqp (0 in it) + //power_op_xsabsqp + + power_op_xsadddp, + power_op_xsaddsp, + //included VRA, VRB (page 520 of manual) + //--xsaddqp and xsaddqpo are sharing the same opcode, treated it as frsp and frsp.(page 520 of manual) + power_op_xsaddqp, + power_op_xscmpexpdp, + power_op_xscmpexpqp, + + // *********** diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index df1acc9efc..dcb36bf825 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -110,7 +110,9 @@ void power_entry::buildTables() main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_58), operandSpec())); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_59), operandSpec())); - main_opcode_table.push_back(power_entry(power_op_stfq, "stfq", NULL, list_of(fn(FRS2))(fn(ST)))); + //opcode60 revised, previous: "stfq" + + main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_60), operandSpec())); main_opcode_table.push_back(power_entry(power_op_stfqu, "stfqu", NULL, list_of(fn(FRS2))(fn(STU)))); main_opcode_table.push_back(power_entry(power_op_stdu, "stdu", NULL, list_of(fn(RS))(fn(STU)))); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_63), operandSpec())); @@ -349,6 +351,7 @@ extended_op_31[133] = power_entry(power_op_qvstfcsxi, "qvstfcsxi", NULL, list_o extended_op_31[135] = power_entry(power_op_qvstfcsx, "qvstfcsx", NULL, list_of(fn(QFRSP))(fn(STX))); extended_op_31[136] = power_entry(power_op_subfe, "subfe", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[138] = power_entry(power_op_adde, "adde", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); +extended_op_31[140] = power_entry(power_op_stxsiwx, "stxsiwx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[142] = power_entry(power_op_lfssx, "lfssx", NULL, list_of(fn(FRTS))(fn(LX))); extended_op_31[144] = power_entry(power_op_mtcrf, "mtcrf", NULL, list_of(fn(RS))(fn(FXM))(fn(Rc))); extended_op_31[149] = power_entry(power_op_stdx, "stdx", NULL, list_of(fn(RS))(fn(STX))); @@ -394,12 +397,14 @@ extended_op_31[306] = power_entry(power_op_tlbie, "tlbie", NULL, list_of(fn(RB)) extended_op_31[310] = power_entry(power_op_eciwx, "eciwx", NULL, list_of(fn(RT))(fn(RA))(fn(RB))); extended_op_31[316] = power_entry(power_op_xor, "xor", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[311] = power_entry(power_op_lhzux, "lhzux", NULL, list_of(fn(RT))(fn(LUX))); +extended_op_31[332] = power_entry(power_op_lxvdsx, "lxvdsx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[334] = power_entry(power_op_lfxdx, "lfxdx", NULL, list_of(fn(FRTP))(fn(LX))); extended_op_31[339] = power_entry(power_op_mfspr, "mfspr", NULL, list_of(fn(RT))(fn(spr))(fn(Rc))); extended_op_31[341] = power_entry(power_op_lwax, "lwax", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[343] = power_entry(power_op_lhax, "lhax", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[360] = power_entry(power_op_abs, "abs", NULL, list_of(fn(RT))(fn(RA))(fn(OE))(fn(Rc))); extended_op_31[363] = power_entry(power_op_divs, "divs", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[364] = power_entry(power_op_lxvwsx, "lxvwsx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[366] = power_entry(power_op_lfxdux, "lfxdux", NULL, list_of(fn(FRTP))(fn(LUX))); // xop 371 is mftb (Move from time base). It is phased-out and equivalent to mfspr Rx, 268 @@ -407,11 +412,13 @@ extended_op_31[371] = power_entry(power_op_mfspr, "mfspr", NULL, list_of(fn(RT)) extended_op_31[373] = power_entry(power_op_lwaux, "lwaux", NULL, list_of(fn(RT))(fn(LUX))); extended_op_31[375] = power_entry(power_op_lhaux, "lhaux", NULL, list_of(fn(RT))(fn(LUX))); extended_op_31[378] = power_entry(power_op_popcntw, "popcntw", NULL, list_of(fn(RS))(fn(RA))); - +extended_op_31[396] = power_entry(power_op_stxvx, "stxvx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); +extended_op_31[397] = power_entry(power_op_stxvl, "stxvl", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[398] = power_entry(power_op_lfpsx, "lfpsx", NULL, list_of(fn(FRTP))(fn(LX))); extended_op_31[407] = power_entry(power_op_sthx, "sthx", NULL, list_of(fn(RS))(fn(STX))); extended_op_31[412] = power_entry(power_op_orc, "orc", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[413] = power_entry(power_op_sradi, "sradi", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); +extended_op_31[429] = power_entry(power_op_stxvll, "stxvll", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[430] = power_entry(power_op_lfpsux, "lfpsux", NULL, list_of(fn(FRTP))(fn(LUX))); extended_op_31[438] = power_entry(power_op_ecowx, "ecowx", NULL, list_of(fn(RS))(fn(RA))(fn(RB))); extended_op_31[439] = power_entry(power_op_sthux, "sthux", NULL, list_of(fn(RS))(fn(STUX))); @@ -460,6 +467,7 @@ extended_op_31[630] = power_entry(power_op_dclst, "dclst", NULL, list_of(fn(RA)) extended_op_31[631] = power_entry(power_op_lfdux, "lfdux", NULL, list_of(fn(FRT))(fn(LUX))); extended_op_31[645] = power_entry(power_op_qvstfsxi, "qvstfsxi", NULL, list_of(fn(QFRSP))(fn(STX))); extended_op_31[647] = power_entry(power_op_qvstfsx, "qvstfsx", NULL, list_of(fn(QFRSP))(fn(STX))); +extended_op_31[652] = power_entry(power_op_stxsspx, "stxsspx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[654] = power_entry(power_op_stfssx, "stfssx", NULL, list_of(fn(FRSS))(fn(STX))); extended_op_31[659] = power_entry(power_op_mfsrin, "mfsrin", NULL, list_of(fn(RT))(fn(RB))); extended_op_31[661] = power_entry(power_op_stswx, "stswx", NULL, list_of(fn(RS))(fn(STX))); @@ -473,6 +481,7 @@ extended_op_31[695] = power_entry(power_op_stfsux, "stfsux", NULL, list_of(fn(FR extended_op_31[696] = power_entry(power_op_sriq, "sriq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); extended_op_31[709] = power_entry(power_op_qvstfdxi, "qvstfdxi", NULL, list_of(fn(QFRSP))(fn(STX))); extended_op_31[711] = power_entry(power_op_qvstfdx, "qvstfdx", NULL, list_of(fn(QFRSP))(fn(STX))); +extended_op_31[716] = power_entry(power_op_stxsdx, "stxsdx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[718] = power_entry(power_op_stfsdx, "stfsdx", NULL, list_of(fn(FRSS))(fn(STX))); extended_op_31[725] = power_entry(power_op_stswi, "stswi", NULL, list_of(fn(RS))(fn(ST))(fn(NB))); extended_op_31[727] = power_entry(power_op_stfdx, "stfdx", NULL, list_of(fn(FRS))(fn(STX))); @@ -483,12 +492,15 @@ extended_op_31[743] = power_entry(power_op_qvlstdux, "qvstfdux", NULL, list_of(f extended_op_31[750] = power_entry(power_op_stfsdux, "stfsdux", NULL, list_of(fn(FRSS))(fn(STUX))); extended_op_31[759] = power_entry(power_op_stfdux, "stfdux", NULL, list_of(fn(FRS))(fn(STUX))); extended_op_31[760] = power_entry(power_op_srliq, "srliq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); +extended_op_31[780] = power_entry(power_op_lxvw4x, "lxvw4x", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[781] = power_entry(power_op_lxsibzx, "lxsibzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[782] = power_entry(power_op_stfxsx, "stfxsx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[790] = power_entry(power_op_lhbrx, "lhbrx", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[791] = power_entry(power_op_lfqx, "lfqx", NULL, list_of(fn(FRT))(fn(LX))(fn(Rc))); extended_op_31[792] = power_entry(power_op_sraw, "sraw", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[794] = power_entry(power_op_srad, "srad", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[812] = power_entry(power_op_lxvh8x, "lxvh8x", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); +extended_op_31[813] = power_entry(power_op_lxsihzx, "lxsihzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[813] = power_entry(power_op_lxsihzx, "lxsihzx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[814] = power_entry(power_op_stfxsux, "stfxsux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[818] = power_entry(power_op_rac, "rac", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); @@ -501,22 +513,28 @@ extended_op_31[854] = power_entry(power_op_eieio, "eieio", NULL, operandSpec()); extended_op_31[871] = power_entry(power_op_qvlfiwax, "qvlfiwax", NULL, list_of(fn(QFRTP))(fn(LX))); extended_op_31[876] = power_entry(power_op_lxvb16x, "lxvb16x", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[878] = power_entry(power_op_stfxdux, "stfxdux", NULL, list_of(fn(FRSP))(fn(STUX))); +extended_op_31[908] = power_entry(power_op_stxvw4x, "stxvw4x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); +extended_op_31[909] = power_entry(power_op_stxsibx, "stxsibx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[910] = power_entry(power_op_stfpsx, "stfpsx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[918] = power_entry(power_op_sthbrx, "sthbrx", NULL, list_of(fn(RS))(fn(STX))); extended_op_31[919] = power_entry(power_op_stfqx, "stfqx", NULL, list_of(fn(FRS))(fn(STX))(fn(Rc))); extended_op_31[920] = power_entry(power_op_sraq, "sraq", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[921] = power_entry(power_op_srea, "srea", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[922] = power_entry(power_op_extsh, "extsh", NULL, list_of(fn(RS))(fn(RA))(fn(OE))(fn(Rc))); +extended_op_31[940] = power_entry(power_op_stxvh8x, "stxvh8x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); +extended_op_31[941] = power_entry(power_op_stxsihx, "stxsihx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[942] = power_entry(power_op_stfpsux, "stfpsux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[951] = power_entry(power_op_stfqux, "stfqux", NULL, list_of(fn(FRS))(fn(STUX))(fn(Rc))); extended_op_31[952] = power_entry(power_op_sraiq, "sraiq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); extended_op_31[954] = power_entry(power_op_extsb, "extsb", NULL, list_of(fn(RS))(fn(RA))(fn(Rc))); extended_op_31[967] = power_entry(power_op_qvstfiwx, "qvstfiwx", NULL, list_of(fn(QFRSP))(fn(STX))); +extended_op_31[972] = power_entry(power_op_stxsibx, "stxvd2x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[974] = power_entry(power_op_stfpdx, "stfpdx", NULL, list_of(fn(FRSP))(fn(STX))); extended_op_31[978] = power_entry(power_op_tlbld, "tlbld", NULL, list_of(fn(RB))); extended_op_31[982] = power_entry(power_op_icbi, "icbi", NULL, list_of(fn(RA))(fn(RB))); extended_op_31[983] = power_entry(power_op_stfiwx, "stfiwx", NULL, list_of(fn(FRS))(fn(STX))); extended_op_31[986] = power_entry(power_op_extsw, "extsw", NULL, list_of(fn(RS))(fn(RA))(fn(Rc))); +extended_op_31[1004] = power_entry(power_op_stxvb16x, "stxvb16x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[1006] = power_entry(power_op_stfpdux, "stfpdux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[1010] = power_entry(power_op_tlbli, "tlbli", NULL, list_of(fn(RB))); extended_op_31[1014] = power_entry(power_op_dcbz, "dcbz", NULL, list_of(fn(RA))(fn(RB))); @@ -545,7 +563,18 @@ list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); extended_op_59[31] = power_entry(power_op_fnmadds, "fnmadds", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); - extended_op_63[0] = power_entry(power_op_fcmpu, "fcmpu", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); + extended_op_60[0] = power_entry(power_op_xsaddsp, "xsaddsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[32] = power_entry(power_op_xsadddp, "xsadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[59] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[345] = power_entry(power_op_xsabsdp, "xsabsdp", NULL, list_of(fn(XT))(fn(XB))); + + + + extended_op_63[0] = power_entry(power_op_fcmpu, "fcmpu", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); + +//two instructions: xsaddqp and xsaddqpp sharing the same opcode, RO is used for rounding +extended_op_63[12] = power_entry(power_op_xsaddqp, "xsaddqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); + extended_op_63[12] = power_entry(power_op_frsp, "frsp", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[14] = power_entry(power_op_fctiw, "fctiw", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[15] = power_entry(power_op_fctiwz, "fctiwz", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); @@ -572,6 +601,7 @@ extended_op_63[70] = power_entry(power_op_mtfsb0, "mtfsb0", NULL, list_of(fn(BT) extended_op_63[72] = power_entry(power_op_fmr, "fmr", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[134] = power_entry(power_op_mtfsfi, "mtfsfi", NULL, list_of(fn(BF))(fn(U))(fn(Rc))); extended_op_63[136] = power_entry(power_op_fnabs, "fnabs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))); +extended_op_63[164] = power_entry(power_op_xscmpexpqp, "xscmpexpqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); extended_op_63[264] = power_entry(power_op_fabs, "fabs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[583] = power_entry(power_op_mffs, "mffs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(Rc))); extended_op_63[711] = power_entry(power_op_mtfsf, "mtfsf", NULL, list_of(fn(setFPMode))(fn(FLM))(fn(FRB))(fn(Rc))); From 2c8113207782d5f032271773403e78be0e977bde Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Tue, 25 Sep 2018 17:05:48 -0500 Subject: [PATCH 05/16] 09/25 p492-523(not including p523) skipped: lxv (P492, new keyword DQ; TX not at the last bit), lxvx (P492, a slash in the memory map and two numbers are included) stxsd (P498, new keyword VRS, stands for VSR[VSR+32].dword[0]) stxssp (P501, VRS) stxv (P507, new keyword DQ) xsabsqp (P512, 0 in it) new keywords included: -included new keywords "XS", it should be the storing version of "XT") -included XA, XB (page 512 of manual, using the same pattern as RA, RB but XA and XB are for VSR, and there are AX & BX bits at the end of the instruction) -included VRA, VRB (page 520 of manual) Additional: --xsaddqp and xsaddqpo are sharing the same opcode, treated it as frsp and frsp.(page 520 of manual) --- instructionAPI/src/power_opcode_tables.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index dcb36bf825..ad5d37bf3f 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -110,7 +110,7 @@ void power_entry::buildTables() main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_58), operandSpec())); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_59), operandSpec())); - //opcode60 revised, previous: "stfq" + //opcode60 revised, previous:"stfq" main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_60), operandSpec())); main_opcode_table.push_back(power_entry(power_op_stfqu, "stfqu", NULL, list_of(fn(FRS2))(fn(STU)))); From 0a3c9f6730e67eed51a9335b95863650a4844027 Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Thu, 27 Sep 2018 16:02:58 -0500 Subject: [PATCH 06/16] 09/27/2018 New opcodes added p523-576(not including p576) skipped: nothing new: -third level opcodes: 60-347-(16/17), 63-804-(0), 63-836-(1/2/9/10/17/20/22/25 -new extended opcodes (opcode 60/61/63), added on 09/25 but was not included in the last log. -new keyword included: VRS -lxvx: page 492, a slash inside the extened opcode.two entries in the opcode table are included: 31-268 & 31-300 --- common/h/entryIDs.h | 128 +++++++++++++++-------- instructionAPI/src/power_opcode_tables.C | 77 ++++++++++++-- 2 files changed, 156 insertions(+), 49 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 54c5e9bbda..d4259c460a 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1653,7 +1653,8 @@ enum entryID { power_op_popcntw, power_op_popcntd, power_op_wait, - + + //Yuhan: started from here power_op_lxsd, power_op_lxsdx, power_op_lxsibzx, @@ -1666,23 +1667,24 @@ enum entryID { power_op_lxvd2x, power_op_lxvl, power_op_lxvll, - //--skipped: lxv (new keyword DQ; TX not at the last bit), - //-- lxvx (a slash in the memory map) + //--skipped: lxv (page 492, new keyword DQ; TX not at the last bit), //power_op_lxv, - //power_op_lxvx, + + //lxvx: page 492, a slash inside the extened opcode. + //two entries in the opcode table are included: 31-268 & 31-300 + power_op_lxvx, power_op_lxvdsx, power_op_lxvh8x, power_op_lxvw4x, power_op_lxvwsx, - //--skipped: stxsd (new keyword VRS, stands for VSR[VSR+32].dword[0]) - //power_op_stxsd, - //included new keywords "XS", it should be the storing version of "XT") + //stxsd: page498, included new keyword "VRS", it stands for VSR[VRS+32].dword[0] + power_op_stxsd, + //included new keywords "XS", it should be the storing version of "XT" power_op_stxsdx, power_op_stxsibx, power_op_stxsihx, power_op_stxsiwx, - //--skipped: stxssp (VRS) - //power_op_stxssp + power_op_stxssp, power_op_stxsspx, power_op_stvb16x, power_op_stxvd2x, @@ -1693,12 +1695,11 @@ enum entryID { power_op_stxvl, power_op_stxvll, power_op_stxvx, - //included XA, XB (page 512 of manual, using the same pattern as RA, RB but XA and XB are for VSR, and there are AX & BX bits at the end of the instruction) + //included XA, XB (page 2 of manual, using the same pattern as RA, RB but XA and XB are for VSR, and there are AX & BX bits at the end of the instruction) //ignored the slashes in it power_op_xsabsdp, - - //--skipped xsabsqp (0 in it) - //power_op_xsabsqp + //page512, third level opcode included + power_op_xsabsqp, power_op_xsadddp, power_op_xsaddsp, @@ -1707,6 +1708,49 @@ enum entryID { power_op_xsaddqp, power_op_xscmpexpdp, power_op_xscmpexpqp, + power_op_xscmpeqdp, + power_op_xscmpgedp, + power_op_xscmpgtdp, + power_op_xscmpodp, + power_op_xscmpoqp, + power_op_xscmpudp, + power_op_xscmpuqp, + power_op_xscpsgndp, + //xscvdphp (page534), third level opcode + power_op_xscvdphp, + power_op_xscvdpqp, + power_op_xscvdpsp, + power_op_xscvdpspn, + power_op_xscvdpsxws, + power_op_xscvdpsxds, + power_op_xscvdpuxds, + power_op_xscvdpuxws, + power_op_xscvhpdp, + //xscvqpdp, xscvqpdpo: two instructions sharing the same code (rounding bit included) + power_op_xscvqpdp, + power_op_xscvqpsdz, + power_op_xscvqpswz, + power_op_xscvqpudz, + power_op_xscvqpuwz, + power_op_xscvsdqp, + power_op_xscvspdp, + power_op_xscvspdpn, + power_op_xscvsxddp, + power_op_xscvsxdsp, + + //--xscvsdqp appears again in the manual (page660), exact the same on page556 + power_op_xscvudqp, + power_op_xscvuxddp, + power_op_xscvuxdsp, + //xsdivqp and xsdivqpo sharing the same opcode, rounding bit included + power_op_xsdivdp, + power_op_xsdivsp, + power_op_xsiexpdp, + power_op_xsiexpqp, + power_op_xsmaddadp, + power_op_xsmaddmdp, + power_op_xsmaddasp, + power_op_xsmaddmsp, @@ -1790,6 +1834,35 @@ enum entryID { aarch64_op_cmn_adds_addsub_imm, aarch64_op_cmn_adds_addsub_shift, aarch64_op_cmp_subs_addsub_ext, + aarch64_op_brk, + aarch64_op_bsl_advsimd, + aarch64_op_cbnz, + aarch64_op_cbz, + aarch64_op_ccmn_imm, + aarch64_op_ccmn_reg, + aarch64_op_ccmp_imm, + aarch64_op_ccmp_reg, + aarch64_op_cinc_csinc, + aarch64_op_cinv_csinv, + aarch64_op_clrex, + aarch64_op_cls_advsimd, + aarch64_op_cls_int, + aarch64_op_clz_advsimd, + aarch64_op_clz_int, + aarch64_op_cmeq_advsimd_reg, + aarch64_op_cmeq_advsimd_zero, + aarch64_op_cmge_advsimd_reg, + aarch64_op_cmge_advsimd_zero, + aarch64_op_cmgt_advsimd_reg, + aarch64_op_cmgt_advsimd_zero, + aarch64_op_cmhi_advsimd, + aarch64_op_cmhs_advsimd, + aarch64_op_cmle_advsimd, + aarch64_op_cmlt_advsimd, + aarch64_op_cmn_adds_addsub_ext, + aarch64_op_cmn_adds_addsub_imm, + aarch64_op_cmn_adds_addsub_shift, + aarch64_op_cmp_subs_addsub_ext, aarch64_op_cmp_subs_addsub_imm, aarch64_op_cmp_subs_addsub_shift, aarch64_op_cmtst_advsimd, @@ -2295,35 +2368,6 @@ enum entryID { _entry_ids_max_ }; -enum prefixEntryID { - prefix_none, - prefix_rep, - prefix_repnz -}; - -#if defined(__GNUC__) - #if defined(_LIBCPP_VERSION) -//***************** GCC *********************** - #elif !defined(cap_tr1) - //**************** GCC < 4.3.0 ************ - namespace __gnu_cxx { - - template<> struct hash { - hash h; - unsigned operator()(const entryID &e) const - { - return h(static_cast(e)); - }; - }; - template<> struct hash { - hash h; - unsigned operator()(const prefixEntryID &e) const - { - return h(static_cast(e)); - }; - }; - } - #else namespace std { namespace tr1 diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index ad5d37bf3f..6caca633d7 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -103,18 +103,23 @@ void power_entry::buildTables() main_opcode_table.push_back(power_entry(power_op_stfd, "stfd", NULL, list_of(fn(FRS))(fn(ST)))); main_opcode_table.push_back(power_entry(power_op_stfdu, "stfdu", NULL, list_of(fn(FRS))(fn(STU)))); main_opcode_table.push_back(power_entry(power_op_lfq, "lfq", NULL, list_of(fn(FRT2))(fn(L)))); - //opcode57: removed + //opcode57: revised, previous:lfqu //main_opcode_table.push_back(power_entry(power_op_lfqu, "lfqu", NULL, list_of(fn(FRT2))(fn(LU))));i - //new opcode 57 has extended opcode + //new extended opcode 57 main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_57), operandSpec())); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_58), operandSpec())); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_59), operandSpec())); - //opcode60 revised, previous:"stfq" + //opcode60 revised, previous:stfq + //new extended opcode 60 + main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_60), operandSpec())); - main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_60), operandSpec())); - main_opcode_table.push_back(power_entry(power_op_stfqu, "stfqu", NULL, list_of(fn(FRS2))(fn(STU)))); - main_opcode_table.push_back(power_entry(power_op_stdu, "stdu", NULL, list_of(fn(RS))(fn(STU)))); + //opcode61 revised, previous:stfqu + //main_opcode_table.push_back(power_entry(power_op_stfqu, "stfqu", NULL, list_of(fn(FRS2))(fn(STU)))); + //new extended opcode 61 + main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_61), operandSpec())); + + main_opcode_table.push_back(power_entry(power_op_stdu, "stdu", NULL, list_of(fn(RS))(fn(STU)))); main_opcode_table.push_back(power_entry(power_op_extended, "extended", fn(extended_op_63), operandSpec())); extended_op_0[1] = power_entry(power_op_qvfxxmadds, "qvfxxmadds", NULL, @@ -385,12 +390,14 @@ extended_op_31[247] = power_entry(power_op_stbux, "stbux", NULL, list_of(fn(RS)) extended_op_31[248] = power_entry(power_op_slliq, "slliq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); extended_op_31[264] = power_entry(power_op_doz, "doz", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[266] = power_entry(power_op_add, "add", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); +extended_op_31[268] = power_entry(power_op_lxvx, "lxvx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[269] = power_entry(power_op_lxvl, "lxvl", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[270] = power_entry(power_op_lfxsx, "lfxsx", NULL, list_of(fn(FRTP))(fn(LX))); extended_op_31[277] = power_entry(power_op_lscbx, "lscbx", NULL, list_of(fn(RT))(fn(LX))(fn(Rc))); extended_op_31[278] = power_entry(power_op_dcbt, "dcbt", NULL, list_of(fn(RA))(fn(RB))); extended_op_31[279] = power_entry(power_op_lhzx, "lhzx", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[284] = power_entry(power_op_eqv, "eqv", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[300] = power_entry(power_op_lxvx, "lxvx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[301] = power_entry(power_op_lxvll, "lxvll", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_31[302] = power_entry(power_op_lfxsux, "lfxsux", NULL, list_of(fn(FRTP))(fn(LUX))); extended_op_31[306] = power_entry(power_op_tlbie, "tlbie", NULL, list_of(fn(RB))); @@ -563,12 +570,42 @@ list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); extended_op_59[31] = power_entry(power_op_fnmadds, "fnmadds", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); +//Yuhan: new extended opcode extended_op_60[0] = power_entry(power_op_xsaddsp, "xsaddsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[1] = power_entry(power_op_xsmaddasp, "xsmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[3] = power_entry(power_op_xscmpeqdp, "xscmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[9] = power_entry(power_op_xsmaddmsp, "xsmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[11] = power_entry(power_op_xscmpgtdp, "xscmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[19] = power_entry(power_op_xscmpgedp, "xscmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[24] = power_entry(power_op_xsdivsp, "xsdivsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[32] = power_entry(power_op_xsadddp, "xsadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[33] = power_entry(power_op_xsmaddadp, "xsmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[35] = power_entry(power_op_xscmpudp, "xscmpudp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[42] = power_entry(power_op_xsmaddmdp, "xsmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[43] = power_entry(power_op_xscmpodp, "xscmpodp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[56] = power_entry(power_op_xsdivdp, "xsdivdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[59] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[72] = power_entry(power_op_xscvdpuxws, "xscvdpuxws", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[88] = power_entry(power_op_xscvdpsxws, "xscvdpsxws", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[176] = power_entry(power_op_xscpsgndp, "xscpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[265] = power_entry(power_op_xscvdpsp, "xscvdpsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[267] = power_entry(power_op_xscvdpspn, "xscvdpspn", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[296] = power_entry(power_op_,xscvuxdsp, "xscvuxdsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[312] = power_entry(power_op_xscvsxdsp, "xscvsxdsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[328] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XB))); +extended_op_60[329] = power_entry(power_op_xscvspdp, "xscvspdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[331] = power_entry(power_op_xscvspdpn, "xscvspdpn", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[344] = power_entry(power_op_xscvdpsxds, "xscvdpsxds", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[345] = power_entry(power_op_xsabsdp, "xsabsdp", NULL, list_of(fn(XT))(fn(XB))); +//third level opcode included: +extended_op_60[347] = power_entry(power_op_extended, "extended", fn(extended_op_60_347), operandSpec())); +extended_op_60[360] = power_entry(power_op_xscvuxddp, "xscvuxddp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[376] = power_entry(power_op_xscvsxddp, "xscvsxddp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[918] = power_entry(power_op_xsiexpdp, "xsiexpdp", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); - + extended_op_61[2] = power_entry(power_op_stxsd, "stxsd", NULL, list_of(fn(VRS))(fn(STU))); + extended_op_61[3] = power_entry(power_op_stxssp, "stxssp", NULL, list_of(fn(VRS))(fn(STU))); + extended_op_63[0] = power_entry(power_op_fcmpu, "fcmpu", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); @@ -599,15 +636,41 @@ extended_op_63[40] = power_entry(power_op_fneg, "fneg", NULL, list_of(fn(setFPMo extended_op_63[64] = power_entry(power_op_mcrfs, "mcrfs", NULL, list_of(fn(BF))(fn(BFA))); extended_op_63[70] = power_entry(power_op_mtfsb0, "mtfsb0", NULL, list_of(fn(BT))(fn(Rc))); extended_op_63[72] = power_entry(power_op_fmr, "fmr", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); +extended_op_63[132] = power_entry(power_op_xscmpoqp, "xscmpoqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); extended_op_63[134] = power_entry(power_op_mtfsfi, "mtfsfi", NULL, list_of(fn(BF))(fn(U))(fn(Rc))); extended_op_63[136] = power_entry(power_op_fnabs, "fnabs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))); extended_op_63[164] = power_entry(power_op_xscmpexpqp, "xscmpexpqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); extended_op_63[264] = power_entry(power_op_fabs, "fabs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); +extended_op_63[548] = power_entry(power_op_xsdivqp, "xsdivqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); extended_op_63[583] = power_entry(power_op_mffs, "mffs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(Rc))); +extended_op_63[644] = power_entry(power_op_xscmpuqp, "xscmpuqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); extended_op_63[711] = power_entry(power_op_mtfsf, "mtfsf", NULL, list_of(fn(setFPMode))(fn(FLM))(fn(FRB))(fn(Rc))); + +//third level opcode included +extended_op_63[804] = power_entry(power_op_extended, "extended", fn(extended_op_63_804), operandSpec())); + extended_op_63[814] = power_entry(power_op_fctid, "fctid", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[815] = power_entry(power_op_fctidz, "fctidz", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); +extended_op_63[836] = power_entry(power_op_extended, "extended", fn(extended_op_63_836), operandSpec())); extended_op_63[846] = power_entry(power_op_fcfid, "fcfid", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); +extended_op_63[868] = power_entry(power_op_xsiexpqp, "xsiexpqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); + +//Third level opcode follows: + extended_op_60_347[16] = power_entry(power_op_xscvdphp, "xscvhpdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_347[17] = power_entry(power_op_xscvhphp, "xscvdphp", NULL, list_of(fn(XT))(fn(XB))); + + extended_op_63_804[0] = power_entry(power_op_xsabsqp, "xsabsqp", list_of(fn(VRT))(fn(VRB))); + + extended_op_63_836[1] = power_entry(power_op_xscvqpuwz, "xscvqpuwz", list_of(fn(VRT))(fn(VRB))); +extended_op_63_836[2] = power_entry(power_op_xscvudqp, "xscvudqp", list_of(fn(VRT))(fn(VRB))); +extended_op_63_836[9] = power_entry(power_op_xscvqpswz, "xscvqpswz", list_of(fn(VRT))(fn(VRB))); +extended_op_63_836[10] = power_entry(power_op_xscvsdqp, "xscvsdqp", list_of(fn(VRT))(fn(VRB))); +extended_op_63_836[17] = power_entry(power_op_xscvqpudz "xscvqpudz", list_of(fn(VRT))(fn(VRB))); +extended_op_63_836[20] = power_entry(power_op_xscvqpdp, "xscvqpdp", list_of(fn(VRT))(fn(VRB))(fn(RO))); +extended_op_63_836[22] = power_entry(power_op_xscvdpqp, "xscvdpqp", list_of(fn(VRT))(fn(VRB))); +extended_op_63_836[25] = power_entry(power_op_xscvqpsdz, "xscvqpsdz", list_of(fn(VRT))(fn(VRB))); + + built_tables = true; } From 7f04267bcb623d12e846c68d815d30b41d72a513 Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Thu, 27 Sep 2018 16:11:31 -0500 Subject: [PATCH 07/16] 09/27/2018 New opcodes added p523-576(not including p576) skipped: nothing new: -third level opcodes: 60-347-(16/17), 63-804-(0), 63-836-(1/2/9/10/17/20/22/25 -new extended opcodes (opcode 60/61/63), added on 09/25 but was not included in the last log. -new keyword included: VRS -lxvx: page 492, two entries for this instruction(a slash inside the extened opcode).31-268 & 31-300 --- common/h/entryIDs.h | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index d4259c460a..08bb67d689 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -2367,7 +2367,33 @@ enum entryID { aarch64_op_zip2_advsimd, _entry_ids_max_ }; - +enum prefixEntryID { + prefix_none, + prefix_rep, + prefix_repnz +}; + #if defined(__GNUC__) + #if defined(_LIBCPP_VERSION) +//***************** GCC *********************** + #elif !defined(cap_tr1) + //**************** GCC < 4.3.0 ************ + namespace __gnu_cxx { + template<> struct hash { + hash h; + unsigned operator()(const entryID &e) const + { + return h(static_cast(e)); + }; + }; + template<> struct hash { + hash h; + unsigned operator()(const prefixEntryID &e) const + { + return h(static_cast(e)); + }; + }; + } + #else namespace std { namespace tr1 From d947f0abecb00a570387487b92d5ba40f4a3b9e3 Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Tue, 2 Oct 2018 16:26:08 -0500 Subject: [PATCH 08/16] Opcode conflict detected, new opcodes added p576-690(include but skipped) skipped: -xsrqpi & xsrqpix, P634, two instructions sharing the same opcode, differentiated by EX bit -xssqrtsp, P644, xssqrtsp has the exact same opcode with xscmpgtdp (P526) -xvcmpgtdp, P668, has exact the same opcode with xsrdpic(P628) -xvcmpgtsp, P670, has exact the same opcode with xssqrtdp(P641) -xvcvspsxws, P686, has exact the same opcode with xsminjdp(P589) -xvcvspuxws, P690, has exact the same opcode with xsmincdp(P587) new keywords included: -P653, included DCMX -P636, included RMC, two bit from 21th, always companied with an R bit in the 15th bit. -new third level opcode 60-475 --- common/h/entryIDs.h | 111 ++++++++++++++++++++++- instructionAPI/src/power_opcode_tables.C | 86 +++++++++++++++++- 2 files changed, 191 insertions(+), 6 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 08bb67d689..574de1e11d 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1738,7 +1738,7 @@ enum entryID { power_op_xscvsxddp, power_op_xscvsxdsp, - //--xscvsdqp appears again in the manual (page660), exact the same on page556 + //--xscvsdqp appears again in the manual (page560), exact the same on page556 power_op_xscvudqp, power_op_xscvuxddp, power_op_xscvuxdsp, @@ -1751,7 +1751,114 @@ enum entryID { power_op_xsmaddmdp, power_op_xsmaddasp, power_op_xsmaddmsp, - + power_op_xsmaddqp, + power_op_xsmaxdp, + power_op_xsmaxcdp, + power_op_xsmaxjdp, + power_op_xsmindp, + power_op_xsmincdp, + power_op_xsminjdp, + power_op_xsmsubadp, + power_op_xsmsubmdp, + power_op_xsmsubasp, + power_op_xsmsubmsp, + power_op_xsmsubqp, + power_op_xsmuldp, + power_op_xsmulqp, + power_op_xsmulsp, + power_op_xsnabsdp, + power_op_xsnegdp, + power_op_xsnegqp, + power_op_xsnmaddadp, + power_op_xsnmaddmdp, + power_op_xsnmaddasp, + power_op_xsnmaddmsp, + power_op_xsnmaddqp, + power_op_xsnmsubadp, + power_op_xsnmsubmdp, + power_op_xsnmsubasp, + power_op_xsnmsubmsp, + power_op_xsnmsubqp, + power_op_xsrdpi, + power_op_xsrdpic, + power_op_xsrdpim, + power_op_xsrdpip, + power_op_xsrdpiz, + power_op_xsredp, + power_op_xsresp, + //--skipped xsrqpi & xsrqpix + //P634, two instructions sharing the same opcode, differentiated by EX bit + //power_op_xsrqpi, + //power_op_xsrqpix, + + //P636, included RMC, it always goes along with an R bit at 15th bit. + power_op_xsrqpxp, + power_op_xsrsp, + power_op_xsrsqrtedp, + power_op_xsrsqrtesp, + power_op_xssqrtdp, + power_op_xssqrtqp, + //--skipped xssqrtsp + //P644, xssqrtsp has the exact same opcode with xscmpgtdp (P526) + //power_op_xssqrtsp, + + power_op_xssubdp, + power_op_xssubqp, + power_op_xssubsp, + power_op_xstdivdp, + power_op_xstsqrtdp, + //P653, included DCMX + power_op_xststdcdp, + power_op_xststdcqp, + power_op_xststdcsp, + power_op_xsxexpdp, + power_op_xsxexpqp, + power_op_xsxsigdp, + power_op_xsxsigqp, + power_op_xvabsdp, + power_op_xvabssp, + power_op_xvadddp, + power_op_xvaddsp, + power_op_xvcmpeqdp, + power_op_xvcmpeqsp, + power_op_xvcmpgedp, + power_op_xvcmpgesp, + //--skipped: P668 xvcmpgtdp, has exact the same opcode with xsrdpic(P628) + //power_op_xvcmpgtdp, + //--skipped: P670 xvcmpgtsp, has exact the same opcode with xssqrtdp(P641) + //power_op_xvcmpgtsp, + power_op_xvcpsgndp, + power_op_xvcpsgnsp, + power_op_xvcvdpsp, + power_op_xvcvdpsxds, + power_op_xvcvdpsxws, + power_op_xvcvdpuxds, + power_op_xvcvdpuxws, + //new third level opcode 60-475 + power_op_xvcvhpsp, + power_op_xvcvspdp, + power_op_xvcvsphp, + power_op_xvcvspsxds, + //--skipped: P686 xvcvspsxws, has exact the same opcode with xsminjdp(P589) + //power_op_xvcvspsxws, + power_op_xvcvspuxds, + //--skipped: P690 xvcvspuxws, has exact the same opcode with xsmincdp(P587) + //power_op_xvcvspuxws, + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index 6caca633d7..3c3b43a48f 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -574,23 +574,69 @@ list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); extended_op_60[0] = power_entry(power_op_xsaddsp, "xsaddsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[1] = power_entry(power_op_xsmaddasp, "xsmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[3] = power_entry(power_op_xscmpeqdp, "xscmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[8] = power_entry(power_op_xssubsp, "xssubsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[9] = power_entry(power_op_xsmaddmsp, "xsmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[10] = power_entry(power_op_xsrsqrtesp, "xsrsqrtesp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[11] = power_entry(power_op_xscmpgtdp, "xscmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[16] = power_entry(power_op_xsmulsp, "xsmulsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[17] = power_entry(power_op_xsmsubasp, "xsmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[19] = power_entry(power_op_xscmpgedp, "xscmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[24] = power_entry(power_op_xsdivsp, "xsdivsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[25] = power_entry(power_op_xsmsubmsp, "xsmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[26] = power_entry(power_op_xsresp, "xsresp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[32] = power_entry(power_op_xsadddp, "xsadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[33] = power_entry(power_op_xsmaddadp, "xsmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[35] = power_entry(power_op_xscmpudp, "xscmpudp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[40] = power_entry(power_op_xssubdp, "xssubdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[42] = power_entry(power_op_xsmaddmdp, "xsmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[43] = power_entry(power_op_xscmpodp, "xscmpodp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[48] = power_entry(power_op_xsmuldp, "xsmuldp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[49] = power_entry(power_op_xsmsubadp, "xsmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[56] = power_entry(power_op_xsdivdp, "xsdivdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[57] = power_entry(power_op_xsmsubmdp, "xsmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[59] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[61] = power_entry(power_op_xstdivdp, "xstdivdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[64] = power_entry(power_op_xvaddsp, "xvaddsp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[67] = power_entry(power_op_xvcmpeqsp, "xvcmpeqsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); extended_op_60[72] = power_entry(power_op_xscvdpuxws, "xscvdpuxws", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[74] = power_entry(power_op_xsrsqrtedp, "xsrsqrtedp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[75] = power_entry(power_op_xssqrtdp, "xssqrtdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[78] = power_entry(power_op_xsrdpi, "xsrdpi", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[83] = power_entry(power_op_xvcmpgesp, "xvcmpgesp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); extended_op_60[88] = power_entry(power_op_xscvdpsxws, "xscvdpsxws", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[89] = power_entry(power_op_xsrdpiz, "xsrdpiz", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[90] = power_entry(power_op_xsredp, "xsredp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[96] = power_entry(power_op_xvadddp, "xvadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[99] = power_entry(power_op_xvcmpeqdp, "xvcmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[105] = power_entry(power_op_xsrdpip, "xsrdpip", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[106] = power_entry(power_op_xstsqrtdp, "xstsqrtdp", NULL, list_of(fn(BF))(fn(XB))); +extended_op_60[107] = power_entry(power_op_xsrdpic, "xsrdpic", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[115] = power_entry(power_op_xvcmpgedp, "xvcmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[121] = power_entry(power_op_xsrdpim, "xsrdpim", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[128] = power_entry(power_op_xsmaxcdp, "xsmaxcdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[129] = power_entry(power_op_xsnmaddasp, "xsnmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[136] = power_entry(power_op_xsmincdp, "xsmincdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[137] = power_entry(power_op_xsnmaddmsp, "xsnmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[144] = power_entry(power_op_xsmaxjdp, "xsmaxjdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[145] = power_entry(power_op_xsnmsubasp, "xsnmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[152] = power_entry(power_op_xsminjdp, "xsminjdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[153] = power_entry(power_op_xsnmsubmsp, "xsnmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[160] = power_entry(power_op_xsmaxdp, "xsmaxdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[161] = power_entry(power_op_xsnmaddadp, "xsnmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[168] = power_entry(power_op_xsmindp, "xsmindp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[169] = power_entry(power_op_xsnmaddmdp, "xsnmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[176] = power_entry(power_op_xscpsgndp, "xscpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[177] = power_entry(power_op_xsnmsubadp, "xsnmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[185] = power_entry(power_op_xsnmsubmdp, "xsnmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[200] = power_entry(power_op_xvcvdpuxws, "xvcvdpuxws", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[208] = power_entry(power_op_xvcpsgnsp, "xvcpsgnsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[216] = power_entry(power_op_xvcvdpsxws, "xvcvdpsxws", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[240] = power_entry(power_op_xvcpsgndp, "xvcpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[265] = power_entry(power_op_xscvdpsp, "xscvdpsp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[267] = power_entry(power_op_xscvdpspn, "xscvdpspn", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[296] = power_entry(power_op_,xscvuxdsp, "xscvuxdsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[281] = power_entry(power_op_xsrsp, "xsrsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[296] = power_entry(power_op_xscvuxdsp, "xscvuxdsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[298] = power_entry(power_op_xststdcsp, "xststdcsp", NULL, list_of(fn(BF))(fn(DCMX))(fn(XB))); extended_op_60[312] = power_entry(power_op_xscvsxdsp, "xscvsxdsp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[328] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XB))); extended_op_60[329] = power_entry(power_op_xscvspdp, "xscvspdp", NULL, list_of(fn(XT))(fn(XB))); @@ -600,7 +646,19 @@ extended_op_60[345] = power_entry(power_op_xsabsdp, "xsabsdp", NULL, list_of(fn( //third level opcode included: extended_op_60[347] = power_entry(power_op_extended, "extended", fn(extended_op_60_347), operandSpec())); extended_op_60[360] = power_entry(power_op_xscvuxddp, "xscvuxddp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[361] = power_entry(power_op_xsnabsdp, "xsnabsdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[362] = power_entry(power_op_xststdcdp, "xststdcdp", NULL, list_of(fn(BF))(fn(DCMX))(fn(XB))); extended_op_60[376] = power_entry(power_op_xscvsxddp, "xscvsxddp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[377] = power_entry(power_op_xsnegdp, "xsnegdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[392] = power_entry(power_op_xvcvspuxds, "xvcvspuxds", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[393] = power_entry(power_op_xvcvdpsp, "xvcvdpsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[408] = power_entry(power_op_xvcvspsxds, "xvcvspsxds", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[409] = power_entry(power_op_xvabssp, "xvabssp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[456] = power_entry(power_op_xvcvdpuxds, "xvcvdpuxds", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[457] = power_entry(power_op_xvcvspdp, "xvcvspdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[472] = power_entry(power_op_xvcvdpsxds, "xvcvdpsxds", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[473] = power_entry(power_op_xvabsdp, "xvabsdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[475] = power_entry(power_op_extended, "extended", fn(extended_op_60_475), operandSpec())); extended_op_60[918] = power_entry(power_op_xsiexpdp, "xsiexpdp", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_61[2] = power_entry(power_op_stxsd, "stxsd", NULL, list_of(fn(VRS))(fn(STU))); @@ -610,7 +668,7 @@ extended_op_60[918] = power_entry(power_op_xsiexpdp, "xsiexpdp", NULL, list_of(f extended_op_63[0] = power_entry(power_op_fcmpu, "fcmpu", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); //two instructions: xsaddqp and xsaddqpp sharing the same opcode, RO is used for rounding -extended_op_63[12] = power_entry(power_op_xsaddqp, "xsaddqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); +extended_op_63[4] = power_entry(power_op_xsaddqp, "xsaddqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); extended_op_63[12] = power_entry(power_op_frsp, "frsp", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[14] = power_entry(power_op_fctiw, "fctiw", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); @@ -631,6 +689,8 @@ list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); extended_op_63[31] = power_entry(power_op_fnmadd, "fnmadd", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); extended_op_63[32] = power_entry(power_op_fcmpo, "fcmpo", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); +extended_op_63[36] = power_entry(power_op_xsmulqp, "xsmulqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); +extended_op_63[37] = power_entry(power_op_xsrqpxp, "xsrqpxp", NULL, list_of(fn(VRT))(fn(VRB))(fn(RMC))); extended_op_63[38] = power_entry(power_op_mtfsb1, "mtfsb1", NULL, list_of(fn(setFPMode))(fn(BT))(fn(Rc))); extended_op_63[40] = power_entry(power_op_fneg, "fneg", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[64] = power_entry(power_op_mcrfs, "mcrfs", NULL, list_of(fn(BF))(fn(BFA))); @@ -641,9 +701,15 @@ extended_op_63[134] = power_entry(power_op_mtfsfi, "mtfsfi", NULL, list_of(fn(BF extended_op_63[136] = power_entry(power_op_fnabs, "fnabs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))); extended_op_63[164] = power_entry(power_op_xscmpexpqp, "xscmpexpqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); extended_op_63[264] = power_entry(power_op_fabs, "fabs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); +extended_op_63[388] = power_entry(power_op_xsmaddqp, "xsmaddqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); +extended_op_63[420] = power_entry(power_op_xsmsubqp, "xsmsubqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); +extended_op_63[452] = power_entry(power_op_xsnmaddqp, "xsnmaddqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); +extended_op_63[484] = power_entry(power_op_xsnmsubqp, "xsnmsubqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); +extended_op_63[516] = power_entry(power_op_xssubqp, "xssubqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); extended_op_63[548] = power_entry(power_op_xsdivqp, "xsdivqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); extended_op_63[583] = power_entry(power_op_mffs, "mffs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(Rc))); extended_op_63[644] = power_entry(power_op_xscmpuqp, "xscmpuqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); +extended_op_63[708] = power_entry(power_op_xststdcqp, "xststdcqp", NULL, list_of(fn(BF))(fn(DCMX))(fn(VRB))); extended_op_63[711] = power_entry(power_op_mtfsf, "mtfsf", NULL, list_of(fn(setFPMode))(fn(FLM))(fn(FRB))(fn(Rc))); //third level opcode included @@ -655,11 +721,23 @@ extended_op_63[836] = power_entry(power_op_extended, "extended", fn(extended_op_ extended_op_63[846] = power_entry(power_op_fcfid, "fcfid", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[868] = power_entry(power_op_xsiexpqp, "xsiexpqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +//------------------------- //Third level opcode follows: - extended_op_60_347[16] = power_entry(power_op_xscvdphp, "xscvhpdp", NULL, list_of(fn(XT))(fn(XB))); + + extended_op_60_347[0] = power_entry(power_op_xsxexpdp, "xsxexpdp", NULL, list_of(fn(RT))(fn(XB))); +extended_op_60_347[1] = power_entry(power_op_xsxsigdp, "xsxsigdp", NULL, list_of(fn(RT))(fn(XB))); +extended_op_60_347[16] = power_entry(power_op_xscvdphp, "xscvhpdp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60_347[17] = power_entry(power_op_xscvhphp, "xscvdphp", NULL, list_of(fn(XT))(fn(XB))); - + + + extended_op_60_475[24] = power_entry(power_op_xvcvhpsp, "xvcvhpsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[25] = power_entry(power_op_xvcvsphp, "xvcvsphp", NULL, list_of(fn(XT))(fn(XB))); + extended_op_63_804[0] = power_entry(power_op_xsabsqp, "xsabsqp", list_of(fn(VRT))(fn(VRB))); +extended_op_63_804[2] = power_entry(power_op_xsxexpqp, "xsxexpqp", list_of(fn(VRT))(fn(VRB))); +extended_op_63_804[16] = power_entry(power_op_xsnegqp, "xsnegqp", list_of(fn(VRT))(fn(VRB))); +extended_op_63_804[18] = power_entry(power_op_xsxsigqp, "xsxsigqp", list_of(fn(VRT))(fn(VRB))); +extended_op_63_804[27] = power_entry(power_op_xssqrtqp, "xssqrtqp", list_of(fn(VRT))(fn(VRB))(fn(RO))); extended_op_63_836[1] = power_entry(power_op_xscvqpuwz, "xscvqpuwz", list_of(fn(VRT))(fn(VRB))); extended_op_63_836[2] = power_entry(power_op_xscvudqp, "xscvudqp", list_of(fn(VRT))(fn(VRB))); From b19e347b97d61c054e2071b605d4ad03da05c961 Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Thu, 11 Oct 2018 18:08:46 -0500 Subject: [PATCH 09/16] Note for implementation added, XX3 formants in opcode 60 revised, new opcodes added Revised: - opcode with XX3 formats: extended opcode are expanded from 21-28 to 21-29, with last bit treated as 0 and 1 respectively - The instructions with Rc bits, included Rc in the extended opcode, treated the instructions with Rc=0 and Rc=1 as different opcodes. new: -xvtstdcdp (P760): DCMX field is chopped into 3 parts. May be a special case in implementation. -**new Keyword: UIM: field 12-15 immediate field (xxextractuw,xxinsertw (P766)) field 14-15 immediate field (xxspltw (P774)) //I think UIM should be modified to a certain expression to show what exact bits are for UIM -new Keyword: SHW: field 22-23 specify a shift amount in words skipped: -xxpermdi (P773), three arbitrary digits -xxsel (P773), XX4 form -xxsldwi (P774), three arbitrary digits --- common/h/entryIDs.h | 135 +++++++-- instructionAPI/src/InstructionDecoder-power.C | 13 + instructionAPI/src/power_opcode_tables.C | 285 +++++++++++++++--- 3 files changed, 356 insertions(+), 77 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 574de1e11d..9ca2d50c50 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1704,7 +1704,6 @@ enum entryID { power_op_xsadddp, power_op_xsaddsp, //included VRA, VRB (page 520 of manual) - //--xsaddqp and xsaddqpo are sharing the same opcode, treated it as frsp and frsp.(page 520 of manual) power_op_xsaddqp, power_op_xscmpexpdp, power_op_xscmpexpqp, @@ -1726,7 +1725,6 @@ enum entryID { power_op_xscvdpuxds, power_op_xscvdpuxws, power_op_xscvhpdp, - //xscvqpdp, xscvqpdpo: two instructions sharing the same code (rounding bit included) power_op_xscvqpdp, power_op_xscvqpsdz, power_op_xscvqpswz, @@ -1738,11 +1736,9 @@ enum entryID { power_op_xscvsxddp, power_op_xscvsxdsp, - //--xscvsdqp appears again in the manual (page560), exact the same on page556 power_op_xscvudqp, power_op_xscvuxddp, power_op_xscvuxdsp, - //xsdivqp and xsdivqpo sharing the same opcode, rounding bit included power_op_xsdivdp, power_op_xsdivsp, power_op_xsiexpdp, @@ -1798,9 +1794,7 @@ enum entryID { power_op_xsrsqrtesp, power_op_xssqrtdp, power_op_xssqrtqp, - //--skipped xssqrtsp - //P644, xssqrtsp has the exact same opcode with xscmpgtdp (P526) - //power_op_xssqrtsp, + power_op_xssqrtsp, power_op_xssubdp, power_op_xssubqp, @@ -1821,12 +1815,11 @@ enum entryID { power_op_xvaddsp, power_op_xvcmpeqdp, power_op_xvcmpeqsp, + power_op_xvcmpeqsp., power_op_xvcmpgedp, power_op_xvcmpgesp, - //--skipped: P668 xvcmpgtdp, has exact the same opcode with xsrdpic(P628) - //power_op_xvcmpgtdp, - //--skipped: P670 xvcmpgtsp, has exact the same opcode with xssqrtdp(P641) - //power_op_xvcmpgtsp, + power_op_xvcmpgtdp, + power_op_xvcmpgtsp, power_op_xvcpsgndp, power_op_xvcpsgnsp, power_op_xvcvdpsp, @@ -1839,26 +1832,108 @@ enum entryID { power_op_xvcvspdp, power_op_xvcvsphp, power_op_xvcvspsxds, - //--skipped: P686 xvcvspsxws, has exact the same opcode with xsminjdp(P589) - //power_op_xvcvspsxws, + power_op_xvcvspsxws, power_op_xvcvspuxds, - //--skipped: P690 xvcvspuxws, has exact the same opcode with xsmincdp(P587) - //power_op_xvcvspuxws, - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ + power_op_xvcvspuxws, + power_op_xvcvsxddp, + power_op_xvcvsxdsp, + power_op_xvcvsxwdp, + power_op_xvcvsxwsp, + power_op_xvcvuxddp, + power_op_xvcvuxdsp, + power_op_xvcvuxwdp, + power_op_xvcvuxwsp, + power_op_xvdivdp, + power_op_xvdivsp, + power_op_xviexpdp, + power_op_xviexpsp, + power_op_xvmaddadp, + power_op_xvmaddmdp, + power_op_xvmaddasp, + power_op_xvmaddmsp, + power_op_xvmaxdp, + power_op_xvmaxsp, + power_op_xvmindp, + power_op_xvminsp, + power_op_xvmsubadp, + power_op_xvmsubmdp, + power_op_xvmsubasp, + power_op_xvmsubmsp, + power_op_xvmuldp, + power_op_xvmulsp, + power_op_xvnabsdp, + power_op_xvnabssp, + power_op_xvnegdp, + power_op_xvnegsp, + power_op_xvnmaddadp, + power_op_xvnmaddmdp, + power_op_xvnmaddasp, + power_op_xvnmaddmsp, + power_op_xvnmsubadp, + power_op_xvnmsubmdp, + power_op_xvnmsubasp, + power_op_xvnmsubmsp, + power_op_xvrdpi, + power_op_xvrdpic, + power_op_xvrdpim, + power_op_xvrdpip, + power_op_xvrdpiz, + power_op_xvredp, + power_op_xvresp, + power_op_xvrspi, + power_op_xvrspic, + power_op_xvrspim, + power_op_xvrspip, + power_op_xvrspiz, + power_op_xvrsqrtedp, + power_op_xvrsqrtesp, + power_op_xvsqrtdp, + power_op_xvsqrtsp, + power_op_xvsubdp, + power_op_xvsubsp, + power_op_xvtdivdp, + power_op_xvtdivsp, + power_op_xvtsqrtdp, + power_op_xvtsqrtsp, + power_op_xvtstdcdp, + //xvtstdcdp, xvtstdcsp: DCMX is chopped into 3 parts + power_op_xvtstdcdp, + power_op_xvtstdcsp, + power_op_xvxexpdp, + power_op_xvxexpsp, + power_op_xvxsigdp, + power_op_xvxsigsp, + power_op_xxbrd, + power_op_xxbrh, + power_op_xxbrq, + power_op_xxbrw, + //included: UIM (immediate number), bit 12-15 (P766) + power_op_xxextractuw, + power_op_xxinsertw, + power_op_xxland, + power_op_xxlandc, + power_op_xxleqv, + power_op_xxlnand, + power_op_xxlorc, + power_op_xxlnor, + power_op_xxlor, + power_op_xxlxor, + power_op_xxmrghw, + power_op_xxmrglw, + power_op_xxperm, + power_op_xxpermr, + power_op_xxpermdi, + //--skipped: xxpermdi (P773), three arbitrary digits + //power_op_xxpermdi, + + //--skipped: xxsel (P773), XX4 form + //power_op_xxsel, + + //--skipped: xxsldwi (P774), three arbitrary digits + power_op_xxsldwi, + + //included: UIM (immediate number), bit 14-15 (P774) + power_op_xxspltw, diff --git a/instructionAPI/src/InstructionDecoder-power.C b/instructionAPI/src/InstructionDecoder-power.C index ae119620a0..53dac9b2e6 100644 --- a/instructionAPI/src/InstructionDecoder-power.C +++ b/instructionAPI/src/InstructionDecoder-power.C @@ -578,6 +578,19 @@ namespace Dyninst } void InstructionDecoder_power::doDelayedDecode(const Instruction* insn_to_complete) { + + /* Yuhan's notes for implementation + For all instructions in opcode 60, the extended opcode is 21-29th bit. + special case for opcode 60: (Opcode table on Page 1190) + I. Decision Tree: + (1) For XX4 format, the 26&27 bits are 1. (only for opcde "xxsel" P773) + (2) Two special XX3 cases: 0..00 010.. & 0..01 010.., started from 21th bit. (manual 1208) + (3) Other instruction are all implemented normally, + the "." bits are treated as 0 and 1 respectively in the opcode table + II. The Rc bit for opcode 60 is the 21st bit + + ** There are 2 XX1 instructions, the last bit of the extended opcodes are ignored (30th bit, which are both 0). + */ isRAWritten = false; isFPInsn = false; bcIsConditional = false; diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index 3c3b43a48f..a41c58f6a6 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -572,77 +572,248 @@ list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); //Yuhan: new extended opcode extended_op_60[0] = power_entry(power_op_xsaddsp, "xsaddsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[1] = power_entry(power_op_xsmaddasp, "xsmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[3] = power_entry(power_op_xscmpeqdp, "xscmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[8] = power_entry(power_op_xssubsp, "xssubsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[9] = power_entry(power_op_xsmaddmsp, "xsmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[1] = power_entry(power_op_xsaddsp, "xsaddsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[2] = power_entry(power_op_xsmaddasp, "xsmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[3] = power_entry(power_op_xsmaddasp, "xsmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[6] = power_entry(power_op_xscmpeqdp, "xscmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[7] = power_entry(power_op_xscmpeqdp, "xscmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[10] = power_entry(power_op_xsrsqrtesp, "xsrsqrtesp", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[11] = power_entry(power_op_xscmpgtdp, "xscmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[16] = power_entry(power_op_xsmulsp, "xsmulsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[17] = power_entry(power_op_xsmsubasp, "xsmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[19] = power_entry(power_op_xscmpgedp, "xscmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[24] = power_entry(power_op_xsdivsp, "xsdivsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[25] = power_entry(power_op_xsmsubmsp, "xsmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[11] = power_entry(power_op_xssqrtsp, "xssqrtsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[16] = power_entry(power_op_xssubsp, "xssubsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[17] = power_entry(power_op_xssubsp, "xssubsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[18] = power_entry(power_op_xsmaddmsp, "xsmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[19] = power_entry(power_op_xsmaddmsp, "xsmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[22] = power_entry(power_op_xscmpgtdp, "xscmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[23] = power_entry(power_op_xscmpgtdp, "xscmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[26] = power_entry(power_op_xsresp, "xsresp", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[32] = power_entry(power_op_xsadddp, "xsadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[33] = power_entry(power_op_xsmaddadp, "xsmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[35] = power_entry(power_op_xscmpudp, "xscmpudp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); -extended_op_60[40] = power_entry(power_op_xssubdp, "xssubdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[42] = power_entry(power_op_xsmaddmdp, "xsmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[43] = power_entry(power_op_xscmpodp, "xscmpodp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); -extended_op_60[48] = power_entry(power_op_xsmuldp, "xsmuldp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[49] = power_entry(power_op_xsmsubadp, "xsmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[56] = power_entry(power_op_xsdivdp, "xsdivdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[57] = power_entry(power_op_xsmsubmdp, "xsmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[59] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); -extended_op_60[61] = power_entry(power_op_xstdivdp, "xstdivdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); -extended_op_60[64] = power_entry(power_op_xvaddsp, "xvaddsp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); -extended_op_60[67] = power_entry(power_op_xvcmpeqsp, "xvcmpeqsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[32] = power_entry(power_op_xsmulsp, "xsmulsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[33] = power_entry(power_op_xsmulsp, "xsmulsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[34] = power_entry(power_op_xsmsubasp, "xsmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[35] = power_entry(power_op_xsmsubasp, "xsmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[36] = power_entry(power_op_xxmrghw, "xxmrghw", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[37] = power_entry(power_op_xxmrghw, "xxmrghw", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[38] = power_entry(power_op_xscmpgedp, "xscmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[39] = power_entry(power_op_xscmpgedp, "xscmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[48] = power_entry(power_op_xsdivsp, "xsdivsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[49] = power_entry(power_op_xsdivsp, "xsdivsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[50] = power_entry(power_op_xsmsubmsp, "xsmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[51] = power_entry(power_op_xsmsubmsp, "xsmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[52] = power_entry(power_op_xxperm, "xxperm", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[53] = power_entry(power_op_xxperm, "xxperm", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[64] = power_entry(power_op_xsadddp, "xsadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[65] = power_entry(power_op_xsadddp, "xsadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[66] = power_entry(power_op_xsmaddadp, "xsmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[67] = power_entry(power_op_xsmaddadp, "xsmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[70] = power_entry(power_op_xscmpudp, "xscmpudp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[71] = power_entry(power_op_xscmpudp, "xscmpudp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); extended_op_60[72] = power_entry(power_op_xscvdpuxws, "xscvdpuxws", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[74] = power_entry(power_op_xsrsqrtedp, "xsrsqrtedp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[75] = power_entry(power_op_xssqrtdp, "xssqrtdp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[78] = power_entry(power_op_xsrdpi, "xsrdpi", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[83] = power_entry(power_op_xvcmpgesp, "xvcmpgesp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[80] = power_entry(power_op_xssubdp, "xssubdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[81] = power_entry(power_op_xssubdp, "xssubdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[82] = power_entry(power_op_xsmaddmdp, "xsmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[83] = power_entry(power_op_xsmaddmdp, "xsmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[86] = power_entry(power_op_xscmpodp, "xscmpodp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[87] = power_entry(power_op_xscmpodp, "xscmpodp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); extended_op_60[88] = power_entry(power_op_xscvdpsxws, "xscvdpsxws", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[89] = power_entry(power_op_xsrdpiz, "xsrdpiz", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[90] = power_entry(power_op_xsredp, "xsredp", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[96] = power_entry(power_op_xvadddp, "xvadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[99] = power_entry(power_op_xvcmpeqdp, "xvcmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[96] = power_entry(power_op_xsmuldp, "xsmuldp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[97] = power_entry(power_op_xsmuldp, "xsmuldp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[98] = power_entry(power_op_xsmsubadp, "xsmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[99] = power_entry(power_op_xsmsubadp, "xsmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[100] = power_entry(power_op_xxmrglw, "xxmrglw", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[101] = power_entry(power_op_xxmrglw, "xxmrglw", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[105] = power_entry(power_op_xsrdpip, "xsrdpip", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[106] = power_entry(power_op_xstsqrtdp, "xstsqrtdp", NULL, list_of(fn(BF))(fn(XB))); extended_op_60[107] = power_entry(power_op_xsrdpic, "xsrdpic", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[115] = power_entry(power_op_xvcmpgedp, "xvcmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[112] = power_entry(power_op_xsdivdp, "xsdivdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[113] = power_entry(power_op_xsdivdp, "xsdivdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[114] = power_entry(power_op_xsmsubmdp, "xsmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[115] = power_entry(power_op_xsmsubmdp, "xsmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[116] = power_entry(power_op_xxpermr, "xxpermr", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[117] = power_entry(power_op_xxpermr, "xxpermr", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[118] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[119] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); extended_op_60[121] = power_entry(power_op_xsrdpim, "xsrdpim", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[128] = power_entry(power_op_xsmaxcdp, "xsmaxcdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[129] = power_entry(power_op_xsnmaddasp, "xsnmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[136] = power_entry(power_op_xsmincdp, "xsmincdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[137] = power_entry(power_op_xsnmaddmsp, "xsnmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[144] = power_entry(power_op_xsmaxjdp, "xsmaxjdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[145] = power_entry(power_op_xsnmsubasp, "xsnmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[152] = power_entry(power_op_xsminjdp, "xsminjdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[153] = power_entry(power_op_xsnmsubmsp, "xsnmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[160] = power_entry(power_op_xsmaxdp, "xsmaxdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[161] = power_entry(power_op_xsnmaddadp, "xsnmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[168] = power_entry(power_op_xsmindp, "xsmindp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[169] = power_entry(power_op_xsnmaddmdp, "xsnmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[176] = power_entry(power_op_xscpsgndp, "xscpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[177] = power_entry(power_op_xsnmsubadp, "xsnmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); -extended_op_60[185] = power_entry(power_op_xsnmsubmdp, "xsnmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[122] = power_entry(power_op_xstdivdp, "xstdivdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[123] = power_entry(power_op_xstdivdp, "xstdivdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[128] = power_entry(power_op_xvaddsp, "xvaddsp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[129] = power_entry(power_op_xvaddsp, "xvaddsp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[130] = power_entry(power_op_xvmaddasp, "xvmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[131] = power_entry(power_op_xvmaddasp, "xvmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[134] = power_entry(power_op_xvcmpeqsp, "xvcmpeqsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[135] = power_entry(power_op_xvcmpeqsp, "xvcmpeqsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[136] = power_entry(power_op_xvcvspuxws, "xvcvspuxws", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[137] = power_entry(power_op_xvrspi, "xvrspi", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[138] = power_entry(power_op_xvrsqrtesp, "xvrsqrtesp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[139] = power_entry(power_op_xvsqrtsp, "xvsqrtsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[144] = power_entry(power_op_xvsubsp, "xvsubsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[145] = power_entry(power_op_xvsubsp, "xvsubsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[146] = power_entry(power_op_xvmaddmsp, "xvmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[147] = power_entry(power_op_xvmaddmsp, "xvmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[150] = power_entry(power_op_xvcmpgtsp, "xvcmpgtsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[151] = power_entry(power_op_xvcmpgtsp, "xvcmpgtsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[152] = power_entry(power_op_xvcvspsxws, "xvcvspsxws", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[153] = power_entry(power_op_xvrspiz, "xvrspiz", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[154] = power_entry(power_op_xvresp, "xvresp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[160] = power_entry(power_op_xvmulsp, "xvmulsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[161] = power_entry(power_op_xvmulsp, "xvmulsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[162] = power_entry(power_op_xvmsubasp, "xvmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[164] = power_entry(power_op_xxspltw, "xxspltw", NULL, list_of(fn(XT))(fn(XB))(fn(UIM))); +extended_op_60[165] = power_entry(power_op_xxextractuw, "xxextractuw", NULL, list_of(fn(XT))(fn(XB))(fn(UIM))); +extended_op_60[166] = power_entry(power_op_xvcmpgesp, "xvcmpgesp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[167] = power_entry(power_op_xvcmpgesp, "xvcmpgesp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[168] = power_entry(power_op_xvcvuxwsp, "xvcvuxwsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[169] = power_entry(power_op_xvrspip, "xvrspip", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[170] = power_entry(power_op_xvtsqrtsp, "xvtsqrtsp", NULL, list_of(fn(BF))(fn(XB))); +extended_op_60[171] = power_entry(power_op_xvrspic, "xvrspic", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[178] = power_entry(power_op_xvmsubmsp, "xvmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[181] = power_entry(power_op_xxinsertw, "xxextractuw", NULL, list_of(fn(XT))(fn(XB))(fn(UIM))); +extended_op_60[184] = power_entry(power_op_xvcvsxwsp, "xvcvsxwsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[185] = power_entry(power_op_xvrspim, "xvrspim", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[186] = power_entry(power_op_xvdivsp, "xvdivsp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[187] = power_entry(power_op_xvdivsp, "xvdivsp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[192] = power_entry(power_op_xvadddp, "xvadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[193] = power_entry(power_op_xvadddp, "xvadddp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[194] = power_entry(power_op_xvmaddadp, "xvmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[195] = power_entry(power_op_xvmaddadp, "xvmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[198] = power_entry(power_op_xvcmpeqdp, "xvcmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[199] = power_entry(power_op_xvcmpeqdp, "xvcmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); extended_op_60[200] = power_entry(power_op_xvcvdpuxws, "xvcvdpuxws", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[208] = power_entry(power_op_xvcpsgnsp, "xvcpsgnsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[201] = power_entry(power_op_xvrdpi, "xvrdpi", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[202] = power_entry(power_op_xvrsqrtedp, "xvrsqrteds", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[203] = power_entry(power_op_xvsqrtdp, "xvsqrtdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[208] = power_entry(power_op_xvsubdp, "xvsubdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[209] = power_entry(power_op_xvsubdp, "xvsubdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[210] = power_entry(power_op_xvmaddmdp, "xvmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[211] = power_entry(power_op_xvmaddmdp, "xvmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[214] = power_entry(power_op_xvcmpgtdp, "xvcmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[215] = power_entry(power_op_xvcmpgtdp, "xvcmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); extended_op_60[216] = power_entry(power_op_xvcvdpsxws, "xvcvdpsxws", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[240] = power_entry(power_op_xvcpsgndp, "xvcpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[217] = power_entry(power_op_xvrdpiz, "xvrdpiz", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[218] = power_entry(power_op_xvredp, "xvredp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[224] = power_entry(power_op_xvmuldp, "xvmuldp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[226] = power_entry(power_op_xvmsubadp, "xvmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[227] = power_entry(power_op_xvmsubadp, "xvmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[230] = power_entry(power_op_xvcmpgedp, "xvcmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[231] = power_entry(power_op_xvcmpgedp, "xvcmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[232] = power_entry(power_op_xvcvuxwdp, "xvcvuxwdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[233] = power_entry(power_op_xvrdpip, "xvrdpip", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[234] = power_entry(power_op_xvtsqrtdp, "xvtsqrtdp", NULL, list_of(fn(BF))(fn(XB))); +extended_op_60[235] = power_entry(power_op_xvrdpic, "xvrdpic", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[240] = power_entry(power_op_xvdivdp, "xvdivdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[241] = power_entry(power_op_xvdivdp, "xvdivdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[242] = power_entry(power_op_xvmsubmdp, "xvmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[243] = power_entry(power_op_xvmsubmdp, "xvmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[248] = power_entry(power_op_xvcvsxwdp, "xvcvsxwdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[249] = power_entry(power_op_xvrdpim, "xvrdpim", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[250] = power_entry(power_op_xvtdivdp, "xvtdivdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[251] = power_entry(power_op_xvtdivdp, "xvtdivdp", NULL, list_of(fn(BF))(fn(XA))(fn(XB))); +extended_op_60[256] = power_entry(power_op_xsmaxcdp, "xsmaxcdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[257] = power_entry(power_op_xsmaxcdp, "xsmaxcdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[258] = power_entry(power_op_xsnmaddasp, "xsnmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[259] = power_entry(power_op_xsnmaddasp, "xsnmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[260] = power_entry(power_op_xxland, "xxland", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[261] = power_entry(power_op_xxland, "xxland", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[265] = power_entry(power_op_xscvdpsp, "xscvdpsp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[267] = power_entry(power_op_xscvdpspn, "xscvdpspn", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[272] = power_entry(power_op_xsmincdp, "xsmincdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[273] = power_entry(power_op_xsmincdp, "xsmincdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[274] = power_entry(power_op_xsnmaddmsp, "xsnmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[275] = power_entry(power_op_xsnmaddmsp, "xsnmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[276] = power_entry(power_op_xxlandc, "xxlandc", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[277] = power_entry(power_op_xxlandc, "xxlandc", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[281] = power_entry(power_op_xsrsp, "xsrsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[288] = power_entry(power_op_xsmaxjdp, "xsmaxjdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[289] = power_entry(power_op_xsmaxjdp, "xsmaxjdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[290] = power_entry(power_op_xsnmsubasp, "xsnmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[291] = power_entry(power_op_xsnmsubasp, "xsnmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[292] = power_entry(power_op_xxlor, "xxlor", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[293] = power_entry(power_op_xxlor, "xxlor", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[296] = power_entry(power_op_xscvuxdsp, "xscvuxdsp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[298] = power_entry(power_op_xststdcsp, "xststdcsp", NULL, list_of(fn(BF))(fn(DCMX))(fn(XB))); +extended_op_60[304] = power_entry(power_op_xsminjdp, "xsminjdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[305] = power_entry(power_op_xsminjdp, "xsminjdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[306] = power_entry(power_op_xsnmsubmsp, "xsnmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[307] = power_entry(power_op_xsnmsubmsp, "xsnmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[308] = power_entry(power_op_xxlxor, "xxlxor", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[309] = power_entry(power_op_xxlxor, "xxlxor", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[312] = power_entry(power_op_xscvsxdsp, "xscvsxdsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[320] = power_entry(power_op_xsmaxdp, "xsmaxdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[321] = power_entry(power_op_xsmaxdp, "xsmaxdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[322] = power_entry(power_op_xsnmaddadp, "xsnmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[323] = power_entry(power_op_xsnmaddadp, "xsnmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[324] = power_entry(power_op_xxlnor, "xxlnor", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[325] = power_entry(power_op_xxlnor, "xxlnor", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[328] = power_entry(power_op_xscmpexpdp, "xscmpexpdp", NULL, list_of(fn(BF))(fn(XB))); extended_op_60[329] = power_entry(power_op_xscvspdp, "xscvspdp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[331] = power_entry(power_op_xscvspdpn, "xscvspdpn", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[336] = power_entry(power_op_xsmindp, "xsmindp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[337] = power_entry(power_op_xsmindp, "xsmindp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[338] = power_entry(power_op_xsnmaddmdp, "xsnmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[339] = power_entry(power_op_xsnmaddmdp, "xsnmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[340] = power_entry(power_op_xxlorc, "xxlorc", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[341] = power_entry(power_op_xxlorc, "xxlorc", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[344] = power_entry(power_op_xscvdpsxds, "xscvdpsxds", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[345] = power_entry(power_op_xsabsdp, "xsabsdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[352] = power_entry(power_op_xscpsgndp, "xscpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[353] = power_entry(power_op_xscpsgndp, "xscpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[354] = power_entry(power_op_xsnmsubadp, "xsnmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[355] = power_entry(power_op_xsnmsubadp, "xsnmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[356] = power_entry(power_op_xxlnand, "xxlnand", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[357] = power_entry(power_op_xxlnand, "xxlnand", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[370] = power_entry(power_op_xsnmsubmdp, "xsnmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[371] = power_entry(power_op_xsnmsubmdp, "xsnmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[372] = power_entry(power_op_xxleqv, "xxleqv", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[373] = power_entry(power_op_xxleqv, "xxleqv", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[382] = power_entry(power_op_xvnmaddasp, "xvnmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[383] = power_entry(power_op_xvnmaddasp, "xvnmaddasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[384] = power_entry(power_op_xvmaxsp, "xvmaxsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[390] = power_entry(power_op_xvcmpeqsp, "xvcmpeqsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[391] = power_entry(power_op_xvcmpeqsp, "xvcmpeqsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[400] = power_entry(power_op_xvminsp, "xvminsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[401] = power_entry(power_op_xvminsp, "xvminsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[402] = power_entry(power_op_xvnmaddmsp, "xvnmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[403] = power_entry(power_op_xvnmaddmsp, "xvnmaddmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[406] = power_entry(power_op_xvcmpgtsp, "xvcmpgtsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[407] = power_entry(power_op_xvcmpgtsp, "xvcmpgtsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[416] = power_entry(power_op_xvcpsgnsp, "xvcpsgnsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[417] = power_entry(power_op_xvcpsgnsp, "xvcpsgnsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[422] = power_entry(power_op_xvcmpgesp, "xvcmpgesp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[423] = power_entry(power_op_xvcmpgesp, "xvcmpgesp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[424] = power_entry(power_op_xvcvuxdsp, "xvcvuxdsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[425] = power_entry(power_op_xvnabssp, "xvnabssp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[432] = power_entry(power_op_xviexpsp, "xviexpsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[433] = power_entry(power_op_xviexpsp, "xviexpsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[440] = power_entry(power_op_xvcvsxdsp, "xvcvsxdsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[441] = power_entry(power_op_xvnegsp, "xscvuxdsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[448] = power_entry(power_op_xvmaxdp, "xvmaxdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[449] = power_entry(power_op_xvmaxdp, "xvmaxdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[450] = power_entry(power_op_xvnmaddadp, "xvnmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[451] = power_entry(power_op_xvnmaddadp, "xvnmaddadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[454] = power_entry(power_op_xvcmpeqdp, "xvcmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[455] = power_entry(power_op_xvcmpeqdp, "xvcmpeqdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[464] = power_entry(power_op_xvmindp, "xvmindp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[466] = power_entry(power_op_xvnmaddmdp, "xvnmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[467] = power_entry(power_op_xvnmaddmdp, "xvnmaddmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[470] = power_entry(power_op_xvcmpgtdp, "xvcmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[471] = power_entry(power_op_xvcmpgtdp, "xvcmpgtdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[480] = power_entry(power_op_xvcpsgndp, "xvcpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[481] = power_entry(power_op_xvcpsgndp, "xvcpsgndp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[482] = power_entry(power_op_xvnmsubadp, "xvnmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[483] = power_entry(power_op_xvnmsubadp, "xvnmsubadp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[486] = power_entry(power_op_xvcmpgedp, "xvcmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[487] = power_entry(power_op_xvcmpgedp, "xvcmpgedp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))(fn(Rc))); +extended_op_60[488] = power_entry(power_op_xvcvuxddp, "xvcvuxddp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[489] = power_entry(power_op_xvnabsdp, "xvnabsdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[496] = power_entry(power_op_xviexpdp, "xviexpdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[497] = power_entry(power_op_xviexpdp, "xviexpdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[498] = power_entry(power_op_xvnmsubmdp, "xvnmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[499] = power_entry(power_op_xvnmsubmdp, "xvnmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[504] = power_entry(power_op_xvcvsxddp, "xvcvsxddp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[505] = power_entry(power_op_xvnegdp, "xvnegdp", list_of(fn(XT))(fn(XB))); //third level opcode included: extended_op_60[347] = power_entry(power_op_extended, "extended", fn(extended_op_60_347), operandSpec())); extended_op_60[360] = power_entry(power_op_xscvuxddp, "xscvuxddp", NULL, list_of(fn(XT))(fn(XB))); @@ -654,12 +825,24 @@ extended_op_60[392] = power_entry(power_op_xvcvspuxds, "xvcvspuxds", NULL, list_ extended_op_60[393] = power_entry(power_op_xvcvdpsp, "xvcvdpsp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[408] = power_entry(power_op_xvcvspsxds, "xvcvspsxds", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[409] = power_entry(power_op_xvabssp, "xvabssp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[418] = power_entry(power_op_xvnmsubasp, "xvnmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[419] = power_entry(power_op_xvnmsubasp, "xvnmsubasp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[426] = power_entry(power_op_xvtstdcsp, "xvtstdcsp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); +extended_op_60[427] = power_entry(power_op_xvtstdcsp, "xvtstdcsp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); +extended_op_60[434] = power_entry(power_op_xvnmsubmsp, "xvnmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[435] = power_entry(power_op_xvnmsubmsp, "xvnmsubmsp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); +extended_op_60[442] = power_entry(power_op_xvtstdcsp, "xvtstdcsp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); +extended_op_60[443] = power_entry(power_op_xvtstdcsp, "xvtstdcsp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); extended_op_60[456] = power_entry(power_op_xvcvdpuxds, "xvcvdpuxds", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[457] = power_entry(power_op_xvcvspdp, "xvcvspdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60[459] = power_entry(power_op_xsiexpdp, "xsiexpdp", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_60[472] = power_entry(power_op_xvcvdpsxds, "xvcvdpsxds", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[473] = power_entry(power_op_xvabsdp, "xvabsdp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[475] = power_entry(power_op_extended, "extended", fn(extended_op_60_475), operandSpec())); -extended_op_60[918] = power_entry(power_op_xsiexpdp, "xsiexpdp", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); +extended_op_60[490] = power_entry(power_op_xvtstdcdp, "xvtstdcdp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); +extended_op_60[491] = power_entry(power_op_xvtstdcdp, "xvtstdcdp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); +extended_op_60[506] = power_entry(power_op_xvtstdcdp, "xvtstdcdp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); +extended_op_60[507] = power_entry(power_op_xvtstdcdp, "xvtstdcdp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); extended_op_61[2] = power_entry(power_op_stxsd, "stxsd", NULL, list_of(fn(VRS))(fn(STU))); extended_op_61[3] = power_entry(power_op_stxssp, "stxssp", NULL, list_of(fn(VRS))(fn(STU))); @@ -730,8 +913,16 @@ extended_op_60_347[16] = power_entry(power_op_xscvdphp, "xscvhpdp", NULL, list_o extended_op_60_347[17] = power_entry(power_op_xscvhphp, "xscvdphp", NULL, list_of(fn(XT))(fn(XB))); - extended_op_60_475[24] = power_entry(power_op_xvcvhpsp, "xvcvhpsp", NULL, list_of(fn(XT))(fn(XB))); + extended_op_60_475[0] = power_entry(power_op_xvxexpdp, "xvxexpdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[1] = power_entry(power_op_xvxsigdp, "xvxsigdp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[7] = power_entry(power_op_xxbrh, "xxbrh", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[8] = power_entry(power_op_xvxexpsp, "xvxexpsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[9] = power_entry(power_op_xvxsigsp, "xvxsigsp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[15] = power_entry(power_op_xxbrw, "xxbrw", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[23] = power_entry(power_op_xxbrd, "xxbrd", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[24] = power_entry(power_op_xvcvhpsp, "xvcvhpsp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60_475[25] = power_entry(power_op_xvcvsphp, "xvcvsphp", NULL, list_of(fn(XT))(fn(XB))); +extended_op_60_475[31] = power_entry(power_op_xxbrq, "xxbrq", NULL, list_of(fn(XT))(fn(XB))); extended_op_63_804[0] = power_entry(power_op_xsabsqp, "xsabsqp", list_of(fn(VRT))(fn(VRB))); extended_op_63_804[2] = power_entry(power_op_xsxexpqp, "xsxexpqp", list_of(fn(VRT))(fn(VRB))); From 63c134011b66628f18fd98be82575ab881e41572 Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Tue, 16 Oct 2018 14:44:20 -0500 Subject: [PATCH 10/16] 10/16 Revision of instructions in Chapter 7 Implementation Notes: 1. For opcode 57, 58, ext opcode resides in 30-31 bit. 2. For opcode 61 (111101), the ext opcode resides in 29-31 bit or 30-31 bit, depending on whether 30-31 bit is 01. (Manual page 1194) 3. For the instructions with RMC and R, R is always at the 15th bit. 4. For opcode 60, the Rc bit is at the 21th bit. new: - Flag bit EX (31th bit), (P634) left to be entered: - stv(P492) & stxv(P507) , with DQ(RA) pattern. - In opcode 60, two with XX3 format and 3 arbitrary bits and one with XX4 format. --- common/h/entryIDs.h | 2 +- instructionAPI/src/power_opcode_tables.C | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 9ca2d50c50..86cc825c0f 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1784,7 +1784,7 @@ enum entryID { power_op_xsresp, //--skipped xsrqpi & xsrqpix //P634, two instructions sharing the same opcode, differentiated by EX bit - //power_op_xsrqpi, + power_op_xsrqpi, //power_op_xsrqpix, //P636, included RMC, it always goes along with an R bit at 15th bit. diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index a41c58f6a6..1d5156868d 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -850,9 +850,8 @@ extended_op_60[507] = power_entry(power_op_xvtstdcdp, "xvtstdcdp", NULL, list_of extended_op_63[0] = power_entry(power_op_fcmpu, "fcmpu", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); -//two instructions: xsaddqp and xsaddqpp sharing the same opcode, RO is used for rounding extended_op_63[4] = power_entry(power_op_xsaddqp, "xsaddqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); - +extended_op_63[5] = power_entry(power_op_xsrqpi, "xsrqpi", NULL, list_of(fn(R))(fn(VRT))(fn(VRB))(fn(RMC))(fn(EX))); extended_op_63[12] = power_entry(power_op_frsp, "frsp", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[14] = power_entry(power_op_fctiw, "fctiw", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[15] = power_entry(power_op_fctiwz, "fctiwz", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); @@ -873,7 +872,7 @@ extended_op_63[31] = power_entry(power_op_fnmadd, "fnmadd", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); extended_op_63[32] = power_entry(power_op_fcmpo, "fcmpo", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); extended_op_63[36] = power_entry(power_op_xsmulqp, "xsmulqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); -extended_op_63[37] = power_entry(power_op_xsrqpxp, "xsrqpxp", NULL, list_of(fn(VRT))(fn(VRB))(fn(RMC))); +extended_op_63[37] = power_entry(power_op_xsrqpxp, "xsrqpxp", NULL, list_of((fn(R))fn(VRT))(fn(VRB))(fn(RMC))); extended_op_63[38] = power_entry(power_op_mtfsb1, "mtfsb1", NULL, list_of(fn(setFPMode))(fn(BT))(fn(Rc))); extended_op_63[40] = power_entry(power_op_fneg, "fneg", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[64] = power_entry(power_op_mcrfs, "mcrfs", NULL, list_of(fn(BF))(fn(BFA))); From c5932d2d07b88b3d487059c31067df198b2834bd Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Tue, 16 Oct 2018 14:45:22 -0500 Subject: [PATCH 11/16] 10/16 Revision of instructions in Chapter 7 Implementation Notes: 1. For opcode 57, 58, ext opcode resides in 30-31 bit. 2. For opcode 61 (111101), the ext opcode resides in 29-31 bit or 30-31 bit, depending on whether 30-31 bit is 01. (Manual page 1194) 3. For the instructions with RMC and R, R is always at the 15th bit. 4. For opcode 60, the Rc bit is at the 21th bit. new: - Flag bit EX (31th bit), (P634) left to be entered: - stv(P492) & stxv(P507) , with DQ(RA) pattern. - In opcode 60, two with XX3 format and 3 arbitrary bits and one with XX4 format. --- common/h/entryIDs.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 86cc825c0f..f7ffedf4ac 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1670,8 +1670,6 @@ enum entryID { //--skipped: lxv (page 492, new keyword DQ; TX not at the last bit), //power_op_lxv, - //lxvx: page 492, a slash inside the extened opcode. - //two entries in the opcode table are included: 31-268 & 31-300 power_op_lxvx, power_op_lxvdsx, power_op_lxvh8x, @@ -1679,7 +1677,6 @@ enum entryID { power_op_lxvwsx, //stxsd: page498, included new keyword "VRS", it stands for VSR[VRS+32].dword[0] power_op_stxsd, - //included new keywords "XS", it should be the storing version of "XT" power_op_stxsdx, power_op_stxsibx, power_op_stxsihx, @@ -1695,7 +1692,6 @@ enum entryID { power_op_stxvl, power_op_stxvll, power_op_stxvx, - //included XA, XB (page 2 of manual, using the same pattern as RA, RB but XA and XB are for VSR, and there are AX & BX bits at the end of the instruction) //ignored the slashes in it power_op_xsabsdp, //page512, third level opcode included @@ -1782,10 +1778,8 @@ enum entryID { power_op_xsrdpiz, power_op_xsredp, power_op_xsresp, - //--skipped xsrqpi & xsrqpix - //P634, two instructions sharing the same opcode, differentiated by EX bit + //P634, xsrqpi & xsrqpix sharing the same opcode, differentiated by EX bit power_op_xsrqpi, - //power_op_xsrqpix, //P636, included RMC, it always goes along with an R bit at 15th bit. power_op_xsrqpxp, @@ -1930,7 +1924,7 @@ enum entryID { //power_op_xxsel, //--skipped: xxsldwi (P774), three arbitrary digits - power_op_xxsldwi, + //power_op_xxsldwi, //included: UIM (immediate number), bit 14-15 (P774) power_op_xxspltw, From a32481a4c1917f59b8cabcb6e51e1f3e4d988a7b Mon Sep 17 00:00:00 2001 From: Xiaozhu Meng Date: Thu, 18 Oct 2018 11:57:24 -0500 Subject: [PATCH 12/16] Start to integrate new power opcodes --- common/h/entryIDs.h | 31 ------ instructionAPI/src/InstructionDecoder-power.C | 95 +++++++++++++++++++ instructionAPI/src/InstructionDecoder-power.h | 19 ++++ instructionAPI/src/power_opcode_tables.C | 23 +++-- 4 files changed, 127 insertions(+), 41 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index f7ffedf4ac..2d96887ac0 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1809,7 +1809,6 @@ enum entryID { power_op_xvaddsp, power_op_xvcmpeqdp, power_op_xvcmpeqsp, - power_op_xvcmpeqsp., power_op_xvcmpgedp, power_op_xvcmpgesp, power_op_xvcmpgtdp, @@ -1891,7 +1890,6 @@ enum entryID { power_op_xvtsqrtsp, power_op_xvtstdcdp, //xvtstdcdp, xvtstdcsp: DCMX is chopped into 3 parts - power_op_xvtstdcdp, power_op_xvtstdcsp, power_op_xvxexpdp, power_op_xvxexpsp, @@ -2010,35 +2008,6 @@ enum entryID { aarch64_op_cmn_adds_addsub_imm, aarch64_op_cmn_adds_addsub_shift, aarch64_op_cmp_subs_addsub_ext, - aarch64_op_brk, - aarch64_op_bsl_advsimd, - aarch64_op_cbnz, - aarch64_op_cbz, - aarch64_op_ccmn_imm, - aarch64_op_ccmn_reg, - aarch64_op_ccmp_imm, - aarch64_op_ccmp_reg, - aarch64_op_cinc_csinc, - aarch64_op_cinv_csinv, - aarch64_op_clrex, - aarch64_op_cls_advsimd, - aarch64_op_cls_int, - aarch64_op_clz_advsimd, - aarch64_op_clz_int, - aarch64_op_cmeq_advsimd_reg, - aarch64_op_cmeq_advsimd_zero, - aarch64_op_cmge_advsimd_reg, - aarch64_op_cmge_advsimd_zero, - aarch64_op_cmgt_advsimd_reg, - aarch64_op_cmgt_advsimd_zero, - aarch64_op_cmhi_advsimd, - aarch64_op_cmhs_advsimd, - aarch64_op_cmle_advsimd, - aarch64_op_cmlt_advsimd, - aarch64_op_cmn_adds_addsub_ext, - aarch64_op_cmn_adds_addsub_imm, - aarch64_op_cmn_adds_addsub_shift, - aarch64_op_cmp_subs_addsub_ext, aarch64_op_cmp_subs_addsub_imm, aarch64_op_cmp_subs_addsub_shift, aarch64_op_cmtst_advsimd, diff --git a/instructionAPI/src/InstructionDecoder-power.C b/instructionAPI/src/InstructionDecoder-power.C index 53dac9b2e6..650ad406ae 100644 --- a/instructionAPI/src/InstructionDecoder-power.C +++ b/instructionAPI/src/InstructionDecoder-power.C @@ -76,8 +76,11 @@ namespace Dyninst static power_table extended_op_19; static power_table extended_op_30; static power_table extended_op_31; + static power_table extended_op_57; static power_table extended_op_58; static power_table extended_op_59; + static power_table extended_op_60; + static power_table extended_op_61; static power_table extended_op_63; }; @@ -486,6 +489,68 @@ namespace Dyninst { SI(); } + + + /***** BEGIN: For new vector instructions *****/ + void InstructionDecoder_power::XT() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::XS() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::XA() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::XB() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::VRT() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::VRA() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::VRB() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::UIM() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::DCMX() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::VRS() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::RO() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::R() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::RMC() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::EX() + { + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + + /***** END: For new vector instructions *****/ + Expression::Ptr InstructionDecoder_power::makeBTExpr() { return makeRegisterExpression(makePowerRegID(ppc32::cr0, field<6, 10>(insn) >> 2)); @@ -707,6 +772,11 @@ using namespace boost::assign; } return power_entry::extended_op_31[field<21, 30>(insn)]; } + // extended_op_57 needs revisiting + const power_entry& InstructionDecoder_power::extended_op_57() + { + return power_entry::extended_op_57[field<30, 31>(insn)]; + } const power_entry& InstructionDecoder_power::extended_op_58() { return power_entry::extended_op_58[field<30, 31>(insn)]; @@ -715,6 +785,31 @@ using namespace boost::assign; { return power_entry::extended_op_59[field<26, 30>(insn)]; } + // extended_op_60 needs revisiting + const power_entry& InstructionDecoder_power::extended_op_60() + { + unsigned int xo = field<26, 30>(insn); + if(xo <= 31) + { + power_table::const_iterator found = power_entry::extended_op_60.find(xo); + if(found != power_entry::extended_op_60.end()) + return found->second; + } + return power_entry::extended_op_60[field<21, 30>(insn)]; + } + // extended_op_61 needs revisiting + const power_entry& InstructionDecoder_power::extended_op_61() + { + unsigned int xo = field<26, 30>(insn); + if(xo <= 31) + { + power_table::const_iterator found = power_entry::extended_op_61.find(xo); + if(found != power_entry::extended_op_61.end()) + return found->second; + } + return power_entry::extended_op_61[field<21, 30>(insn)]; + } + const power_entry& InstructionDecoder_power::extended_op_63() { unsigned int xo = field<26, 30>(insn); diff --git a/instructionAPI/src/InstructionDecoder-power.h b/instructionAPI/src/InstructionDecoder-power.h index 47b4746fc0..81b584bbbf 100644 --- a/instructionAPI/src/InstructionDecoder-power.h +++ b/instructionAPI/src/InstructionDecoder-power.h @@ -165,13 +165,32 @@ namespace Dyninst { void syscall(); void setFPMode(); void L() {}; // non-templated version for some zero fields + void XT(); + void XS(); + void XA(); + void XB(); + void VRT(); + void VRA(); + void VRB(); + void UIM(); + void DCMX(); + void VRS(); + void RO(); + void R(); + void RMC(); + void EX(); + + const power_entry& extended_op_0(); const power_entry& extended_op_4(); const power_entry& extended_op_19(); const power_entry& extended_op_30(); const power_entry& extended_op_31(); + const power_entry& extended_op_57(); const power_entry& extended_op_58(); const power_entry& extended_op_59(); + const power_entry& extended_op_60(); + const power_entry& extended_op_61(); const power_entry& extended_op_63(); template int field(unsigned int raw) { diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index 1d5156868d..c7ba75f5bc 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -35,8 +35,11 @@ power_table power_entry::extended_op_4; power_table power_entry::extended_op_19; power_table power_entry::extended_op_30; power_table power_entry::extended_op_31; +power_table power_entry::extended_op_57; power_table power_entry::extended_op_58; power_table power_entry::extended_op_59; +power_table power_entry::extended_op_60; +power_table power_entry::extended_op_61; power_table power_entry::extended_op_63; void power_entry::buildTables() @@ -541,7 +544,7 @@ extended_op_31[978] = power_entry(power_op_tlbld, "tlbld", NULL, list_of(fn(RB)) extended_op_31[982] = power_entry(power_op_icbi, "icbi", NULL, list_of(fn(RA))(fn(RB))); extended_op_31[983] = power_entry(power_op_stfiwx, "stfiwx", NULL, list_of(fn(FRS))(fn(STX))); extended_op_31[986] = power_entry(power_op_extsw, "extsw", NULL, list_of(fn(RS))(fn(RA))(fn(Rc))); -extended_op_31[1004] = power_entry(power_op_stxvb16x, "stxvb16x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); +//extended_op_31[1004] = power_entry(power_op_stxvb16x, "stxvb16x", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); extended_op_31[1006] = power_entry(power_op_stfpdux, "stfpdux", NULL, list_of(fn(FRSP))(fn(STUX))); extended_op_31[1010] = power_entry(power_op_tlbli, "tlbli", NULL, list_of(fn(RB))); extended_op_31[1014] = power_entry(power_op_dcbz, "dcbz", NULL, list_of(fn(RA))(fn(RB))); @@ -813,9 +816,9 @@ extended_op_60[497] = power_entry(power_op_xviexpdp, "xviexpdp", NULL, list_of(f extended_op_60[498] = power_entry(power_op_xvnmsubmdp, "xvnmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[499] = power_entry(power_op_xvnmsubmdp, "xvnmsubmdp", NULL, list_of(fn(XT))(fn(XA))(fn(XB))); extended_op_60[504] = power_entry(power_op_xvcvsxddp, "xvcvsxddp", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[505] = power_entry(power_op_xvnegdp, "xvnegdp", list_of(fn(XT))(fn(XB))); +extended_op_60[505] = power_entry(power_op_xvnegdp, "xvnegdp", NULL, list_of(fn(XT))(fn(XB))); //third level opcode included: -extended_op_60[347] = power_entry(power_op_extended, "extended", fn(extended_op_60_347), operandSpec())); +//extended_op_60[347] = power_entry(power_op_extended, "extended", fn(extended_op_60_347), operandSpec())); extended_op_60[360] = power_entry(power_op_xscvuxddp, "xscvuxddp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[361] = power_entry(power_op_xsnabsdp, "xsnabsdp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[362] = power_entry(power_op_xststdcdp, "xststdcdp", NULL, list_of(fn(BF))(fn(DCMX))(fn(XB))); @@ -838,7 +841,7 @@ extended_op_60[457] = power_entry(power_op_xvcvspdp, "xvcvspdp", NULL, list_of(f extended_op_60[459] = power_entry(power_op_xsiexpdp, "xsiexpdp", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); extended_op_60[472] = power_entry(power_op_xvcvdpsxds, "xvcvdpsxds", NULL, list_of(fn(XT))(fn(XB))); extended_op_60[473] = power_entry(power_op_xvabsdp, "xvabsdp", NULL, list_of(fn(XT))(fn(XB))); -extended_op_60[475] = power_entry(power_op_extended, "extended", fn(extended_op_60_475), operandSpec())); +//extended_op_60[475] = power_entry(power_op_extended, "extended", fn(extended_op_60_475), operandSpec())); extended_op_60[490] = power_entry(power_op_xvtstdcdp, "xvtstdcdp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); extended_op_60[491] = power_entry(power_op_xvtstdcdp, "xvtstdcdp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); extended_op_60[506] = power_entry(power_op_xvtstdcdp, "xvtstdcdp", NULL, list_of(fn(XT))(fn(XB))(fn(DCMX))); @@ -872,7 +875,7 @@ extended_op_63[31] = power_entry(power_op_fnmadd, "fnmadd", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRA))(fn(FRB))(fn(FRC))(fn(Rc))); extended_op_63[32] = power_entry(power_op_fcmpo, "fcmpo", NULL, list_of(fn(setFPMode))(fn(BF))(fn(FRA))(fn(FRB))); extended_op_63[36] = power_entry(power_op_xsmulqp, "xsmulqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); -extended_op_63[37] = power_entry(power_op_xsrqpxp, "xsrqpxp", NULL, list_of((fn(R))fn(VRT))(fn(VRB))(fn(RMC))); +//extended_op_63[37] = power_entry(power_op_xsrqpxp, "xsrqpxp", NULL, list_of((fn(R))fn(VRT))(fn(VRB))(fn(RMC))); extended_op_63[38] = power_entry(power_op_mtfsb1, "mtfsb1", NULL, list_of(fn(setFPMode))(fn(BT))(fn(Rc))); extended_op_63[40] = power_entry(power_op_fneg, "fneg", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[64] = power_entry(power_op_mcrfs, "mcrfs", NULL, list_of(fn(BF))(fn(BFA))); @@ -888,24 +891,24 @@ extended_op_63[420] = power_entry(power_op_xsmsubqp, "xsmsubqp", NULL, list_of(f extended_op_63[452] = power_entry(power_op_xsnmaddqp, "xsnmaddqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); extended_op_63[484] = power_entry(power_op_xsnmsubqp, "xsnmsubqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); extended_op_63[516] = power_entry(power_op_xssubqp, "xssubqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); -extended_op_63[548] = power_entry(power_op_xsdivqp, "xsdivqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); +//extended_op_63[548] = power_entry(power_op_xsdivqp, "xsdivqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); extended_op_63[583] = power_entry(power_op_mffs, "mffs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(Rc))); extended_op_63[644] = power_entry(power_op_xscmpuqp, "xscmpuqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); extended_op_63[708] = power_entry(power_op_xststdcqp, "xststdcqp", NULL, list_of(fn(BF))(fn(DCMX))(fn(VRB))); extended_op_63[711] = power_entry(power_op_mtfsf, "mtfsf", NULL, list_of(fn(setFPMode))(fn(FLM))(fn(FRB))(fn(Rc))); //third level opcode included -extended_op_63[804] = power_entry(power_op_extended, "extended", fn(extended_op_63_804), operandSpec())); +//extended_op_63[804] = power_entry(power_op_extended, "extended", fn(extended_op_63_804), operandSpec())); extended_op_63[814] = power_entry(power_op_fctid, "fctid", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[815] = power_entry(power_op_fctidz, "fctidz", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); -extended_op_63[836] = power_entry(power_op_extended, "extended", fn(extended_op_63_836), operandSpec())); +//extended_op_63[836] = power_entry(power_op_extended, "extended", fn(extended_op_63_836), operandSpec())); extended_op_63[846] = power_entry(power_op_fcfid, "fcfid", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))(fn(Rc))); extended_op_63[868] = power_entry(power_op_xsiexpqp, "xsiexpqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); //------------------------- //Third level opcode follows: - +/* extended_op_60_347[0] = power_entry(power_op_xsxexpdp, "xsxexpdp", NULL, list_of(fn(RT))(fn(XB))); extended_op_60_347[1] = power_entry(power_op_xsxsigdp, "xsxsigdp", NULL, list_of(fn(RT))(fn(XB))); extended_op_60_347[16] = power_entry(power_op_xscvdphp, "xscvhpdp", NULL, list_of(fn(XT))(fn(XB))); @@ -937,7 +940,7 @@ extended_op_63_836[17] = power_entry(power_op_xscvqpudz "xscvqpudz", list_of(fn( extended_op_63_836[20] = power_entry(power_op_xscvqpdp, "xscvqpdp", list_of(fn(VRT))(fn(VRB))(fn(RO))); extended_op_63_836[22] = power_entry(power_op_xscvdpqp, "xscvdpqp", list_of(fn(VRT))(fn(VRB))); extended_op_63_836[25] = power_entry(power_op_xscvqpsdz, "xscvqpsdz", list_of(fn(VRT))(fn(VRB))); - +*/ built_tables = true; From 2764bf716497bf884f078177e6fa07d4b35accd7 Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Thu, 18 Oct 2018 15:43:46 -0500 Subject: [PATCH 13/16] 10/18 Opcode from Chapter 6 Summary of Changable fields: UIM: 12-15: 4-524 vspltb 4-525 vextractub 4-589 vextractuh 4-653 vextractuw 4-717 vextractd 4-781 vinsertb 4-845 vinserth 4-909 vinsertw 4-973 vinsertd 13-15: 4-588 vsplth 14-15: 4-652 vspltw Rc bit: for opcode 4: always 21th bit ext opcode for opcode 4: 26-31: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63 new: Keyword SIM, 11-15 bits Keyword SHB, 22-25 bits third-level opcode: 4-1538-x --- common/h/entryIDs.h | 207 +++++++++++++++++++ instructionAPI/src/power_opcode_tables.C | 243 ++++++++++++++++++++--- 2 files changed, 421 insertions(+), 29 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 2d96887ac0..d725aed9d5 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1928,6 +1928,213 @@ enum entryID { power_op_xxspltw, + //--------------------------- + //Chapter 6 start from P241 + power_op_lvebx, + power_op_lvehx, + power_op_lvewx, + power_op_lvx, + power_op_lvxl, + power_op_stvebx, + power_op_stvehx, + power_op_stvewx, + power_op_stvx, + power_op_stvxl, + power_op_lvsl, + power_op_lvsr, + power_op_stvxl, + power_op_vpkpx, + power_op_vpksdss, + power_op_vpksdus, + power_op_vpkshss, + power_op_vpkshus, + power_op_vpkswss, + power_op_vpkswus, + power_op_vpkudus, + power_op_vpkudum, + power_op_vpkuhum, + power_op_vpkuhus, + power_op_vpkuwus, + power_op_vpkuwum, + power_op_vupkhpx, + power_op_vupklpx, + power_op_vupkhsb, + power_op_vupklsb, + power_op_vupkhsh, + power_op_vupklsh, + power_op_vupkhsw, + power_op_vupklsw, + power_op_vmrghb, + power_op_vmrglb, + power_op_vmrghh, + power_op_vmrglh, + power_op_vmrghw, + power_op_vmrglw, + power_op_vmrgew, + power_op_vmrgow, + power_op_vspltb, + power_op_vspltw, + power_op_vsplth, + power_op_vspltisb, + power_op_vspltish, + power_op_vspltisw, + power_op_vperm, + power_op_vpermr, + power_op_vsel, + power_op_vsldoi, + power_op_vsl, + power_op_vsr, + power_op_vslo, + power_op_vsro, + power_op_vslv, + power_op_vsrv, + power_op_vextractub, + power_op_vextractuh, + power_op_vextractuw, + power_op_vextractd, + power_op_vinsertb, + power_op_vinserth, + power_op_vinsertw, + power_op_vinsertd, + power_op_vaddcuw, + power_op_vaddshs, + power_op_vaddsbs, + power_op_vaddsws, + power_op_vaddudm, + power_op_vaddubm, + power_op_vadduhm, + power_op_vadduwm, + power_op_vaddubs, + power_op_vadduws, + power_op_vadduhs, + power_op_vadduqm, + power_op_vaddcuq, + power_op_vaddeuqm, + power_op_vaddecuq, + power_op_vsubcuw, + power_op_vsubshs, + power_op_vsubsbs, + power_op_vsubsws, + power_op_vsububm, + power_op_vsubuhm, + power_op_vsubudm, + power_op_vsubuwm, + power_op_vsububs, + power_op_vsubuws, + power_op_vsubuhs, + power_op_vsubuqm, + power_op_vsubcuq, + power_op_vsubeuqm, + power_op_vsubecuq, + power_op_vmulesb, + power_op_vmulosb, + power_op_vmuleub, + power_op_vmuloub, + power_op_vmulesh, + power_op_vmulosh, + power_op_vmuleuh, + power_op_vmulouh, + power_op_vmulesw, + power_op_vmulosw, + power_op_vmuleuw, + power_op_vmulouw, + power_op_vmuluwm, + power_op_vmhaddshs, + power_op_vmhraddshs, + power_op_vmladduhm, + power_op_vmsumubm, + power_op_vmsummbm, + power_op_vmsumshm, + power_op_vmsumshs, + power_op_vmsumuhm, + power_op_vmsumuhs, + power_op_vmsumudm, + power_op_vsumsws, + power_op_vsum2sws, + power_op_vsum4sbs, + power_op_vsum4shs, + power_op_vsum4ubs, + power_op_vnegw, + power_op_vnegd, + power_op_vextsb2w, + power_op_vextsh2w, + power_op_vextsb2d, + power_op_vextsh2d, + power_op_vextsw2d, + power_op_vavgsb, + power_op_vavgsw, + power_op_vavgsh, + power_op_vavgub, + power_op_vavguh, + power_op_vavguw, + power_op_vabsdub, + power_op_vabsduh, + power_op_vabsduw, + power_op_vmaxsb, + power_op_vmaxub, + power_op_vmaxsd, + power_op_vmaxud, + power_op_vmaxsh, + power_op_vmaxsw, + power_op_vmaxuh, + power_op_vmaxuw, + power_op_vminsb, + power_op_vminsd, + power_op_vminub, + power_op_vminud, + power_op_vminsh, + power_op_vminsw, + power_op_vminuh, + power_op_vminuw, + power_op_vcmpequb, + power_op_vcmpequh, + power_op_vcmpequw, + power_op_vcmpequd, + power_op_vcmpgtsb, + power_op_vcmpgtsd, + power_op_vcmpgtsh, + power_op_vcmpgtsw, + power_op_vcmpgtub, + power_op_vcmpgtud, + power_op_vcmpgtuh, + power_op_vcmpgtuw, + power_op_vcmpneb, + power_op_vcmpnezb, + power_op_vcmpneh, + power_op_vcmpnezh, + power_op_vcmpnew, + power_op_vcmpnezw, + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + power_op_ + // *********** // Steve note: diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index c7ba75f5bc..c75870aa55 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -209,8 +209,10 @@ list_of(fn(setFPMode))(fn(FRTP))(fn(FRAS))(fn(FRBP))(fn(FRCP))); extended_op_0[846] = power_entry(power_op_qvfcfids, "qvfcfids", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_0[928] = power_entry(power_op_fsmtp, "fpmr", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRBS))); extended_op_0[974] = power_entry(power_op_qvfcfidus, "qvfcfidus", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); - extended_op_4[0] = power_entry(power_op_qvfcmpeq, "qvfcmpeq", NULL, - list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))); + +/* deleted in Version 3.0B + extended_op_4[0] = power_entry(power_op_qvfcmpeq, "qvfcmpeq", NULL, + list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))); extended_op_4[1] = power_entry(power_op_qvfxxmadd, "qvfxxmadd", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))(fn(QFRCP))); extended_op_4[3] = power_entry(power_op_qvfxxcpnmadd, "qvfxxcpnmadd", NULL, @@ -228,12 +230,24 @@ list_of(fn(setFPMode))(fn(FRTP))(fn(FRAS))(fn(FRBP))(fn(FRCP))); extended_op_4[11] = power_entry(power_op_qvfxxnpmadd, "qvfxxnpmadd", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))(fn(QFRCP))); extended_op_4[12] = power_entry(power_op_qvfrsp, "qvfrsp", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); - extended_op_4[14] = power_entry(power_op_qvfctiw, "qvfctiw", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); + //extended_op_4[14] = power_entry(power_op_qvfctiw, "qvfctiw", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); + extended_op_4[15] = power_entry(power_op_qvfctiwz, "qvfctiwz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[17] = power_entry(power_op_qvfxmul, "qvfxmul", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QFRCP))); extended_op_4[20] = power_entry(power_op_qvfsub, "qvfsub", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))); extended_op_4[21] = power_entry(power_op_qvfadd, "qvfadd", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))); extended_op_4[23] = power_entry(power_op_qvfsel, "qvfsel", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))(fn(QFRCP))); +*/ + + + extended_op_4[0] = power_entry(power_op_vaddubm, "vaddubm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[2] = power_entry(power_op_vmaxub, "vmaxub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[6] = power_entry(power_op_vcmpequb, "vcmpequb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[7] = power_entry(power_op_vcmpneb, "vcmpneb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[8] = power_entry(power_op_vmuloub, "vmuloub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[12] = power_entry(power_op_vmrghb, "vmrghb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); + +extended_op_4[14] = power_entry(power_op_vpkuhum, "vpkuhum", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); #ifdef os_bgq extended_op_4[24] = power_entry(power_op_qvfre, "qvfre", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[25] = power_entry(power_op_qvfmul, "qvfmul", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QFRCP))); @@ -263,31 +277,190 @@ list_of(fn(setFPMode))(fn(FRTP))(fn(FRAS))(fn(FRBP))(fn(FRCP))); #endif extended_op_4[27] = power_entry(power_op_fxcsnsma, "fxcsnsma", NULL, list_of(fn(setFPMode))(fn(FRTP))(fn(FRAS))(fn(FRBP))(fn(FRCP))); -extended_op_4[32] = power_entry(power_op_qvfcmpgt, "qvfcmpgt", NULL, - list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))); -extended_op_4[37] = power_entry(power_op_qvesplati, "qvesplati", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QVD))); -extended_op_4[40] = power_entry(power_op_qvfneg, "fpneg", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); -extended_op_4[64] = power_entry(power_op_qvftstnan, "qvftstnan", NULL, - list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))); -extended_op_4[72] = power_entry(power_op_qvfmr, "qvfmr", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[32] = power_entry(power_op_vmhaddshs, "vmhaddshs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[33] = power_entry(power_op_vmhraddshs, "vmhraddshs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[34] = power_entry(power_op_vmladduhm, "vmladduhm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[35] = power_entry(power_op_vmsumudm, "vmsumudm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[36] = power_entry(power_op_vmsumubm, "vmsumubm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[37] = power_entry(power_op_vmsummbm, "vmsummbm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[38] = power_entry(power_op_vmsumuhm, "vmsumuhm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[39] = power_entry(power_op_vmsumuhs, "vmsumuhs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[40] = power_entry(power_op_vmsumshm, "vmsumshm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[41] = power_entry(power_op_vmsumshs, "vmsumshs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[42] = power_entry(power_op_vsel, "vsel", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[43] = power_entry(power_op_vperm, "vperm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[44] = power_entry(power_op_vsldoi, "vsldoi", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(SHB))); +extended_op_4[59] = power_entry(power_op_vpermr, "vpermr", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[60] = power_entry(power_op_vaddeuqm, "vaddeuqm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[61] = power_entry(power_op_vaddecuq, "vaddecuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[62] = power_entry(power_op_vsubeuqm, "vsubeuqm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[63] = power_entry(power_op_vsubecuq, "vsubecuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[64] = power_entry(power_op_vadduhm, "vadduhm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[66] = power_entry(power_op_vmaxuh, "vmaxuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[70] = power_entry(power_op_vcmpequh, "vcmpequh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[71] = power_entry(power_op_vcmpneh, "vcmpneh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[72] = power_entry(power_op_vmulouh, "vmulouh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[76] = power_entry(power_op_vmrghh, "vmrghh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[78] = power_entry(power_op_vpkuwum, "vpkuwum", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[96] = power_entry(power_op_qvfcmplt, "qvfcmplt", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))); +extended_op_4[128] = power_entry(power_op_vadduwm, "vadduwm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[130] = power_entry(power_op_vmaxuw, "vmaxuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[133] = power_entry(power_op_qvgpci, "qvgpci", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QGPC))); -extended_op_4[136] = power_entry(power_op_qvfnabs, "qvfnabs", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); -extended_op_4[142] = power_entry(power_op_qvfctiwu, "qvfctiwu", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[134] = power_entry(power_op_vcmpequw, "vcmpequw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[135] = power_entry(power_op_vcmpnew, "vcmpnew", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[136] = power_entry(power_op_vmulouw, "vmulouw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[137] = power_entry(power_op_vmuluwm, "vmuluwm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[140] = power_entry(power_op_vmrghw, "vmrghw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[142] = power_entry(power_op_vpkuhus, "vpkuhus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[143] = power_entry(power_op_qvfctiwuz, "qvfctiwuz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); -extended_op_4[264] = power_entry(power_op_qvfabs, "fpabs", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); -extended_op_4[392] = power_entry(power_op_qvfrin, "qvfrin", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[192] = power_entry(power_op_vaddudm, "vaddudm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[194] = power_entry(power_op_vmaxud, "vmaxud", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[199] = power_entry(power_op_vcmpequd, "vcmpequd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[206] = power_entry(power_op_vpkuwus, "vpkuwus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[256] = power_entry(power_op_vadduqm, "vadduqm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[258] = power_entry(power_op_vmaxsb, "vmaxsb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[263] = power_entry(power_op_vcmpnezb, "vcmpnezb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[264] = power_entry(power_op_vmulosb, "vmulosb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[268] = power_entry(power_op_vmrglb, "vmrglb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[270] = power_entry(power_op_vpkshus, "vpkshus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[320] = power_entry(power_op_vaddcuq, "vaddcuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[322] = power_entry(power_op_vmaxsh, "vmaxsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[327] = power_entry(power_op_vcmpnezh, "vcmpnezh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[328] = power_entry(power_op_vmulosh, "vmulosh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[332] = power_entry(power_op_vmrglh, "vmrglh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[334] = power_entry(power_op_vpkswus, "vpkswus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[384] = power_entry(power_op_vaddcuw, "vaddcuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[386] = power_entry(power_op_vmaxsw, "vmaxsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[391] = power_entry(power_op_vcmpnezw, "vcmpnezw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[392] = power_entry(power_op_vmulosw, "vmulosw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[396] = power_entry(power_op_vmrglw, "vmrglw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[398] = power_entry(power_op_vpkshss, "vpkshss", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[424] = power_entry(power_op_qvfriz, "qvfriz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[450] = power_entry(power_op_vmaxsd, "vmaxsd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[452] = power_entry(power_op_vsl, "vsl", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[456] = power_entry(power_op_qvfrip, "qvfrip", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); -extended_op_4[488] = power_entry(power_op_qvfrim, "qvfrim", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[462] = power_entry(power_op_vpkswss, "vpkswss", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[512] = power_entry(power_op_vaddubs, "vaddubs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[514] = power_entry(power_op_vminub, "vminub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[518] = power_entry(power_op_vcmpgtub, "vcmpgtub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[520] = power_entry(power_op_vmuleub, "vmuleub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[524] = power_entry(power_op_vspltb, "vspltb", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[525] = power_entry(power_op_vextractub, "vextractub", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[526] = power_entry(power_op_vupkhsb, "vupkhsb", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[576] = power_entry(power_op_vadduhs, "vadduhs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[578] = power_entry(power_op_vminuh, "vminuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[582] = power_entry(power_op_vcmpgtuh, "vcmpgtuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[584] = power_entry(power_op_vmuleuh, "vmuleuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[588] = power_entry(power_op_vsplth, "vsplth", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[589] = power_entry(power_op_vextractuh, "vextractuh", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[590] = power_entry(power_op_vupkhsh, "vupkhsh", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[642] = power_entry(power_op_vminuw, "vminuw", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[640] = power_entry(power_op_vadduws, "vadduws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[646] = power_entry(power_op_vcmpgtuw, "vcmpgtuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[648] = power_entry(power_op_vmuleuw, "vmuleuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[652] = power_entry(power_op_vspltw, "vspltw", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[653] = power_entry(power_op_vextractuw, "vextractuw", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[654] = power_entry(power_op_vupklsb, "vupklsb", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[706] = power_entry(power_op_vminud, "vminud", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[708] = power_entry(power_op_vsr, "vsr", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[711] = power_entry(power_op_vcmpgtud, "vcmpgtud", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[717] = power_entry(power_op_vextractd, "vextractd", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[718] = power_entry(power_op_vupklsh, "vupklsh", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[768] = power_entry(power_op_vaddsbs, "vaddsbs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[770] = power_entry(power_op_vminsb, "vminsb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[774] = power_entry(power_op_vcmpgtsb, "vcmpgtsb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[776] = power_entry(power_op_vmulesb, "vmulesb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[780] = power_entry(power_op_vspltisb, "vspltisb", NULL, list_of(fn(VRT))(fn(SIM))); +extended_op_4[781] = power_entry(power_op_vinsertb, "vinsertb", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[782] = power_entry(power_op_vpkpx, "vpkpx", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[814] = power_entry(power_op_qvfctid, "qvfctid", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[815] = power_entry(power_op_qvfctidz, "qvfctidz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); -extended_op_4[846] = power_entry(power_op_qvfcfid, "qvfcfid", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[832] = power_entry(power_op_vaddshs, "vaddshs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[834] = power_entry(power_op_vminsh, "vminsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[838] = power_entry(power_op_vcmpgtsh, "vcmpgtsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[840] = power_entry(power_op_vmulesh, "vmulesh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[844] = power_entry(power_op_vspltish, "vspltish", NULL, list_of(fn(VRT))(fn(SIM))); +extended_op_4[845] = power_entry(power_op_vinserth, "vinserth", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[846] = power_entry(power_op_vupkhpx, "vupkhpx", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[896] = power_entry(power_op_vaddsws, "vaddsws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[898] = power_entry(power_op_vminsw, "vminsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[902] = power_entry(power_op_vcmpgtsw, "vcmpgtsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[904] = power_entry(power_op_vmulesw, "vmulesw", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[908] = power_entry(power_op_vspltisw, "vspltisw", NULL, list_of(fn(VRT))(fn(SIM))); +extended_op_4[909] = power_entry(power_op_vinsertw, "vinsertw", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[942] = power_entry(power_op_qvfctidu, "qvfctidu", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[943] = power_entry(power_op_qvfctiduz, "qvfctiduz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); -extended_op_4[974] = power_entry(power_op_qvfcfidu, "qvfcfidu", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); -extended_op_19[0] = power_entry(power_op_mcrf, "mcrf", NULL, list_of(fn(BF))(fn(BFA))); +extended_op_4[962] = power_entry(power_op_vminsd, "vminsd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[967] = power_entry(power_op_vcmpgtsd, "vcmpgtsd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[973] = power_entry(power_op_vinsertd, "vinsertd", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); +extended_op_4[974] = power_entry(power_op_vupklpx, "vupklpx", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[1024] = power_entry(power_op_vsububm, "vsububm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1026] = power_entry(power_op_vavgub, "vavgub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1027] = power_entry(power_op_vabsdub, "vabsdub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1030] = power_entry(power_op_vcmpequb, "vcmpequb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1031] = power_entry(power_op_vcmpneb, "vcmpneb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1036] = power_entry(power_op_vslo, "vslo", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1088] = power_entry(power_op_vsubuhm, "vsubuhm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1090] = power_entry(power_op_vavguh, "vavguh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1091] = power_entry(power_op_vabsduh, "vabsduh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1094] = power_entry(power_op_vcmpequh, "vcmpequh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1095] = power_entry(power_op_vcmpneh, "vcmpneh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1100] = power_entry(power_op_vsro, "vsro", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1102] = power_entry(power_op_vpkudum, "vpkudum", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1152] = power_entry(power_op_vsubuwm, "vsubuwm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1154] = power_entry(power_op_vavguw, "vavguw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1155] = power_entry(power_op_vabsduw, "vabsduw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1158] = power_entry(power_op_vcmpequw, "vcmpequw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1159] = power_entry(power_op_vcmpnew, "vcmpnew", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1216] = power_entry(power_op_vsubudm, "vsubudm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1223] = power_entry(power_op_vcmpequh, "vcmpequh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1230] = power_entry(power_op_vpkudus, "vpkudus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1280] = power_entry(power_op_vsubuqm, "vsubuqm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1282] = power_entry(power_op_vavgsb, "vavgsb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1287] = power_entry(power_op_vcmpnezb, "vcmpnezb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1344] = power_entry(power_op_vsubcuq, "vsubcuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1346] = power_entry(power_op_vavgsh, "vavgsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1351] = power_entry(power_op_vcmpnezh, "vcmpnezh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1358] = power_entry(power_op_vpksdus, "vpksdus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1408] = power_entry(power_op_vsubcuw, "vsubcuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1410] = power_entry(power_op_vavgsw, "vavgsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1415] = power_entry(power_op_vcmpnezw, "vcmpnezw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1486] = power_entry(power_op_vpksdss, "vpksdss", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1536] = power_entry(power_op_vsububs, "vsububs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); + + +//extended_op_4[1538] = power_entry(power_op_extended, "extended", fn(extended_op_4_1538), operandSpec())); + + +extended_op_4[1542] = power_entry(power_op_vcmpgtub, "vcmpgtub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1544] = power_entry(power_op_vsum4ubs, "vsum4ubs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1600] = power_entry(power_op_vsubuhs, "vsubuhs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1606] = power_entry(power_op_vcmpgtuh, "vcmpgtuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1608] = power_entry(power_op_vsum4shs, "vsum4shs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1614] = power_entry(power_op_vupkhsw, "vupkhsw", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[1664] = power_entry(power_op_vsubuws, "vsubuws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1670] = power_entry(power_op_vcmpgtuw, "vcmpgtuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1672] = power_entry(power_op_vsum2sws, "vsum2sws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1676] = power_entry(power_op_vmrgow, "vmrgow", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1735] = power_entry(power_op_vcmpgtub, "vcmpgtub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1742] = power_entry(power_op_vupklsw, "vupklsw", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[1792] = power_entry(power_op_vsubsbs, "vsubsbs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1796] = power_entry(power_op_vsrv, "vsrv", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1798] = power_entry(power_op_vcmpequh, "vcmpequh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1800] = power_entry(power_op_vsum4sbs, "vsum4sbs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1856] = power_entry(power_op_vsubshs, "vsubshs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1860] = power_entry(power_op_vslv, "vslv", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1862] = power_entry(power_op_vcmpgtsh, "vcmpgtsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1920] = power_entry(power_op_vsubsws, "vsubsws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1928] = power_entry(power_op_vsumsws, "vsumsws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1932] = power_entry(power_op_vmrgew, "vmrgew", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1956] = power_entry(power_op_vcmpgtsw, "vcmpgtsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1991] = power_entry(power_op_vcmpgtsd, "vcmpgtsd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); + + + + extended_op_19[0] = power_entry(power_op_mcrf, "mcrf", NULL, list_of(fn(BF))(fn(BFA))); extended_op_19[16] = power_entry(power_op_bclr, "bclr", NULL, list_of(fn(BO))(fn(BI))(fn(LK))); extended_op_19[18] = power_entry(power_op_rfid, "rfid", NULL, operandSpec()); extended_op_19[33] = power_entry(power_op_crnor, "crnor", NULL, list_of(fn(BT))(fn(BA))(fn(BB))); @@ -313,8 +486,8 @@ extended_op_30[0] = power_entry(power_op_rldicl, "rldicl", NULL, list_of(fn(RA)) power_entry::extended_op_31[0] = power_entry(power_op_cmp, "cmp", NULL, list_of(fn(BF))(fn(L))(fn(RA))(fn(RB))); extended_op_31[4] = power_entry(power_op_tw, "tw", NULL, list_of(fn(TO))(fn(RA))(fn(RB))); -extended_op_31[6] = power_entry(power_op_qvlpcrsx, "qvlpcrsx", NULL, list_of(fn(QFRTP))(fn(LX))); -extended_op_31[7] = power_entry(power_op_qvlfcsx, "qvlfcsx", NULL, list_of(fn(QFRTP))(fn(LX))); +extended_op_31[6] = power_entry(power_op_lvsl, "lvsl", NULL, list_of(fn(VRT))(fn(RA))(fn(RB))); +extended_op_31[7] = power_entry(power_op_lvebx, "lvebx", NULL, list_of(fn(VRT))(fn(RA))(fn(RB))); extended_op_31[8] = power_entry(power_op_subfc, "subfc", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[9] = power_entry(power_op_mulhdu, "mulhdu", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[10] = power_entry(power_op_addc, "addc", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); @@ -330,7 +503,8 @@ extended_op_31[27] = power_entry(power_op_sld, "sld", NULL, list_of(fn(RS))(fn(R extended_op_31[28] = power_entry(power_op_and, "and", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[29] = power_entry(power_op_maskg, "maskg", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[32] = power_entry(power_op_cmpl, "cmpl", NULL, list_of(fn(BF))(fn(L))(fn(RA))(fn(RB))); -extended_op_31[39] = power_entry(power_op_qvlfcsux, "qvlfcsux", NULL, list_of(fn(QFRTP))(fn(LUX))); +extended_op_31[38] = power_entry(power_op_lvsr, "lvsr", NULL, list_of(fn(VRT))(fn(RA))(fn(RB))); +extended_op_31[39] = power_entry(power_op_lvehx, "lvehx", NULL, list_of(fn(VRT))(fn(RA))(fn(RB))); extended_op_31[40] = power_entry(power_op_subf, "subf", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[53] = power_entry(power_op_ldux, "ldux", NULL, list_of(fn(RT))(fn(LUX))); extended_op_31[54] = power_entry(power_op_dcbst, "dcbst", NULL, list_of(fn(RA))(fn(RB))); @@ -340,7 +514,7 @@ extended_op_31[60] = power_entry(power_op_andc, "andc", NULL, list_of(fn(RS))(fn extended_op_31[62] = power_entry(power_op_wait, "wait", NULL, list_of(fn(WC))); extended_op_31[68] = power_entry(power_op_td, "td", NULL, list_of(fn(TO))(fn(RA))(fn(RB))); extended_op_31[70] = power_entry(power_op_qvlpcrdx, "qvlpcrdx", NULL, list_of(fn(QFRTP))(fn(LX))); -extended_op_31[71] = power_entry(power_op_qvlfcdx, "qvlfcdx", NULL, list_of(fn(QFRTP))(fn(LX))); +extended_op_31[71] = power_entry(power_op_lvewx, "lvewx", NULL, list_of(fn(VRT))(fn(RA))(fn(RB))); extended_op_31[73] = power_entry(power_op_mulhd, "mulhd", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[75] = power_entry(power_op_mulhw, "mulhw", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[78] = power_entry(power_op_lxsiwax, "lxsiwax", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); @@ -348,7 +522,7 @@ extended_op_31[83] = power_entry(power_op_mfmsr, "mfmsr", NULL, list_of(fn(RT))) extended_op_31[84] = power_entry(power_op_ldarx, "ldarx", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[86] = power_entry(power_op_dcbf, "dcbf", NULL, list_of(fn(RA))(fn(RB))); extended_op_31[87] = power_entry(power_op_lbzx, "lbzx", NULL, list_of(fn(RT))(fn(LX))); -extended_op_31[103] = power_entry(power_op_qvlfcdux, "qvlfcdux", NULL, list_of(fn(QFRTP))(fn(LUX))); +extended_op_31[103] = power_entry(power_op_lvx, "lvx", NULL, list_of(fn(VRT))(fn(RA))(fn(RB))); extended_op_31[104] = power_entry(power_op_neg, "neg", NULL, list_of(fn(RT))(fn(RA))(fn(OE))(fn(Rc))); extended_op_31[107] = power_entry(power_op_mul, "mul", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[118] = power_entry(power_op_clf, "clf", NULL, list_of(fn(RA))(fn(RB))(fn(Rc))); @@ -356,10 +530,10 @@ extended_op_31[119] = power_entry(power_op_lbzux, "lbzux", NULL, list_of(fn(RT)) extended_op_31[122] = power_entry(power_op_popcntb, "popcntb", NULL, list_of(fn(RS))(fn(RA))); extended_op_31[124] = power_entry(power_op_nor, "nor", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[133] = power_entry(power_op_qvstfcsxi, "qvstfcsxi", NULL, list_of(fn(QFRSP))(fn(STX))); -extended_op_31[135] = power_entry(power_op_qvstfcsx, "qvstfcsx", NULL, list_of(fn(QFRSP))(fn(STX))); +extended_op_31[135] = power_entry(power_op_stvebx, "stvebx", NULL, list_of(fn(VRS))(fn(RA))(fn(RB))); extended_op_31[136] = power_entry(power_op_subfe, "subfe", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[138] = power_entry(power_op_adde, "adde", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); -extended_op_31[140] = power_entry(power_op_stxsiwx, "stxsiwx", NULL, list_of(fn(XS))(fn(RA))(fn(RB))); +extended_op_31[140] = power_entry(power_op_stxsiwx, "stxsiwx", NULL, list_of(fn(VRS))(fn(RA))(fn(RB))); extended_op_31[142] = power_entry(power_op_lfssx, "lfssx", NULL, list_of(fn(FRTS))(fn(LX))); extended_op_31[144] = power_entry(power_op_mtcrf, "mtcrf", NULL, list_of(fn(RS))(fn(FXM))(fn(Rc))); extended_op_31[149] = power_entry(power_op_stdx, "stdx", NULL, list_of(fn(RS))(fn(STX))); @@ -368,13 +542,13 @@ extended_op_31[151] = power_entry(power_op_stwx, "stwx", NULL, list_of(fn(RS))(f extended_op_31[152] = power_entry(power_op_slq, "slq", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[153] = power_entry(power_op_sle, "sle", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[165] = power_entry(power_op_qvstfcsuxi, "qvstfcsuxi", NULL, list_of(fn(QFRSP))(fn(STUX))); -extended_op_31[167] = power_entry(power_op_qvstfcsux, "qvstfcsux", NULL, list_of(fn(QFRSP))(fn(STUX))); +extended_op_31[167] = power_entry(power_op_stvehx, "stvehx", NULL, list_of(fn(VRS))(fn(RA))(fn(RB))); extended_op_31[174] = power_entry(power_op_lfssux, "lfssux", NULL, list_of(fn(FRTS))(fn(LUX))); extended_op_31[181] = power_entry(power_op_stdux, "stdux", NULL, list_of(fn(RS))(fn(STUX))); extended_op_31[183] = power_entry(power_op_stwux, "stwux", NULL, list_of(fn(RS))(fn(STUX))); extended_op_31[184] = power_entry(power_op_sliq, "sliq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); extended_op_31[197] = power_entry(power_op_qvstfcdxi, "qvstfcdxi", NULL, list_of(fn(QFRSP))(fn(STX))); -extended_op_31[199] = power_entry(power_op_qvstfcdx, "qvstfcdx", NULL, list_of(fn(QFRSP))(fn(STX))); +extended_op_31[199] = power_entry(power_op_stvewx, "stvewx", NULL, list_of(fn(VRS))(fn(RA))(fn(RB))); extended_op_31[202] = power_entry(power_op_addze, "addze", NULL, list_of(fn(RT))(fn(RA))(fn(OE))(fn(Rc))); extended_op_31[206] = power_entry(power_op_lfsdx, "lfsdx", NULL, list_of(fn(FRTS))(fn(LX))); extended_op_31[214] = power_entry(power_op_stdcx_rc, "stdcx.", NULL, list_of(fn(RS))(fn(STX))); @@ -382,7 +556,7 @@ extended_op_31[215] = power_entry(power_op_stbx, "stbx", NULL, list_of(fn(RS))(f extended_op_31[216] = power_entry(power_op_sllq, "sllq", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[217] = power_entry(power_op_sleq, "sleq", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[229] = power_entry(power_op_qvstfcduxi, "qvstfcduxi", NULL, list_of(fn(QFRSP))(fn(STUX))); -extended_op_31[231] = power_entry(power_op_qvstfcdux, "qvstfcdux", NULL, list_of(fn(QFRSP))(fn(STUX))); +extended_op_31[231] = power_entry(power_op_stvx, "stvx", NULL, list_of(fn(VRS))(fn(RA))(fn(RB))); extended_op_31[232] = power_entry(power_op_subfme, "subfme", NULL, list_of(fn(RT))(fn(RA))(fn(OE))(fn(Rc))); extended_op_31[233] = power_entry(power_op_mulld, "mulld", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[234] = power_entry(power_op_addme, "addme", NULL, list_of(fn(RT))(fn(RA))(fn(OE))(fn(Rc))); @@ -412,6 +586,7 @@ extended_op_31[334] = power_entry(power_op_lfxdx, "lfxdx", NULL, list_of(fn(FRTP extended_op_31[339] = power_entry(power_op_mfspr, "mfspr", NULL, list_of(fn(RT))(fn(spr))(fn(Rc))); extended_op_31[341] = power_entry(power_op_lwax, "lwax", NULL, list_of(fn(RT))(fn(LX))); extended_op_31[343] = power_entry(power_op_lhax, "lhax", NULL, list_of(fn(RT))(fn(LX))); +extended_op_31[359] = power_entry(power_op_lvxl, "lvxl", NULL, list_of(fn(VRT))(fn(RA))(fn(RB))); extended_op_31[360] = power_entry(power_op_abs, "abs", NULL, list_of(fn(RT))(fn(RA))(fn(OE))(fn(Rc))); extended_op_31[363] = power_entry(power_op_divs, "divs", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[364] = power_entry(power_op_lxvwsx, "lxvwsx", NULL, list_of(fn(XT))(fn(RA))(fn(RB))); @@ -439,6 +614,7 @@ extended_op_31[462] = power_entry(power_op_lfpdx, "lfpdx", NULL, list_of(fn(FRTP extended_op_31[467] = power_entry(power_op_mtspr, "mtspr", NULL, list_of(fn(RS))(fn(spr))(fn(Rc))); extended_op_31[470] = power_entry(power_op_dcbi, "dcbi", NULL, list_of(fn(RA))(fn(RB))); extended_op_31[476] = power_entry(power_op_nand, "nand", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); +extended_op_31[487] = power_entry(power_op_stvxl, "stvxl", NULL, list_of(fn(VRS))(fn(RA))(fn(RB))); extended_op_31[488] = power_entry(power_op_nabs, "nabs", NULL, list_of(fn(RT))(fn(RA))(fn(OE))(fn(Rc))); extended_op_31[489] = power_entry(power_op_divd, "divd", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); extended_op_31[491] = power_entry(power_op_divw, "divw", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(OE))(fn(Rc))); @@ -909,7 +1085,16 @@ extended_op_63[868] = power_entry(power_op_xsiexpqp, "xsiexpqp", NULL, list_of(f //------------------------- //Third level opcode follows: /* - extended_op_60_347[0] = power_entry(power_op_xsxexpdp, "xsxexpdp", NULL, list_of(fn(RT))(fn(XB))); + + extended_op_4_1538[6] = power_entry(power_op_vnegw, "vnegw", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[7] = power_entry(power_op_vnegd, "vnegd", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[16] = power_entry(power_op_vextsb2w, "vextsb2w", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[17] = power_entry(power_op_vextsh2w, "vextsh2w", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[24] = power_entry(power_op_vextsb2d, "vextsb2d", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[25] = power_entry(power_op_vextsh2d, "vextsh2d", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[26] = power_entry(power_op_vextsw2d, "vextsw2d", NULL, list_of(fn(VRT))(fn(VRB))); + + extended_op_60_347[0] = power_entry(power_op_xsxexpdp, "xsxexpdp", NULL, list_of(fn(RT))(fn(XB))); extended_op_60_347[1] = power_entry(power_op_xsxsigdp, "xsxsigdp", NULL, list_of(fn(RT))(fn(XB))); extended_op_60_347[16] = power_entry(power_op_xscvdphp, "xscvhpdp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60_347[17] = power_entry(power_op_xscvhphp, "xscvdphp", NULL, list_of(fn(XT))(fn(XB))); From 42934a133f021ffb070ac0500fac9fca5ceb9f03 Mon Sep 17 00:00:00 2001 From: Xiaozhu Meng Date: Fri, 19 Oct 2018 11:21:40 -0500 Subject: [PATCH 14/16] Adding multiple items for Power 8 instruction decoding 1. VSR registers 2. Decoding for several operand fields 3. Decoding for extended op 60 --- common/h/dyn_regs.h | 68 ++++++++++++++ common/h/entryIDs.h | 4 +- instructionAPI/src/InstructionDecoder-power.C | 90 +++++++++++++++---- instructionAPI/src/InstructionDecoder-power.h | 3 + 4 files changed, 146 insertions(+), 19 deletions(-) diff --git a/common/h/dyn_regs.h b/common/h/dyn_regs.h index 32d5951002..555be6bbb6 100644 --- a/common/h/dyn_regs.h +++ b/common/h/dyn_regs.h @@ -960,6 +960,7 @@ namespace Dyninst const signed int FPR = 0x00020000; const signed int FSR = 0x00040000; const signed int SPR = 0x00080000; + const signed int VSR = 0x00000000; DEF_REGISTER(r0, 0 | GPR | Arch_ppc64, "ppc64"); DEF_REGISTER(r1, 1 | GPR | Arch_ppc64, "ppc64"); @@ -1171,6 +1172,73 @@ namespace Dyninst DEF_REGISTER(ppr, 896 | SPR | Arch_ppc64, "ppc64"); DEF_REGISTER(ppr32, 898 | SPR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr0, 0 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr1, 1 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr2, 2 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr3, 3 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr4, 4 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr5, 5 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr6, 6 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr7, 7 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr8, 8 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr9, 9 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr10, 10 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr11, 11 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr12, 12 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr13, 13 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr14, 14 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr15, 15 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr16, 16 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr17, 17 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr18, 18 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr19, 19 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr20, 20 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr21, 21 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr22, 22 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr23, 23 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr24, 24 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr25, 25 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr26, 26 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr27, 27 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr28, 28 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr29, 29 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr30, 30 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr31, 31 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr32, 32 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr33, 33 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr34, 34 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr35, 35 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr36, 36 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr37, 37 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr38, 38 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr39, 39 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr40, 40 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr41, 41 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr42, 42 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr43, 43 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr44, 44 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr45, 45 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr46, 46 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr47, 47 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr48, 48 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr49, 49 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr50, 50 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr51, 51 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr52, 52 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr53, 53 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr54, 54 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr55, 55 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr56, 56 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr57, 57 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr58, 58 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr59, 59 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr60, 60 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr61, 61 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr62, 62 | VSR | Arch_ppc64, "ppc64"); + DEF_REGISTER(vsr63, 63 | VSR | Arch_ppc64, "ppc64"); + + + } diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index d725aed9d5..9cc3d0048c 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1942,7 +1942,6 @@ enum entryID { power_op_stvxl, power_op_lvsl, power_op_lvsr, - power_op_stvxl, power_op_vpkpx, power_op_vpksdss, power_op_vpksdus, @@ -2104,6 +2103,7 @@ enum entryID { power_op_vcmpnezh, power_op_vcmpnew, power_op_vcmpnezw, +/* power_op_ power_op_ power_op_ @@ -2134,7 +2134,7 @@ enum entryID { power_op_ power_op_ power_op_ - +*/ // *********** // Steve note: diff --git a/instructionAPI/src/InstructionDecoder-power.C b/instructionAPI/src/InstructionDecoder-power.C index 650ad406ae..d3b6fbee4e 100644 --- a/instructionAPI/src/InstructionDecoder-power.C +++ b/instructionAPI/src/InstructionDecoder-power.C @@ -494,58 +494,120 @@ namespace Dyninst /***** BEGIN: For new vector instructions *****/ void InstructionDecoder_power::XT() { - insn_in_progress->appendOperand(makeRTExpr(), false, true); + // TODO: Format DQ has a different encoding. + // The single T bit is at bit 28, instaed of bit 31. + unsigned id = field<6, 10>(insn) + 32 * field<31, 31>(insn); + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + false, + true); } void InstructionDecoder_power::XS() { - insn_in_progress->appendOperand(makeRTExpr(), false, true); + // TODO: Format DQ has a different encoding. + // The single T bit is at bit 28, instaed of bit 31. + unsigned id = field<6, 10>(insn) + 32 * field<31, 31>(insn); + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + true, + false); } void InstructionDecoder_power::XA() { - insn_in_progress->appendOperand(makeRTExpr(), false, true); + unsigned id = field<11, 15>(insn) + 32 * field<29, 29>(insn); + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + true, + false); } void InstructionDecoder_power::XB() { - insn_in_progress->appendOperand(makeRTExpr(), false, true); + unsigned id = field<16, 20>(insn) + 32 * field<30, 30>(insn); + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + true, + false); } void InstructionDecoder_power::VRT() { - insn_in_progress->appendOperand(makeRTExpr(), false, true); + unsigned id = field<6, 10>(insn) + 32; + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + false, + true); + } + void InstructionDecoder_power::VRS() + { + unsigned id = field<6, 10>(insn) + 32; + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + true, + false); } void InstructionDecoder_power::VRA() { - insn_in_progress->appendOperand(makeRTExpr(), false, true); + unsigned id = field<11, 15>(insn) + 32; + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + true, + false); } void InstructionDecoder_power::VRB() { - insn_in_progress->appendOperand(makeRTExpr(), false, true); + unsigned id = field<16, 20>(insn) + 32 ; + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + true, + false); } + void InstructionDecoder_power::VRC() + { + unsigned id = field<21, 25>(insn) + 32 ; + insn_in_progress->appendOperand( + makeRegisterExpression(makePowerRegID(ppc64::vsr0, id)), + true, + false); + } + void InstructionDecoder_power::UIM() { + assert(0); insn_in_progress->appendOperand(makeRTExpr(), false, true); } - void InstructionDecoder_power::DCMX() + void InstructionDecoder_power::SIM() { + assert(0); insn_in_progress->appendOperand(makeRTExpr(), false, true); } - void InstructionDecoder_power::VRS() + + void InstructionDecoder_power::DCMX() { + assert(0); insn_in_progress->appendOperand(makeRTExpr(), false, true); } void InstructionDecoder_power::RO() { + assert(0); insn_in_progress->appendOperand(makeRTExpr(), false, true); } void InstructionDecoder_power::R() { + assert(0); insn_in_progress->appendOperand(makeRTExpr(), false, true); } void InstructionDecoder_power::RMC() { + assert(0); insn_in_progress->appendOperand(makeRTExpr(), false, true); } void InstructionDecoder_power::EX() { + assert(0); + insn_in_progress->appendOperand(makeRTExpr(), false, true); + } + void InstructionDecoder_power::SHB() + { + assert(0); insn_in_progress->appendOperand(makeRTExpr(), false, true); } @@ -788,14 +850,8 @@ using namespace boost::assign; // extended_op_60 needs revisiting const power_entry& InstructionDecoder_power::extended_op_60() { - unsigned int xo = field<26, 30>(insn); - if(xo <= 31) - { - power_table::const_iterator found = power_entry::extended_op_60.find(xo); - if(found != power_entry::extended_op_60.end()) - return found->second; - } - return power_entry::extended_op_60[field<21, 30>(insn)]; + unsigned int xo = field<21, 29>(insn); + return power_entry::extended_op_60[xo]; } // extended_op_61 needs revisiting const power_entry& InstructionDecoder_power::extended_op_61() diff --git a/instructionAPI/src/InstructionDecoder-power.h b/instructionAPI/src/InstructionDecoder-power.h index 81b584bbbf..4d2a921254 100644 --- a/instructionAPI/src/InstructionDecoder-power.h +++ b/instructionAPI/src/InstructionDecoder-power.h @@ -172,13 +172,16 @@ namespace Dyninst { void VRT(); void VRA(); void VRB(); + void VRC(); void UIM(); + void SIM(); void DCMX(); void VRS(); void RO(); void R(); void RMC(); void EX(); + void SHB(); const power_entry& extended_op_0(); From e0b47787f00797171ceded23427c0b4abd25dfcc Mon Sep 17 00:00:00 2001 From: Yuhan Xie Date: Tue, 23 Oct 2018 15:23:08 -0500 Subject: [PATCH 15/16] 10/23 Chapter 6 new: keyword CY, 21th bit keyword ST, 16th bit keyword SIX, 17-20 keyword DRM, 18-20 keyword RM, 19-20 (ST and SIX always show up together) keyword PS, 22th bit Summary of Changable fields: UIM: 11-15: 4-906 vctuxs, 4-970 vctsxs, 12-15: 4-524 vspltb 4-525 vextractub 4-589 vextractuh 4-653 vextractuw 4-717 vextractd 4-781 vinsertb 4-845 vinserth 4-909 vinsertw 4-973 vinsertd 4-588 vsplth 13-15 4-652 vspltw 14-15 Rc bit: for opcode 4: always 21th bit 6-bit(26-31) ext opcode for opcode 4: 32-47, 59-63 --- common/h/entryIDs.h | 130 +++++++++++++++++--- instructionAPI/src/power_opcode_tables.C | 145 ++++++++++++++++++++++- 2 files changed, 253 insertions(+), 22 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index 9cc3d0048c..a937456f41 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -2103,23 +2103,118 @@ enum entryID { power_op_vcmpnezh, power_op_vcmpnew, power_op_vcmpnezw, -/* - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ - power_op_ + power_op_vand, + power_op_vandc, + power_op_veqv, + power_op_vnand, + power_op_vorc, + power_op_vnor, + power_op_vor, + power_op_vxor, + power_op_vprtybw, + power_op_vprtybd, + power_op_vprtybq, + power_op_vrlb, + power_op_vrlw, + power_op_vrld, + power_op_vslb, + power_op_vslh, + power_op_vslw, + power_op_vsld, + power_op_vsrb, + power_op_vsrh, + power_op_vsrw, + power_op_vsrd, + power_op_vsrab, + power_op_vsrah, + power_op_vsraw, + power_op_vsrad, + power_op_vrlwnm, + power_op_vrlwmi, + power_op_vrldnm, + power_op_vrldmi, + power_op_vaddfp, + power_op_vsubfp, + power_op_vmaddfp, + power_op_vmaxfp, + power_op_vctsxs, + power_op_vctuxs, + power_op_vcfsx, + power_op_vcfux, + power_op_vrfim, + power_op_vrfin, + power_op_vrfip, + power_op_vrfiz, + power_op_vcmpbfp, + power_op_vcmpeqfp, + power_op_vcmpgefp, + power_op_vcmpgtfp, + power_op_vexptefp, + power_op_vlogefp, + power_op_vrefp, + power_op_vrsqrtefp, + power_op_vcipher, + power_op_vcipherlast, + power_op_vncipher, + power_op_vncipherlast, + power_op_vsbox, + power_op_vshasigmad, + power_op_vshasigmaw, + power_op_vpmsumb, + power_op_vpmsumd, + power_op_vpmsumh, + power_op_vpmsumw, + power_op_vpermxor, + power_op_vgbbd, + power_op_vclzb, + power_op_vclzh, + power_op_vclzw, + power_op_vclzd, + power_op_vctzb, + power_op_vctzh, + power_op_vctzw, + power_op_vctzd, + power_op_vclzlsbb, + power_op_vctzlsbb, + power_op_vextublx, + power_op_vextuhlx, + power_op_vextubrx, + power_op_vextuhrx, + power_op_vextuwlx, + power_op_vextuwrx, + power_op_vpopcntb, + power_op_vpopcntd, + power_op_vpopcnth, + power_op_vpopcntw, + power_op_vbpermd, + power_op_vbpermq, + power_op_bcdadd, + power_op_bcdsub, + power_op_bcdcfz, + power_op_bcdctn, + power_op_bcdctz, + power_op_bcdcfsq, + power_op_bcdctsq, + power_op_vmul10uq, + power_op_vmul10cuq, + power_op_vmul10euq, + power_op_vmul10ecuq, + power_op_bcdcpsgn, + power_op_bcdsetsgn, + power_op_bcds, + power_op_bcdus, + power_op_bcdtrunc, + power_op_bcdutrunc, + power_op_mtvscr, + power_op_mfvscr, + power_op_addex, + power_op_mffs, + power_op_mffsce, + power_op_mffscdrn, + power_op_mffscdrni, + power_op_mffscrn, + power_op_mffscrni, + power_op_mffsl, power_op_ power_op_ power_op_ @@ -2134,7 +2229,6 @@ enum entryID { power_op_ power_op_ power_op_ -*/ // *********** // Steve note: diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index c75870aa55..32b74d82ea 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -241,9 +241,12 @@ list_of(fn(setFPMode))(fn(FRTP))(fn(FRAS))(fn(FRBP))(fn(FRCP))); extended_op_4[0] = power_entry(power_op_vaddubm, "vaddubm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1] = power_entry(power_op_vmul10cuq, "vmul10cuq", NULL, list_of(fn(VRT))(fn(VRA))); extended_op_4[2] = power_entry(power_op_vmaxub, "vmaxub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[4] = power_entry(power_op_vrlb, "vrlb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[6] = power_entry(power_op_vcmpequb, "vcmpequb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[7] = power_entry(power_op_vcmpneb, "vcmpneb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[10] = power_entry(power_op_vaddfp, "vaddfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[8] = power_entry(power_op_vmuloub, "vmuloub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[12] = power_entry(power_op_vmrghb, "vmrghb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); @@ -290,23 +293,30 @@ extended_op_4[41] = power_entry(power_op_vmsumshs, "vmsumshs", NULL, list_of(fn( extended_op_4[42] = power_entry(power_op_vsel, "vsel", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); extended_op_4[43] = power_entry(power_op_vperm, "vperm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); extended_op_4[44] = power_entry(power_op_vsldoi, "vsldoi", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(SHB))); +extended_op_4[45] = power_entry(power_op_vpermxor, "vpermxor", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[46] = power_entry(power_op_vmaddfp, "vmaddfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); +extended_op_4[47] = power_entry(power_op_vnmsubfp, "vnmsubfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); extended_op_4[59] = power_entry(power_op_vpermr, "vpermr", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); extended_op_4[60] = power_entry(power_op_vaddeuqm, "vaddeuqm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); extended_op_4[61] = power_entry(power_op_vaddecuq, "vaddecuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); extended_op_4[62] = power_entry(power_op_vsubeuqm, "vsubeuqm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); extended_op_4[63] = power_entry(power_op_vsubecuq, "vsubecuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(VRC))); extended_op_4[64] = power_entry(power_op_vadduhm, "vadduhm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[65] = power_entry(power_op_vmul10ecuq, "vmul10ecuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[66] = power_entry(power_op_vmaxuh, "vmaxuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[68] = power_entry(power_op_vrlh, "vrlh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[70] = power_entry(power_op_vcmpequh, "vcmpequh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[71] = power_entry(power_op_vcmpneh, "vcmpneh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[72] = power_entry(power_op_vmulouh, "vmulouh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[74] = power_entry(power_op_vsubfp, "vsubfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[76] = power_entry(power_op_vmrghh, "vmrghh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[78] = power_entry(power_op_vpkuwum, "vpkuwum", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[96] = power_entry(power_op_qvfcmplt, "qvfcmplt", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QFRA))(fn(QRB))); extended_op_4[128] = power_entry(power_op_vadduwm, "vadduwm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[130] = power_entry(power_op_vmaxuw, "vmaxuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); -extended_op_4[133] = power_entry(power_op_qvgpci, "qvgpci", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QGPC))); +extended_op_4[132] = power_entry(power_op_vrlw, "vrlw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[133] = power_entry(power_op_vrlwmi, "vrlwmi", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[134] = power_entry(power_op_vcmpequw, "vcmpequw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[135] = power_entry(power_op_vcmpnew, "vcmpnew", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[136] = power_entry(power_op_vmulouw, "vmulouw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); @@ -316,146 +326,242 @@ extended_op_4[142] = power_entry(power_op_vpkuhus, "vpkuhus", NULL, list_of(fn(V extended_op_4[143] = power_entry(power_op_qvfctiwuz, "qvfctiwuz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[192] = power_entry(power_op_vaddudm, "vaddudm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[194] = power_entry(power_op_vmaxud, "vmaxud", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[196] = power_entry(power_op_vrld, "vrld", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[197] = power_entry(power_op_vrldmi, "vrldmi", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[198] = power_entry(power_op_vcmpeqfp, "vcmpeqfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[199] = power_entry(power_op_vcmpequd, "vcmpequd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[206] = power_entry(power_op_vpkuwus, "vpkuwus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[256] = power_entry(power_op_vadduqm, "vadduqm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[258] = power_entry(power_op_vmaxsb, "vmaxsb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[260] = power_entry(power_op_vslb, "vslb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[263] = power_entry(power_op_vcmpnezb, "vcmpnezb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[264] = power_entry(power_op_vmulosb, "vmulosb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[266] = power_entry(power_op_vrefp, "vrefp", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[268] = power_entry(power_op_vmrglb, "vmrglb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[270] = power_entry(power_op_vpkshus, "vpkshus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[320] = power_entry(power_op_vaddcuq, "vaddcuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[322] = power_entry(power_op_vmaxsh, "vmaxsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[324] = power_entry(power_op_vslh, "vslh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[327] = power_entry(power_op_vcmpnezh, "vcmpnezh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[328] = power_entry(power_op_vmulosh, "vmulosh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[330] = power_entry(power_op_vrsqrtefp, "vrsqrtefp", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[332] = power_entry(power_op_vmrglh, "vmrglh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[334] = power_entry(power_op_vpkswus, "vpkswus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[384] = power_entry(power_op_vaddcuw, "vaddcuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[386] = power_entry(power_op_vmaxsw, "vmaxsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[388] = power_entry(power_op_vslw, "vslw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[389] = power_entry(power_op_vrlwnm, "vrlwnm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[391] = power_entry(power_op_vcmpnezw, "vcmpnezw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[392] = power_entry(power_op_vmulosw, "vmulosw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[394] = power_entry(power_op_vexptefp, "vexptefp", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[396] = power_entry(power_op_vmrglw, "vmrglw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[398] = power_entry(power_op_vpkshss, "vpkshss", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[424] = power_entry(power_op_qvfriz, "qvfriz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[450] = power_entry(power_op_vmaxsd, "vmaxsd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[452] = power_entry(power_op_vsl, "vsl", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[453] = power_entry(power_op_vrldnm, "vrldnm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[454] = power_entry(power_op_vcmpgefp, "vcmpgefp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[456] = power_entry(power_op_qvfrip, "qvfrip", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[458] = power_entry(power_op_vlogefp, "vlogefp", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[462] = power_entry(power_op_vpkswss, "vpkswss", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[512] = power_entry(power_op_vaddubs, "vaddubs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[513] = power_entry(power_op_vmul10uq, "vmul10uq", NULL, list_of(fn(VRT))(fn(VRA))); extended_op_4[514] = power_entry(power_op_vminub, "vminub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[516] = power_entry(power_op_vsrb, "vsrb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[518] = power_entry(power_op_vcmpgtub, "vcmpgtub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[520] = power_entry(power_op_vmuleub, "vmuleub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[524] = power_entry(power_op_vspltb, "vspltb", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[525] = power_entry(power_op_vextractub, "vextractub", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[526] = power_entry(power_op_vupkhsb, "vupkhsb", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[552] = power_entry(power_op_vrfin, "vrfin", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[576] = power_entry(power_op_vadduhs, "vadduhs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[577] = power_entry(power_op_vmul10euq, "vmul10euq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[578] = power_entry(power_op_vminuh, "vminuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[580] = power_entry(power_op_vsrh, "vsrh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[582] = power_entry(power_op_vcmpgtuh, "vcmpgtuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[584] = power_entry(power_op_vmuleuh, "vmuleuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[586] = power_entry(power_op_vrfiz, "vrfiz", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[588] = power_entry(power_op_vsplth, "vsplth", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[589] = power_entry(power_op_vextractuh, "vextractuh", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[590] = power_entry(power_op_vupkhsh, "vupkhsh", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[642] = power_entry(power_op_vminuw, "vminuw", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[640] = power_entry(power_op_vadduws, "vadduws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[644] = power_entry(power_op_vsrw, "vsrw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[646] = power_entry(power_op_vcmpgtuw, "vcmpgtuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[648] = power_entry(power_op_vmuleuw, "vmuleuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[650] = power_entry(power_op_vrfip, "vrfip", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[652] = power_entry(power_op_vspltw, "vspltw", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[653] = power_entry(power_op_vextractuw, "vextractuw", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[654] = power_entry(power_op_vupklsb, "vupklsb", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[706] = power_entry(power_op_vminud, "vminud", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[708] = power_entry(power_op_vsr, "vsr", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[710] = power_entry(power_op_vcmpgtfp, "vcmpgtfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[711] = power_entry(power_op_vcmpgtud, "vcmpgtud", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[714] = power_entry(power_op_vrfim, "vrfim", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[717] = power_entry(power_op_vextractd, "vextractd", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[718] = power_entry(power_op_vupklsh, "vupklsh", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[768] = power_entry(power_op_vaddsbs, "vaddsbs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[770] = power_entry(power_op_vminsb, "vminsb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[772] = power_entry(power_op_vsrab, "vsrab", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[774] = power_entry(power_op_vcmpgtsb, "vcmpgtsb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[776] = power_entry(power_op_vmulesb, "vmulesb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[778] = power_entry(power_op_vcfsx, "vcfsx", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[780] = power_entry(power_op_vspltisb, "vspltisb", NULL, list_of(fn(VRT))(fn(SIM))); extended_op_4[781] = power_entry(power_op_vinsertb, "vinsertb", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[782] = power_entry(power_op_vpkpx, "vpkpx", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[814] = power_entry(power_op_qvfctid, "qvfctid", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[815] = power_entry(power_op_qvfctidz, "qvfctidz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[832] = power_entry(power_op_vaddshs, "vaddshs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[833] = power_entry(power_op_bcdcpsgn, "bcdcpsgn", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[834] = power_entry(power_op_vminsh, "vminsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[836] = power_entry(power_op_vsraw, "vsraw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[838] = power_entry(power_op_vcmpgtsh, "vcmpgtsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[840] = power_entry(power_op_vmulesh, "vmulesh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[842] = power_entry(power_op_vcfux, "vcfux", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[844] = power_entry(power_op_vspltish, "vspltish", NULL, list_of(fn(VRT))(fn(SIM))); extended_op_4[845] = power_entry(power_op_vinserth, "vinserth", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[846] = power_entry(power_op_vupkhpx, "vupkhpx", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[896] = power_entry(power_op_vaddsws, "vaddsws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[898] = power_entry(power_op_vminsw, "vminsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[900] = power_entry(power_op_vsraw, "vsraw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[902] = power_entry(power_op_vcmpgtsw, "vcmpgtsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[904] = power_entry(power_op_vmulesw, "vmulesw", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); +extended_op_4[906] = power_entry(power_op_vctuxs, "vctuxs", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[908] = power_entry(power_op_vspltisw, "vspltisw", NULL, list_of(fn(VRT))(fn(SIM))); extended_op_4[909] = power_entry(power_op_vinsertw, "vinsertw", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[942] = power_entry(power_op_qvfctidu, "qvfctidu", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[943] = power_entry(power_op_qvfctiduz, "qvfctiduz", NULL, list_of(fn(setFPMode))(fn(QFRTP))(fn(QRB))); extended_op_4[962] = power_entry(power_op_vminsd, "vminsd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[964] = power_entry(power_op_vsrad, "vsrad", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[966] = power_entry(power_op_vcmpbfp, "vcmpbfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[967] = power_entry(power_op_vcmpgtsd, "vcmpgtsd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[970] = power_entry(power_op_vctsxs, "vctsxs", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[973] = power_entry(power_op_vinsertd, "vinsertd", NULL, list_of(fn(VRT))(fn(UIM))(fn(VRB))); extended_op_4[974] = power_entry(power_op_vupklpx, "vupklpx", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1024] = power_entry(power_op_vsububm, "vsububm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1025] = power_entry(power_op_bcdadd, "bcdadd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); extended_op_4[1026] = power_entry(power_op_vavgub, "vavgub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1027] = power_entry(power_op_vabsdub, "vabsdub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1028] = power_entry(power_op_vand, "vand", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1030] = power_entry(power_op_vcmpequb, "vcmpequb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1031] = power_entry(power_op_vcmpneb, "vcmpneb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1032] = power_entry(power_op_vpmsumb, "vpmsumb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1034] = power_entry(power_op_vmaxfp, "vmaxfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1036] = power_entry(power_op_vslo, "vslo", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1088] = power_entry(power_op_vsubuhm, "vsubuhm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1089] = power_entry(power_op_bcdsub, "bcdsub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); extended_op_4[1090] = power_entry(power_op_vavguh, "vavguh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1091] = power_entry(power_op_vabsduh, "vabsduh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1092] = power_entry(power_op_vandc, "vandc", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1094] = power_entry(power_op_vcmpequh, "vcmpequh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1095] = power_entry(power_op_vcmpneh, "vcmpneh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1096] = power_entry(power_op_vpmsumh, "vpmsumh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1098] = power_entry(power_op_vminfp, "vminfp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1100] = power_entry(power_op_vsro, "vsro", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1102] = power_entry(power_op_vpkudum, "vpkudum", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1152] = power_entry(power_op_vsubuwm, "vsubuwm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1153] = power_entry(power_op_vsubudm, "vsubudm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1154] = power_entry(power_op_vavguw, "vavguw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1155] = power_entry(power_op_vabsduw, "vabsduw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1156] = power_entry(power_op_vor, "vor", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1158] = power_entry(power_op_vcmpequw, "vcmpequw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1159] = power_entry(power_op_vcmpnew, "vcmpnew", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1160] = power_entry(power_op_vpmsumw, "vpmsumw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1216] = power_entry(power_op_vsubudm, "vsubudm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1217] = power_entry(power_op_bcds, "bcds", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); +extended_op_4[1220] = power_entry(power_op_vxor, "vxor", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1223] = power_entry(power_op_vcmpequh, "vcmpequh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1224] = power_entry(power_op_vpmsumd, "vpmsumd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1230] = power_entry(power_op_vpkudus, "vpkudus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1280] = power_entry(power_op_vsubuqm, "vsubuqm", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1281] = power_entry(power_op_bcdtrunc, "bcdtrunc", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); extended_op_4[1282] = power_entry(power_op_vavgsb, "vavgsb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1284] = power_entry(power_op_vnor, "vnor", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1287] = power_entry(power_op_vcmpnezb, "vcmpnezb", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1288] = power_entry(power_op_vcipher, "vcipher", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1289] = power_entry(power_op_vcipherlast, "vcipherlast", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1292] = power_entry(power_op_vgbbd, "vgbbd", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1344] = power_entry(power_op_vsubcuq, "vsubcuq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1345] = power_entry(power_op_bcdutrunc, "bcdutrunc", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1346] = power_entry(power_op_vavgsh, "vavgsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1348] = power_entry(power_op_vorc, "vorc", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1351] = power_entry(power_op_vcmpnezh, "vcmpnezh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1352] = power_entry(power_op_vncipher, "vncipher", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1353] = power_entry(power_op_vncipherlast, "vncipherlast", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1356] = power_entry(power_op_vbpermq, "vbpermq", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1358] = power_entry(power_op_vpksdus, "vpksdus", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1408] = power_entry(power_op_vsubcuw, "vsubcuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); + + +//extended_op_4[1409] = power_entry(power_op_extended, "extended", fn(extended_op_4_1409), operandSpec())); + + extended_op_4[1410] = power_entry(power_op_vavgsw, "vavgsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1412] = power_entry(power_op_vnand, "vnand", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1415] = power_entry(power_op_vcmpnezw, "vcmpnezw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1473] = power_entry(power_op_bcdsr, "bcdsr", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); +extended_op_4[1476] = power_entry(power_op_vsld, "vsld", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1480] = power_entry(power_op_vsubcuq, "vsubcuq", NULL, list_of(fn(VRT))(fn(VRA))); +extended_op_4[1484] = power_entry(power_op_vbpermd, "vbpermd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1486] = power_entry(power_op_vpksdss, "vpksdss", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1536] = power_entry(power_op_vsububs, "vsububs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1537] = power_entry(power_op_bcdadd, "bcdadd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); //extended_op_4[1538] = power_entry(power_op_extended, "extended", fn(extended_op_4_1538), operandSpec())); +extended_op_4[1540] = power_entry(power_op_mfvscr, "mfvscr", NULL, list_of((fn(VRT))); extended_op_4[1542] = power_entry(power_op_vcmpgtub, "vcmpgtub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1544] = power_entry(power_op_vsum4ubs, "vsum4ubs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1549] = power_entry(power_op_vextublx, "vextublx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); extended_op_4[1600] = power_entry(power_op_vsubuhs, "vsubuhs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1601] = power_entry(power_op_bcdsub, "bcdsub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); +extended_op_4[1604] = power_entry(power_op_mtvscr, "mtvscr", NULL, list_of((fn(VRB))); extended_op_4[1606] = power_entry(power_op_vcmpgtuh, "vcmpgtuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1608] = power_entry(power_op_vsum4shs, "vsum4shs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1613] = power_entry(power_op_vextuhlx, "vextuhlx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); extended_op_4[1614] = power_entry(power_op_vupkhsw, "vupkhsw", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1664] = power_entry(power_op_vsubuws, "vsubuws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1666] = power_entry(power_op_vshasigmaw, "vshasigmaw", NULL, list_of(fn(VRT))(fn(VRA))(fn(ST))(fn(SIX))); +extended_op_4[1668] = power_entry(power_op_veqv, "veqv", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1670] = power_entry(power_op_vcmpgtuw, "vcmpgtuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1672] = power_entry(power_op_vsum2sws, "vsum2sws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1676] = power_entry(power_op_vmrgow, "vmrgow", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1677] = power_entry(power_op_vextuwlx, "vextuwlx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); +extended_op_4[1729] = power_entry(power_op_bcds, "bcds", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); +extended_op_4[1730] = power_entry(power_op_vshasigmad, "vshasigmad", NULL, list_of(fn(VRT))(fn(VRA))(fn(ST))(fn(SIX))); +extended_op_4[1732] = power_entry(power_op_vsrd, "vsrd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1735] = power_entry(power_op_vcmpgtub, "vcmpgtub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1742] = power_entry(power_op_vupklsw, "vupklsw", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1792] = power_entry(power_op_vsubsbs, "vsubsbs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1793] = power_entry(power_op_bcdtrunc, "bcdtrunc", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); +extended_op_4[1794] = power_entry(power_op_vclzb, "vclzb", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[1795] = power_entry(power_op_vpopcntb, "vpopcntb", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1796] = power_entry(power_op_vsrv, "vsrv", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1798] = power_entry(power_op_vcmpequh, "vcmpequh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1800] = power_entry(power_op_vsum4sbs, "vsum4sbs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1805] = power_entry(power_op_vextubrx, "vextubrx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); extended_op_4[1856] = power_entry(power_op_vsubshs, "vsubshs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1858] = power_entry(power_op_vclzh, "vclzh", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[1859] = power_entry(power_op_vpopcnth, "vpopcnth", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1860] = power_entry(power_op_vslv, "vslv", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1862] = power_entry(power_op_vcmpgtsh, "vcmpgtsh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1869] = power_entry(power_op_vextuhrx, "vextuhrx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); extended_op_4[1920] = power_entry(power_op_vsubsws, "vsubsws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); + +//4-1921 shares the same third level opcode table with 4-1409 +//extended_op_4[1921] = power_entry(power_op_extended, "extended", fn(extended_op_4_1409), operandSpec())); + +extended_op_4[1922] = power_entry(power_op_vclzw, "vclzw", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[1923] = power_entry(power_op_vpopcntw, "vpopcntw", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1928] = power_entry(power_op_vsumsws, "vsumsws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1932] = power_entry(power_op_vmrgew, "vmrgew", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); +extended_op_4[1933] = power_entry(power_op_vextuwrx, "vextuwrx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); extended_op_4[1956] = power_entry(power_op_vcmpgtsw, "vcmpgtsw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); +extended_op_4[1985] = power_entry(power_op_bcdsr, "bcdsr", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); +extended_op_4[1986] = power_entry(power_op_vclzd, "vclzd", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4[1987] = power_entry(power_op_vpopcntd, "vpopcntd", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1991] = power_entry(power_op_vcmpgtsd, "vcmpgtsd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); @@ -543,6 +649,7 @@ extended_op_31[152] = power_entry(power_op_slq, "slq", NULL, list_of(fn(RS))(fn( extended_op_31[153] = power_entry(power_op_sle, "sle", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[165] = power_entry(power_op_qvstfcsuxi, "qvstfcsuxi", NULL, list_of(fn(QFRSP))(fn(STUX))); extended_op_31[167] = power_entry(power_op_stvehx, "stvehx", NULL, list_of(fn(VRS))(fn(RA))(fn(RB))); +extended_op_31[170] = power_entry(power_op_addex, "addex", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(CY))); extended_op_31[174] = power_entry(power_op_lfssux, "lfssux", NULL, list_of(fn(FRTS))(fn(LUX))); extended_op_31[181] = power_entry(power_op_stdux, "stdux", NULL, list_of(fn(RS))(fn(STUX))); extended_op_31[183] = power_entry(power_op_stwux, "stwux", NULL, list_of(fn(RS))(fn(STUX))); @@ -662,6 +769,7 @@ extended_op_31[663] = power_entry(power_op_stfsx, "stfsx", NULL, list_of(fn(FRS) extended_op_31[664] = power_entry(power_op_srq, "srq", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[665] = power_entry(power_op_sre, "sre", NULL, list_of(fn(RS))(fn(RA))(fn(RB))(fn(Rc))); extended_op_31[679] = power_entry(power_op_qvstfsux, "qvstfsux", NULL, list_of(fn(QFRSP))(fn(STUX))); +extended_op_31[682] = power_entry(power_op_addex, "addex", NULL, list_of(fn(RT))(fn(RA))(fn(RB))(fn(CY))); extended_op_31[686] = power_entry(power_op_stfssux, "stfssux", NULL, list_of(fn(FRSS))(fn(STUX))); extended_op_31[695] = power_entry(power_op_stfsux, "stfsux", NULL, list_of(fn(FRS))(fn(STUX))); extended_op_31[696] = power_entry(power_op_sriq, "sriq", NULL, list_of(fn(RS))(fn(RA))(fn(SH))(fn(Rc))); @@ -1068,7 +1176,9 @@ extended_op_63[452] = power_entry(power_op_xsnmaddqp, "xsnmaddqp", NULL, list_of extended_op_63[484] = power_entry(power_op_xsnmsubqp, "xsnmsubqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); extended_op_63[516] = power_entry(power_op_xssubqp, "xssubqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); //extended_op_63[548] = power_entry(power_op_xsdivqp, "xsdivqp", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(RO))); -extended_op_63[583] = power_entry(power_op_mffs, "mffs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(Rc))); + + +//extended_op_63[583] = power_entry(power_op_extended, "extended", fn(extended_op_63_583), operandSpec())); extended_op_63[644] = power_entry(power_op_xscmpuqp, "xscmpuqp", NULL, list_of(fn(BF))(fn(VRA))(fn(VRB))); extended_op_63[708] = power_entry(power_op_xststdcqp, "xststdcqp", NULL, list_of(fn(BF))(fn(DCMX))(fn(VRB))); extended_op_63[711] = power_entry(power_op_mtfsf, "mtfsf", NULL, list_of(fn(setFPMode))(fn(FLM))(fn(FRB))(fn(Rc))); @@ -1086,13 +1196,32 @@ extended_op_63[868] = power_entry(power_op_xsiexpqp, "xsiexpqp", NULL, list_of(f //Third level opcode follows: /* - extended_op_4_1538[6] = power_entry(power_op_vnegw, "vnegw", NULL, list_of(fn(VRT))(fn(VRB))); + + extended_op_4_1409[0] = power_entry(power_op_bcdctsq, "bcdctsq", NULL, list_of(fn(VRT))(fn(VRB))(fn(PS))); +extended_op_4_1409[2] = power_entry(power_op_bcdcfsq, "bcdcfsq", NULL, list_of(fn(VRT))(fn(VRB))(fn(PS))); +extended_op_4_1409[4] = power_entry(power_op_bcdctz, "bcdctz", NULL, list_of(fn(VRT))(fn(VRB))(fn(PS))); +extended_op_4_1409[5] = power_entry(power_op_bcdctn, "bcdctn", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1409[6] = power_entry(power_op_bcdcfz, "bcdcfz", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1409[7] = power_entry(power_op_bcdcfn, "bcdcfn", NULL, list_of(fn(VRT))(fn(VRB))(fn(PS))); +extended_op_4_1409[31] = power_entry(power_op_bcdsetsgn, "bcdsetsgn", NULL, list_of(fn(VRT))(fn(VRB))(fn(PS))); + + + extended_op_4_1538[0] = power_entry(power_op_vclzlsbb, "vclzlsbb", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[1] = power_entry(power_op_vctzlsbb, "vctzlsbb", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[6] = power_entry(power_op_vnegw, "vnegw", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4_1538[7] = power_entry(power_op_vnegd, "vnegd", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[8] = power_entry(power_op_vprtybw, "vprtybw", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[9] = power_entry(power_op_vprtybd, "vprtybd", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[10] = power_entry(power_op_vprtybq, "vprtybq", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4_1538[16] = power_entry(power_op_vextsb2w, "vextsb2w", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4_1538[17] = power_entry(power_op_vextsh2w, "vextsh2w", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4_1538[24] = power_entry(power_op_vextsb2d, "vextsb2d", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4_1538[25] = power_entry(power_op_vextsh2d, "vextsh2d", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4_1538[26] = power_entry(power_op_vextsw2d, "vextsw2d", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[28] = power_entry(power_op_vctzb, "vctzb", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[29] = power_entry(power_op_vctzh, "vctzh", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[30] = power_entry(power_op_vctzw, "vctzw", NULL, list_of(fn(VRT))(fn(VRB))); +extended_op_4_1538[31] = power_entry(power_op_vctzd, "vctzd", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_60_347[0] = power_entry(power_op_xsxexpdp, "xsxexpdp", NULL, list_of(fn(RT))(fn(XB))); extended_op_60_347[1] = power_entry(power_op_xsxsigdp, "xsxsigdp", NULL, list_of(fn(RT))(fn(XB))); @@ -1111,7 +1240,15 @@ extended_op_60_475[24] = power_entry(power_op_xvcvhpsp, "xvcvhpsp", NULL, list_o extended_op_60_475[25] = power_entry(power_op_xvcvsphp, "xvcvsphp", NULL, list_of(fn(XT))(fn(XB))); extended_op_60_475[31] = power_entry(power_op_xxbrq, "xxbrq", NULL, list_of(fn(XT))(fn(XB))); - extended_op_63_804[0] = power_entry(power_op_xsabsqp, "xsabsqp", list_of(fn(VRT))(fn(VRB))); + extended_op_63_583[0] = power_entry(power_op_mffs, "mffs", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(Rc))); +extended_op_63_583[1] = power_entry(power_op_mffsce, "mffsce", NULL, list_of(fn(setFPMode))(fn(FRT))); +extended_op_63_583[20] = power_entry(power_op_mffscdrn, "mffscdrn", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))); +extended_op_63_583[21] = power_entry(power_op_mffscdrn, "mffscdrn", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(DRM))); +extended_op_63_583[22] = power_entry(power_op_mffscdrni, "mffscdrni", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(DRM))); +extended_op_63_583[23] = power_entry(power_op_mffscrn, "mffscrn", NULL, list_of(fn(setFPMode))(fn(FRT))(fn(FRB))); +extended_op_63_583[24] = power_entry(power_op_mffsl, "mffsl", NULL, list_of(fn(setFPMode))(fn(FRT))); + + extended_op_63_804[0] = power_entry(power_op_xsabsqp, "xsabsqp", list_of(fn(VRT))(fn(VRB))); extended_op_63_804[2] = power_entry(power_op_xsxexpqp, "xsxexpqp", list_of(fn(VRT))(fn(VRB))); extended_op_63_804[16] = power_entry(power_op_xsnegqp, "xsnegqp", list_of(fn(VRT))(fn(VRB))); extended_op_63_804[18] = power_entry(power_op_xsxsigqp, "xsxsigqp", list_of(fn(VRT))(fn(VRB))); From aad240c45fae9e395bc0ec8537128af225d073d7 Mon Sep 17 00:00:00 2001 From: Xiaozhu Meng Date: Wed, 24 Oct 2018 07:55:26 -0500 Subject: [PATCH 16/16] Finish most of the Power 8 VSX instruction decoding --- common/h/entryIDs.h | 8 +++-- instructionAPI/src/InstructionDecoder-power.C | 32 +++++++++---------- instructionAPI/src/InstructionDecoder-power.h | 4 +++ instructionAPI/src/power_opcode_tables.C | 8 ++--- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/common/h/entryIDs.h b/common/h/entryIDs.h index a937456f41..4974ffb2ac 100644 --- a/common/h/entryIDs.h +++ b/common/h/entryIDs.h @@ -1365,7 +1365,6 @@ enum entryID { power_op_rfi, power_op_sreq, power_op_frsqrte, - power_op_mffs, power_op_lwz, power_op_lfqu, power_op_and, @@ -2215,6 +2214,11 @@ enum entryID { power_op_mffscrn, power_op_mffscrni, power_op_mffsl, + power_op_vnmsubfp, + power_op_vrlh, + power_op_vminfp, + power_op_bcdsr, +/* power_op_ power_op_ power_op_ @@ -2229,7 +2233,7 @@ enum entryID { power_op_ power_op_ power_op_ - +*/ // *********** // Steve note: // aarch64 opcode IDs. diff --git a/instructionAPI/src/InstructionDecoder-power.C b/instructionAPI/src/InstructionDecoder-power.C index d3b6fbee4e..3456e60375 100644 --- a/instructionAPI/src/InstructionDecoder-power.C +++ b/instructionAPI/src/InstructionDecoder-power.C @@ -571,44 +571,44 @@ namespace Dyninst void InstructionDecoder_power::UIM() { - assert(0); - insn_in_progress->appendOperand(makeRTExpr(), false, true); + fprintf(stderr, "Unimplemented operand type UIM. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); } void InstructionDecoder_power::SIM() { - assert(0); - insn_in_progress->appendOperand(makeRTExpr(), false, true); + fprintf(stderr, "Unimplemented operand type SIM. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); } void InstructionDecoder_power::DCMX() { - assert(0); - insn_in_progress->appendOperand(makeRTExpr(), false, true); + fprintf(stderr, "Unimplemented operand type DCMX. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); } void InstructionDecoder_power::RO() { - assert(0); - insn_in_progress->appendOperand(makeRTExpr(), false, true); + fprintf(stderr, "Unimplemented operand type RO. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); } void InstructionDecoder_power::R() { - assert(0); - insn_in_progress->appendOperand(makeRTExpr(), false, true); + fprintf(stderr, "Unimplemented operand type R. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); } void InstructionDecoder_power::RMC() { - assert(0); - insn_in_progress->appendOperand(makeRTExpr(), false, true); + fprintf(stderr, "Unimplemented operand type RMC. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); } void InstructionDecoder_power::EX() { - assert(0); - insn_in_progress->appendOperand(makeRTExpr(), false, true); + fprintf(stderr, "Unimplemented operand type EX. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); } void InstructionDecoder_power::SHB() { - assert(0); - insn_in_progress->appendOperand(makeRTExpr(), false, true); + fprintf(stderr, "Unimplemented operand type SHB. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); + } + void InstructionDecoder_power::PS() + { + fprintf(stderr, "Unimplemented operand type PS. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); + } + void InstructionDecoder_power::CY() + { + fprintf(stderr, "Unimplemented operand type CY. Please create an issue at https://github.com/dyninst/dyninst/issues\n"); } /***** END: For new vector instructions *****/ diff --git a/instructionAPI/src/InstructionDecoder-power.h b/instructionAPI/src/InstructionDecoder-power.h index 4d2a921254..526f474ee6 100644 --- a/instructionAPI/src/InstructionDecoder-power.h +++ b/instructionAPI/src/InstructionDecoder-power.h @@ -182,6 +182,10 @@ namespace Dyninst { void RMC(); void EX(); void SHB(); + void SIX(); + void PS(); + void CY(); + const power_entry& extended_op_0(); diff --git a/instructionAPI/src/power_opcode_tables.C b/instructionAPI/src/power_opcode_tables.C index 32b74d82ea..43c3f93f31 100644 --- a/instructionAPI/src/power_opcode_tables.C +++ b/instructionAPI/src/power_opcode_tables.C @@ -511,26 +511,26 @@ extended_op_4[1537] = power_entry(power_op_bcdadd, "bcdadd", NULL, list_of(fn(VR //extended_op_4[1538] = power_entry(power_op_extended, "extended", fn(extended_op_4_1538), operandSpec())); -extended_op_4[1540] = power_entry(power_op_mfvscr, "mfvscr", NULL, list_of((fn(VRT))); +extended_op_4[1540] = power_entry(power_op_mfvscr, "mfvscr", NULL, list_of((fn(VRT)))); extended_op_4[1542] = power_entry(power_op_vcmpgtub, "vcmpgtub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1544] = power_entry(power_op_vsum4ubs, "vsum4ubs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1549] = power_entry(power_op_vextublx, "vextublx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); extended_op_4[1600] = power_entry(power_op_vsubuhs, "vsubuhs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1601] = power_entry(power_op_bcdsub, "bcdsub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); -extended_op_4[1604] = power_entry(power_op_mtvscr, "mtvscr", NULL, list_of((fn(VRB))); +extended_op_4[1604] = power_entry(power_op_mtvscr, "mtvscr", NULL, list_of((fn(VRB)))); extended_op_4[1606] = power_entry(power_op_vcmpgtuh, "vcmpgtuh", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1608] = power_entry(power_op_vsum4shs, "vsum4shs", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1613] = power_entry(power_op_vextuhlx, "vextuhlx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); extended_op_4[1614] = power_entry(power_op_vupkhsw, "vupkhsw", NULL, list_of(fn(VRT))(fn(VRB))); extended_op_4[1664] = power_entry(power_op_vsubuws, "vsubuws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); -extended_op_4[1666] = power_entry(power_op_vshasigmaw, "vshasigmaw", NULL, list_of(fn(VRT))(fn(VRA))(fn(ST))(fn(SIX))); +//extended_op_4[1666] = power_entry(power_op_vshasigmaw, "vshasigmaw", NULL, list_of(fn(VRT))(fn(VRA))(fn(ST))(fn(SIX))); extended_op_4[1668] = power_entry(power_op_veqv, "veqv", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1670] = power_entry(power_op_vcmpgtuw, "vcmpgtuw", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1672] = power_entry(power_op_vsum2sws, "vsum2sws", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1676] = power_entry(power_op_vmrgow, "vmrgow", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1677] = power_entry(power_op_vextuwlx, "vextuwlx", NULL, list_of(fn(RT))(fn(RA))(fn(VRB))); extended_op_4[1729] = power_entry(power_op_bcds, "bcds", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(PS))); -extended_op_4[1730] = power_entry(power_op_vshasigmad, "vshasigmad", NULL, list_of(fn(VRT))(fn(VRA))(fn(ST))(fn(SIX))); +//extended_op_4[1730] = power_entry(power_op_vshasigmad, "vshasigmad", NULL, list_of(fn(VRT))(fn(VRA))(fn(ST))(fn(SIX))); extended_op_4[1732] = power_entry(power_op_vsrd, "vsrd", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))); extended_op_4[1735] = power_entry(power_op_vcmpgtub, "vcmpgtub", NULL, list_of(fn(VRT))(fn(VRA))(fn(VRB))(fn(Rc))); extended_op_4[1742] = power_entry(power_op_vupklsw, "vupklsw", NULL, list_of(fn(VRT))(fn(VRB)));