gold: fix ABI pagesize for aarch64
[deliverable/binutils-gdb.git] / opcodes / ppc-opc.c
index 80dfa246159515667e277c95f64242b219632912..e9d24c8f55ef7269c633a5267327e58f714ca3f2 100644 (file)
@@ -1,7 +1,5 @@
 /* ppc-opc.c -- PowerPC opcode list
-   Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-   Free Software Foundation, Inc.
+   Copyright (C) 1994-2015 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support
 
    This file is part of the GNU opcodes library.
@@ -55,6 +53,7 @@ static unsigned long insert_bo (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_bo (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_boe (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_boe (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_esync (unsigned long, long, ppc_cpu_t, const char **);
 static unsigned long insert_fxm (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_fxm (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_li20 (unsigned long, long, ppc_cpu_t, const char **);
@@ -315,14 +314,18 @@ const struct powerpc_operand powerpc_operands[] =
   { 0xfffc, 0, NULL, NULL,
     PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DS },
 
-  /* The DUIS field in a XFX form instruction, 10 bits unsigned imediate */
+  /* The DUIS or BHRBE fields in a XFX form instruction, 10 bits
+     unsigned imediate */
 #define DUIS DS + 1
+#define BHRBE DUIS
   { 0x3ff, 11, NULL, NULL, 0 },
 
   /* The E field in a wrteei instruction.  */
   /* And the W bit in the pair singles instructions.  */
+  /* And the ST field in a VX form instruction.  */
 #define E DUIS + 1
 #define PSW E
+#define ST E
   { 0x1, 15, NULL, NULL, 0 },
 
   /* The FL1 field in a POWER SC form instruction.  */
@@ -380,10 +383,12 @@ const struct powerpc_operand powerpc_operands[] =
 
   /* Power4 version for mfcr.  */
 #define FXM4 FXM + 1
-  { 0xff, 12, insert_fxm, extract_fxm, PPC_OPERAND_OPTIONAL },
+  { 0xff, 12, insert_fxm, extract_fxm, PPC_OPERAND_OPTIONAL | PPC_OPERAND_OPTIONAL_VALUE},
+  /* If the FXM4 operand is ommitted, use the sentinel value -1.  */
+  { -1, -1, NULL, NULL, 0},
 
   /* The IMM20 field in an LI instruction.  */
-#define IMM20 FXM4 + 1
+#define IMM20 FXM4 + 2
   { 0xfffff, PPC_OPSHIFT_INV, insert_li20, extract_li20, PPC_OPERAND_SIGNED},
 
   /* The L field in a D or X form instruction.  */
@@ -413,7 +418,7 @@ const struct powerpc_operand powerpc_operands[] =
   /* The LS or WC field in an X (sync or wait) form instruction.  */
 #define LS LIA + 1
 #define WC LS
