* ser-mingw.c (pipe_windows_open)
[deliverable/binutils-gdb.git] / opcodes / ppc-opc.c
index adefd94786def9429720ea2c56b370fe42aff0f2..5295dfd3567d11a1f7338b6317d529561a82c18a 100644 (file)
@@ -17,8 +17,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this file; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 #include <stdio.h>
 #include "sysdep.h"
@@ -304,10 +304,14 @@ const struct powerpc_operand powerpc_operands[] =
 #define L FXM4 + 1
   { 1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
 
-  /* The LEV field in a POWER SC form instruction.  */
-#define LEV L + 1
+  /* The LEV field in a POWER SVC form instruction.  */
+#define SVC_LEV L + 1
   { 7, 5, NULL, NULL, 0 },
 
+  /* The LEV field in an SC form instruction.  */
+#define LEV SVC_LEV + 1
+  { 7, 5, NULL, NULL, PPC_OPERAND_OPTIONAL },
+
   /* The LI field in an I form instruction.  The lower two bits are
      forced to zero.  */
 #define LI LEV + 1
@@ -555,10 +559,45 @@ const struct powerpc_operand powerpc_operands[] =
 #define WS_MASK (0x7 << 11)
   { 3, 11, NULL, NULL, 0 },
 
-  /* The L field in an mtmsrd instruction */
+  /* The L field in an mtmsrd or A form instruction.  */
 #define MTMSRD_L WS + 1
+#define A_L MTMSRD_L
   { 1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
 
+  /* The DCM field in a Z form instruction.  */
+#define DCM MTMSRD_L + 1
+  { 6, 16, NULL, NULL, 0 },
+
+  /* Likewise, the DGM field in a Z form instruction.  */
+#define DGM DCM + 1
+  { 6, 16, NULL, NULL, 0 },
+
+#define TE DGM + 1
+  { 5, 11, NULL, NULL, 0 },
+
+#define RMC TE + 1
+  { 2, 21, NULL, NULL, 0 },
+
+#define R RMC + 1
+  { 1, 15, NULL, NULL, 0 },
+
+#define SP R + 1
+  { 2, 11, NULL, NULL, 0 },
+
+#define S SP + 1
+  { 1, 11, NULL, NULL, 0 },
+
+  /* SH field starting at bit position 16.  */
+#define SH16 S + 1
+  { 6, 10, NULL, NULL, 0 },
+
+  /* The L field in an X form with the RT field fixed instruction.  */
+#define XRT_L SH16 + 1
+  { 2, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
+
+  /* The EH field in larx instruction.  */
+#define EH XRT_L + 1
+  { 1, 0, NULL, NULL, PPC_OPERAND_OPTIONAL },
 };
 
 /* The functions used to insert and extract complicated operands.  */
@@ -1505,6 +1544,9 @@ extract_tbr (unsigned long insn,
 /* An A_MASK with the FRA and FRC fields fixed.  */
 #define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
 
+/* An AFRAFRC_MASK, but with L bit clear.  */
+#define AFRALFRC_MASK (AFRAFRC_MASK & ~((unsigned long) 1 << 16))
+
 /* A B form instruction.  */
 #define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1))
 #define B_MASK B (0x3f, 1, 1)
@@ -1615,12 +1657,21 @@ extract_tbr (unsigned long insn,
 /* An X form instruction.  */
 #define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
 
+/* A Z form instruction.  */
+#define Z(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1))
+
 /* An X form instruction with the RC bit specified.  */
 #define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
 
+/* A Z form instruction with the RC bit specified.  */
+#define ZRC(op, xop, rc) (Z ((op), (xop)) | ((rc) & 1))
+
 /* The mask for an X form instruction.  */
 #define X_MASK XRC (0x3f, 0x3ff, 1)
 
+/* The mask for a Z form instruction.  */
+#define Z_MASK ZRC (0x3f, 0x1ff, 1)
+
 /* An X_MASK with the RA field fixed.  */
 #define XRA_MASK (X_MASK | RA_MASK)
 
@@ -1630,6 +1681,9 @@ extract_tbr (unsigned long insn,
 /* An X_MASK with the RT field fixed.  */
 #define XRT_MASK (X_MASK | RT_MASK)
 
+/* An XRT_MASK mask with the L bits clear.  */
+#define XLRT_MASK (XRT_MASK & ~((unsigned long) 0x3 << 21))
+
 /* An X_MASK with the RA and RB fields fixed.  */
 #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
 
@@ -1666,6 +1720,9 @@ extract_tbr (unsigned long insn,
 /* An X form sync instruction with everything filled in except the LS field.  */
 #define XSYNC_MASK (0xff9fffff)
 
+/* An X_MASK, but with the EH bit clear.  */
+#define XEH_MASK (X_MASK & ~((unsigned long )1))
+
 /* An X form AltiVec dss instruction.  */
 #define XDSS(op, xop, a) (X ((op), (xop)) | ((((unsigned long)(a)) & 1) << 25))
 #define XDSS_MASK XDSS(0x3f, 0x3ff, 1)
@@ -1818,6 +1875,9 @@ extract_tbr (unsigned long insn,
 #define PPCCOM PPC_OPCODE_PPC | PPC_OPCODE_COMMON
 #define NOPOWER4 PPC_OPCODE_NOPOWER4 | PPCCOM
 #define POWER4 PPC_OPCODE_POWER4
+#define POWER5 PPC_OPCODE_POWER5
+#define POWER6 PPC_OPCODE_POWER6
+#define CELL   PPC_OPCODE_CELL
 #define PPC32   PPC_OPCODE_32 | PPC_OPCODE_PPC
 #define PPC64   PPC_OPCODE_64 | PPC_OPCODE_PPC
 #define PPC403 PPC_OPCODE_403
@@ -1839,6 +1899,7 @@ extract_tbr (unsigned long insn,
 #define BOOKE  PPC_OPCODE_BOOKE
 #define BOOKE64        PPC_OPCODE_BOOKE64
 #define CLASSIC        PPC_OPCODE_CLASSIC
+#define PPCE300 PPC_OPCODE_E300
 #define PPCSPE PPC_OPCODE_SPE
 #define PPCISEL        PPC_OPCODE_ISEL
 #define PPCEFS PPC_OPCODE_EFS
@@ -2749,9 +2810,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "bcla+",   B(16,1,1),        B_MASK,         PPCCOM,         { BOE, BI, BDPA } },
 { "bcla",    B(16,1,1),        B_MASK,         COM,            { BO, BI, BDA } },
 
-{ "sc",      SC(17,1,0), 0xffffffff,   PPC,            { 0 } },
-{ "svc",     SC(17,0,0), SC_MASK,      POWER,          { LEV, FL1, FL2 } },
-{ "svcl",    SC(17,0,1), SC_MASK,      POWER,          { LEV, FL1, FL2 } },
+{ "sc",      SC(17,1,0), SC_MASK,      PPC,            { LEV } },
+{ "svc",     SC(17,0,0), SC_MASK,      POWER,          { SVC_LEV, FL1, FL2 } },
+{ "svcl",    SC(17,0,1), SC_MASK,      POWER,          { SVC_LEV, FL1, FL2 } },
 { "svca",    SC(17,1,0), SC_MASK,      PWRCOM,         { SV } },
 { "svcla",   SC(17,1,1), SC_MASK,      POWER,          { SV } },
 
@@ -3008,14 +3069,23 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "crand",   XL(19,257), XL_MASK,      COM,            { BT, BA, BB } },
 
+{ "hrfid",   XL(19,274), 0xffffffff,   POWER5 | CELL,  { 0 } },
+
 { "crset",   XL(19,289), XL_MASK,      PPCCOM,         { BT, BAT, BBA } },
 { "creqv",   XL(19,289), XL_MASK,      COM,            { BT, BA, BB } },
 
+{ "doze",    XL(19,402), 0xffffffff,   POWER6,         { 0 } },
+
 { "crorc",   XL(19,417), XL_MASK,      COM,            { BT, BA, BB } },
 
+{ "nap",     XL(19,434), 0xffffffff,   POWER6,         { 0 } },
+
 { "crmove",  XL(19,449), XL_MASK,      PPCCOM,         { BT, BA, BBA } },
 { "cror",    XL(19,449), XL_MASK,      COM,            { BT, BA, BB } },
 
+{ "sleep",   XL(19,466), 0xffffffff,   POWER6,         { 0 } },
+{ "rvwinkle", XL(19,498), 0xffffffff,  POWER6,         { 0 } },
+
 { "bctr",    XLO(19,BOU,528,0), XLBOBIBB_MASK, COM,    { 0 } },
 { "bctrl",   XLO(19,BOU,528,1), XLBOBIBB_MASK, COM,    { 0 } },
 { "bltctr",  XLOCB(19,BOT,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
@@ -3313,14 +3383,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "isel",    XISEL(31,15),  XISEL_MASK,        PPCISEL,        { RT, RA, RB, CRB } },
 
 { "mfocrf",  XFXM(31,19,0,1), XFXFXM_MASK, COM,                { RT, FXM } },
-{ "mfcr",    X(31,19), XRARB_MASK,     NOPOWER4,       { RT } },
+{ "mfcr",    X(31,19), XRARB_MASK,     NOPOWER4 | COM, { RT } },
 { "mfcr",    X(31,19), XFXFXM_MASK,    POWER4,         { RT, FXM4 } },
 
-{ "lwarx",   X(31,20), X_MASK,         PPC,            { RT, RA0, RB } },
+{ "lwarx",   X(31,20), XEH_MASK,       PPC,            { RT, RA0, RB, EH } },
 
 { "ldx",     X(31,21), X_MASK,         PPC64,          { RT, RA0, RB } },
 
-{ "icbt",    X(31,22), X_MASK,         BOOKE,          { CT, RA, RB } },
+{ "icbt",    X(31,22), X_MASK,         BOOKE|PPCE300,  { CT, RA, RB } },
 { "icbt",    X(31,262),        XRT_MASK,       PPC403,         { RA, RB } },
 
 { "lwzx",    X(31,23), X_MASK,         PPCCOM,         { RT, RA0, RB } },
@@ -3409,9 +3479,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "mfmsr",   X(31,83), XRARB_MASK,     COM,            { RT } },
 
-{ "ldarx",   X(31,84), X_MASK,         PPC64,          { RT, RA0, RB } },
+{ "ldarx",   X(31,84), XEH_MASK,       PPC64,          { RT, RA0, RB, EH } },
 
-{ "dcbf",    X(31,86), XRT_MASK,       PPC,            { RA, RB } },
+{ "dcbfl",   XOPL(31,86,1), XRT_MASK,  POWER5,         { RA, RB } },
+{ "dcbf",    X(31,86), XLRT_MASK,      PPC,            { RA, RB, XRT_L } },
 
 { "lbzx",    X(31,87), X_MASK,         COM,            { RT, RA0, RB } },
 
@@ -3435,6 +3506,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "lbzux",   X(31,119),        X_MASK,         COM,            { RT, RAL, RB } },
 
+{ "popcntb", X(31,122), XRB_MASK,      POWER5,         { RA, RS } },
+
 { "not",     XRC(31,124,0), X_MASK,    COM,            { RA, RS, RBS } },
 { "nor",     XRC(31,124,0), X_MASK,    COM,            { RA, RS, RB } },
 { "not.",    XRC(31,124,1), X_MASK,    COM,            { RA, RS, RBS } },
@@ -3491,6 +3564,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "sle",     XRC(31,153,0), X_MASK,    M601,           { RA, RS, RB } },
 { "sle.",    XRC(31,153,1), X_MASK,    M601,           { RA, RS, RB } },
 
+{ "prtyw",   X(31,154),        XRB_MASK,       POWER6,         { RA, RS } },
+
 { "wrteei",  X(31,163),        XE_MASK,        PPC403 | BOOKE, { E } },
 
 { "dcbtls",  X(31,166),        X_MASK,         PPCCHLK,        { CT, RA, RB }},
@@ -3506,6 +3581,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "sliq",    XRC(31,184,0), X_MASK,    M601,           { RA, RS, SH } },
 { "sliq.",   XRC(31,184,1), X_MASK,    M601,           { RA, RS, SH } },
 
+{ "prtyd",   X(31,186),        XRB_MASK,       POWER6,         { RA, RS } },
+
 { "stwuxe",  X(31,191),        X_MASK,         BOOKE64,        { RS, RAS, RB } },
 
 { "subfze",  XO(31,200,0,0), XORB_MASK, PPCCOM,                { RT, RA } },
@@ -3612,7 +3689,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "lscbx",   XRC(31,277,0), X_MASK,    M601,           { RT, RA, RB } },
 { "lscbx.",  XRC(31,277,1), X_MASK,    M601,           { RT, RA, RB } },
 
-{ "dcbt",    X(31,278),        X_MASK, PPC,                    { CT, RA, RB } },
+{ "dcbt",    X(31,278),        X_MASK,         PPC,            { CT, RA, RB } },
 
 { "lhzx",    X(31,279),        X_MASK,         COM,            { RT, RA0, RB } },
 
@@ -3693,6 +3770,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "mfsdr1",     XSPR(31,339,25),   XSPR_MASK, COM,     { RT } },
 { "mfsrr0",     XSPR(31,339,26),   XSPR_MASK, COM,     { RT } },
 { "mfsrr1",     XSPR(31,339,27),   XSPR_MASK, COM,     { RT } },
+{ "mfcfar",     XSPR(31,339,28),   XSPR_MASK, POWER6,  { RT } },
 { "mfpid",      XSPR(31,339,48),   XSPR_MASK, BOOKE,    { RT } },
 { "mfpid",      XSPR(31,339,945),  XSPR_MASK, PPC403,  { RT } },
 { "mfcsrr0",    XSPR(31,339,58),   XSPR_MASK, BOOKE,    { RT } },
@@ -3914,12 +3992,18 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "sthx",    X(31,407),        X_MASK,         COM,            { RS, RA0, RB } },
 
+{ "cmpb",    X(31,508),        X_MASK,         POWER6,         { RA, RS, RB } },
+
 { "lfqx",    X(31,791),        X_MASK,         POWER2,         { FRT, RA, RB } },
 
+{ "lfdpx",   X(31,791),        X_MASK,         POWER6,         { FRT, RA, RB } },
+
 { "lfqux",   X(31,823),        X_MASK,         POWER2,         { FRT, RA, RB } },
 
 { "stfqx",   X(31,919),        X_MASK,         POWER2,         { FRS, RA, RB } },
 
+{ "stfdpx",  X(31,919),        X_MASK,         POWER6,         { FRS, RA, RB } },
+
 { "stfqux",  X(31,951),        X_MASK,         POWER2,         { FRS, RA, RB } },
 
 { "orc",     XRC(31,412,0), X_MASK,    COM,            { RA, RS, RB } },
@@ -4009,6 +4093,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "mtsdr1",    XSPR(31,467,25),   XSPR_MASK, COM,      { RS } },
 { "mtsrr0",    XSPR(31,467,26),   XSPR_MASK, COM,      { RS } },
 { "mtsrr1",    XSPR(31,467,27),   XSPR_MASK, COM,      { RS } },
+{ "mtcfar",    XSPR(31,467,28),   XSPR_MASK, POWER6,   { RS } },
 { "mtpid",     XSPR(31,467,48),   XSPR_MASK, BOOKE,     { RS } },
 { "mtpid",     XSPR(31,467,945),  XSPR_MASK, PPC403,   { RS } },
 { "mtdecar",   XSPR(31,467,54),   XSPR_MASK, BOOKE,     { RS } },