-  { 0x3, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
+  { 0x3, 21, insert_ls, NULL, PPC_OPERAND_OPTIONAL },
 
   /* The ME field in an M form instruction.  */
 #define ME LS + 1
@@ -631,7 +636,7 @@ const struct powerpc_operand powerpc_operands[] =
 
   /* The ESYNC field in an X (sync) form instruction.  */
 #define ESYNC STRM + 1
-  { 0xf, 16, insert_ls, NULL, PPC_OPERAND_OPTIONAL },
+  { 0xf, 16, insert_esync, NULL, PPC_OPERAND_OPTIONAL },
 
   /* The SV field in a POWER SC form instruction.  */
 #define SV ESYNC + 1
@@ -640,10 +645,12 @@ const struct powerpc_operand powerpc_operands[] =
   /* The TBR field in an XFX form instruction.  This is like the SPR
      field, but it is optional.  */
 #define TBR SV + 1
-  { 0x3ff, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
+  { 0x3ff, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL | PPC_OPERAND_OPTIONAL_VALUE},
+  /* If the TBR operand is ommitted, use the value 268.  */
+  { -1, 268, NULL, NULL, 0},
 
   /* The TO field in a D or X form instruction.  */
-#define TO TBR + 1
+#define TO TBR + 2
 #define DUI TO
 #define TO_MASK (0x1f << 21)
   { 0x1f, 21, NULL, NULL, 0 },
@@ -652,8 +659,11 @@ const struct powerpc_operand powerpc_operands[] =
 #define UI TO + 1
   { 0xffff, 0, NULL, NULL, 0 },
 
+#define UISIGNOPT UI + 1
+  { 0xffff, 0, NULL, NULL, PPC_OPERAND_SIGNOPT },
+
   /* The IMM field in an SE_IM5 instruction.  */
-#define UI5 UI + 1
+#define UI5 UISIGNOPT + 1
   { 0x1f, 4, NULL, NULL, 0 },
 
   /* The OIMM field in an SE_OIM5 instruction.  */
@@ -695,8 +705,16 @@ const struct powerpc_operand powerpc_operands[] =
 #define UIMM3 UIMM + 1
   { 0x7, 16, NULL, NULL, 0 },
 
+  /* The SIX field in a VX form instruction.  */
+#define SIX UIMM3 + 1
+  { 0xf, 11, NULL, NULL, 0 },
+
+  /* The PS field in a VX form instruction.  */
+#define PS SIX + 1
+  { 0x1, 9, NULL, NULL, 0 },
+
   /* The SHB field in a VA form instruction.  */
-#define SHB UIMM3 + 1
+#define SHB PS + 1
   { 0xf, 6, NULL, NULL, 0 },
 
   /* The other UIMM field in a half word EVX form instruction.  */
@@ -734,12 +752,12 @@ const struct powerpc_operand powerpc_operands[] =
 #define PSD PSQM + 1
   {  0xfff, 0, 0, 0,  PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
 
+  /* The L field in an mtmsrd or A form instruction or W in an X form.  */
 #define A_L PSD + 1
 #define W A_L
-#define MTMSRD_L W
   { 0x1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
 
-#define RMC MTMSRD_L + 1
+#define RMC A_L + 1
   { 0x3, 9, NULL, NULL, 0 },
 
 #define R RMC + 1
@@ -751,8 +769,14 @@ const struct powerpc_operand powerpc_operands[] =
 #define S SP + 1
   { 0x1, 20, NULL, NULL, 0 },
 
+  /* The S field in a XL form instruction.  */
+#define SXL S + 1
+  { 0x1, 11, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_OPTIONAL_VALUE},
+  /* If the SXL operand is ommitted, use the value 1.  */
+  { -1, 1, NULL, NULL, 0},
+
   /* SH field starting at bit position 16.  */
-#define SH16 S + 1
+#define SH16 SXL + 2
   /* The DCM and DGM fields in a Z form instruction.  */
 #define DCM SH16
 #define DGM DCM
@@ -773,12 +797,12 @@ const struct powerpc_operand powerpc_operands[] =
 #define FCRT_MASK (0x1f << 21)
   { 0x1f, 21, 0, 0, PPC_OPERAND_FCR },
 
-  /* Xilinx FSL related masks and macros */  
+  /* Xilinx FSL related masks and macros */
 #define FSL FCRT + 1
 #define FSL_MASK (0x1f << 11)
-  { 0x1f, 11, 0, 0, PPC_OPERAND_FSL },  
+  { 0x1f, 11, 0, 0, PPC_OPERAND_FSL },
 
-  /* Xilinx UDI related masks and macros */  
+  /* Xilinx UDI related masks and macros */
 #define URT FSL + 1
   { 0x1f, 21, 0, 0, PPC_OPERAND_UDI },
 
@@ -849,6 +873,9 @@ const struct powerpc_operand powerpc_operands[] =
 
 #define ERAT_T UIM + 1
   { 0x7, 21, NULL, NULL, 0 },
+
+#define IH ERAT_T + 1
+  { 0x7, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
 };
 
 const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
@@ -877,7 +904,7 @@ static long
 extract_arx (unsigned long insn,
             ppc_cpu_t dialect ATTRIBUTE_UNUSED,
             int *invalid ATTRIBUTE_UNUSED)
-{ 
+{
   return (insn & 0xf) + 8;
 }
 
@@ -1122,11 +1149,11 @@ valid_bo_pre_v2 (long value)
 {
   /* Certain encodings have bits that are required to be zero.
      These are (z must be zero, y may be anything):
-        0000y 
-        0001y 
+        0000y
+        0001y
         001zy
-        0100y 
-        0101y 
+        0100y
+        0101y
         011zy
         1z00y
         1z01y
@@ -1264,19 +1291,13 @@ insert_fxm (unsigned long insn,
        }
     }
 
-  /* If the optional field on mfcr is missing that means we want to use
-     the old form of the instruction that moves the whole cr.  In that
-     case we'll have VALUE zero.  There doesn't seem to be a way to
-     distinguish this from the case where someone writes mfcr %r3,0.  */
-  else if (value == 0)
-    ;
-
   /* If only one bit of the FXM field is set, we can use the new form
      of the instruction, which is faster.  Unlike the Power4 branch hint
      encoding, this is not backward compatible.  Do not generate the
      new form unless -mpower4 has been given, or -many and the two
      operand form of mfcr was used.  */
-  else if ((value & -value) == value
+  else if (value > 0
+          && (value & -value) == value
           && ((dialect & PPC_OPCODE_POWER4) != 0
               || ((dialect & PPC_OPCODE_ANY) != 0
                   && (insn & (0x3ff << 1)) == 19 << 1)))
@@ -1285,7 +1306,10 @@ insert_fxm (unsigned long insn,
   /* Any other value on mfcr is an error.  */
   else if ((insn & (0x3ff << 1)) == 19 << 1)
     {
-      *errmsg = _("ignoring invalid mfcr mask");
+      /* A value of -1 means we used the one operand form of
+        mfcr which is valid.  */
+      if (value != -1)
+        *errmsg = _("ignoring invalid mfcr mask");
       value = 0;
     }
 
@@ -1312,6 +1336,8 @@ extract_fxm (unsigned long insn,
     {
       if (mask != 0)
        *invalid = 1;
+      else
+       mask = -1;
     }
 
   return mask;
@@ -1340,17 +1366,40 @@ extract_li20 (unsigned long insn,
          | (insn & 0x7ff);
 }
 
-/* The LS field in a sync instruction that accepts 2 operands
-   Values 2 and 3 are reserved,
-     must be treated as 0 for future compatibility
-   Values 0 and 1 can be accepted, if field ESYNC is zero
-   Otherwise L = complement of ESYNC-bit2 (1<<18) */
+/* The 2-bit L field in a SYNC or WC field in a WAIT instruction.
+   For SYNC, some L values are reserved:
+     * Value 3 is reserved on newer server cpus.
+     * Values 2 and 3 are reserved on all other cpus.  */
 
 static unsigned long
 insert_ls (unsigned long insn,
           long value,
-          ppc_cpu_t dialect ATTRIBUTE_UNUSED,
-          const char **errmsg ATTRIBUTE_UNUSED)
+          ppc_cpu_t dialect,
+          const char **errmsg)
+{
+  /* For SYNC, some L values are illegal.  */
+  if (((insn >> 1) & 0x3ff) == 598)
+    {
+      long max_lvalue = (dialect & PPC_OPCODE_POWER4) ? 2 : 1;
+      if (value > max_lvalue)
+       {
+         *errmsg = _("illegal L operand value");
+         return insn;
+       }
+    }
+
+  return insn | ((value & 0x3) << 21);
+}
+
+/* The 4-bit E field in a sync instruction that accepts 2 operands.
+   If ESYNC is non-zero, then the L field must be either 0 or 1 and
+   the complement of ESYNC-bit2.  */
+
+static unsigned long
+insert_esync (unsigned long insn,
+             long value,
+             ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+             const char **errmsg)
 {
   unsigned long ls;
 
@@ -1358,12 +1407,15 @@ insert_ls (unsigned long insn,
   if (value == 0)
     {
       if (ls > 1)
-       return insn & ~(0x3 << 21);
+       *errmsg = _("illegal L operand value");
       return insn;
     }
-  if ((value & 0x2) != 0)
-    return (insn & ~(0x3 << 21)) | ((value & 0xf) << 16);
-  return (insn & ~(0x3 << 21)) | (0x1 << 21) | ((value & 0xf) << 16);
+
+  if ((ls & ~0x1)
+      || (((value >> 1) & 0x1) ^ ls) == 0)
+        *errmsg = _("incompatible L operand value");
+
+  return insn | ((value & 0xf) << 16);
 }
 
 /* The MB and ME fields in an M form instruction expressed as a single
@@ -1848,36 +1900,29 @@ extract_sprg (unsigned long insn,
 }
 
 /* The TBR field in an XFX instruction.  This is just like SPR, but it
-   is optional.  When TBR is omitted, it must be inserted as 268 (the
-   magic number of the TB register).  These functions treat 0
-   (indicating an omitted optional operand) as 268.  This means that
-   ``mftb 4,0'' is not handled correctly.  This does not matter very
-   much, since the architecture manual does not define mftb as
-   accepting any values other than 268 or 269.  */
-
-#define TB (268)
+   is optional.  */
 
 static unsigned long
 insert_tbr (unsigned long insn,
            long value,
            ppc_cpu_t dialect ATTRIBUTE_UNUSED,
-           const char **errmsg ATTRIBUTE_UNUSED)
+           const char **errmsg)
 {
-  if (value == 0)
-    value = TB;
+  if (value != 268 && value != 269)
+    *errmsg = _("invalid tbr number");
   return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
 }
 
 static long
 extract_tbr (unsigned long insn,
             ppc_cpu_t dialect ATTRIBUTE_UNUSED,
-            int *invalid ATTRIBUTE_UNUSED)
+            int *invalid)
 {
   long ret;
 
   ret = ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
-  if (ret == TB)
-    ret = 0;
+  if (ret != 268 && ret != 269)
+    *invalid = 1;
   return ret;
 }
 
@@ -2006,6 +2051,7 @@ extract_dm (unsigned long insn,
     *invalid = 1;
   return (value) ? 1 : 0;
 }
+
 /* The VLESIMM field in an I16A form instruction.  This is split.  */
 
 static unsigned long
@@ -2022,11 +2068,8 @@ extract_vlesi (unsigned long insn,
              ppc_cpu_t dialect ATTRIBUTE_UNUSED,
              int *invalid ATTRIBUTE_UNUSED)
 {
-  /* RWRW Because I don't know how to make int be 16 and long be 32 */
-  /* I can't rely on casting an int to long to get sign extension. */
   long value = ((insn >> 10) & 0xf800) | (insn & 0x7ff);
-  if (value & 0x8000)
-    value |= 0xffff0000;
+  value = (value ^ 0x8000) - 0x8000;
   return value;
 }
 
@@ -2045,8 +2088,8 @@ extract_vlensi (unsigned long insn,
              int *invalid ATTRIBUTE_UNUSED)
 {
   long value = ((insn >> 10) & 0xf800) | (insn & 0x7ff);
-  if (value & 0x8000)
-    value |= 0xffff0000;
+  value = (value ^ 0x8000) - 0x8000;
+  /* Don't use for disassembly.  */
   *invalid = 1;
   return -value;
 }
@@ -2286,7 +2329,7 @@ extract_vleil (unsigned long insn,
 #define SCI8BF_MASK SCI8BF(0x3f, 7, 0x1f)
 
 /* An SD4 form instruction.  This is a 16-bit instruction.  */
-#define SD4(op) ((((unsigned long)(op)) & 0xf) << 12) 
+#define SD4(op) ((((unsigned long)(op)) & 0xf) << 12)
 #define SD4_MASK SD4(0xf)
 
 /* An SE_IM5 form instruction.  This is a 16-bit instruction.  */
@@ -2328,6 +2371,9 @@ extract_vleil (unsigned long insn,
 /* A VX_MASK with a UIMM2 field.  */
 #define VXUIMM2_MASK (VX_MASK | (0x7 << 18))
 
+/* A VX_MASK with a PS field.  */
+#define VXPS_MASK (VX_MASK & ~(0x1 << 9))
+
 /* A VA form instruction.  */
 #define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))
 
@@ -2382,6 +2428,9 @@ extract_vleil (unsigned long insn,
 /* The mask for an XX1 form instruction.  */
 #define XX1_MASK X (0x3f, 0x3ff)
 
+/* An XX1_MASK with the RB field fixed.  */
+#define XX1RB_MASK (XX1_MASK | RB_MASK)
+
 /* The mask for an XX2 form instruction.  */
 #define XX2_MASK (XX2 (0x3f, 0x1ff) | (0x1f << 16))
 
@@ -2519,6 +2568,9 @@ extract_vleil (unsigned long insn,
 /* The mask for an XL form instruction.  */
 #define XL_MASK XLLK (0x3f, 0x3ff, 1)
 
+/* An XL_MASK with the RT, RA and RB fields fixed, but S bit clear.  */
+#define XLS_MASK ((XL_MASK | RT_MASK | RA_MASK | RB_MASK) & ~(1 << 11))
+
 /* An XL form instruction which explicitly sets the BO field.  */
 #define XLO(op, bo, xop, lk) \
   (XLLK ((op), (xop), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
@@ -2695,13 +2747,14 @@ extract_vleil (unsigned long insn,
 #define PPC440 PPC_OPCODE_440
 #define PPC464 PPC440
 #define PPC476 PPC_OPCODE_476
-#define PPC750 PPC
-#define PPC7450 PPC
-#define PPC860 PPC
+#define PPC750 PPC_OPCODE_750
+#define PPC7450 PPC_OPCODE_7450
+#define PPC860 PPC_OPCODE_860
 #define PPCPS  PPC_OPCODE_PPCPS
 #define PPCVEC PPC_OPCODE_ALTIVEC
 #define PPCVEC2        PPC_OPCODE_ALTIVEC2
 #define PPCVSX PPC_OPCODE_VSX
+#define PPCVSX2        PPC_OPCODE_VSX
 #define POWER  PPC_OPCODE_POWER
 #define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2
 #define PWR2COM PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_COMMON
@@ -2724,12 +2777,18 @@ extract_vleil (unsigned long insn,
 #define PPCRFMCI       PPC_OPCODE_RFMCI
 #define E500MC  PPC_OPCODE_E500MC
 #define PPCA2  PPC_OPCODE_A2
-#define TITAN   PPC_OPCODE_TITAN  
+#define TITAN   PPC_OPCODE_TITAN
 #define MULHW   PPC_OPCODE_405 | PPC_OPCODE_440 | TITAN | PPC_OPCODE_VLE
 #define E500   PPC_OPCODE_E500
 #define E6500  PPC_OPCODE_E6500
 #define PPCVLE  PPC_OPCODE_VLE
 #define PPCHTM  PPC_OPCODE_HTM
+/* The list of embedded processors that use the embedded operand ordering
+   for the 3 operand dcbt and dcbtst instructions.  */
+#define DCBT_EO        (PPC_OPCODE_E500 | PPC_OPCODE_E500MC | PPC_OPCODE_476 \
+                | PPC_OPCODE_A2 | PPC_OPCODE_VLE)
+
+
 \f
 /* The opcode table.
 
@@ -2769,6 +2828,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"tdlei",      OPTO(2,TOLE),   OPTO_MASK,   PPC64,     PPCNONE,        {RA, SI}},
 {"tdngi",      OPTO(2,TONG),   OPTO_MASK,   PPC64,     PPCNONE,        {RA, SI}},
 {"tdnei",      OPTO(2,TONE),   OPTO_MASK,   PPC64,     PPCNONE,        {RA, SI}},
+{"tdui",       OPTO(2,TOU),    OPTO_MASK,   PPC64,     PPCNONE,        {RA, SI}},
 {"tdi",                OP(2),          OP_MASK,     PPC64,     PPCNONE,        {TO, RA, SI}},
 
 {"twlgti",     OPTO(3,TOLGT),  OPTO_MASK,   PPCCOM,    PPCNONE,        {RA, SI}},
@@ -2799,6 +2859,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"tngi",       OPTO(3,TONG),   OPTO_MASK,   PWRCOM,    PPCNONE,        {RA, SI}},
 {"twnei",      OPTO(3,TONE),   OPTO_MASK,   PPCCOM,    PPCNONE,        {RA, SI}},
 {"tnei",       OPTO(3,TONE),   OPTO_MASK,   PWRCOM,    PPCNONE,        {RA, SI}},
+{"twui",       OPTO(3,TOU),    OPTO_MASK,   PPCCOM,    PPCNONE,        {RA, SI}},
+{"tui",                OPTO(3,TOU),    OPTO_MASK,   PWRCOM,    PPCNONE,        {RA, SI}},
 {"twi",                OP(3),          OP_MASK,     PPCCOM,    PPCNONE,        {TO, RA, SI}},
 {"ti",         OP(3),          OP_MASK,     PWRCOM,    PPCNONE,        {TO, RA, SI}},
 
@@ -2848,6 +2910,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"vperm",      VXA(4,  43),    VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB, VC}},
 {"vsldoi",     VXA(4,  44),    VXASHB_MASK, PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB, SHB}},
 {"ps_sel",     A  (4,  23,0),  A_MASK,      PPCPS,     PPCNONE,        {FRT, FRA, FRC, FRB}},
+{"vpermxor",   VXA(4,  45),    VXA_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB, VC}},
 {"vmaddfp",    VXA(4,  46),    VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VC, VB}},
 {"ps_sel.",    A  (4,  23,1),  A_MASK,      PPCPS,     PPCNONE,        {FRT, FRA, FRC, FRB}},
 {"vnmsubfp",   VXA(4,  47),    VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VC, VB}},
@@ -2866,6 +2929,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"ps_nmadd",   A  (4,  31,0),  A_MASK,      PPCPS,     PPCNONE,        {FRT, FRA, FRC, FRB}},
 {"ps_nmadd.",  A  (4,  31,1),  A_MASK,      PPCPS,     PPCNONE,        {FRT, FRA, FRC, FRB}},
 {"ps_cmpo0",   X  (4,  32), X_MASK|(3<<21), PPCPS,     PPCNONE,        {BF, FRA, FRB}},
+{"vaddeuqm",   VXA(4,  60),    VXA_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB, VC}},
+{"vaddecuq",   VXA(4,  61),    VXA_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB, VC}},
+{"vsubeuqm",   VXA(4,  62),    VXA_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB, VC}},
+{"vsubecuq",   VXA(4,  63),    VXA_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB, VC}},
 {"vadduhm",    VX (4,  64),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vmaxuh",     VX (4,  66),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vrlh",       VX (4,  68),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
@@ -2889,6 +2956,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"vmaxuw",     VX (4,  130),   VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vrlw",       VX (4,  132),   VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vcmpequw",   VXR(4,  134,0), VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vmulouw",    VX (4,  136),   VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
+{"vmuluwm",    VX (4,  137),   VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"vmrghw",     VX (4,  140),   VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vpkuhus",    VX (4,  142),   VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"ps_mr",      XRC(4,  72,0),  XRA_MASK,    PPCPS,     PPCNONE,        {FRT, FRB}},
@@ -2896,12 +2965,17 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"machhwsu",   XO (4,  76,0,0),XO_MASK,     MULHW|PPCVLE,  PPCNONE,    {RT, RA, RB}},
 {"machhwsu.",  XO (4,  76,0,1),XO_MASK,     MULHW|PPCVLE,  PPCNONE,    {RT, RA, RB}},
 {"ps_cmpo1",   X  (4,  96), X_MASK|(3<<21), PPCPS,     PPCNONE,        {BF, FRA, FRB}},
+{"vaddudm",    VX (4, 192),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
+{"vmaxud",     VX (4, 194),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
+{"vrld",       VX (4, 196),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"vcmpeqfp",   VXR(4, 198,0),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vcmpequd",   VXR(4, 199,0),  VXR_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"vpkuwus",    VX (4, 206),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"machhws",    XO (4, 108,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"machhws.",   XO (4, 108,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"nmachhws",   XO (4, 110,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"nmachhws.",  XO (4, 110,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
+{"vadduqm",    VX (4, 256),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"vmaxsb",     VX (4, 258),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vslb",       VX (4, 260),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vmulosb",    VX (4, 264),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
@@ -2914,6 +2988,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mulchwu.",   XRC(4, 136,1),  X_MASK,      MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"macchwu",    XO (4, 140,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"macchwu.",   XO (4, 140,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
+{"vaddcuq",    VX (4, 320),    VX_MASK,     PPCVEC2,      PPCNONE,     {VD, VA, VB}},
 {"vmaxsh",     VX (4, 322),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vslh",       VX (4, 324),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vmulosh",    VX (4, 328),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
@@ -2929,11 +3004,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"vaddcuw",    VX (4, 384),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vmaxsw",     VX (4, 386),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vslw",       VX (4, 388),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vmulosw",    VX (4, 392),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"vexptefp",   VX (4, 394),    VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,    {VD, VB}},
 {"vmrglw",     VX (4, 396),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vpkshss",    VX (4, 398),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"macchwsu",   XO (4, 204,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"macchwsu.",  XO (4, 204,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
+{"vmaxsd",     VX (4, 450),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"vsl",                VX (4, 452),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vcmpgefp",   VXR(4, 454,0),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vlogefp",    VX (4, 458),    VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,    {VD, VB}},
@@ -3017,6 +3094,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"evfsnabs",   VX (4, 645),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
 {"evfsneg",    VX (4, 646),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
 {"vcmpgtuw",   VXR(4, 646,0),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vmuleuw",    VX (4, 648),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evfsmul",    VX (4, 648),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evfsdiv",    VX (4, 649),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vrfip",      VX (4, 650),    VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,    {VD, VB}},
@@ -3042,11 +3120,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"cput",       APU(4, 348,0),  APU_RT_MASK, PPC405,    PPCNONE,        {RA, FSL}},
 {"efsadd",     VX (4, 704),    VX_MASK,     PPCEFS|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"efssub",     VX (4, 705),    VX_MASK,     PPCEFS|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vminud",     VX (4, 706),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"efsabs",     VX (4, 708),    VX_MASK,     PPCEFS|PPCVLE, PPCNONE,    {RS, RA}},
 {"vsr",                VX (4, 708),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"efsnabs",    VX (4, 709),    VX_MASK,     PPCEFS|PPCVLE, PPCNONE,    {RS, RA}},
 {"efsneg",     VX (4, 710),    VX_MASK,     PPCEFS|PPCVLE, PPCNONE,    {RS, RA}},
 {"vcmpgtfp",   VXR(4, 710,0),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vcmpgtud",   VXR(4, 711,0),  VXR_MASK,    PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"efsmul",     VX (4, 712),    VX_MASK,     PPCEFS|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"efsdiv",     VX (4, 713),    VX_MASK,     PPCEFS|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vrfim",      VX (4, 714),    VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,    {VD, VB}},
@@ -3166,12 +3246,16 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"vminsw",     VX (4, 898),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vsraw",      VX (4, 900),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vcmpgtsw",   VXR(4, 902,0),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vmulesw",    VX (4, 904),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"vctuxs",     VX (4, 906),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VB, UIMM}},
 {"vcfpuxws",   VX (4, 906),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VB, UIMM}},
 {"vspltisw",   VX (4, 908),    VXVB_MASK,   PPCVEC|PPCVLE, PPCNONE,    {VD, SIMM}},
 {"maclhwsu",   XO (4, 460,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"maclhwsu.",  XO (4, 460,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
+{"vminsd",     VX (4, 962),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
+{"vsrad",      VX (4, 964),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"vcmpbfp",    VXR(4, 966,0),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vcmpgtsd",   VXR(4, 967,0),  VXR_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"vctsxs",     VX (4, 970),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VB, UIMM}},
 {"vcfpsxws",   VX (4, 970),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VB, UIMM}},
 {"vupklpx",    VX (4, 974),    VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,    {VD, VB}},
@@ -3180,6 +3264,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"nmaclhws",   XO (4, 494,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"nmaclhws.",  XO (4, 494,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"vsububm",    VX (4,1024),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"bcdadd.",    VX (4,1025),    VXPS_MASK,   PPCVEC2,       PPCNONE,    {VD, VA, VB, PS}},
 {"vavgub",     VX (4,1026),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vabsdub",    VX (4,1027),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"evmhessf",   VX (4,1027),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
@@ -3188,6 +3273,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"udi0fcm.",   APU(4, 515,0), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
 {"udi0fcm",    APU(4, 515,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
 {"evmhossf",   VX (4,1031),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vpmsumb",    VX (4,1032),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmheumi",   VX (4,1032),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhesmi",   VX (4,1033),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vmaxfp",     VX (4,1034),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
@@ -3209,18 +3295,21 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"evmhosmia",  VX (4,1069),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhosmfa",  VX (4,1071),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vsubuhm",    VX (4,1088),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"bcdsub.",    VX (4,1089),    VXPS_MASK,   PPCVEC2,       PPCNONE,    {VD, VA, VB, PS}},
 {"vavguh",     VX (4,1090),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vabsduh",    VX (4,1091),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"vandc",      VX (4,1092),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"vcmpequh.",  VXR(4,  70,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi1fcm.",   APU(4, 547,0), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
-{"udi1fcm",    APU(4, 547,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},   
+{"udi1fcm",    APU(4, 547,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
 {"evmwhssf",   VX (4,1095),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vpmsumh",    VX (4,1096),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmwlumi",   VX (4,1096),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vminfp",     VX (4,1098),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"evmwhumi",   VX (4,1100),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vsro",       VX (4,1100),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"evmwhsmi",   VX (4,1101),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vpkudum",    VX (4,1102),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmwhsmf",   VX (4,1103),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmwssf",    VX (4,1107),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"machhwo",    XO (4,  44,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
@@ -3246,13 +3335,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"vabsduw",    VX (4,1155),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"vmr",                VX (4,1156),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VBA}},
 {"vor",                VX (4,1156),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vpmsumw",    VX (4,1160),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"vcmpequw.",  VXR(4, 134,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi2fcm.",   APU(4, 579,0), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
-{"udi2fcm",    APU(4, 579,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},   
+{"udi2fcm",    APU(4, 579,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
 {"machhwsuo",  XO (4,  76,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"machhwsuo.", XO (4,  76,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"ps_merge10", XOPS(4,592,0),  XOPS_MASK,   PPCPS,     PPCNONE,        {FRT, FRA, FRB}},
 {"ps_merge10.",        XOPS(4,592,1),  XOPS_MASK,   PPCPS,     PPCNONE,        {FRT, FRA, FRB}},
+{"vsubudm",    VX (4,1216),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evaddusiaaw",        VX (4,1216),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
 {"evaddssiaaw",        VX (4,1217),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
 {"evsubfusiaaw",VX (4,1218),   VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
@@ -3262,18 +3353,22 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"evdivws",    VX (4,1222),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vcmpeqfp.",  VXR(4, 198,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi3fcm.",   APU(4, 611,0), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
-{"udi3fcm",    APU(4, 611,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},   
+{"vcmpequd.",  VXR(4, 199,1),  VXR_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB}},
+{"udi3fcm",    APU(4, 611,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
 {"evdivwu",    VX (4,1223),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vpmsumd",    VX (4,1224),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evaddumiaaw",        VX (4,1224),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
 {"evaddsmiaaw",        VX (4,1225),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
 {"evsubfumiaaw",VX (4,1226),   VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
 {"evsubfsmiaaw",VX (4,1227),   VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA}},
+{"vpkudus",    VX (4,1230),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"machhwso",   XO (4, 108,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"machhwso.",  XO (4, 108,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"nmachhwso",  XO (4, 110,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"nmachhwso.", XO (4, 110,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"ps_merge11", XOPS(4,624,0),  XOPS_MASK,   PPCPS,     PPCNONE,        {FRT, FRA, FRB}},
 {"ps_merge11.",        XOPS(4,624,1),  XOPS_MASK,   PPCPS,     PPCNONE,        {FRT, FRA, FRB}},
+{"vsubuqm",    VX (4,1280),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"evmheusiaaw",        VX (4,1280),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhessiaaw",        VX (4,1281),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vavgsb",     VX (4,1282),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
@@ -3286,8 +3381,11 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"udi4fcm",    APU(4, 643,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
 {"evmhossfaaw",        VX (4,1287),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmheumiaaw",        VX (4,1288),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vcipher",    VX (4,1288),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
+{"vcipherlast",        VX (4,1289),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmhesmiaaw",        VX (4,1289),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhesmfaaw",        VX (4,1291),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vgbbd",      VX (4,1292),    VXVA_MASK,   PPCVEC2,       PPCNONE,    {VD, VB}},
 {"evmhoumiaaw",        VX (4,1292),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhosmiaaw",        VX (4,1293),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhosmfaaw",        VX (4,1295),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
@@ -3299,13 +3397,19 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"evmhogumiaa",        VX (4,1324),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhogsmiaa",        VX (4,1325),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhogsmfaa",        VX (4,1327),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vsubcuq",    VX (4,1344),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmwlusiaaw",        VX (4,1344),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmwlssiaaw",        VX (4,1345),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vavgsh",     VX (4,1346),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vorc",       VX (4,1348),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"udi5fcm.",   APU(4, 675,0), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
 {"udi5fcm",    APU(4, 675,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
+{"vncipher",   VX (4,1352),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmwlumiaaw",        VX (4,1352),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vncipherlast",VX (4,1353),   VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmwlsmiaaw",        VX (4,1353),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vbpermq",    VX (4,1356),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
+{"vpksdus",    VX (4,1358),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmwssfaa",  VX (4,1363),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"macchwo",    XO (4, 172,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"evmwumiaa",  VX (4,1368),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
@@ -3319,6 +3423,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"evmhessianw",        VX (4,1409),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"vavgsw",     VX (4,1410),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"evmhessfanw",        VX (4,1411),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vnand",      VX (4,1412),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmhousianw",        VX (4,1412),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmhossianw",        VX (4,1413),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"udi6fcm.",   APU(4, 707,0), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
@@ -3340,11 +3445,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"evmhogsmfan",        VX (4,1455),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmwlusianw",        VX (4,1472),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmwlssianw",        VX (4,1473),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vsld",       VX (4,1476),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"vcmpgefp.",  VXR(4, 454,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi7fcm.",   APU(4, 739,0), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
 {"udi7fcm",    APU(4, 739,1), APU_MASK, PPC405|PPC440, PPC476,         {URT, URA, URB}},
+{"vsbox",      VX (4,1480),    VXVB_MASK,   PPCVEC2,       PPCNONE,    {VD, VA}},
 {"evmwlumianw",        VX (4,1480),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"evmwlsmianw",        VX (4,1481),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
+{"vpksdss",    VX (4,1486),    VX_MASK,     PPCVEC2,       PPCNONE,    {VD, VA, VB}},
 {"evmwssfan",  VX (4,1491),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
 {"macchwso",   XO (4, 236,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"evmwumian",  VX (4,1496),    VX_MASK,     PPCSPE|PPCVLE, PPCNONE,    {RS, RA, RB}},
@@ -3365,15 +3473,25 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"vsum4shs",   VX (4,1608),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi9fcm.",   APU(4, 804,0),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
 {"udi9fcm",    APU(4, 804,1),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
+{"vupkhsw",    VX (4,1614),    VXVA_MASK,   PPCVEC2,       PPCNONE,    {VD, VB}},
 {"vsubuws",    VX (4,1664),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vshasigmaw", VX (4,1666),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, ST, SIX}},
+{"veqv",       VX (4,1668),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"vcmpgtuw.",  VXR(4, 646,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi10fcm.",  APU(4, 835,0),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
 {"udi10fcm",   APU(4, 835,1),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
 {"vsum2sws",   VX (4,1672),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vmrgow",     VX (4,1676),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
+{"vshasigmad", VX (4,1730),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, ST, SIX}},
+{"vsrd",       VX (4,1732),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"vcmpgtfp.",  VXR(4, 710,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi11fcm.",  APU(4, 867,0),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
+{"vcmpgtud.",  VXR(4, 711,1),  VXR_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"udi11fcm",   APU(4, 867,1),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
+{"vupklsw",    VX (4,1742),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
 {"vsubsbs",    VX (4,1792),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vclzb",      VX (4,1794),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
+{"vpopcntb",   VX (4,1795),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
 {"vcmpgtsb.",  VXR(4, 774,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi12fcm.",  APU(4, 899,0),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
 {"udi12fcm",   APU(4, 899,1),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
@@ -3381,6 +3499,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"maclhwuo",   XO (4, 396,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"maclhwuo.",  XO (4, 396,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"vsubshs",    VX (4,1856),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vclzh",      VX (4,1858),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
+{"vpopcnth",   VX (4,1859),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
 {"vcmpgtsh.",  VXR(4, 838,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi13fcm.",  APU(4, 931,0),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
 {"udi13fcm",   APU(4, 931,1),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
@@ -3389,14 +3509,20 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"nmaclhwo",   XO (4, 430,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"nmaclhwo.",  XO (4, 430,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"vsubsws",    VX (4,1920),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vclzw",      VX (4,1922),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
+{"vpopcntw",   VX (4,1923),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
 {"vcmpgtsw.",  VXR(4, 902,1),  VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
 {"udi14fcm.",  APU(4, 963,0),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
 {"udi14fcm",   APU(4, 963,1),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
 {"vsumsws",    VX (4,1928),    VX_MASK,     PPCVEC|PPCVLE, PPCNONE,    {VD, VA, VB}},
+{"vmrgew",     VX (4,1932),    VX_MASK,     PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"maclhwsuo",  XO (4, 460,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"maclhwsuo.", XO (4, 460,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
+{"vclzd",      VX (4,1986),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
+{"vpopcntd",   VX (4,1987),    VXVA_MASK,   PPCVEC2,   PPCNONE,        {VD, VB}},
 {"vcmpbfp.",   VXR(4, 966,1),  VXR_MASK,    PPCVEC,    PPCNONE,        {VD, VA, VB}},
 {"udi15fcm.",  APU(4, 995,0),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
+{"vcmpgtsd.",  VXR(4, 967,1),  VXR_MASK,    PPCVEC2,   PPCNONE,        {VD, VA, VB}},
 {"udi15fcm",   APU(4, 995,1),  APU_MASK,    PPC440,    PPC476,         {URT, URA, URB}},
 {"maclhwso",   XO (4, 492,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"maclhwso.",  XO (4, 492,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,     {RT, RA, RB}},
@@ -3412,10 +3538,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"dozi",       OP(9),          OP_MASK,     M601,      PPCNONE,        {RT, RA, SI}},
 
-{"cmplwi",     OPL(10,0),      OPL_MASK,    PPCCOM,    PPCNONE,        {OBF, RA, UI}},
-{"cmpldi",     OPL(10,1),      OPL_MASK,    PPC64,     PPCNONE,        {OBF, RA, UI}},
-{"cmpli",      OP(10),         OP_MASK,     PPC,       PPCNONE,        {BF, L, RA, UI}},
-{"cmpli",      OP(10),         OP_MASK,     PWRCOM,    PPC,            {BF, RA, UI}},
+{"cmplwi",     OPL(10,0),      OPL_MASK,    PPCCOM,    PPCNONE,        {OBF, RA, UISIGNOPT}},
+{"cmpldi",     OPL(10,1),      OPL_MASK,    PPC64,     PPCNONE,        {OBF, RA, UISIGNOPT}},
+{"cmpli",      OP(10),         OP_MASK,     PPC,       PPCNONE,        {BF, L, RA, UISIGNOPT}},
+{"cmpli",      OP(10),         OP_MASK,     PWRCOM,    PPC,            {BF, RA, UISIGNOPT}},
 
 {"cmpwi",      OPL(11,0),      OPL_MASK,    PPCCOM,    PPCNONE,        {OBF, RA, SI}},
 {"cmpdi",      OPL(11,1),      OPL_MASK,    PPC64,     PPCNONE,        {OBF, RA, SI}},
@@ -3968,6 +4094,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"crandc",     XL(19,129),     XL_MASK,     COM,       PPCNONE,        {BT, BA, BB}},
 
+{"rfebb",      XL(19,146),     XLS_MASK,    POWER8,    PPCNONE,        {SXL}},
+
 {"isync",      XL(19,150),     0xffffffff,  PPCCOM,    PPCNONE,        {0}},
 {"ics",                XL(19,150),     0xffffffff,  PWRCOM,    PPCNONE,        {0}},
 
@@ -4151,6 +4279,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"bcctrl",  XLLK(19,528,1),            XLBH_MASK,     PPCCOM,   PPCNONE,       {BO, BI, BH}},
 {"bccl",    XLLK(19,528,1),            XLBB_MASK,     PWRCOM,   PPCNONE,       {BO, BI}},
 
+{"bctar-",  XLYLK(19,560,0,0),         XLYBB_MASK,    POWER8,   PPCNONE,       {BOE, BI}},
+{"bctarl-", XLYLK(19,560,0,1),         XLYBB_MASK,    POWER8,   PPCNONE,       {BOE, BI}},
+{"bctar+",  XLYLK(19,560,1,0),         XLYBB_MASK,    POWER8,   PPCNONE,       {BOE, BI}},
+{"bctarl+", XLYLK(19,560,1,1),         XLYBB_MASK,    POWER8,   PPCNONE,       {BOE, BI}},
+{"bctar",   XLLK(19,560,0),            XLBH_MASK,     POWER8,   PPCNONE,       {BO, BI, BH}},
+{"bctarl",  XLLK(19,560,1),            XLBH_MASK,     POWER8,   PPCNONE,       {BO, BI, BH}},
+
 {"rlwimi",     M(20,0),        M_MASK,      PPCCOM,    PPCNONE,        {RA, RS, SH, MBE, ME}},
 {"rlimi",      M(20,0),        M_MASK,      PWRCOM,    PPCNONE,        {RA, RS, SH, MBE, ME}},
 
@@ -4254,6 +4389,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"twne",       XTO(31,4,TONE),  XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,    {RA, RB}},
 {"tne",                XTO(31,4,TONE),  XTO_MASK,   PWRCOM,    PPCNONE,        {RA, RB}},
 {"trap",       XTO(31,4,TOU),   0xffffffff, PPCCOM|PPCVLE, PPCNONE,    {0}},
+{"twu",                XTO(31,4,TOU),   XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,    {RA, RB}},
+{"tu",         XTO(31,4,TOU),   XTO_MASK,   PWRCOM,    PPCNONE,        {RA, RB}},
 {"tw",         X(31,4),         X_MASK, PPCCOM|PPCVLE, PPCNONE,        {TO, RA, RB}},
 {"t",          X(31,4),         X_MASK,     PWRCOM,    PPCNONE,        {TO, RA, RB}},
 
@@ -4267,10 +4404,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"subfc.",     XO(31,8,0,1),   XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RA, RB}},
 {"sf.",                XO(31,8,0,1),   XO_MASK,     PWRCOM,    PPCNONE,        {RT, RA, RB}},
 {"subc.",      XO(31,8,0,1),   XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RB, RA}},
+
 {"mulhdu",     XO(31,9,0,0),   XO_MASK,     PPC64|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"mulhdu.",    XO(31,9,0,1),   XO_MASK,     PPC64|PPCVLE, PPCNONE,     {RT, RA, RB}},
+
 {"addc",       XO(31,10,0,0),  XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RA, RB}},
 {"a",          XO(31,10,0,0),  XO_MASK,     PWRCOM,    PPCNONE,        {RT, RA, RB}},
 {"addc.",      XO(31,10,0,1),  XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RA, RB}},
@@ -4279,6 +4416,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mulhwu",     XO(31,11,0,0),  XO_MASK,     PPC|PPCVLE, PPCNONE,       {RT, RA, RB}},
 {"mulhwu.",    XO(31,11,0,1),  XO_MASK,     PPC|PPCVLE, PPCNONE,       {RT, RA, RB}},
 
+{"lxsiwzx",    X(31,12),       XX1_MASK,    PPCVSX2,   PPCNONE,        {XT6, RA0, RB}},
+
 {"isellt",     X(31,15),       X_MASK,      PPCISEL,   PPCNONE,        {RT, RA0, RB}},
 
 {"tlbilxlpid", XTO(31,18,0),   XTO_MASK, E500MC|PPCA2, PPCNONE,        {0}},
@@ -4291,11 +4430,11 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfocrf",     XFXM(31,19,0,1), XFXFXM_MASK, COM|PPCVLE, PPCNONE,      {RT, FXM}},
 
 {"lwarx",      X(31,20),       XEH_MASK,    PPC|PPCVLE, PPCNONE,       {RT, RA0, RB, EH}},
+
 {"ldx",                X(31,21),       X_MASK,      PPC64|PPCVLE, PPCNONE,     {RT, RA0, RB}},
+
 {"icbt",       X(31,22),       X_MASK,      BOOKE|PPCE300|PPCA2|PPC476|PPCVLE, PPCNONE, {CT, RA0, RB}},
+
 {"lwzx",       X(31,23),       X_MASK,      PPCCOM|PPCVLE, PPCNONE,    {RT, RA0, RB}},
 {"lx",         X(31,23),       X_MASK,      PWRCOM,    PPCNONE,        {RT, RA, RB}},
 
@@ -4319,6 +4458,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"maskg.",     XRC(31,29,1),   X_MASK,      M601,      PPCA2,          {RA, RS, RB}},
 
 {"ldepx",      X(31,29),       X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
+
+{"waitasec",   X(31,30),       XRTRARB_MASK,POWER8,    PPCNONE,        {0}},
+
 {"lwepx",      X(31,31),       X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
 
 {"cmplw",      XOPL(31,32,0),  XCMPL_MASK,  PPCCOM|PPCVLE, PPCNONE,    {OBF, RA, RB}},
@@ -4338,6 +4480,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"addg6s",     XO(31,74,0,0),  XO_MASK,     POWER6,    PPCNONE,        {RT, RA, RB}},
 
+{"lxsiwax",    X(31,76),       XX1_MASK,    PPCVSX2,   PPCNONE,        {XT6, RA0, RB}},
+
 {"iseleq",     X(31,79),       X_MASK,      PPCISEL,   PPCNONE,        {RT, RA0, RB}},
 
 {"isel",       XISEL(31,15), XISEL_MASK, PPCISEL|TITAN|PPCVLE, PPCNONE, {RT, RA0, RB, CRB}},
@@ -4347,14 +4491,17 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"subf.",      XO(31,40,0,1),  XO_MASK,     PPC|PPCVLE, PPCNONE,       {RT, RA, RB}},
 {"sub.",       XO(31,40,0,1),  XO_MASK,     PPC|PPCVLE, PPCNONE,       {RT, RB, RA}},
 
+{"mfvsrd",     X(31,51),       XX1RB_MASK,   PPCVSX2,  PPCNONE,        {RA, XS6}},
+{"mffprd",     X(31,51),       XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {RA, FRS}},
+{"mfvrd",      X(31,51)|1,     XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {RA, VS}},
 {"eratilx",    X(31,51),       X_MASK,      PPCA2,     PPCNONE,        {ERAT_T, RA, RB}},
 
-{"lbarx",      X(31,52),       XEH_MASK,    POWER7|PPCVLE, PPCNONE,    {RT, RA0, RB, EH}},
+{"lbarx",      X(31,52),       XEH_MASK,    POWER8|PPCVLE, PPCNONE,    {RT, RA0, RB, EH}},
 
 {"ldux",       X(31,53),       X_MASK,      PPC64|PPCVLE, PPCNONE,     {RT, RAL, RB}},
+
 {"dcbst",      X(31,54),       XRT_MASK,    PPC|PPCVLE, PPCNONE,       {RA0, RB}},
+
 {"lwzux",      X(31,55),       X_MASK,      PPCCOM|PPCVLE, PPCNONE,    {RT, RAL, RB}},
 {"lux",                X(31,55),       X_MASK,      PWRCOM,    PPCNONE,        {RT, RA, RB}},
 
@@ -4364,10 +4511,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"andc",       XRC(31,60,0),   X_MASK,      COM|PPCVLE, PPCNONE,       {RA, RS, RB}},
 {"andc.",      XRC(31,60,1),   X_MASK,      COM|PPCVLE, PPCNONE,       {RA, RS, RB}},
 
-{"waitrsv",    X(31,62)|(1<<21), 0xffffffff, POWER7|E500MC|PPCA2, PPCNONE, {0}},
-{"waitimpl",   X(31,62)|(2<<21), 0xffffffff, POWER7|E500MC|PPCA2, PPCNONE, {0}},
-{"wait",       X(31,62),       XWC_MASK,    POWER7|E500MC|PPCA2|PPCVLE, PPCNONE, {WC}},
+{"waitrsv",    X(31,62)|(1<<21), 0xffffffff, E500MC|PPCA2, PPCNONE,    {0}},
+{"waitimpl",   X(31,62)|(2<<21), 0xffffffff, E500MC|PPCA2, PPCNONE,    {0}},
+{"wait",       X(31,62),       XWC_MASK,    E500MC|PPCA2|PPCVLE, PPCNONE, {WC}},
+
 {"dcbstep",    XRT(31,63,0),   XRT_MASK,    E500MC|PPCA2|PPCVLE, PPCNONE, {RA0, RB}},
 
 {"tdlgt",      XTO(31,68,TOLGT), XTO_MASK,  PPC64,     PPCNONE,        {RA, RB}},
@@ -4384,12 +4531,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"tdle",       XTO(31,68,TOLE),  XTO_MASK,  PPC64,     PPCNONE,        {RA, RB}},
 {"tdng",       XTO(31,68,TONG),  XTO_MASK,  PPC64,     PPCNONE,        {RA, RB}},
 {"tdne",       XTO(31,68,TONE),  XTO_MASK,  PPC64,     PPCNONE,        {RA, RB}},
+{"tdu",                XTO(31,68,TOU),   XTO_MASK,  PPC64,     PPCNONE,        {RA, RB}},
 {"td",         X(31,68),       X_MASK,      PPC64|PPCVLE, PPCNONE,     {TO, RA, RB}},
 
 {"lwfcmx",     APU(31,71,0),   APU_MASK,    PPC405,    PPCNONE,        {FCRT, RA, RB}},
 {"mulhd",      XO(31,73,0,0),  XO_MASK,     PPC64|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"mulhd.",     XO(31,73,0,1),  XO_MASK,     PPC64|PPCVLE, PPCNONE,     {RT, RA, RB}},
+
 {"mulhw",      XO(31,75,0,0),  XO_MASK,     PPC|PPCVLE, PPCNONE,       {RT, RA, RB}},
 {"mulhw.",     XO(31,75,0,1),  XO_MASK,     PPC|PPCVLE, PPCNONE,       {RT, RA, RB}},
 
@@ -4399,14 +4547,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtsrd",      X(31,82),  XRB_MASK|(1<<20), PPC64,     PPCNONE,        {SR, RS}},
 
 {"mfmsr",      X(31,83),       XRARB_MASK,  COM|PPCVLE, PPCNONE,       {RT}},
+
 {"ldarx",      X(31,84),       XEH_MASK,    PPC64|PPCVLE, PPCNONE,     {RT, RA0, RB, EH}},
 
 {"dcbfl",      XOPL(31,86,1),  XRT_MASK,    POWER5,    PPC476,         {RA0, RB}},
 {"dcbf",       X(31,86),       XLRT_MASK,   PPC|PPCVLE, PPCNONE,       {RA0, RB, L}},
 
 {"lbzx",       X(31,87),       X_MASK,      COM|PPCVLE, PPCNONE,       {RT, RA0, RB}},
+
 {"lbepx",      X(31,95),       X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
 
 {"dni",                XRC(31,97,1),   XRB_MASK,    E6500,     PPCNONE,        {DUI, DCTL}},
@@ -4424,12 +4572,16 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"mtsrdin",    X(31,114),      XRA_MASK,    PPC64,     PPCNONE,        {RS, RB}},
 
-{"lharx",      X(31,116),      XEH_MASK,    POWER7|PPCVLE, PPCNONE,    {RT, RA0, RB, EH}},
+{"mffprwz",    X(31,115),      XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {RA, FRS}},
+{"mfvrwz",     X(31,115)|1,    XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {RA, VS}},
+{"mfvsrwz",    X(31,115),      XX1RB_MASK,   PPCVSX2,  PPCNONE,        {RA, XS6}},
+
+{"lharx",      X(31,116),      XEH_MASK,    POWER8|PPCVLE, PPCNONE,    {RT, RA0, RB, EH}},
 
 {"clf",                X(31,118),      XTO_MASK,    POWER,     PPCNONE,        {RA, RB}},
 
 {"lbzux",      X(31,119),      X_MASK,      COM|PPCVLE, PPCNONE,       {RT, RAL, RB}},
+
 {"popcntb",    X(31,122),      XRB_MASK,    POWER5|PPCVLE, PPCNONE,    {RA, RS}},
 
 {"not",                XRC(31,124,0),  X_MASK,      COM,       PPCNONE,        {RA, RS, RBS}},
@@ -4438,9 +4590,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"nor.",       XRC(31,124,1),  X_MASK,      COM|PPCVLE, PPCNONE,       {RA, RS, RB}},
 
 {"dcbfep",     XRT(31,127,0),  XRT_MASK,    E500MC|PPCA2|PPCVLE, PPCNONE, {RA0, RB}},
+
 {"wrtee",      X(31,131),      XRARB_MASK,  PPC403|BOOKE|PPCA2|PPC476|PPCVLE, PPCNONE, {RS}},
+
 {"dcbtstls",   X(31,134),      X_MASK,      PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
 
 {"stvebx",     X(31,135),      X_MASK,      PPCVEC,    PPCNONE,        {VS, RA0, RB}},
@@ -4456,6 +4608,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"adde.",      XO(31,138,0,1), XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RA, RB}},
 {"ae.",                XO(31,138,0,1), XO_MASK,     PWRCOM,    PPCNONE,        {RT, RA, RB}},
 
+{"stxsiwx",    X(31,140),      XX1_MASK,    PPCVSX2,   PPCNONE,        {XS6, RA0, RB}},
+
+{"msgsndp",    XRTRA(31,142,0,0), XRTRA_MASK, POWER8,  PPCNONE,        {RB}},
 {"dcbtstlse",  X(31,142),      X_MASK,      PPCCHLK,   E500MC,         {CT, RA0, RB}},
 
 {"mtcr",       XFXM(31,144,0xff,0), XRARB_MASK, COM,   PPCNONE,        {RS}},
@@ -4464,13 +4619,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"mtmsr",      X(31,146),      XRLARB_MASK, COM|PPCVLE, PPCNONE,       {RS, A_L}},
 
+{"mtsle",      X(31,147),    XRTLRARB_MASK, POWER8,    PPCNONE,        {L}},
+
 {"eratsx",     XRC(31,147,0),  X_MASK,      PPCA2,     PPCNONE,        {RT, RA0, RB}},
 {"eratsx.",    XRC(31,147,1),  X_MASK,      PPCA2,     PPCNONE,        {RT, RA0, RB}},
 
 {"stdx",       X(31,149),      X_MASK,      PPC64|PPCVLE, PPCNONE,     {RS, RA0, RB}},
+
 {"stwcx.",     XRC(31,150,1),  X_MASK,      PPC|PPCVLE, PPCNONE,       {RS, RA0, RB}},
+
 {"stwx",       X(31,151),      X_MASK,      PPCCOM|PPCVLE, PPCNONE,    {RS, RA0, RB}},
 {"stx",                X(31,151),      X_MASK,      PWRCOM,    PPCNONE,        {RS, RA, RB}},
 
@@ -4483,24 +4640,29 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"prtyw",      X(31,154),      XRB_MASK, POWER6|PPCA2|PPC476, PPCNONE, {RA, RS}},
 
 {"stdepx",     X(31,157),      X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RS, RA0, RB}},
+
 {"stwepx",     X(31,159),      X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RS, RA0, RB}},
+
 {"wrteei",     X(31,163),      XE_MASK,     PPC403|BOOKE|PPCA2|PPC476|PPCVLE, PPCNONE, {E}},
+
 {"dcbtls",     X(31,166),      X_MASK,      PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
 
 {"stvehx",     X(31,167),      X_MASK,      PPCVEC,    PPCNONE,        {VS, RA0, RB}},
 {"sthfcmx",    APU(31,167,0),  APU_MASK,    PPC405,    PPCNONE,        {FCRT, RA, RB}},
 
+{"msgclrp",    XRTRA(31,174,0,0), XRTRA_MASK, POWER8,  PPCNONE,        {RB}},
 {"dcbtlse",    X(31,174),      X_MASK,      PPCCHLK,   E500MC,         {CT, RA0, RB}},
 
 {"mtmsrd",     X(31,178),      XRLARB_MASK, PPC64,     PPCNONE,        {RS, A_L}},
 
+{"mtvsrd",     X(31,179),      XX1RB_MASK,   PPCVSX2,  PPCNONE,        {XT6, RA}},
+{"mtfprd",     X(31,179),      XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {FRT, RA}},
+{"mtvrd",      X(31,179)|1,    XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {VD, RA}},
 {"eratre",     X(31,179),      X_MASK,      PPCA2,     PPCNONE,        {RT, RA, WS}},
 
 {"stdux",      X(31,181),      X_MASK,      PPC64|PPCVLE, PPCNONE,     {RS, RAS, RB}},
 
+{"stqcx.",     XRC(31,182,1),  X_MASK,      POWER8,    PPCNONE,        {RSQ, RA0, RB}},
 {"wchkall",    X(31,182),      X_MASK,      PPCA2,     PPCNONE,        {OBF}},
 
 {"stwux",      X(31,183),      X_MASK,      PPCCOM|PPCVLE, PPCNONE,    {RS, RAS, RB}},
@@ -4526,16 +4688,19 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"addze.",     XO(31,202,0,1), XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,    {RT, RA}},
 {"aze.",       XO(31,202,0,1), XORB_MASK,   PWRCOM,    PPCNONE,        {RT, RA}},
 
-{"msgsnd",     XRTRA(31,206,0,0), XRTRA_MASK, E500MC|PPCA2|PPCVLE, PPCNONE, {RB}},
+{"msgsnd",     XRTRA(31,206,0,0), XRTRA_MASK, E500MC|PPCA2|POWER8|PPCVLE, PPCNONE, {RB}},
 
 {"mtsr",       X(31,210), XRB_MASK|(1<<20), COM,       NON32,          {SR, RS}},
 
+{"mtfprwa",    X(31,211),      XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {FRT, RA}},
+{"mtvrwa",     X(31,211)|1,    XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {VD, RA}},
+{"mtvsrwa",    X(31,211),      XX1RB_MASK,   PPCVSX2,  PPCNONE,        {XT6, RA}},
 {"eratwe",     X(31,211),      X_MASK,      PPCA2,     PPCNONE,        {RS, RA, WS}},
 
 {"ldawx.",     XRC(31,212,1),  X_MASK,      PPCA2,     PPCNONE,        {RT, RA0, RB}},
 
 {"stdcx.",     XRC(31,214,1),  X_MASK,      PPC64|PPCVLE, PPCNONE,     {RS, RA0, RB}},
+
 {"stbx",       X(31,215),      X_MASK,      COM|PPCVLE, PPCNONE,       {RS, RA0, RB}},
 
 {"sllq",       XRC(31,216,0),  X_MASK,      M601,      PPCNONE,        {RA, RS, RB}},
@@ -4545,7 +4710,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"sleq.",      XRC(31,217,1),  X_MASK,      M601,      PPCNONE,        {RA, RS, RB}},
 
 {"stbepx",     X(31,223),      X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RS, RA0, RB}},
+
 {"icblc",      X(31,230),      X_MASK, PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
 
 {"stvx",       X(31,231),      X_MASK,      PPCVEC|PPCVLE, PPCNONE,    {VS, RA0, RB}},
@@ -4558,7 +4723,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"mulld",      XO(31,233,0,0), XO_MASK,     PPC64|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"mulld.",     XO(31,233,0,1), XO_MASK,     PPC64|PPCVLE, PPCNONE,     {RT, RA, RB}},
+
 {"addme",      XO(31,234,0,0), XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,    {RT, RA}},
 {"ame",                XO(31,234,0,0), XORB_MASK,   PWRCOM,    PPCNONE,        {RT, RA}},
 {"addme.",     XO(31,234,0,1), XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,    {RT, RA}},
@@ -4570,14 +4735,19 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"muls.",      XO(31,235,0,1), XO_MASK,     PWRCOM,    PPCNONE,        {RT, RA, RB}},
 
 {"icblce",     X(31,238),      X_MASK,      PPCCHLK,   E500MC|PPCA2,   {CT, RA, RB}},
-{"msgclr",     XRTRA(31,238,0,0),XRTRA_MASK, E500MC|PPCA2|PPCVLE, PPCNONE, {RB}},
+{"msgclr",     XRTRA(31,238,0,0), XRTRA_MASK, E500MC|PPCA2|POWER8|PPCVLE, PPCNONE, {RB}},
 {"mtsrin",     X(31,242),      XRA_MASK,    PPC,       NON32,          {RS, RB}},
 {"mtsri",      X(31,242),      XRA_MASK,    POWER,     NON32,          {RS, RB}},
 
+{"mtfprwz",    X(31,243),      XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {FRT, RA}},
+{"mtvrwz",     X(31,243)|1,    XX1RB_MASK|1, PPCVSX2,  PPCNONE,        {VD, RA}},
+{"mtvsrwz",    X(31,243),      XX1RB_MASK,   PPCVSX2,  PPCNONE,        {XT6, RA}},
+
 {"dcbtstt",    XRT(31,246,0x10), XRT_MASK,  POWER7,    PPCNONE,        {RA0, RB}},
-{"dcbtst",     X(31,246),      X_MASK,      POWER4,    PPCNONE,        {RA0, RB, CT}},
-{"dcbtst",     X(31,246),      X_MASK,      PPC|PPCVLE, POWER4,        {CT, RA0, RB}},
+{"dcbtst",     X(31,246),      X_MASK,      POWER4,    DCBT_EO,        {RA0, RB, CT}},
+{"dcbtst",     X(31,246),      X_MASK,      DCBT_EO,   PPCNONE,        {CT, RA0, RB}},
+{"dcbtst",     X(31,246),      X_MASK,      PPC,       POWER4|DCBT_EO, {RA0, RB}},
+
 {"stbux",      X(31,247),      X_MASK,      COM|PPCVLE, PPCNONE,       {RS, RAS, RB}},
 
 {"slliq",      XRC(31,248,0),  X_MASK,      M601,      PPCNONE,        {RA, RS, SH}},
@@ -4609,15 +4779,18 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"tlbiel",     X(31,274),      XRTLRA_MASK, POWER4,    PPC476,         {RB, L}},
 
-{"mfapidi",    X(31,275),      X_MASK,      BOOKE,     TITAN,          {RT, RA}},
+{"mfapidi",    X(31,275),      X_MASK,      BOOKE,     E500|TITAN,     {RT, RA}},
+
+{"lqarx",      X(31,276),      XEH_MASK,    POWER8,    PPCNONE,        {RTQ, RAX, RBX, EH}},
 
 {"lscbx",      XRC(31,277,0),  X_MASK,      M601,      PPCNONE,        {RT, RA, RB}},
 {"lscbx.",     XRC(31,277,1),  X_MASK,      M601,      PPCNONE,        {RT, RA, RB}},
 
 {"dcbtt",      XRT(31,278,0x10), XRT_MASK,  POWER7,    PPCNONE,        {RA0, RB}},
-{"dcbt",       X(31,278),      X_MASK,      POWER4,    PPCNONE,        {RA0, RB, CT}},
-{"dcbt",       X(31,278),      X_MASK,      PPC|PPCVLE, POWER4,        {CT, RA0, RB}},
+{"dcbt",       X(31,278),      X_MASK,      POWER4,    DCBT_EO,        {RA0, RB, CT}},
+{"dcbt",       X(31,278),      X_MASK,      DCBT_EO,   PPCNONE,        {CT, RA0, RB}},
+{"dcbt",       X(31,278),      X_MASK,      PPC,       POWER4|DCBT_EO, {RA0, RB}},
+
 {"lhzx",       X(31,279),      X_MASK,      COM|PPCVLE, PPCNONE,       {RT, RA0, RB}},
 
 {"cdtbcd",     X(31,282),      XRB_MASK,    POWER6,    PPCNONE,        {RA, RS}},
@@ -4632,10 +4805,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"lvexhx",     X(31,293),      X_MASK,      PPCVEC2,   PPCNONE,        {VD, RA0, RB}},
 {"lvepx",      X(31,295),      X_MASK,      PPCVEC2|PPCVLE, PPCNONE,   {VD, RA0, RB}},
 
-{"tlbie",      X(31,306),      XRTLRA_MASK, PPC,       TITAN,          {RB, L}},
+{"mfbhrbe",    X(31,302),      X_MASK,      POWER8,    PPCNONE,        {RT, BHRBE}},
+
+{"tlbie",      X(31,306),      XRA_MASK,    POWER7,    TITAN,          {RB, RS}},
+{"tlbie",      X(31,306),      XRTLRA_MASK, PPC,       E500|POWER7|TITAN,      {RB, L}},
 {"tlbi",       X(31,306),      XRT_MASK,    POWER,     PPCNONE,        {RA0, RB}},
 
-{"eciwx",      X(31,310),      X_MASK,      PPC,       TITAN,          {RT, RA0, RB}},
+{"eciwx",      X(31,310),      X_MASK,      PPC,       E500|TITAN,     {RT, RA0, RB}},
 
 {"lhzux",      X(31,311),      X_MASK,      COM|PPCVLE, PPCNONE,       {RT, RAL, RB}},
 
@@ -4680,7 +4856,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfdmasa3",   XSPR(31,323,219), XSPR_MASK, PPC403,    PPCNONE,        {RT}},
 {"mfdmacc3",   XSPR(31,323,220), XSPR_MASK, PPC403,    PPCNONE,        {RT}},
 {"mfdmasr",    XSPR(31,323,224), XSPR_MASK, PPC403,    PPCNONE,        {RT}},
-{"mfdcr",      X(31,323), X_MASK, PPC403|BOOKE|PPCA2|PPC476|PPCVLE, TITAN, {RT, SPR}},
+{"mfdcr",      X(31,323), X_MASK, PPC403|BOOKE|PPCA2|PPC476|PPCVLE, E500|TITAN, {RT, SPR}},
 {"mfdcr.",     XRC(31,323,1),  X_MASK,      PPCA2,     PPCNONE,        {RT, SPR}},
 
 {"lvexwx",     X(31,325),      X_MASK,      PPCVEC2,   PPCNONE,        {VD, RA0, RB}},
@@ -4702,6 +4878,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfdec",      XSPR(31,339,  6), XSPR_MASK, MFDEC1,    PPCNONE,        {RT}},
 {"mflr",       XSPR(31,339,  8), XSPR_MASK, COM|PPCVLE, PPCNONE,       {RT}},
 {"mfctr",      XSPR(31,339,  9), XSPR_MASK, COM|PPCVLE, PPCNONE,       {RT}},
+{"mfdscr",     XSPR(31,339, 17), XSPR_MASK, POWER6,    PPCNONE,        {RT}},
 {"mftid",      XSPR(31,339, 17), XSPR_MASK, POWER,     PPCNONE,        {RT}},
 {"mfdsisr",    XSPR(31,339, 18), XSPR_MASK, COM,       TITAN,          {RT}},
 {"mfdar",      XSPR(31,339, 19), XSPR_MASK, COM,       TITAN,          {RT}},
@@ -4717,6 +4894,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfdear",     XSPR(31,339, 61), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,     {RT}},
 {"mfesr",      XSPR(31,339, 62), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,     {RT}},
 {"mfivpr",     XSPR(31,339, 63), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,     {RT}},
+{"mfctrl",     XSPR(31,339,136), XSPR_MASK, POWER4,    PPCNONE,        {RT}},
 {"mfcmpa",     XSPR(31,339,144), XSPR_MASK, PPC860,    PPCNONE,        {RT}},
 {"mfcmpb",     XSPR(31,339,145), XSPR_MASK, PPC860,    PPCNONE,        {RT}},
 {"mfcmpc",     XSPR(31,339,146), XSPR_MASK, PPC860,    PPCNONE,        {RT}},
@@ -4740,9 +4918,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfsprg5",    XSPR(31,339,261), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RT}},
 {"mfsprg6",    XSPR(31,339,262), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RT}},
 {"mfsprg7",    XSPR(31,339,263), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RT}},
-{"mftb",       XSPR(31,339,268), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,     {RT}},
-{"mftbl",      XSPR(31,339,268), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,     {RT}},
-{"mftbu",      XSPR(31,339,269), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,     {RT}},
+{"mftbu",      XSPR(31,339,269), XSPR_MASK, POWER4|BOOKE|PPCVLE, PPCNONE, {RT}},
+{"mftb",       X(31,339),        X_MASK,    POWER4|BOOKE|PPCVLE, PPCNONE, {RT, TBR}},
+{"mftbl",      XSPR(31,339,268), XSPR_MASK, POWER4|BOOKE|PPCVLE, PPCNONE, {RT}},
 {"mfsprg0",    XSPR(31,339,272), XSPR_MASK, PPC|PPCVLE, PPCNONE,       {RT}},
 {"mfsprg1",    XSPR(31,339,273), XSPR_MASK, PPC|PPCVLE, PPCNONE,       {RT}},
 {"mfsprg2",    XSPR(31,339,274), XSPR_MASK, PPC|PPCVLE, PPCNONE,       {RT}},
@@ -4894,7 +5072,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfthrm3",    XSPR(31,339,1022), XSPR_MASK, PPC750,   PPCNONE,        {RT}},
 {"mfpbu2",     XSPR(31,339,1023), XSPR_MASK, PPC403,   PPCNONE,        {RT}},
 {"mfspr",      X(31,339),      X_MASK,      COM|PPCVLE, PPCNONE,       {RT, SPR}},
+
 {"lwax",       X(31,341),      X_MASK,      PPC64|PPCVLE, PPCNONE,     {RT, RA0, RB}},
 
 {"dst",                XDSS(31,342,0), XDSS_MASK,   PPCVEC,    PPCNONE,        {RA, RB, STRM}},
@@ -4909,11 +5087,11 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"divs",       XO(31,363,0,0), XO_MASK,     M601,      PPCNONE,        {RT, RA, RB}},
 {"divs.",      XO(31,363,0,1), XO_MASK,     M601,      PPCNONE,        {RT, RA, RB}},
 
-{"tlbia",      X(31,370),      0xffffffff,  PPC,       TITAN,          {0}},
+{"tlbia",      X(31,370),      0xffffffff,  PPC,       E500|TITAN,     {0}},
 
-{"mftbl",      XSPR(31,371,268), XSPR_MASK, PPC,       NO371,          {RT}},
-{"mftbu",      XSPR(31,371,269), XSPR_MASK, PPC,       NO371,          {RT}},
-{"mftb",       X(31,371),      X_MASK,      PPC|PPCA2, NO371|POWER7,   {RT, TBR}},
+{"mftbu",      XSPR(31,371,269), XSPR_MASK, PPC,       NO371|POWER4,   {RT}},
+{"mftb",       X(31,371),      X_MASK,      PPC,       NO371|POWER4,   {RT, TBR}},
+{"mftbl",      XSPR(31,371,268), XSPR_MASK, PPC,       NO371|POWER4,   {RT}},
 
 {"lwaux",      X(31,373),      X_MASK,      PPC64|PPCVLE, PPCNONE,     {RT, RAL, RB}},
 
@@ -4940,6 +5118,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"slbmte",     X(31,402),      XRA_MASK,    PPC64,     PPCNONE,        {RS, RB}},
 
+{"pbt.",       XRC(31,404,1),  X_MASK,      POWER8,    PPCNONE,        {RS, RA0, RB}},
+
 {"icswx",      XRC(31,406,0),  X_MASK,   POWER7|PPCA2, PPCNONE,        {RS, RA, RB}},
 {"icswx.",     XRC(31,406,1),  X_MASK,   POWER7|PPCA2, PPCNONE,        {RS, RA, RB}},
 
@@ -4961,9 +5141,11 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"divwe",      XO(31,427,0,0), XO_MASK,  POWER7|PPCA2, PPCNONE,        {RT, RA, RB}},
 {"divwe.",     XO(31,427,0,1), XO_MASK,  POWER7|PPCA2, PPCNONE,        {RT, RA, RB}},
 
+{"clrbhrb",    X(31,430),      0xffffffff,  POWER8,    PPCNONE,        {0}},
+
 {"slbie",      X(31,434),      XRTRA_MASK,  PPC64,     PPCNONE,        {RB}},
 
-{"ecowx",      X(31,438),      X_MASK,      PPC,       TITAN,          {RT, RA0, RB}},
+{"ecowx",      X(31,438),      X_MASK,      PPC,       E500|TITAN,     {RT, RA0, RB}},
 
 {"sthux",      X(31,439),      X_MASK,      COM|PPCVLE, PPCNONE,       {RS, RAS, RB}},
 
@@ -5015,14 +5197,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtdmasa3",   XSPR(31,451,219), XSPR_MASK, PPC403,    PPCNONE,        {RS}},
 {"mtdmacc3",   XSPR(31,451,220), XSPR_MASK, PPC403,    PPCNONE,        {RS}},
 {"mtdmasr",    XSPR(31,451,224), XSPR_MASK, PPC403,    PPCNONE,        {RS}},
-{"mtdcr",      X(31,451), X_MASK, PPC403|BOOKE|PPCA2|PPC476|PPCVLE, TITAN, {SPR, RS}},
+{"mtdcr",      X(31,451), X_MASK, PPC403|BOOKE|PPCA2|PPC476|PPCVLE, E500|TITAN, {SPR, RS}},
 {"mtdcr.",     XRC(31,451,1), X_MASK,       PPCA2,     PPCNONE,        {SPR, RS}},
 
 {"stvexwx",    X(31,453),      X_MASK,      PPCVEC2,   PPCNONE,        {VS, RA0, RB}},
 
 {"dccci",      X(31,454), XRT_MASK, PPC403|PPC440|TITAN|PPCA2, PPCNONE, {RAOPT, RBOPT}},
 {"dci",                X(31,454),      XRARB_MASK, PPCA2|PPC476|PPCVLE, PPCNONE, {CT}},
+
 {"divdu",      XO(31,457,0,0), XO_MASK,  PPC64|PPCVLE, PPCNONE,        {RT, RA, RB}},
 {"divdu.",     XO(31,457,0,1), XO_MASK,  PPC64|PPCVLE, PPCNONE,        {RT, RA, RB}},
 
@@ -5036,6 +5218,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtxer",      XSPR(31,467,  1), XSPR_MASK, COM|PPCVLE, PPCNONE,       {RS}},
 {"mtlr",       XSPR(31,467,  8), XSPR_MASK, COM|PPCVLE, PPCNONE,       {RS}},
 {"mtctr",      XSPR(31,467,  9), XSPR_MASK, COM|PPCVLE, PPCNONE,       {RS}},
+{"mtdscr",     XSPR(31,467, 17), XSPR_MASK, POWER6,    PPCNONE,        {RS}},
 {"mttid",      XSPR(31,467, 17), XSPR_MASK, POWER,     PPCNONE,        {RS}},
 {"mtdsisr",    XSPR(31,467, 18), XSPR_MASK, COM,       TITAN,          {RS}},
 {"mtdar",      XSPR(31,467, 19), XSPR_MASK, COM,       TITAN,          {RS}},
@@ -5062,6 +5245,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtder",      XSPR(31,467,149), XSPR_MASK, PPC860,    PPCNONE,        {RS}},
 {"mtcounta",   XSPR(31,467,150), XSPR_MASK, PPC860,    PPCNONE,        {RS}},
 {"mtcountb",   XSPR(31,467,151), XSPR_MASK, PPC860,    PPCNONE,        {RS}},
+{"mtctrl",     XSPR(31,467,152), XSPR_MASK, POWER4,    PPCNONE,        {RS}},
 {"mtcmpe",     XSPR(31,467,152), XSPR_MASK, PPC860,    PPCNONE,        {RS}},
 {"mtcmpf",     XSPR(31,467,153), XSPR_MASK, PPC860,    PPCNONE,        {RS}},
 {"mtcmpg",     XSPR(31,467,154), XSPR_MASK, PPC860,    PPCNONE,        {RS}},
@@ -5195,7 +5379,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtthrm3",    XSPR(31,467,1022), XSPR_MASK, PPC750,   PPCNONE,        {RS}},
 {"mtpbu2",     XSPR(31,467,1023), XSPR_MASK, PPC403,   PPCNONE,        {RS}},
 {"mtspr",      X(31,467),      X_MASK,      COM|PPCVLE, PPCNONE,       {SPR, RS}},
+
 {"dcbi",       X(31,470),      XRT_MASK,    PPC|PPCVLE, PPCNONE,       {RA0, RB}},
 
 {"nand",       XRC(31,476,0),  X_MASK,      COM|PPCVLE, PPCNONE,       {RA, RS, RB}},
@@ -5220,7 +5404,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"icbtlse",    X(31,494),      X_MASK,      PPCCHLK,   E500MC,         {CT, RA, RB}},
 
-{"slbia",      X(31,498),      0xffffffff,  PPC64,     PPCNONE,        {0}},
+{"slbia",      X(31,498),      0xff1fffff,  POWER6,    PPCNONE,        {IH}},
+{"slbia",      X(31,498),      0xffffffff,  PPC64,     POWER6,         {0}},
 
 {"cli",                X(31,502),      XRB_MASK,    POWER,     PPCNONE,        {RT, RA}},
 
@@ -5243,12 +5428,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"subfco.",    XO(31,8,1,1),   XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RA, RB}},
 {"sfo.",       XO(31,8,1,1),   XO_MASK,     PWRCOM,    PPCNONE,        {RT, RA, RB}},
 {"subco.",     XO(31,8,1,1),   XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RB, RA}},
+
 {"addco",      XO(31,10,1,0),  XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RA, RB}},
 {"ao",         XO(31,10,1,0),  XO_MASK,     PWRCOM,    PPCNONE,        {RT, RA, RB}},
 {"addco.",     XO(31,10,1,1),  XO_MASK,     PPCCOM|PPCVLE, PPCNONE,    {RT, RA, RB}},
 {"ao.",                XO(31,10,1,1),  XO_MASK,     PWRCOM,    PPCNONE,        {RT, RA, RB}},
 
+{"lxsspx",     X(31,524),      XX1_MASK,    PPCVSX2,   PPCNONE,        {XT6, RA0, RB}},
+
 {"clcs",       X(31,531),      XRB_MASK,    M601,      PPCNONE,        {RT, RA}},
 
 {"ldbrx",      X(31,532),      X_MASK, CELL|POWER7|PPCA2, PPCNONE,     {RT, RA0, RB}},
@@ -5306,6 +5493,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"lswi",       X(31,597),      X_MASK,  PPCCOM|PPCVLE, E500|E500MC,    {RT, RAX, NBI}},
 {"lsi",                X(31,597),      X_MASK,      PWRCOM,    PPCNONE,        {RT, RA0, NB}},
 
+{"hwsync",     XSYNC(31,598,0), 0xffffffff, POWER4,    BOOKE|PPC476,   {0}},
 {"lwsync",     XSYNC(31,598,1), 0xffffffff, PPC,       E500,           {0}},
 {"ptesync",    XSYNC(31,598,2), 0xffffffff, PPC64,     PPCNONE,        {0}},
 {"sync",       X(31,598),      XSYNCLE_MASK,E6500,     PPCNONE,        {LS, ESYNC}},
@@ -5343,6 +5531,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"stvlx",      X(31,647),      X_MASK,      CELL,      PPCNONE,        {VS, RA0, RB}},
 {"stbfcmux",   APU(31,647,0),  APU_MASK,    PPC405,    PPCNONE,        {FCRT, RA, RB}},
 
+{"stxsspx",    X(31,652),      XX1_MASK,    PPCVSX2,   PPCNONE,        {XS6, RA0, RB}},
+
 {"tbegin.",    XRC(31,654,1), XRTLRARB_MASK,PPCHTM,    PPCNONE,        {HTM_R}},
 
 {"subfeo",     XO(31,136,1,0), XO_MASK, PPCCOM|PPCVLE, PPCNONE,        {RT, RA, RB}},
@@ -5383,7 +5573,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"tendall.",   XRC(31,686,1)|(1<<25), XRTRARB_MASK, PPCHTM, PPCNONE,   {0}},
 {"tend.",      XRC(31,686,1), XRTARARB_MASK, PPCHTM,   PPCNONE,        {HTM_A}},
 
-{"stbcx.",     XRC(31,694,1),  X_MASK,      POWER7,    PPCNONE,        {RS, RA0, RB}},
+{"stbcx.",     XRC(31,694,1),  X_MASK,      POWER8,    PPCNONE,        {RS, RA0, RB}},
 
 {"stfsux",     X(31,695),      X_MASK,      COM,       PPCEFS,         {FRS, RAS, RB}},
 
@@ -5413,7 +5603,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"stswi",      X(31,725),      X_MASK, PPCCOM|PPCVLE,  E500|E500MC,    {RS, RA0, NB}},
 {"stsi",       X(31,725),      X_MASK,      PWRCOM,    PPCNONE,        {RS, RA0, NB}},
 
-{"sthcx.",     XRC(31,726,1),  X_MASK,      POWER7,    PPCNONE,        {RS, RA0, RB}},
+{"sthcx.",     XRC(31,726,1),  X_MASK,      POWER8,    PPCNONE,        {RS, RA0, RB}},
 
 {"stfdx",      X(31,727),      X_MASK,      COM,       PPCEFS,         {FRS, RA0, RB}},
 
@@ -5528,6 +5718,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"divo.",      XO(31,331,1,1), XO_MASK,     M601,      PPCNONE,        {RT, RA, RB}},
 
 {"lxvd2x",     X(31,844),      XX1_MASK,    PPCVSX,    PPCNONE,        {XT6, RA0, RB}},
+{"lxvx",       X(31,844),      XX1_MASK,    PPCVSX,    PPCNONE,        {XT6, RA0, RB}},
 
 {"tabortwci.", XRC(31,846,1),  X_MASK,      PPCHTM,    PPCNONE,        {TO, RA, HTM_SI}},
 
@@ -5631,20 +5822,23 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"iccci",      X(31,966), XRT_MASK, PPC403|PPC440|TITAN|PPCA2, PPCNONE, {RAOPT, RBOPT}},
 {"ici",                X(31,966),      XRARB_MASK,  PPCA2|PPC476|PPCVLE, PPCNONE, {CT}},
+
 {"divduo",     XO(31,457,1,0), XO_MASK,     PPC64|PPCVLE, PPCNONE,     {RT, RA, RB}},
 {"divduo.",    XO(31,457,1,1), XO_MASK,     PPC64|PPCVLE, PPCNONE,     {RT, RA, RB}},
+
 {"divwuo",     XO(31,459,1,0), XO_MASK,     PPC|PPCVLE, PPCNONE,       {RT, RA, RB}},
 {"divwuo.",    XO(31,459,1,1), XO_MASK,     PPC|PPCVLE, PPCNONE,       {RT, RA, RB}},
 
 {"stxvd2x",    X(31,972),      XX1_MASK,    PPCVSX,    PPCNONE,        {XS6, RA0, RB}},
+{"stxvx",      X(31,972),      XX1_MASK,    PPCVSX,    PPCNONE,        {XS6, RA0, RB}},
 
 {"tlbld",      X(31,978),      XRTRA_MASK,  PPC, PPC403|BOOKE|PPCA2|PPC476, {RB}},
 {"tlbwehi",    XTLB(31,978,0), XTLB_MASK,   PPC403,    PPCNONE,        {RT, RA}},
 {"tlbwelo",    XTLB(31,978,1), XTLB_MASK,   PPC403,    PPCNONE,        {RT, RA}},
 {"tlbwe",      X(31,978),      X_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE, {RSO, RAOPT, SHO}},
 
+{"slbfee.",    XRC(31,979,1),  XRA_MASK,    POWER6,    PPCNONE,        {RT, RB}},
+
 {"stbcix",     X(31,981),      X_MASK,      POWER6,    PPCNONE,        {RS, RA0, RB}},
 
 {"icbi",       X(31,982),      XRT_MASK,    PPC|PPCVLE, PPCNONE,       {RA0, RB}},
@@ -5665,7 +5859,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"divdo",      XO(31,489,1,0), XO_MASK,  PPC64|PPCVLE, PPCNONE,        {RT, RA, RB}},
 {"divdo.",     XO(31,489,1,1), XO_MASK,  PPC64|PPCVLE, PPCNONE,        {RT, RA, RB}},
+
 {"divwo",      XO(31,491,1,0), XO_MASK,   PPC|PPCVLE,  PPCNONE,        {RT, RA, RB}},
 {"divwo.",     XO(31,491,1,1), XO_MASK,   PPC|PPCVLE,  PPCNONE,        {RT, RA, RB}},
 
@@ -5837,8 +6031,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"dctfix",     XRC(59,290,0),  X_MASK,      POWER6,    PPCNONE,        {FRT, FRB}},
 {"dctfix.",    XRC(59,290,1),  X_MASK,      POWER6,    PPCNONE,        {FRT, FRB}},
 
-{"ddedpd",     XRC(59,322,0),  X_MASK,      POWER6,    PPCNONE,        {SP, FRT, FRB}}, 
-{"ddedpd.",    XRC(59,322,1),  X_MASK,      POWER6,    PPCNONE,        {SP, FRT, FRB}}, 
+{"ddedpd",     XRC(59,322,0),  X_MASK,      POWER6,    PPCNONE,        {SP, FRT, FRB}},
+{"ddedpd.",    XRC(59,322,1),  X_MASK,      POWER6,    PPCNONE,        {SP, FRT, FRB}},
 
 {"dxex",       XRC(59,354,0),  X_MASK,      POWER6,    PPCNONE,        {FRT, FRB}},
 {"dxex.",      XRC(59,354,1),  X_MASK,      POWER6,    PPCNONE,        {FRT, FRB}},
@@ -5871,14 +6065,25 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"fcfidus",    XRC(59,974,0),  XRA_MASK, POWER7|PPCA2, PPCNONE,        {FRT, FRB}},
 {"fcfidus.",   XRC(59,974,1),  XRA_MASK, POWER7|PPCA2, PPCNONE,        {FRT, FRB}},
 
+{"xsaddsp",    XX3(60,0),      XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
+{"xsmaddasp",  XX3(60,1),      XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xxsldwi",    XX3(60,2),      XX3SHW_MASK, PPCVSX,    PPCNONE,        {XT6, XA6, XB6, SHW}},
 {"xxsel",      XX4(60,3),      XX4_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6, XC6}},
+{"xssubsp",    XX3(60,8),      XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
+{"xsmaddmsp",  XX3(60,9),      XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xxspltd",    XX3(60,10),     XX3DM_MASK,  PPCVSX,    PPCNONE,        {XT6, XA6, XB6S, DMEX}},
 {"xxmrghd",    XX3(60,10),     XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xxswapd",    XX3(60,10)|(2<<8), XX3_MASK, PPCVSX,    PPCNONE,        {XT6, XA6, XB6S}},
 {"xxmrgld",    XX3(60,10)|(3<<8), XX3_MASK, PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xxpermdi",   XX3(60,10),     XX3DM_MASK,  PPCVSX,    PPCNONE,        {XT6, XA6, XB6, DM}},
+{"xsrsqrtesp", XX2(60,10),     XX2_MASK,    PPCVSX2,   PPCNONE,        {XT6, XB6}},
+{"xssqrtsp",   XX2(60,11),     XX2_MASK,    PPCVSX2,   PPCNONE,        {XT6, XB6}},
+{"xsmulsp",    XX3(60,16),     XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
+{"xsmsubasp",  XX3(60,17),     XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xxmrghw",    XX3(60,18),     XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
+{"xsdivsp",    XX3(60,24),     XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
+{"xsmsubmsp",  XX3(60,25),     XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
+{"xsresp",     XX2(60,26),     XX2_MASK,    PPCVSX2,   PPCNONE,        {XT6, XB6}},
 {"xsadddp",    XX3(60,32),     XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xsmaddadp",  XX3(60,33),     XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xscmpudp",   XX3(60,35),     XX3BF_MASK,  PPCVSX,    PPCNONE,        {BF, XA6, XB6}},
@@ -5932,14 +6137,18 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"xvmsubmdp",  XX3(60,121),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xsrdpim",    XX2(60,121),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xvtdivdp",   XX3(60,125),    XX3BF_MASK,  PPCVSX,    PPCNONE,        {BF, XA6, XB6}},
+{"xsnmaddasp", XX3(60,129),    XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xxland",     XX3(60,130),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvcvspuxws", XX2(60,136),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
+{"xsnmaddmsp", XX3(60,137),    XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xvrspi",     XX2(60,137),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xxlandc",    XX3(60,138),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvrsqrtesp", XX2(60,138),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xvsqrtsp",   XX2(60,139),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
+{"xsnmsubasp", XX3(60,145),    XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xxlor",      XX3(60,146),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvcvspsxws", XX2(60,152),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
+{"xsnmsubmsp", XX3(60,153),    XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xvrspiz",    XX2(60,153),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xxlxor",     XX3(60,154),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvresp",     XX2(60,154),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
@@ -5952,12 +6161,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"xsnmaddmdp", XX3(60,169),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvrspip",    XX2(60,169),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xvtsqrtsp",  XX2(60,170),    XX2BF_MASK,  PPCVSX,    PPCNONE,        {BF, XB6}},
+{"xxlorc",     XX3(60,170),    XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xvrspic",    XX2(60,171),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xscpsgndp",  XX3(60,176),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xsnmsubadp", XX3(60,177),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
+{"xxlnand",    XX3(60,178),    XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xvcvsxwsp",  XX2(60,184),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xsnmsubmdp", XX3(60,185),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvrspim",    XX2(60,185),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
+{"xxleqv",     XX3(60,186),    XX3_MASK,    PPCVSX2,   PPCNONE,        {XT6, XA6, XB6}},
 {"xvmaxsp",    XX3(60,192),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvnmaddasp", XX3(60,193),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvminsp",    XX3(60,200),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
@@ -5988,8 +6200,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"xvnmsubmdp", XX3(60,249),    XX3_MASK,    PPCVSX,    PPCNONE,        {XT6, XA6, XB6}},
 {"xvrdpim",    XX2(60,249),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xscvdpsp",   XX2(60,265),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
+{"xscvdpspn",  XX2(60,267),    XX2_MASK,    PPCVSX2,   PPCNONE,        {XT6, XB6}},
+{"xsrsp",      XX2(60,281),    XX2_MASK,    PPCVSX2,   PPCNONE,        {XT6, XB6}},
+{"xscvuxdsp",  XX2(60,296),    XX2_MASK,    PPCVSX2,   PPCNONE,        {XT6, XB6}},
+{"xscvsxdsp",  XX2(60,312),    XX2_MASK,    PPCVSX2,   PPCNONE,        {XT6, XB6}},
 {"xscvdpuxds", XX2(60,328),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xscvspdp",   XX2(60,329),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
+{"xscvspdpn",  XX2(60,331),    XX2_MASK,    PPCVSX2,   PPCNONE,        {XT6, XB6}},
 {"xscvdpsxds", XX2(60,344),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xsabsdp",    XX2(60,345),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
 {"xscvuxddp",  XX2(60,360),    XX2_MASK,    PPCVSX,    PPCNONE,        {XT6, XB6}},
@@ -6225,6 +6442,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"denbcdq",    XRC(63,834,0),  X_MASK,      POWER6,    PPCNONE,        {S, FRTp, FRBp}},
 {"denbcdq.",   XRC(63,834,1),  X_MASK,      POWER6,    PPCNONE,        {S, FRTp, FRBp}},
 
+{"fmrgow",     X(63,838),      X_MASK,      PPCVSX2,   PPCNONE,        {FRT, FRA, FRB}},
+
 {"fcfid",      XRC(63,846,0),  XRA_MASK,    PPC64,     PPCNONE,        {FRT, FRB}},
 {"fcfid",      XRC(63,846,0),  XRA_MASK,    PPC476,    PPCNONE,        {FRT, FRB}},
 {"fcfid.",     XRC(63,846,1),  XRA_MASK,    PPC64,     PPCNONE,        {FRT, FRB}},
@@ -6239,6 +6458,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"fctiduz",    XRC(63,943,0),  XRA_MASK, POWER7|PPCA2, PPCNONE,        {FRT, FRB}},
 {"fctiduz.",   XRC(63,943,1),  XRA_MASK, POWER7|PPCA2, PPCNONE,        {FRT, FRB}},
 
+{"fmrgew",     X(63,966),      X_MASK,      PPCVSX2,   PPCNONE,        {FRT, FRA, FRB}},
+
 {"fcfidu",     XRC(63,974,0),  XRA_MASK, POWER7|PPCA2, PPCNONE,        {FRT, FRB}},
 {"fcfidu.",    XRC(63,974,1),  XRA_MASK, POWER7|PPCA2, PPCNONE,        {FRT, FRB}},
 };
@@ -6284,7 +6505,7 @@ const struct powerpc_opcode vle_opcodes[] = {
 {"se_cmpl",    SE_RR(3,1),     SE_RR_MASK,     PPCVLE, PPCNONE,        {RX, RY}},
 {"se_cmph",    SE_RR(3,2),     SE_RR_MASK,     PPCVLE, PPCNONE,        {RX, RY}},
 {"se_cmphl",   SE_RR(3,3),     SE_RR_MASK,     PPCVLE, PPCNONE,        {RX, RY}},
+
 {"e_cmpi",     SCI8BF(6,0,21), SCI8BF_MASK,    PPCVLE, PPCNONE,        {CRD32, RA, SCLSCI8}},
 {"e_cmpli",    SCI8BF(6,1,21), SCI8BF_MASK,    PPCVLE, PPCNONE,        {CRD32, RA, SCLSCI8}},
 {"e_addi",     SCI8(6,16),     SCI8_MASK,      PPCVLE, PPCNONE,        {RT, RA, SCLSCI8}},
@@ -6324,7 +6545,7 @@ const struct powerpc_opcode vle_opcodes[] = {
 {"se_cmpi",    SE_IM5(10,1),   SE_IM5_MASK,    PPCVLE, PPCNONE,        {RX, UI5}},
 {"se_bmaski",  SE_IM5(11,0),   SE_IM5_MASK,    PPCVLE, PPCNONE,        {RX, UI5}},
 {"se_andi",    SE_IM5(11,1),   SE_IM5_MASK,    PPCVLE, PPCNONE,        {RX, UI5}},
+
 {"e_lbz",      OP(12),         OP_MASK,        PPCVLE, PPCNONE,        {RT, D, RA0}},
 {"e_stb",      OP(13),         OP_MASK,        PPCVLE, PPCNONE,        {RT, D, RA0}},
 {"e_lha",      OP(14),         OP_MASK,        PPCVLE, PPCNONE,        {RT, D, RA0}},
@@ -6338,7 +6559,7 @@ const struct powerpc_opcode vle_opcodes[] = {
 {"se_and",     SE_RR(17,2),    SE_RR_MASK,     PPCVLE, PPCNONE,        {RX, RY}},
 {"se_and.",    SE_RR(17,3),    SE_RR_MASK,     PPCVLE, PPCNONE,        {RX, RY}},
 {"se_li",      IM7(9),         IM7_MASK,       PPCVLE, PPCNONE,        {RX, UI7}},
+
 {"e_lwz",      OP(20),         OP_MASK,        PPCVLE, PPCNONE,        {RT, D, RA0}},
 {"e_stw",      OP(21),         OP_MASK,        PPCVLE, PPCNONE,        {RT, D, RA0}},
 {"e_lhz",      OP(22),         OP_MASK,        PPCVLE, PPCNONE,        {RT, D, RA0}},
@@ -6408,7 +6629,7 @@ const struct powerpc_opcode vle_opcodes[] = {
 {"e_bfl",      EBD15(30,8,BO32F,1), EBD15_MASK, PPCVLE, PPCNONE,       {BI32,B15}},
 {"e_bt",       EBD15(30,8,BO32T,0), EBD15_MASK, PPCVLE, PPCNONE,       {BI32,B15}},
 {"e_btl",      EBD15(30,8,BO32T,1), EBD15_MASK, PPCVLE, PPCNONE,       {BI32,B15}},
+
 {"e_cmph",     X(31,14),       X_MASK,         PPCVLE, PPCNONE,        {CRD, RA, RB}},
 {"e_cmphl",    X(31,46),       X_MASK,         PPCVLE, PPCNONE,        {CRD, RA, RB}},
 {"e_crandc",   XL(31,129),     XL_MASK,        PPCVLE, PPCNONE,        {BT, BA, BB}},
@@ -6420,18 +6641,18 @@ const struct powerpc_opcode vle_opcodes[] = {
 {"e_mcrf",     XL(31,16),      XL_MASK,        PPCVLE, PPCNONE,        {CRD, CR}},
 {"e_slwi",     EX(31,112),     EX_MASK,        PPCVLE, PPCNONE,        {RA, RS, SH}},
 {"e_slwi.",    EX(31,113),     EX_MASK,        PPCVLE, PPCNONE,        {RA, RS, SH}},
+
 {"e_crand",    XL(31,257),     XL_MASK,        PPCVLE, PPCNONE,        {BT, BA, BB}},
+
 {"e_rlw",      EX(31,560),     EX_MASK,        PPCVLE, PPCNONE,        {RA, RS, RB}},
 {"e_rlw.",     EX(31,561),     EX_MASK,        PPCVLE, PPCNONE,        {RA, RS, RB}},
+
 {"e_crset",    XL(31,289),     XL_MASK,        PPCVLE, PPCNONE,        {BT, BAT, BBA}},
 {"e_creqv",    XL(31,289),     XL_MASK,        PPCVLE, PPCNONE,        {BT, BA, BB}},
+
 {"e_rlwi",     EX(31,624),     EX_MASK,        PPCVLE, PPCNONE,        {RA, RS, SH}},
 {"e_rlwi.",    EX(31,625),     EX_MASK,        PPCVLE, PPCNONE,        {RA, RS, SH}},
+
 {"e_crorc",    XL(31,417),     XL_MASK,        PPCVLE, PPCNONE,        {BT, BA, BB}},
 
 {"e_crmove",   XL(31,449),     XL_MASK,        PPCVLE, PPCNONE,        {BT, BA, BBA}},
@@ -6441,19 +6662,19 @@ const struct powerpc_opcode vle_opcodes[] = {
 
 {"e_srwi",     EX(31,1136),    EX_MASK,        PPCVLE, PPCNONE,        {RA, RS, SH}},
 {"e_srwi.",    EX(31,1137),    EX_MASK,        PPCVLE, PPCNONE,        {RA, RS, SH}},
+
 {"se_lbz",     SD4(8),         SD4_MASK,       PPCVLE, PPCNONE,        {RZ, SE_SD, RX}},
+
 {"se_stb",     SD4(9),         SD4_MASK,       PPCVLE, PPCNONE,        {RZ, SE_SD, RX}},
+
 {"se_lhz",     SD4(10),        SD4_MASK,       PPCVLE, PPCNONE,        {RZ, SE_SDH, RX}},
+
 {"se_sth",     SD4(11),        SD4_MASK,       PPCVLE, PPCNONE,        {RZ, SE_SDH, RX}},
+
 {"se_lwz",     SD4(12),        SD4_MASK,       PPCVLE, PPCNONE,        {RZ, SE_SDW, RX}},
+
 {"se_stw",     SD4(13),        SD4_MASK,       PPCVLE, PPCNONE,        {RZ, SE_SDW, RX}},
+
 {"se_bge",     EBD8IO(28,0,0), EBD8IO3_MASK,   PPCVLE, PPCNONE,        {B8}},
 {"se_bnl",     EBD8IO(28,0,0), EBD8IO3_MASK,   PPCVLE, PPCNONE,        {B8}},
 {"se_ble",     EBD8IO(28,0,1), EBD8IO3_MASK,   PPCVLE, PPCNONE,        {B8}},
This page took 0.064579 seconds and 4 git commands to generate.