@@ -4196,6 +4281,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "clcs",    X(31,531), XRB_MASK,      M601,           { RT, RA } },
 
+{ "ldbrx",   X(31,532),        X_MASK,         CELL,           { RT, RA0, RB } },
+
 { "lswx",    X(31,533),        X_MASK,         PPCCOM,         { RT, RA0, RB } },
 { "lsx",     X(31,533),        X_MASK,         PWRCOM,         { RT, RA, RB } },
 
@@ -4245,6 +4332,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "lfdxe",   X(31,607), X_MASK,                BOOKE64,        { FRT, RA0, RB } },
 
+{ "mffgpr",  XRC(31,607,0), XRA_MASK,  POWER6,         { FRT, RB } },
+
 { "mfsri",   X(31,627), X_MASK,                PWRCOM,         { RT, RA, RB } },
 
 { "dclst",   X(31,630), XRB_MASK,      PWRCOM,         { RS, RA } },
@@ -4255,6 +4344,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "mfsrin",  X(31,659), XRA_MASK,      PPC32,          { RT, RB } },
 
+{ "stdbrx",  X(31,660), X_MASK,                CELL,           { RS, RA0, RB } },
+
 { "stswx",   X(31,661), X_MASK,                PPCCOM,         { RS, RA0, RB } },
 { "stsx",    X(31,661), X_MASK,                PWRCOM,         { RS, RA0, RB } },
 
@@ -4293,6 +4384,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "stfdxe",  X(31,735),        X_MASK,         BOOKE64,        { FRS, RA0, RB } },
 
+{ "mftgpr",  XRC(31,735,0), XRA_MASK,  POWER6,         { RT, FRB } },
+
 { "dcba",    X(31,758),        XRT_MASK,       PPC405 | BOOKE, { RA, RB } },
 
 { "stfdux",  X(31,759),        X_MASK,         COM,            { FRS, RAS, RB } },
@@ -4307,6 +4400,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "tlbivax", X(31,786),        XRT_MASK,       BOOKE,          { RA, RB } },
 { "tlbivaxe",X(31,787),        XRT_MASK,       BOOKE64,        { RA, RB } },
 
+{ "lwzcix",  X(31,789),        X_MASK,         POWER6,         { RT, RA0, RB } },
+
 { "lhbrx",   X(31,790),        X_MASK,         COM,            { RT, RA0, RB } },
 
 { "sraw",    XRC(31,792,0), X_MASK,    PPCCOM,         { RA, RS, RB } },
@@ -4324,6 +4419,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "rac",     X(31,818),        X_MASK,         PWRCOM,         { RT, RA, RB } },
 
+{ "lhzcix",  X(31,821),        X_MASK,         POWER6,         { RT, RA0, RB } },
+
 { "dss",     XDSS(31,822,0), XDSS_MASK,        PPCVEC,         { STRM } },
 { "dssall",  XDSS(31,822,1), XDSS_MASK,        PPCVEC,         { 0 } },
 
@@ -4334,9 +4431,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "slbmfev", X(31,851), XRA_MASK,      PPC64,          { RT, RB } },
 
+{ "lbzcix",  X(31,853),        X_MASK,         POWER6,         { RT, RA0, RB } },
+
 { "mbar",    X(31,854),        X_MASK,         BOOKE,          { MO } },
 { "eieio",   X(31,854),        0xffffffff,     PPC,            { 0 } },
 
+{ "lfiwax",  X(31,855),        X_MASK,         POWER6,         { FRT, RA0, RB } },
+
+{ "ldcix",   X(31,885),        X_MASK,         POWER6,         { RT, RA0, RB } },
+
 { "tlbsx",   XRC(31,914,0), X_MASK,    PPC403|BOOKE,   { RTO, RA, RB } },
 { "tlbsx.",  XRC(31,914,1), X_MASK,    PPC403|BOOKE,   { RTO, RA, RB } },
 { "tlbsxe",  XRC(31,915,0), X_MASK,    BOOKE64,        { RA, RB } },
@@ -4344,6 +4447,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "slbmfee", X(31,915), XRA_MASK,      PPC64,          { RT, RB } },
 
+{ "stwcix",  X(31,917),        X_MASK,         POWER6,         { RS, RA0, RB } },
+
 { "sthbrx",  X(31,918),        X_MASK,         COM,            { RS, RA0, RB } },
 
 { "sraq",    XRC(31,920,0), X_MASK,    M601,           { RA, RS, RB } },
@@ -4365,6 +4470,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "tlbrelo", XTLB(31,946,1), XTLB_MASK,        PPC403,         { RT, RA } },
 { "tlbre",   X(31,946),        X_MASK,         PPC403|BOOKE,   { RSO, RAOPT, SHO } },
 
+{ "sthcix",  X(31,949),        X_MASK,         POWER6,         { RS, RA0, RB } },
+
 { "sraiq",   XRC(31,952,0), X_MASK,    M601,           { RA, RS, SH } },
 { "sraiq.",  XRC(31,952,1), X_MASK,    M601,           { RA, RS, SH } },
 
@@ -4380,6 +4487,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "tlbwe",   X(31,978),        X_MASK,         PPC403|BOOKE,   { RSO, RAOPT, SHO } },
 { "tlbld",   X(31,978),        XRTRA_MASK,     PPC,            { RB } },
 
+{ "stbcix",  X(31,981),        X_MASK,         POWER6,         { RS, RA0, RB } },
+
 { "icbi",    X(31,982),        XRT_MASK,       PPC,            { RA, RB } },
 
 { "stfiwx",  X(31,983),        X_MASK,         PPC,            { FRS, RA0, RB } },
@@ -4394,6 +4503,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "tlbli",   X(31,1010), XRTRA_MASK,   PPC,            { RB } },
 
+{ "stdcix",  X(31,1013), X_MASK,       POWER6,         { RS, RA0, RB } },
+
 { "dcbzl",   XOPL(31,1014,1), XRT_MASK,POWER4,            { RA, RB } },
 { "dcbz",    X(31,1014), XRT_MASK,     PPC,            { RA, RB } },
 { "dclz",    X(31,1014), XRT_MASK,     PPC,            { RA, RB } },
@@ -4413,6 +4524,16 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "stvx",    X(31, 231), X_MASK,       PPCVEC,         { VS, RA, RB } },
 { "stvxl",   X(31, 487), X_MASK,       PPCVEC,         { VS, RA, RB } },
 
+/* New load/store left/right index vector instructions that are in the Cell only.  */
+{ "lvlx",    X(31, 519), X_MASK,       CELL,           { VD, RA0, RB } },
+{ "lvlxl",   X(31, 775), X_MASK,       CELL,           { VD, RA0, RB } },
+{ "lvrx",    X(31, 551), X_MASK,       CELL,           { VD, RA0, RB } },
+{ "lvrxl",   X(31, 807), X_MASK,       CELL,           { VD, RA0, RB } },
+{ "stvlx",   X(31, 647), X_MASK,       CELL,           { VS, RA0, RB } },
+{ "stvlxl",  X(31, 903), X_MASK,       CELL,           { VS, RA0, RB } },
+{ "stvrx",   X(31, 679), X_MASK,       CELL,           { VS, RA0, RB } },
+{ "stvrxl",  X(31, 935), X_MASK,       CELL,           { VS, RA0, RB } },
+
 { "lwz",     OP(32),   OP_MASK,        PPCCOM,         { RT, D, RA0 } },
 { "l",      OP(32),    OP_MASK,        PWRCOM,         { RT, D, RA0 } },
 
@@ -4473,6 +4594,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "lfqu",    OP(57),   OP_MASK,        POWER2,         { FRT, D, RA0 } },
 
+{ "lfdp",    OP(57),   OP_MASK,        POWER6,         { FRT, D, RA0 } },
+
 { "lbze",    DEO(58,0), DE_MASK,       BOOKE64,        { RT, DE, RA0 } },
 { "lbzue",   DEO(58,1), DE_MASK,       BOOKE64,        { RT, DE, RAL } },
 { "lhze",    DEO(58,2), DE_MASK,       BOOKE64,        { RT, DE, RA0 } },
@@ -4494,6 +4617,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "lwa",     DSO(58,2), DS_MASK,       PPC64,          { RT, DS, RA0 } },
 
+{ "dadd",    XRC(59,2,0), X_MASK,      POWER6,         { FRT, FRA, FRB } },
+{ "dadd.",   XRC(59,2,1), X_MASK,      POWER6,         { FRT, FRA, FRB } },
+
+{ "dqua",    ZRC(59,3,0), Z_MASK,      POWER6,         { FRT, FRA, FRB, RMC } },
+{ "dqua.",   ZRC(59,3,1), Z_MASK,      POWER6,         { FRT, FRA, FRB, RMC } },
+
 { "fdivs",   A(59,18,0), AFRC_MASK,    PPC,            { FRT, FRA, FRB } },
 { "fdivs.",  A(59,18,1), AFRC_MASK,    PPC,            { FRT, FRA, FRB } },
 
@@ -4506,12 +4635,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "fsqrts",  A(59,22,0), AFRAFRC_MASK, PPC,            { FRT, FRB } },
 { "fsqrts.", A(59,22,1), AFRAFRC_MASK, PPC,            { FRT, FRB } },
 
-{ "fres",    A(59,24,0), AFRAFRC_MASK, PPC,            { FRT, FRB } },
-{ "fres.",   A(59,24,1), AFRAFRC_MASK, PPC,            { FRT, FRB } },
+{ "fres",    A(59,24,0), AFRALFRC_MASK,        PPC,            { FRT, FRB, A_L } },
+{ "fres.",   A(59,24,1), AFRALFRC_MASK,        PPC,            { FRT, FRB, A_L } },
 
 { "fmuls",   A(59,25,0), AFRB_MASK,    PPC,            { FRT, FRA, FRC } },
 { "fmuls.",  A(59,25,1), AFRB_MASK,    PPC,            { FRT, FRA, FRC } },
 
+{ "frsqrtes", A(59,26,0), AFRALFRC_MASK,POWER5,                { FRT, FRB, A_L } },
+{ "frsqrtes.",A(59,26,1), AFRALFRC_MASK,POWER5,                { FRT, FRB, A_L } },
+
 { "fmsubs",  A(59,28,0), A_MASK,       PPC,            { FRT,FRA,FRC,FRB } },
 { "fmsubs.", A(59,28,1), A_MASK,       PPC,            { FRT,FRA,FRC,FRB } },
 
@@ -4524,10 +4656,73 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "fnmadds", A(59,31,0), A_MASK,       PPC,            { FRT,FRA,FRC,FRB } },
 { "fnmadds.",A(59,31,1), A_MASK,       PPC,            { FRT,FRA,FRC,FRB } },
 
+{ "dmul",    XRC(59,34,0), X_MASK,     POWER6,         { FRT, FRA, FRB } },
+{ "dmul.",   XRC(59,34,1), X_MASK,     POWER6,         { FRT, FRA, FRB } },
+
+{ "drrnd",   ZRC(59,35,0), Z_MASK,     POWER6,         { FRT, FRA, FRB, RMC } },
+{ "drrnd.",  ZRC(59,35,1), Z_MASK,     POWER6,         { FRT, FRA, FRB, RMC } },
+
+{ "dscli",   ZRC(59,66,0), Z_MASK,     POWER6,         { FRT, FRA, SH16 } },
+{ "dscli.",  ZRC(59,66,1), Z_MASK,     POWER6,         { FRT, FRA, SH16 } },
+
+{ "dquai",   ZRC(59,67,0), Z_MASK,     POWER6,         { TE,  FRT, FRB, RMC } },
+{ "dquai.",  ZRC(59,67,1), Z_MASK,     POWER6,         { TE,  FRT, FRB, RMC } },
+
+{ "dscri",   ZRC(59,98,0), Z_MASK,     POWER6,         { FRT, FRA, SH16 } },
+{ "dscri.",  ZRC(59,98,1), Z_MASK,     POWER6,         { FRT, FRA, SH16 } },
+
+{ "drintx",  ZRC(59,99,0), Z_MASK,     POWER6,         { R, FRT, FRB, RMC } },
+{ "drintx.", ZRC(59,99,1), Z_MASK,     POWER6,         { R, FRT, FRB, RMC } },
+
+{ "dcmpo",   X(59,130),           X_MASK,      POWER6,         { BF,  FRA, FRB } },
+
+{ "dtstex",  X(59,162),           X_MASK,      POWER6,         { BF,  FRA, FRB } },
+{ "dtstdc",  Z(59,194),           Z_MASK,      POWER6,         { BF,  FRA, DCM } },
+{ "dtstdg",  Z(59,226),           Z_MASK,      POWER6,         { BF,  FRA, DGM } },
+
+{ "drintn",  ZRC(59,227,0), Z_MASK,    POWER6,         { R, FRT, FRB, RMC } },
+{ "drintn.", ZRC(59,227,1), Z_MASK,    POWER6,         { R, FRT, FRB, RMC } },
+
+{ "dctdp",   XRC(59,258,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "dctdp.",  XRC(59,258,1), X_MASK,    POWER6,         { FRT, FRB } },
+
+{ "dctfix",  XRC(59,290,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "dctfix.", XRC(59,290,1), X_MASK,    POWER6,         { FRT, FRB } },
+
+{ "ddedpd",  XRC(59,322,0), X_MASK,    POWER6,         { SP, FRT, FRB } }, 
+{ "ddedpd.", XRC(59,322,1), X_MASK,    POWER6,         { SP, FRT, FRB } }, 
+
+{ "dxex",    XRC(59,354,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "dxex.",   XRC(59,354,1), X_MASK,    POWER6,         { FRT, FRB } },
+
+{ "dsub",    XRC(59,514,0), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+{ "dsub.",   XRC(59,514,1), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+
+{ "ddiv",    XRC(59,546,0), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+{ "ddiv.",   XRC(59,546,1), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+
+{ "dcmpu",   X(59,642),            X_MASK,     POWER6,         { BF,  FRA, FRB } },
+
+{ "dtstsf",  X(59,674),           X_MASK,      POWER6,         { BF,  FRA, FRB } },
+
+{ "drsp",    XRC(59,770,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "drsp.",   XRC(59,770,1), X_MASK,    POWER6,         { FRT, FRB } },
+
+{ "dcffix",  XRC(59,802,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "dcffix.", XRC(59,802,1), X_MASK,    POWER6,         { FRT, FRB } },
+
+{ "denbcd",  XRC(59,834,0), X_MASK,    POWER6,         { S, FRT, FRB } },
+{ "denbcd.", XRC(59,834,1), X_MASK,    POWER6,         { S, FRT, FRB } },
+
+{ "diex",    XRC(59,866,0), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+{ "diex.",   XRC(59,866,1), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+
 { "stfq",    OP(60),   OP_MASK,        POWER2,         { FRS, D, RA } },
 
 { "stfqu",   OP(61),   OP_MASK,        POWER2,         { FRS, D, RA } },
 
+{ "stfdp",   OP(61),   OP_MASK,        POWER6,         { FRT, D, RA0 } },
+
 { "lde",     DEO(62,0), DE_MASK,       BOOKE64,        { RT, DES, RA0 } },
 { "ldue",    DEO(62,1), DE_MASK,       BOOKE64,        { RT, DES, RA0 } },
 { "lfse",    DEO(62,4), DE_MASK,       BOOKE64,        { FRT, DES, RA0 } },
@@ -4549,6 +4744,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "fcmpu",   X(63,0),  X_MASK|(3<<21), COM,            { BF, FRA, FRB } },
 
+{ "daddq",   XRC(63,2,0), X_MASK,      POWER6,         { FRT, FRA, FRB } },
+{ "daddq.",  XRC(63,2,1), X_MASK,      POWER6,         { FRT, FRA, FRB } },
+
+{ "dquaq",   ZRC(63,3,0), Z_MASK,      POWER6,         { FRT, FRA, FRB, RMC } },
+{ "dquaq.",  ZRC(63,3,1), Z_MASK,      POWER6,         { FRT, FRA, FRB, RMC } },
+
+{ "fcpsgn",  XRC(63,8,0), X_MASK,      POWER6,         { FRT, FRA, FRB } },
+{ "fcpsgn.", XRC(63,8,1), X_MASK,      POWER6,         { FRT, FRA, FRB } },
+
 { "frsp",    XRC(63,12,0), XRA_MASK,   COM,            { FRT, FRB } },
 { "frsp.",   XRC(63,12,1), XRA_MASK,   COM,            { FRT, FRB } },
 
@@ -4583,13 +4787,16 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 { "fsel",    A(63,23,0), A_MASK,       PPC,            { FRT,FRA,FRC,FRB } },
 { "fsel.",   A(63,23,1), A_MASK,       PPC,            { FRT,FRA,FRC,FRB } },
 
+{ "fre",     A(63,24,0), AFRALFRC_MASK,        POWER5,         { FRT, FRB, A_L } },
+{ "fre.",    A(63,24,1), AFRALFRC_MASK,        POWER5,         { FRT, FRB, A_L } },
+
 { "fmul",    A(63,25,0), AFRB_MASK,    PPCCOM,         { FRT, FRA, FRC } },
 { "fm",      A(63,25,0), AFRB_MASK,    PWRCOM,         { FRT, FRA, FRC } },
 { "fmul.",   A(63,25,1), AFRB_MASK,    PPCCOM,         { FRT, FRA, FRC } },
 { "fm.",     A(63,25,1), AFRB_MASK,    PWRCOM,         { FRT, FRA, FRC } },
 
-{ "frsqrte", A(63,26,0), AFRAFRC_MASK, PPC,            { FRT, FRB } },
-{ "frsqrte.",A(63,26,1), AFRAFRC_MASK, PPC,            { FRT, FRB } },
+{ "frsqrte", A(63,26,0), AFRALFRC_MASK,        PPC,            { FRT, FRB, A_L } },
+{ "frsqrte.",A(63,26,1), AFRALFRC_MASK,        PPC,            { FRT, FRB, A_L } },
 
 { "fmsub",   A(63,28,0), A_MASK,       PPCCOM,         { FRT,FRA,FRC,FRB } },
 { "fms",     A(63,28,0), A_MASK,       PWRCOM,         { FRT,FRA,FRC,FRB } },
@@ -4613,6 +4820,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "fcmpo",   X(63,32), X_MASK|(3<<21), COM,            { BF, FRA, FRB } },
 
+{ "dmulq",   XRC(63,34,0), X_MASK,     POWER6,         { FRT, FRA, FRB } },
+{ "dmulq.",  XRC(63,34,1), X_MASK,     POWER6,         { FRT, FRA, FRB } },
+
+{ "drrndq",  ZRC(63,35,0), Z_MASK,     POWER6,         { FRT, FRA, FRB, RMC } },
+{ "drrndq.", ZRC(63,35,1), Z_MASK,     POWER6,         { FRT, FRA, FRB, RMC } },
+
 { "mtfsb1",  XRC(63,38,0), XRARB_MASK, COM,            { BT } },
 { "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM,            { BT } },
 
@@ -4621,36 +4834,100 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 { "mcrfs",   X(63,64), XRB_MASK|(3<<21)|(3<<16), COM,  { BF, BFA } },
 
+{ "dscliq",  ZRC(63,66,0), Z_MASK,     POWER6,         { FRT, FRA, SH16 } },
+{ "dscliq.", ZRC(63,66,1), Z_MASK,     POWER6,         { FRT, FRA, SH16 } },
+
+{ "dquaiq",  ZRC(63,67,0), Z_MASK,     POWER6,         { TE,  FRT, FRB, RMC } },
+{ "dquaiq.", ZRC(63,67,1), Z_MASK,     POWER6,         { FRT, FRA, FRB, RMC } },
+
 { "mtfsb0",  XRC(63,70,0), XRARB_MASK, COM,            { BT } },
 { "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM,            { BT } },
 
 { "fmr",     XRC(63,72,0), XRA_MASK,   COM,            { FRT, FRB } },
 { "fmr.",    XRC(63,72,1), XRA_MASK,   COM,            { FRT, FRB } },
 
+{ "dscriq",  ZRC(63,98,0), Z_MASK,     POWER6,         { FRT, FRA, SH16 } },
+{ "dscriq.", ZRC(63,98,1), Z_MASK,     POWER6,         { FRT, FRA, SH16 } },
+
+{ "drintxq", ZRC(63,99,0), Z_MASK,     POWER6,         { R, FRT, FRB, RMC } },
+{ "drintxq.",ZRC(63,99,1), Z_MASK,     POWER6,         { R, FRT, FRB, RMC } },
+
+{ "dcmpoq",  X(63,130),           X_MASK,      POWER6,         { BF,  FRA, FRB } },
+
 { "mtfsfi",  XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
 { "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
 
 { "fnabs",   XRC(63,136,0), XRA_MASK,  COM,            { FRT, FRB } },
 { "fnabs.",  XRC(63,136,1), XRA_MASK,  COM,            { FRT, FRB } },
 
+{ "dtstexq", X(63,162),            X_MASK,     POWER6,         { BF,  FRA, FRB } },
+{ "dtstdcq", Z(63,194),            Z_MASK,     POWER6,         { BF,  FRA, DCM } },
+{ "dtstdgq", Z(63,226),            Z_MASK,     POWER6,         { BF,  FRA, DGM } },
+
+{ "drintnq", ZRC(63,227,0), Z_MASK,    POWER6,         { R, FRT, FRB, RMC } },
+{ "drintnq.",ZRC(63,227,1), Z_MASK,    POWER6,         { R, FRT, FRB, RMC } },
+
+{ "dctqpq",  XRC(63,258,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "dctqpq.", XRC(63,258,1), X_MASK,    POWER6,         { FRT, FRB } },
+
 { "fabs",    XRC(63,264,0), XRA_MASK,  COM,            { FRT, FRB } },
 { "fabs.",   XRC(63,264,1), XRA_MASK,  COM,            { FRT, FRB } },
 
+{ "dctfixq", XRC(63,290,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "dctfixq.",XRC(63,290,1), X_MASK,    POWER6,         { FRT, FRB } },
+
+{ "ddedpdq", XRC(63,322,0), X_MASK,    POWER6,         { SP, FRT, FRB } },
+{ "ddedpdq.",XRC(63,322,1), X_MASK,    POWER6,         { SP, FRT, FRB } },
+
+{ "dxexq",   XRC(63,354,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "dxexq.",  XRC(63,354,1), X_MASK,    POWER6,         { FRT, FRB } },
+
+{ "frin",    XRC(63,392,0), XRA_MASK,  POWER5,         { FRT, FRB } },
+{ "frin.",   XRC(63,392,1), XRA_MASK,  POWER5,         { FRT, FRB } },
+{ "friz",    XRC(63,424,0), XRA_MASK,  POWER5,         { FRT, FRB } },
+{ "friz.",   XRC(63,424,1), XRA_MASK,  POWER5,         { FRT, FRB } },
+{ "frip",    XRC(63,456,0), XRA_MASK,  POWER5,         { FRT, FRB } },
+{ "frip.",   XRC(63,456,1), XRA_MASK,  POWER5,         { FRT, FRB } },
+{ "frim",    XRC(63,488,0), XRA_MASK,  POWER5,         { FRT, FRB } },
+{ "frim.",   XRC(63,488,1), XRA_MASK,  POWER5,         { FRT, FRB } },
+
+{ "dsubq",   XRC(63,514,0), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+{ "dsubq.",  XRC(63,514,1), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+
+{ "ddivq",   XRC(63,546,0), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+{ "ddivq.",  XRC(63,546,1), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+
 { "mffs",    XRC(63,583,0), XRARB_MASK,        COM,            { FRT } },
 { "mffs.",   XRC(63,583,1), XRARB_MASK,        COM,            { FRT } },
 
+{ "dcmpuq",  X(63,642),            X_MASK,     POWER6,         { BF,  FRA, FRB } },
+
+{ "dtstsfq", X(63,674),            X_MASK,     POWER6,         { BF,  FRA, FRB } },
+
 { "mtfsf",   XFL(63,711,0), XFL_MASK,  COM,            { FLM, FRB } },
 { "mtfsf.",  XFL(63,711,1), XFL_MASK,  COM,            { FLM, FRB } },
 
+{ "drdpq",   XRC(63,770,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "drdpq.",  XRC(63,770,1), X_MASK,    POWER6,         { FRT, FRB } },
+
+{ "dcffixq", XRC(63,802,0), X_MASK,    POWER6,         { FRT, FRB } },
+{ "dcffixq.",XRC(63,802,1), X_MASK,    POWER6,         { FRT, FRB } },
+
 { "fctid",   XRC(63,814,0), XRA_MASK,  PPC64,          { FRT, FRB } },
 { "fctid.",  XRC(63,814,1), XRA_MASK,  PPC64,          { FRT, FRB } },
 
 { "fctidz",  XRC(63,815,0), XRA_MASK,  PPC64,          { FRT, FRB } },
 { "fctidz.", XRC(63,815,1), XRA_MASK,  PPC64,          { FRT, FRB } },
 
+{ "denbcdq", XRC(63,834,0), X_MASK,    POWER6,         { S, FRT, FRB } },
+{ "denbcdq.",XRC(63,834,1), X_MASK,    POWER6,         { S, FRT, FRB } },
+
 { "fcfid",   XRC(63,846,0), XRA_MASK,  PPC64,          { FRT, FRB } },
 { "fcfid.",  XRC(63,846,1), XRA_MASK,  PPC64,          { FRT, FRB } },
 
+{ "diexq",   XRC(63,866,0), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+{ "diexq.",  XRC(63,866,1), X_MASK,    POWER6,         { FRT, FRA, FRB } },
+
 };
 
 const int powerpc_num_opcodes =
This page took 0.032188 seconds and 4 git commands to generate.