01917d
commit a680de9a980e9d268846e8605af14ba1e7f3a39b
01917d
Author: Peter Bergner <bergner@vnet.ibm.com>
01917d
Date:   Wed Nov 11 19:52:52 2015 -0600
01917d
01917d
    Add assembler, disassembler and linker support for power9.
01917d
    
01917d
    include/opcode/
01917d
            * ppc.h (PPC_OPCODE_POWER9): New define.
01917d
            (PPC_OPCODE_VSX3): Likewise.
01917d
    
01917d
    opcodes/
01917d
            * ppc-dis.c (ppc_opts): Add "power9" and "pwr9" entries.
01917d
            Add PPC_OPCODE_VSX3 to the vsx entry.
01917d
            (powerpc_init_dialect): Set default dialect to power9.
01917d
            * ppc-opc.c (insert_dcmxs, extract_dcmxs, insert_dxd, extract_dxd,
01917d
            insert_dxdn, extract_dxdn, insert_l0, extract_l0, insert_l1,
01917d
            extract_l1 insert_xtq6, extract_xtq6): New static functions.
01917d
            (insert_esync): Test for illegal L operand value.
01917d
            (DCMX, DCMXS, DXD, NDXD, L0, L1, RC, FC, UIM6, X_R, RIC, PRS, XSQ6,
01917d
            XTQ6, LRAND, IMM8, DQX, DQX_MASK, DX, DX_MASK, VXVAPS_MASK, VXVA,XVA,
01917d
            XX2VA, XVARC, XBF_MASK, XX2UIM4_MASK, XX2BFD_MASK, XX2DCMXS_MASK,
01917d
            XVA_MASK, XRLA_MASK, XBFRARB_MASK, XLRAND_MASK, POWER9, PPCVEC3,
01917d
            PPCVSX3): New defines.
01917d
            (powerpc_opcodes) 
01917d
            fcmpo, ftdiv, ftsqrt>: Use XBF_MASK.
01917d
            <mcrxr>: Use XBFRARB_MASK.
01917d
            
01917d
            bcdctz., bcds., bcdsetsgn., bcdsr., bcdtrunc., bcdus., bcdutrunc.,
01917d
            cmpeqb, cmprb, cnttzd, cnttzd., cnttzw, cnttzw., copy, copy_first,
01917d
            cp_abort, darn, dtstsfi, dtstsfiq, extswsli, extswsli., ldat, ldmx,
01917d
            lwat, lxsd, lxsibzx, lxsihzx, lxssp, lxv, lxvb16x, lxvh8x, lxvl, lxvll,
01917d
            lxvwsx, lxvx, maddhd, maddhdu, maddld, mcrxrx, mfvsrld, modsd, modsw,
01917d
            modud, moduw, msgsync, mtvsrdd, mtvsrws, paste, paste., paste_last,
01917d
            rmieg, setb, slbieg, slbsync, stdat, stop, stwat, stxsd, stxsibx,
01917d
            stxsihx, stxssp, stxv, stxvb16x, stxvh8x, stxvl, stxvll, stxvx,
01917d
            subpcis, urfid, vbpermd, vclzlsbb, vcmpneb, vcmpneb., vcmpneh,
01917d
            vcmpneh., vcmpnew, vcmpnew., vcmpnezb, vcmpnezb., vcmpnezh, vcmpnezh.,
01917d
            vcmpnezw, vcmpnezw., vctzb, vctzd, vctzh, vctzlsbb, vctzw, vextractd,
01917d
            vextractub, vextractuh, vextractuw, vextsb2d, vextsb2w, vextsh2d,
01917d
            vextsh2w, vextsw2d, vextublx, vextubrx, vextuhlx, vextuhrx, vextuwlx,
01917d
            vextuwrx, vinsertb, vinsertd, vinserth, vinsertw, vmul10cuq,
01917d
            vmul10ecuq, vmul10euq, vmul10uq, vnegd, vnegw, vpermr, vprtybd,
01917d
            vprtybq, vprtybw, vrldmi, vrldnm, vrlwmi, vrlwnm, vslv, vsrv, wait,
01917d
            xsabsqp, xsaddqp, xsaddqpo, xscmpeqdp, xscmpexpdp, xscmpexpqp,
01917d
            xscmpgedp, xscmpgtdp, xscmpnedp, xscmpoqp, xscmpuqp, xscpsgnqp,
01917d
            xscvdphp, xscvdpqp, xscvhpdp, xscvqpdp, xscvqpdpo, xscvqpsdz,
01917d
            xscvqpswz, xscvqpudz, xscvqpuwz, xscvsdqp, xscvudqp, xsdivqp,
01917d
            xsdivqpo, xsiexpdp, xsiexpqp, xsmaddqp, xsmaddqpo, xsmaxcdp,
01917d
            xsmaxjdp, xsmincdp, xsminjdp, xsmsubqp, xsmsubqpo, xsmulqp, xsmulqpo,
01917d
            xsnabsqp, xsnegqp, xsnmaddqp, xsnmaddqpo, xsnmsubqp, xsnmsubqpo,
01917d
            xsrqpi, xsrqpix, xsrqpxp, xssqrtqp, xssqrtqpo, xssubqp, xssubqpo,
01917d
            xststdcdp, xststdcqp, xststdcsp, xsxexpdp, xsxexpqp, xsxsigdp,
01917d
            xsxsigqp, xvcmpnedp, xvcmpnedp., xvcmpnesp, xvcmpnesp., xvcvhpsp,
01917d
            xvcvsphp, xviexpdp, xviexpsp, xvtstdcdp, xvtstdcsp, xvxexpdp,
01917d
            xvxexpsp, xvxsigdp, xvxsigsp, xxbrd, xxbrh, xxbrq, xxbrw, xxextractuw,
01917d
            xxinsertw, xxperm, xxpermr, xxspltib>: New instructions.
01917d
            <doze, nap, sleep, rvwinkle, waitasec, lxvx, stxvx>: Disable on POWER9.
01917d
            <tlbiel, tlbie, sync, slbmfev, slbmfee>: Add additional operands.
01917d
    
01917d
    include/elf/
01917d
            * ppc.h (R_PPC_REL16DX_HA): New reloction.
01917d
            * ppc64.h (R_PPC64_REL16DX_HA): Likewise.
01917d
    
01917d
    bfd/
01917d
            * elf32-ppc.c (ppc_elf_howto_raw): Add R_PPC_REL16DX_HA.
01917d
            (ppc_elf_reloc_type_lookup): Handle R_PPC_REL16DX_HA.
01917d
            (ppc_elf_addr16_ha_reloc): Likewise.
01917d
            (ppc_elf_check_relocs): Likewise.
01917d
            (ppc_elf_relocate_section): Likewise.
01917d
            (is_insn_dq_form): Handle lxv and stxv instructions.
01917d
            * elf64-ppc.c (ppc64_elf_howto_raw): Add R_PPC64_REL16DX_HA.
01917d
            (ppc64_elf_reloc_type_lookup): Handle R_PPC64_REL16DX_HA.
01917d
            (ppc64_elf_ha_reloc): Likewise.
01917d
            (ppc64_elf_check_relocs): Likewise.
01917d
            (ppc64_elf_relocate_section): Likewise.
01917d
            * bfd-in2.h: Regenerate.
01917d
            * libbfd.h: Likewise.
01917d
            * reloc.c (BFD_RELOC_PPC_REL16DX_HA): New.
01917d
    
01917d
    elfcpp/
01917d
            * powerpc.h (R_POWERPC_REL16DX_HA): Define.
01917d
    
01917d
    gas/
01917d
            * doc/as.texinfo (Target PowerPC): Document -mpower9 and -mpwr9.
01917d
            * doc/c-ppc.texi (PowerPC-Opts):  Likewise.
01917d
            * config/tc-ppc.c (md_show_usage): Likewise.
01917d
            (md_assemble): Handle BFD_RELOC_PPC_REL16DX_HA.
01917d
            (md_apply_fix): Likewise.
01917d
            (ppc_handle_align): Handle power9's group ending nop.
01917d
    
01917d
    gas/testsuite/
01917d
            * gas/ppc/altivec3.s: New test.
01917d
            * gas/ppc/altivec3.d: Likewise.
01917d
            * gas/ppc/vsx3.s: Likewise.
01917d
            * gas/ppc/vsx3.d: Likewise.
01917d
            * gas/ppc/power9.s: Likewise.
01917d
            * gas/ppc/power9.d: Likewise.
01917d
            * gas/ppc/ppc.exp: Run them.
01917d
            * gas/ppc/power8.s <lxvx, lxvd2x, stxvx, stxvd2x>: Add new tests.
01917d
            * gas/ppc/power8.d: Likewise.
01917d
            * gas/ppc/vsx.s: <lxvx, stxvx>: Rename invalid mnemonics ...
01917d
            <lxvd2x, stxvd2x>: ...to this.
01917d
            * gas/ppc/vsx.d: Likewise.
01917d
    
01917d
    gold/
01917d
            * gold/powerpc.cc (Powerpc_relocate_functions::addr16_dq): New function.
01917d
            (Powerpc_relocate_functions::addr16dx_ha): Likewise.
01917d
            (Target_powerpc::Scan::local): Handle R_POWERPC_REL16DX_HA.
01917d
            (Target_powerpc::Scan::global): Likewise.
01917d
            (Target_powerpc::Relocate::relocate): Likewise.
01917d
    
01917d
    ld/testsuite/
01917d
            * ld-powerpc/addpcis.d: New test.
01917d
            * ld-powerpc/addpcis.s: New test.
01917d
            * ld-powerpc/powerpc.exp: Run it.
01917d
01917d
### a/bfd/ChangeLog
01917d
### b/bfd/ChangeLog
01917d
## -1,3 +1,21 @@
01917d
+2015-11-11  Alan Modra  <amodra@gmail.com>
01917d
+            Peter Bergner <bergner@vnet.ibm.com>
01917d
+
01917d
+	* elf32-ppc.c (ppc_elf_howto_raw): Add R_PPC_REL16DX_HA.
01917d
+	(ppc_elf_reloc_type_lookup): Handle R_PPC_REL16DX_HA.
01917d
+	(ppc_elf_addr16_ha_reloc): Likewise.
01917d
+	(ppc_elf_check_relocs): Likewise.
01917d
+	(ppc_elf_relocate_section): Likewise.
01917d
+	(is_insn_dq_form): Handle lxv and stxv instructions.
01917d
+	* elf64-ppc.c (ppc64_elf_howto_raw): Add R_PPC64_REL16DX_HA.
01917d
+	(ppc64_elf_reloc_type_lookup): Handle R_PPC64_REL16DX_HA.
01917d
+	(ppc64_elf_ha_reloc): Likewise.
01917d
+	(ppc64_elf_check_relocs): Likewise.
01917d
+	(ppc64_elf_relocate_section): Likewise.
01917d
+	* bfd-in2.h: Regenerate.
01917d
+	* libbfd.h: Likewise.
01917d
+	* reloc.c (BFD_RELOC_PPC_REL16DX_HA): New.
01917d
+
01917d
 2015-11-10  H.J. Lu  <hongjiu.lu@intel.com>
01917d
 
01917d
 	* elf32-i386.c (elf_i386_relocate_section): Handle VTINHERIT
01917d
--- a/bfd/bfd-in2.h
01917d
+++ b/bfd/bfd-in2.h
01917d
@@ -3303,6 +3303,7 @@ instruction.  */
01917d
   BFD_RELOC_PPC_VLE_SDAREL_HI16D,
01917d
   BFD_RELOC_PPC_VLE_SDAREL_HA16A,
01917d
   BFD_RELOC_PPC_VLE_SDAREL_HA16D,
01917d
+  BFD_RELOC_PPC_REL16DX_HA,
01917d
   BFD_RELOC_PPC64_HIGHER,
01917d
   BFD_RELOC_PPC64_HIGHER_S,
01917d
   BFD_RELOC_PPC64_HIGHEST,
01917d
--- a/bfd/elf32-ppc.c
01917d
+++ b/bfd/elf32-ppc.c
01917d
@@ -1731,6 +1731,21 @@ static reloc_howto_type ppc_elf_howto_raw[] = {
01917d
 	 0xffff,		/* dst_mask */
01917d
 	 TRUE),			/* pcrel_offset */
01917d
 
01917d
+  /* Like R_PPC_REL16_HA but for split field in addpcis.  */
01917d
+  HOWTO (R_PPC_REL16DX_HA,	/* type */
01917d
+	 16,			/* rightshift */
01917d
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
01917d
+	 16,			/* bitsize */
01917d
+	 TRUE,			/* pc_relative */
01917d
+	 0,			/* bitpos */
01917d
+	 complain_overflow_signed, /* complain_on_overflow */
01917d
+	 ppc_elf_addr16_ha_reloc, /* special_function */
01917d
+	 "R_PPC_REL16DX_HA",	/* name */
01917d
+	 FALSE,			/* partial_inplace */
01917d
+	 0,			/* src_mask */
01917d
+	 0x1fffc1,		/* dst_mask */
01917d
+	 TRUE),			/* pcrel_offset */
01917d
+
01917d
   /* GNU extension to record C++ vtable hierarchy.  */
01917d
   HOWTO (R_PPC_GNU_VTINHERIT,	/* type */
01917d
 	 0,			/* rightshift */
01917d
@@ -1989,6 +2004,7 @@ ppc_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
01917d
     case BFD_RELOC_LO16_PCREL:		r = R_PPC_REL16_LO;		break;
01917d
     case BFD_RELOC_HI16_PCREL:		r = R_PPC_REL16_HI;		break;
01917d
     case BFD_RELOC_HI16_S_PCREL:	r = R_PPC_REL16_HA;		break;
01917d
+    case BFD_RELOC_PPC_REL16DX_HA:	r = R_PPC_REL16DX_HA;		break;
01917d
     case BFD_RELOC_VTABLE_INHERIT:	r = R_PPC_GNU_VTINHERIT;	break;
01917d
     case BFD_RELOC_VTABLE_ENTRY:	r = R_PPC_GNU_VTENTRY;		break;
01917d
     }
01917d
@@ -2058,7 +2074,10 @@ ppc_elf_addr16_ha_reloc (bfd *abfd ATTRIBUTE_UNUSED,
01917d
 			 bfd *output_bfd,
01917d
 			 char **error_message ATTRIBUTE_UNUSED)
01917d
 {
01917d
-  bfd_vma relocation;
01917d
+  enum elf_ppc_reloc_type r_type;
01917d
+  long insn;
01917d
+  bfd_size_type octets;
01917d
+  bfd_vma value;
01917d
 
01917d
   if (output_bfd != NULL)
01917d
     {
01917d
@@ -2066,20 +2085,28 @@ ppc_elf_addr16_ha_reloc (bfd *abfd ATTRIBUTE_UNUSED,
01917d
       return bfd_reloc_ok;
01917d
     }
01917d
 
01917d
-  if (bfd_is_com_section (symbol->section))
01917d
-    relocation = 0;
01917d
-  else
01917d
-    relocation = symbol->value;
01917d
-
01917d
-  relocation += symbol->section->output_section->vma;
01917d
-  relocation += symbol->section->output_offset;
01917d
-  relocation += reloc_entry->addend;
01917d
-  if (reloc_entry->howto->pc_relative)
01917d
-    relocation -= reloc_entry->address;
01917d
-
01917d
-  reloc_entry->addend += (relocation & 0x8000) << 1;
01917d
-
01917d
-  return bfd_reloc_continue;
01917d
+  reloc_entry->addend += 0x8000;
01917d
+  r_type = reloc_entry->howto->type;
01917d
+  if (r_type != R_PPC_REL16DX_HA)
01917d
+    return bfd_reloc_continue;
01917d
+
01917d
+  value = 0;
01917d
+  if (!bfd_is_com_section (symbol->section))
01917d
+    value = symbol->value;
01917d
+  value += (reloc_entry->addend
01917d
+	    + symbol->section->output_offset
01917d
+	    + symbol->section->output_section->vma);
01917d
+  value -= (reloc_entry->address
01917d
+	    + input_section->output_offset
01917d
+	    + input_section->output_section->vma);
01917d
+  value >>= 16;
01917d
+
01917d
+  octets = reloc_entry->address * bfd_octets_per_byte (abfd);
01917d
+  insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
01917d
+  insn &= ~0x1fffc1;
01917d
+  insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
01917d
+  bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
01917d
+  return bfd_reloc_ok;
01917d
 }
01917d
 
01917d
 static bfd_reloc_status_type
01917d
@@ -4247,6 +4274,7 @@ ppc_elf_check_relocs (bfd *abfd,
01917d
 	case R_PPC_REL16_LO:
01917d
 	case R_PPC_REL16_HI:
01917d
 	case R_PPC_REL16_HA:
01917d
+	case R_PPC_REL16DX_HA:
01917d
 	  ppc_elf_tdata (abfd)->has_rel16 = 1;
01917d
 	  break;
01917d
 
01917d
@@ -7604,7 +7632,9 @@ is_insn_ds_form (unsigned int insn)
01917d
 static bfd_boolean
01917d
 is_insn_dq_form (unsigned int insn)
01917d
 {
01917d
-  return (insn & (0x3f << 26)) == 56u << 26; /* lq */
01917d
+  return ((insn & (0x3f << 26)) == 56u << 26 /* lq */
01917d
+	  || ((insn & (0x3f << 26)) == (61u << 26) /* lxv, stxv */
01917d
+	      && (insn & 3) == 1));
01917d
 }
01917d
 
01917d
 /* The RELOCATE_SECTION function is called by the ELF backend linker
01917d
@@ -8605,6 +8635,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
01917d
 	case R_PPC_REL16_LO:
01917d
 	case R_PPC_REL16_HI:
01917d
 	case R_PPC_REL16_HA:
01917d
+	case R_PPC_REL16DX_HA:
01917d
 	  break;
01917d
 
01917d
 	case R_PPC_REL32:
01917d
@@ -9311,6 +9342,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
01917d
 
01917d
 	case R_PPC_ADDR16_HA:
01917d
 	case R_PPC_REL16_HA:
01917d
+	case R_PPC_REL16DX_HA:
01917d
 	case R_PPC_SECTOFF_HA:
01917d
 	case R_PPC_TPREL16_HA:
01917d
 	case R_PPC_DTPREL16_HA:
01917d
@@ -9369,10 +9401,12 @@ ppc_elf_relocate_section (bfd *output_bfd,
01917d
 	      mask = 15;
01917d
 	    else
01917d
 	      break;
01917d
-	    lobit = mask & (relocation + addend);
01917d
+	    relocation += addend;
01917d
+	    addend = insn & mask;
01917d
+	    lobit = mask & relocation;
01917d
 	    if (lobit != 0)
01917d
 	      {
01917d
-		addend -= lobit;
01917d
+		relocation ^= lobit;
01917d
 		info->callbacks->einfo
01917d
 		  (_("%P: %H: error: %s against `%s' not a multiple of %u\n"),
01917d
 		   input_bfd, input_section, rel->r_offset,
01917d
@@ -9380,7 +9414,6 @@ ppc_elf_relocate_section (bfd *output_bfd,
01917d
 		bfd_set_error (bfd_error_bad_value);
01917d
 		ret = FALSE;
01917d
 	      }
01917d
-	    addend += insn & mask;
01917d
 	  }
01917d
 	  break;
01917d
 	}
01917d
@@ -9439,8 +9472,30 @@ ppc_elf_relocate_section (bfd *output_bfd,
01917d
 	    }
01917d
 	}
01917d
 
01917d
-      r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents,
01917d
-				    rel->r_offset, relocation, addend);
01917d
+      if (r_type == R_PPC_REL16DX_HA)
01917d
+	{
01917d
+	  /* Split field reloc isn't handled by _bfd_final_link_relocate.  */
01917d
+	  if (rel->r_offset + 4 > input_section->size)
01917d
+	    r = bfd_reloc_outofrange;
01917d
+	  else
01917d
+	    {
01917d
+	      unsigned int insn;
01917d
+
01917d
+	      relocation += addend;
01917d
+	      relocation -= (rel->r_offset
01917d
+			     + input_section->output_offset
01917d
+			     + input_section->output_section->vma);
01917d
+	      relocation >>= 16;
01917d
+	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
01917d
+	      insn &= ~0x1fffc1;
01917d
+	      insn |= (relocation & 0xffc1) | ((relocation & 0x3e) << 15);
01917d
+	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
01917d
+	      r = bfd_reloc_ok;
01917d
+	    }
01917d
+	}
01917d
+      else
01917d
+	r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents,
01917d
+				      rel->r_offset, relocation, addend);
01917d
 
01917d
       if (r != bfd_reloc_ok)
01917d
 	{
01917d
--- a/bfd/elf64-ppc.c
01917d
+++ b/bfd/elf64-ppc.c
01917d
@@ -2022,6 +2022,21 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
01917d
 	 0xffff,		/* dst_mask */
01917d
 	 TRUE),			/* pcrel_offset */
01917d
 
01917d
+  /* Like R_PPC64_REL16_HA but for split field in addpcis.  */
01917d
+  HOWTO (R_PPC64_REL16DX_HA,	/* type */
01917d
+	 16,			/* rightshift */
01917d
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
01917d
+	 16,			/* bitsize */
01917d
+	 TRUE,			/* pc_relative */
01917d
+	 0,			/* bitpos */
01917d
+	 complain_overflow_signed, /* complain_on_overflow */
01917d
+	 ppc64_elf_ha_reloc,	/* special_function */
01917d
+	 "R_PPC64_REL16DX_HA",	/* name */
01917d
+	 FALSE,			/* partial_inplace */
01917d
+	 0,			/* src_mask */
01917d
+	 0x1fffc1,		/* dst_mask */
01917d
+	 TRUE),			/* pcrel_offset */
01917d
+
01917d
   /* Like R_PPC64_ADDR16_HI, but no overflow.  */
01917d
   HOWTO (R_PPC64_ADDR16_HIGH,	/* type */
01917d
 	 16,			/* rightshift */
01917d
@@ -2412,6 +2427,8 @@ ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
01917d
       break;
01917d
     case BFD_RELOC_HI16_S_PCREL:		r = R_PPC64_REL16_HA;
01917d
       break;
01917d
+    case BFD_RELOC_PPC_REL16DX_HA:		r = R_PPC64_REL16DX_HA;
01917d
+      break;
01917d
     case BFD_RELOC_PPC64_ADDR64_LOCAL:		r = R_PPC64_ADDR64_LOCAL;
01917d
       break;
01917d
     case BFD_RELOC_VTABLE_INHERIT:		r = R_PPC64_GNU_VTINHERIT;
01917d
@@ -2466,6 +2483,11 @@ ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
01917d
 		    void *data, asection *input_section,
01917d
 		    bfd *output_bfd, char **error_message)
01917d
 {
01917d
+  enum elf_ppc64_reloc_type r_type;
01917d
+  long insn;
01917d
+  bfd_size_type octets;
01917d
+  bfd_vma value;
01917d
+
01917d
   /* If this is a relocatable link (output_bfd test tells us), just
01917d
      call the generic function.  Any adjustment will be done at final
01917d
      link time.  */
01917d
@@ -2477,7 +2499,29 @@ ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
01917d
      We won't actually be using the low 16 bits, so trashing them
01917d
      doesn't matter.  */
01917d
   reloc_entry->addend += 0x8000;
01917d
-  return bfd_reloc_continue;
01917d
+  r_type = reloc_entry->howto->type;
01917d
+  if (r_type != R_PPC64_REL16DX_HA)
01917d
+    return bfd_reloc_continue;
01917d
+
01917d
+  value = 0;
01917d
+  if (!bfd_is_com_section (symbol->section))
01917d
+    value = symbol->value;
01917d
+  value += (reloc_entry->addend
01917d
+	    + symbol->section->output_offset
01917d
+	    + symbol->section->output_section->vma);
01917d
+  value -= (reloc_entry->address
01917d
+	    + input_section->output_offset
01917d
+	    + input_section->output_section->vma);
01917d
+  value = (bfd_signed_vma) value >> 16;
01917d
+
01917d
+  octets = reloc_entry->address * bfd_octets_per_byte (abfd);
01917d
+  insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
01917d
+  insn &= ~0x1fffc1;
01917d
+  insn |= (value & 0xffc1) | ((value & 0x3e) << 15);
01917d
+  bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
01917d
+  if (value + 0x8000 > 0xffff)
01917d
+    return bfd_reloc_overflow;
01917d
+  return bfd_reloc_ok;
01917d
 }
01917d
 
01917d
 static bfd_reloc_status_type
01917d
@@ -5502,6 +5546,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
01917d
 	case R_PPC64_REL16_LO:
01917d
 	case R_PPC64_REL16_HI:
01917d
 	case R_PPC64_REL16_HA:
01917d
+	case R_PPC64_REL16DX_HA:
01917d
 	  break;
01917d
 
01917d
 	  /* Not supported as a dynamic relocation.  */
01917d
@@ -14430,6 +14475,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
01917d
 	case R_PPC64_REL16_LO:
01917d
 	case R_PPC64_REL16_HI:
01917d
 	case R_PPC64_REL16_HA:
01917d
+	case R_PPC64_REL16DX_HA:
01917d
 	  break;
01917d
 
01917d
 	case R_PPC64_REL14:
01917d
@@ -14842,6 +14888,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
01917d
 	  break;
01917d
 
01917d
 	case R_PPC64_REL16_HA:
01917d
+	case R_PPC64_REL16DX_HA:
01917d
 	case R_PPC64_ADDR16_HA:
01917d
 	case R_PPC64_ADDR16_HIGHA:
01917d
 	case R_PPC64_ADDR16_HIGHERA:
01917d
@@ -14897,16 +14944,20 @@ ppc64_elf_relocate_section (bfd *output_bfd,
01917d
 	case R_PPC64_DTPREL16_LO_DS:
01917d
 	  insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
01917d
 	  mask = 3;
01917d
-	  /* If this reloc is against an lq insn, then the value must be
01917d
-	     a multiple of 16.  This is somewhat of a hack, but the
01917d
-	     "correct" way to do this by defining _DQ forms of all the
01917d
-	     _DS relocs bloats all reloc switches in this file.  It
01917d
-	     doesn't seem to make much sense to use any of these relocs
01917d
-	     in data, so testing the insn should be safe.  */
01917d
-	  if ((insn & (0x3f << 26)) == (56u << 26))
01917d
+	  /* If this reloc is against an lq, lxv, or stxv insn, then
01917d
+	     the value must be a multiple of 16.  This is somewhat of
01917d
+	     a hack, but the "correct" way to do this by defining _DQ
01917d
+	     forms of all the _DS relocs bloats all reloc switches in
01917d
+	     this file.  It doesn't make much sense to use these
01917d
+	     relocs in data, so testing the insn should be safe.  */
01917d
+	  if ((insn & (0x3f << 26)) == (56u << 26)
01917d
+	      || ((insn & (0x3f << 26)) == (61u << 26) && (insn & 3) == 1))
01917d
 	    mask = 15;
01917d
-	  if (((relocation + addend) & mask) != 0)
01917d
+	  relocation += addend;
01917d
+	  addend = insn & (mask ^ 3);
01917d
+	  if ((relocation & mask) != 0)
01917d
 	    {
01917d
+	      relocation ^= relocation & mask;
01917d
 	      info->callbacks->einfo
01917d
 		(_("%P: %H: error: %s not a multiple of %u\n"),
01917d
 		 input_bfd, input_section, rel->r_offset,
01917d
@@ -14964,8 +15015,30 @@ ppc64_elf_relocate_section (bfd *output_bfd,
01917d
 	    }
01917d
 	}
01917d
 
01917d
-      r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents,
01917d
-				    rel->r_offset, relocation, addend);
01917d
+      if (r_type == R_PPC64_REL16DX_HA)
01917d
+	{
01917d
+	  /* Split field reloc isn't handled by _bfd_final_link_relocate.  */
01917d
+	  if (rel->r_offset + 4 > input_section->size)
01917d
+	    r = bfd_reloc_outofrange;
01917d
+	  else
01917d
+	    {
01917d
+	      relocation += addend;
01917d
+	      relocation -= (rel->r_offset
01917d
+			     + input_section->output_offset
01917d
+			     + input_section->output_section->vma);
01917d
+	      relocation = (bfd_signed_vma) relocation >> 16;
01917d
+	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
01917d
+	      insn &= ~0x1fffc1;
01917d
+	      insn |= (relocation & 0xffc1) | ((relocation & 0x3e) << 15);
01917d
+	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
01917d
+	      r = bfd_reloc_ok;
01917d
+	      if (relocation + 0x8000 > 0xffff)
01917d
+		r = bfd_reloc_overflow;
01917d
+	    }
01917d
+	}
01917d
+      else
01917d
+	r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents,
01917d
+				      rel->r_offset, relocation, addend);
01917d
 
01917d
       if (r != bfd_reloc_ok)
01917d
 	{
01917d
--- a/bfd/libbfd.h
01917d
+++ b/bfd/libbfd.h
01917d
@@ -1391,6 +1391,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
01917d
   "BFD_RELOC_PPC_VLE_SDAREL_HI16D",
01917d
   "BFD_RELOC_PPC_VLE_SDAREL_HA16A",
01917d
   "BFD_RELOC_PPC_VLE_SDAREL_HA16D",
01917d
+  "BFD_RELOC_PPC_REL16DX_HA",
01917d
   "BFD_RELOC_PPC64_HIGHER",
01917d
   "BFD_RELOC_PPC64_HIGHER_S",
01917d
   "BFD_RELOC_PPC64_HIGHEST",
01917d
--- a/bfd/reloc.c
01917d
+++ b/bfd/reloc.c
01917d
@@ -2890,6 +2890,8 @@ ENUMX
01917d
 ENUMX
01917d
   BFD_RELOC_PPC_VLE_SDAREL_HA16D
01917d
 ENUMX
01917d
+  BFD_RELOC_PPC_REL16DX_HA
01917d
+ENUMX
01917d
   BFD_RELOC_PPC64_HIGHER
01917d
 ENUMX
01917d
   BFD_RELOC_PPC64_HIGHER_S
01917d
### a/include/elf/ChangeLog
01917d
### b/include/elf/ChangeLog
01917d
## -1,3 +1,9 @@
01917d
+2015-11-11  Alan Modra  <amodra@gmail.com>
01917d
+	    Peter Bergner <bergner@vnet.ibm.com>
01917d
+
01917d
+	* ppc.h (R_PPC_REL16DX_HA): New reloction.
01917d
+	* ppc64.h (R_PPC64_REL16DX_HA): Likewise.
01917d
+
01917d
 2015-10-28  Cupertino Miranda  <cmiranda@synopsys.com>
01917d
 
01917d
 	* arc-reloc.def (ARC_32_PCREL): New definition.
01917d
--- a/include/elf/ppc.h
01917d
+++ b/include/elf/ppc.h
01917d
@@ -149,6 +149,9 @@ START_RELOC_NUMBERS (elf_ppc_reloc_type)
01917d
   RELOC_NUMBER (R_PPC_VLE_SDAREL_HA16A,	231)
01917d
   RELOC_NUMBER (R_PPC_VLE_SDAREL_HA16D,	232)
01917d
 
01917d
+/* Power9 split rel16 for addpcis.  */
01917d
+  RELOC_NUMBER (R_PPC_REL16DX_HA,	246)
01917d
+
01917d
 /* Support STT_GNU_IFUNC plt calls.  */
01917d
   RELOC_NUMBER (R_PPC_IRELATIVE,	248)
01917d
 
01917d
--- a/include/elf/ppc64.h
01917d
+++ b/include/elf/ppc64.h
01917d
@@ -157,6 +157,10 @@ START_RELOC_NUMBERS (elf_ppc64_reloc_type)
01917d
 /* Fake relocation only used internally by ld.  */
01917d
   RELOC_NUMBER (R_PPC64_LO_DS_OPT,	   128)
01917d
 #endif
01917d
+
01917d
+/* Power9 split rel16 for addpcis.  */
01917d
+  RELOC_NUMBER (R_PPC64_REL16DX_HA,	   246)
01917d
+
01917d
 /* Support STT_GNU_IFUNC plt calls.  */
01917d
   RELOC_NUMBER (R_PPC64_JMP_IREL,	   247)
01917d
   RELOC_NUMBER (R_PPC64_IRELATIVE,	   248)
01917d
### a/include/opcode/ChangeLog
01917d
### b/include/opcode/ChangeLog
01917d
## -1,3 +1,9 @@
01917d
+2015-11-11  Alan Modra  <amodra@gmail.com>
01917d
+	    Peter Bergner <bergner@vnet.ibm.com>
01917d
+
01917d
+	* ppc.h (PPC_OPCODE_POWER9): New define.
01917d
+	(PPC_OPCODE_VSX3): Likewise.
01917d
+
01917d
 2015-11-02  Nick Clifton  <nickc@redhat.com>
01917d
 
01917d
 	* rx.h (enum RX_Opcode_ID): Add more NOP opcodes.
01917d
--- a/include/opcode/ppc.h
01917d
+++ b/include/opcode/ppc.h
01917d
@@ -204,6 +204,12 @@ extern const int vle_num_opcodes;
01917d
 /* Opcode is supported by ppc821/850/860.  */
01917d
 #define PPC_OPCODE_860	      0x10000000000ull
01917d
 
01917d
+/* Opcode is only supported by Power9 architecture.  */
01917d
+#define PPC_OPCODE_POWER9     0x20000000000ull
01917d
+
01917d
+/* Opcode is supported by Vector-Scalar (VSX) Unit from ISA 2.08.  */
01917d
+#define PPC_OPCODE_VSX3       0x40000000000ull
01917d
+
01917d
 /* A macro to extract the major opcode from an instruction.  */
01917d
 #define PPC_OP(i) (((i) >> 26) & 0x3f)
01917d
 
01917d
### a/opcodes/ChangeLog
01917d
### b/opcodes/ChangeLog
01917d
## -1,3 +1,54 @@
01917d
+2015-11-11  Alan Modra  <amodra@gmail.com>
01917d
+	    Peter Bergner <bergner@vnet.ibm.com>
01917d
+
01917d
+	* ppc-dis.c (ppc_opts): Add "power9" and "pwr9" entries.
01917d
+	Add PPC_OPCODE_VSX3 to the vsx entry.
01917d
+	(powerpc_init_dialect): Set default dialect to power9.
01917d
+	* ppc-opc.c (insert_dcmxs, extract_dcmxs, insert_dxd, extract_dxd,
01917d
+	insert_dxdn, extract_dxdn, insert_l0, extract_l0, insert_l1,
01917d
+	extract_l1 insert_xtq6, extract_xtq6): New static functions.
01917d
+	(insert_esync): Test for illegal L operand value.
01917d
+	(DCMX, DCMXS, DXD, NDXD, L0, L1, RC, FC, UIM6, X_R, RIC, PRS, XSQ6,
01917d
+	XTQ6, LRAND, IMM8, DQX, DQX_MASK, DX, DX_MASK, VXVAPS_MASK, VXVA,XVA,
01917d
+	XX2VA, XVARC, XBF_MASK, XX2UIM4_MASK, XX2BFD_MASK, XX2DCMXS_MASK,
01917d
+	XVA_MASK, XRLA_MASK, XBFRARB_MASK, XLRAND_MASK, POWER9, PPCVEC3,
01917d
+	PPCVSX3): New defines.
01917d
+	(powerpc_opcodes) 
01917d
+	fcmpo, ftdiv, ftsqrt>: Use XBF_MASK.
01917d
+	<mcrxr>: Use XBFRARB_MASK.
01917d
+	
01917d
+	bcdctz., bcds., bcdsetsgn., bcdsr., bcdtrunc., bcdus., bcdutrunc.,
01917d
+	cmpeqb, cmprb, cnttzd, cnttzd., cnttzw, cnttzw., copy, copy_first,
01917d
+	cp_abort, darn, dtstsfi, dtstsfiq, extswsli, extswsli., ldat, ldmx,
01917d
+	lwat, lxsd, lxsibzx, lxsihzx, lxssp, lxv, lxvb16x, lxvh8x, lxvl, lxvll,
01917d
+	lxvwsx, lxvx, maddhd, maddhdu, maddld, mcrxrx, mfvsrld, modsd, modsw,
01917d
+	modud, moduw, msgsync, mtvsrdd, mtvsrws, paste, paste., paste_last,
01917d
+	rmieg, setb, slbieg, slbsync, stdat, stop, stwat, stxsd, stxsibx,
01917d
+	stxsihx, stxssp, stxv, stxvb16x, stxvh8x, stxvl, stxvll, stxvx,
01917d
+	subpcis, urfid, vbpermd, vclzlsbb, vcmpneb, vcmpneb., vcmpneh,
01917d
+	vcmpneh., vcmpnew, vcmpnew., vcmpnezb, vcmpnezb., vcmpnezh, vcmpnezh.,
01917d
+	vcmpnezw, vcmpnezw., vctzb, vctzd, vctzh, vctzlsbb, vctzw, vextractd,
01917d
+	vextractub, vextractuh, vextractuw, vextsb2d, vextsb2w, vextsh2d,
01917d
+	vextsh2w, vextsw2d, vextublx, vextubrx, vextuhlx, vextuhrx, vextuwlx,
01917d
+	vextuwrx, vinsertb, vinsertd, vinserth, vinsertw, vmul10cuq,
01917d
+	vmul10ecuq, vmul10euq, vmul10uq, vnegd, vnegw, vpermr, vprtybd,
01917d
+	vprtybq, vprtybw, vrldmi, vrldnm, vrlwmi, vrlwnm, vslv, vsrv, wait,
01917d
+	xsabsqp, xsaddqp, xsaddqpo, xscmpeqdp, xscmpexpdp, xscmpexpqp,
01917d
+	xscmpgedp, xscmpgtdp, xscmpnedp, xscmpoqp, xscmpuqp, xscpsgnqp,
01917d
+	xscvdphp, xscvdpqp, xscvhpdp, xscvqpdp, xscvqpdpo, xscvqpsdz,
01917d
+	xscvqpswz, xscvqpudz, xscvqpuwz, xscvsdqp, xscvudqp, xsdivqp,
01917d
+	xsdivqpo, xsiexpdp, xsiexpqp, xsmaddqp, xsmaddqpo, xsmaxcdp,
01917d
+	xsmaxjdp, xsmincdp, xsminjdp, xsmsubqp, xsmsubqpo, xsmulqp, xsmulqpo,
01917d
+	xsnabsqp, xsnegqp, xsnmaddqp, xsnmaddqpo, xsnmsubqp, xsnmsubqpo,
01917d
+	xsrqpi, xsrqpix, xsrqpxp, xssqrtqp, xssqrtqpo, xssubqp, xssubqpo,
01917d
+	xststdcdp, xststdcqp, xststdcsp, xsxexpdp, xsxexpqp, xsxsigdp,
01917d
+	xsxsigqp, xvcmpnedp, xvcmpnedp., xvcmpnesp, xvcmpnesp., xvcvhpsp,
01917d
+	xvcvsphp, xviexpdp, xviexpsp, xvtstdcdp, xvtstdcsp, xvxexpdp,
01917d
+	xvxexpsp, xvxsigdp, xvxsigsp, xxbrd, xxbrh, xxbrq, xxbrw, xxextractuw,
01917d
+	xxinsertw, xxperm, xxpermr, xxspltib>: New instructions.
01917d
+	<doze, nap, sleep, rvwinkle, waitasec, lxvx, stxvx>: Disable on POWER9.
01917d
+	<tlbiel, tlbie, sync, slbmfev, slbmfee>: Add additional operands.
01917d
+
01917d
 2015-11-02  Nick Clifton  <nickc@redhat.com>
01917d
 
01917d
 	* rx-decode.opc (rx_decode_opcode): Decode extra NOP
01917d
--- a/opcodes/ppc-dis.c
01917d
+++ b/opcodes/ppc-dis.c
01917d
@@ -157,6 +157,12 @@ struct ppc_mopt ppc_opts[] = {
01917d
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_HTM
01917d
 		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_ALTIVEC2 | PPC_OPCODE_VSX),
01917d
     0 },
01917d
+  { "power9",  (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
01917d
+		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
01917d
+		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9
01917d
+		| PPC_OPCODE_HTM | PPC_OPCODE_ALTIVEC | PPC_OPCODE_ALTIVEC2
01917d
+		| PPC_OPCODE_VSX | PPC_OPCODE_VSX3 ),
01917d
+    0 },
01917d
   { "ppc",     (PPC_OPCODE_PPC),
01917d
     0 },
01917d
   { "ppc32",   (PPC_OPCODE_PPC),
01917d
@@ -191,6 +197,12 @@ struct ppc_mopt ppc_opts[] = {
01917d
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_HTM
01917d
 		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_ALTIVEC2 | PPC_OPCODE_VSX),
01917d
     0 },
01917d
+  { "pwr9",    (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
01917d
+		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
01917d
+		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9
01917d
+		| PPC_OPCODE_HTM | PPC_OPCODE_ALTIVEC | PPC_OPCODE_ALTIVEC2
01917d
+		| PPC_OPCODE_VSX | PPC_OPCODE_VSX3 ),
01917d
+    0 },
01917d
   { "pwrx",    (PPC_OPCODE_POWER | PPC_OPCODE_POWER2),
01917d
     0 },
01917d
   { "spe",     (PPC_OPCODE_PPC | PPC_OPCODE_EFS),
01917d
@@ -201,7 +213,7 @@ struct ppc_mopt ppc_opts[] = {
01917d
   { "vle",     (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_VLE),
01917d
     PPC_OPCODE_VLE },
01917d
   { "vsx",     (PPC_OPCODE_PPC),
01917d
-    PPC_OPCODE_VSX },
01917d
+    PPC_OPCODE_VSX | PPC_OPCODE_VSX3 },
01917d
   { "htm",     (PPC_OPCODE_PPC),
01917d
     PPC_OPCODE_HTM },
01917d
 };
01917d
@@ -303,7 +315,7 @@ powerpc_init_dialect (struct disassemble_info *info)
01917d
       dialect = ppc_parse_cpu (dialect, &sticky, "vle");
01917d
       break;
01917d
     default:
01917d
-      dialect = ppc_parse_cpu (dialect, &sticky, "power8") | PPC_OPCODE_ANY;
01917d
+      dialect = ppc_parse_cpu (dialect, &sticky, "power9") | PPC_OPCODE_ANY;
01917d
     }
01917d
 
01917d
   arg = info->disassembler_options;
01917d
--- a/opcodes/ppc-opc.c
01917d
+++ b/opcodes/ppc-opc.c
01917d
@@ -54,8 +54,18 @@ static long extract_bo (unsigned long, ppc_cpu_t, int *);
01917d
 static unsigned long insert_boe (unsigned long, long, ppc_cpu_t, const char **);
01917d
 static long extract_boe (unsigned long, ppc_cpu_t, int *);
01917d
 static unsigned long insert_esync (unsigned long, long, ppc_cpu_t, const char **);
01917d
+static unsigned long insert_dcmxs (unsigned long, long, ppc_cpu_t, const char **);
01917d
+static long extract_dcmxs (unsigned long, ppc_cpu_t, int *);
01917d
+static unsigned long insert_dxd (unsigned long, long, ppc_cpu_t, const char **);
01917d
+static long extract_dxd (unsigned long, ppc_cpu_t, int *);
01917d
+static unsigned long insert_dxdn (unsigned long, long, ppc_cpu_t, const char **);
01917d
+static long extract_dxdn (unsigned long, ppc_cpu_t, int *);
01917d
 static unsigned long insert_fxm (unsigned long, long, ppc_cpu_t, const char **);
01917d
 static long extract_fxm (unsigned long, ppc_cpu_t, int *);
01917d
+static unsigned long insert_l0 (unsigned long, long, ppc_cpu_t, const char **);
01917d
+static long extract_l0 (unsigned long, ppc_cpu_t, int *);
01917d
+static unsigned long insert_l1 (unsigned long, long, ppc_cpu_t, const char **);
01917d
+static long extract_l1 (unsigned long, ppc_cpu_t, int *);
01917d
 static unsigned long insert_li20 (unsigned long, long, ppc_cpu_t, const char **);
01917d
 static long extract_li20 (unsigned long, ppc_cpu_t, int *);
01917d
 static unsigned long insert_ls (unsigned long, long, ppc_cpu_t, const char **);
01917d
@@ -98,6 +108,8 @@ static unsigned long insert_tbr (unsigned long, long, ppc_cpu_t, const char **);
01917d
 static long extract_tbr (unsigned long, ppc_cpu_t, int *);
01917d
 static unsigned long insert_xt6 (unsigned long, long, ppc_cpu_t, const char **);
01917d
 static long extract_xt6 (unsigned long, ppc_cpu_t, int *);
01917d
+static unsigned long insert_xtq6 (unsigned long, long, ppc_cpu_t, const char **);
01917d
+static long extract_xtq6 (unsigned long, ppc_cpu_t, int *);
01917d
 static unsigned long insert_xa6 (unsigned long, long, ppc_cpu_t, const char **);
01917d
 static long extract_xa6 (unsigned long, ppc_cpu_t, int *);
01917d
 static unsigned long insert_xb6 (unsigned long, long, ppc_cpu_t, const char **);
01917d
@@ -302,9 +314,17 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define D8 D + 1
01917d
   { 0xff, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
01917d
 
01917d
+  /* The DCMX field in an X form instruction.  */
01917d
+#define DCMX D8 + 1
01917d
+  { 0x7f, 16, NULL, NULL, 0 },
01917d
+
01917d
+  /* The split DCMX field in an X form instruction.  */
01917d
+#define DCMXS DCMX + 1
01917d
+  { 0x7f, PPC_OPSHIFT_INV, insert_dcmxs, extract_dcmxs, 0 },
01917d
+
01917d
   /* The DQ field in a DQ form instruction.  This is like D, but the
01917d
      lower four bits are forced to zero. */
01917d
-#define DQ D8 + 1
01917d
+#define DQ DCMXS + 1
01917d
   { 0xfff0, 0, NULL, NULL,
01917d
     PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DQ },
01917d
 
01917d
@@ -320,10 +340,21 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define BHRBE DUIS
01917d
   { 0x3ff, 11, NULL, NULL, 0 },
01917d
 
01917d
+  /* The split D field in a DX form instruction.  */
01917d
+#define DXD DUIS + 1
01917d
+  { 0xffff, PPC_OPSHIFT_INV, insert_dxd, extract_dxd,
01917d
+    PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT},
01917d
+
01917d
+  /* The split ND field in a DX form instruction.
01917d
+     This is the same as the DX field, only negated.  */
01917d
+#define NDXD DXD + 1
01917d
+  { 0xffff, PPC_OPSHIFT_INV, insert_dxdn, extract_dxdn,
01917d
+    PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT},
01917d
+
01917d
   /* The E field in a wrteei instruction.  */
01917d
   /* And the W bit in the pair singles instructions.  */
01917d
   /* And the ST field in a VX form instruction.  */
01917d
-#define E DUIS + 1
01917d
+#define E NDXD + 1
01917d
 #define PSW E
01917d
 #define ST E
01917d
   { 0x1, 15, NULL, NULL, 0 },
01917d
@@ -397,8 +428,16 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define HTM_R L
01917d
   { 0x1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
01917d
 
01917d
+  /* The L field in an X form instruction which must be zero.  */
01917d
+#define L0 L + 1
01917d
+  { 0x1, 21, insert_l0, extract_l0, PPC_OPERAND_OPTIONAL },
01917d
+
01917d
+  /* The L field in an X form instruction which must be one.  */
01917d
+#define L1 L0 + 1
01917d
+  { 0x1, 21, insert_l1, extract_l1, 0 },
01917d
+
01917d
   /* The LEV field in a POWER SVC form instruction.  */
01917d
-#define SVC_LEV L + 1
01917d
+#define SVC_LEV L1 + 1
01917d
   { 0x7f, 5, NULL, NULL, 0 },
01917d
 
01917d
   /* The LEV field in an SC form instruction.  */
01917d
@@ -513,10 +552,14 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define RBOPT RBX + 1
01917d
   { 0x1f, 11, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
01917d
 
01917d
+  /* The RC register field in an maddld, maddhd or maddhdu instruction.  */
01917d
+#define RC RBOPT + 1
01917d
+  { 0x1f, 6, NULL, NULL, PPC_OPERAND_GPR },
01917d
+
01917d
   /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
01917d
      instruction or the RT field in a D, DS, X, XFX or XO form
01917d
      instruction.  */
01917d
-#define RS RBOPT + 1
01917d
+#define RS RC + 1
01917d
 #define RT RS
01917d
 #define RT_MASK (0x1f << 21)
01917d
 #define RD RS
01917d
@@ -577,6 +620,8 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define SH_MASK (0x1f << 11)
01917d
   /* The other UIMM field in a EVX form instruction.  */
01917d
 #define EVUIMM SH
01917d
+  /* The FC field in an atomic X form instruction.  */
01917d
+#define FC SH
01917d
   { 0x1f, 11, NULL, NULL, 0 },
01917d
 
01917d
   /* The SI field in a HTM X form instruction.  */
01917d
@@ -705,8 +750,12 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define UIMM3 UIMM + 1
01917d
   { 0x7, 16, NULL, NULL, 0 },
01917d
 
01917d
+  /* The 6-bit UIM field in a X form instruction.  */
01917d
+#define UIM6 UIMM3 + 1
01917d
+  { 0x3f, 16, NULL, NULL, 0 },
01917d
+
01917d
   /* The SIX field in a VX form instruction.  */
01917d
-#define SIX UIMM3 + 1
01917d
+#define SIX UIM6 + 1
01917d
   { 0xf, 11, NULL, NULL, 0 },
01917d
 
01917d
   /* The PS field in a VX form instruction.  */
01917d
@@ -752,9 +801,10 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define PSD PSQM + 1
01917d
   {  0xfff, 0, 0, 0,  PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
01917d
 
01917d
-  /* The L field in an mtmsrd or A form instruction or W in an X form.  */
01917d
+  /* The L field in an mtmsrd or A form instruction or R or W in an X form.  */
01917d
 #define A_L PSD + 1
01917d
 #define W A_L
01917d
+#define X_R A_L
01917d
   { 0x1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
01917d
 
01917d
 #define RMC A_L + 1
01917d
@@ -763,7 +813,13 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define R RMC + 1
01917d
   { 0x1, 16, NULL, NULL, 0 },
01917d
 
01917d
-#define SP R + 1
01917d
+#define RIC R + 1
01917d
+  { 0x3, 18, NULL, NULL, PPC_OPERAND_OPTIONAL },
01917d
+
01917d
+#define PRS RIC + 1
01917d
+  { 0x1, 17, NULL, NULL, PPC_OPERAND_OPTIONAL },
01917d
+
01917d
+#define SP PRS + 1
01917d
   { 0x3, 19, NULL, NULL, 0 },
01917d
 
01917d
 #define S SP + 1
01917d
@@ -838,8 +894,13 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define XT6 XS6
01917d
   { 0x3f, PPC_OPSHIFT_INV, insert_xt6, extract_xt6, PPC_OPERAND_VSR },
01917d
 
01917d
+  /* The XT and XS fields in an DQ form VSX instruction.  This is split.  */
01917d
+#define XSQ6 XT6 + 1
01917d
+#define XTQ6 XSQ6
01917d
+  { 0x3f, PPC_OPSHIFT_INV, insert_xtq6, extract_xtq6, PPC_OPERAND_VSR },
01917d
+
01917d
   /* The XA field in an XX3 form instruction.  This is split.  */
01917d
-#define XA6 XT6 + 1
01917d
+#define XA6 XTQ6 + 1
01917d
   { 0x3f, PPC_OPSHIFT_INV, insert_xa6, extract_xa6, PPC_OPERAND_VSR },
01917d
 
01917d
   /* The XB field in an XX2 or XX3 form instruction.  This is split.  */
01917d
@@ -869,6 +930,8 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 #define UIM DMEX + 1
01917d
   /* The 2-bit UIMM field in a VX form instruction.  */
01917d
 #define UIMM2 UIM
01917d
+  /* The 2-bit L field in a darn instruction.  */
01917d
+#define LRAND UIM
01917d
   { 0x3, 16, NULL, NULL, 0 },
01917d
 
01917d
 #define ERAT_T UIM + 1
01917d
@@ -876,6 +939,10 @@ const struct powerpc_operand powerpc_operands[] =
01917d
 
01917d
 #define IH ERAT_T + 1
01917d
   { 0x7, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
01917d
+
01917d
+  /* The 8-bit IMM8 field in a XX1 form instruction.  */
01917d
+#define IMM8 IH + 1
01917d
+  { 0xff, 11, NULL, NULL, 0 },
01917d
 };
01917d
 
01917d
 const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
01917d
@@ -1272,6 +1339,64 @@ extract_boe (unsigned long insn,
01917d
   return value & 0x1e;
01917d
 }
01917d
 
01917d
+/* The DCMX field in a X form instruction when the field is split
01917d
+   into separate DC, DM and DX fields.  */
01917d
+
01917d
+static unsigned long
01917d
+insert_dcmxs (unsigned long insn,
01917d
+	    long value,
01917d
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	    const char **errmsg ATTRIBUTE_UNUSED)
01917d
+{
01917d
+  return insn | ((value & 0x1f) << 16) | ((value & 0x20) >> 3) | (value & 0x40);
01917d
+}
01917d
+
01917d
+static long
01917d
+extract_dcmxs (unsigned long insn,
01917d
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	     int *invalid ATTRIBUTE_UNUSED)
01917d
+{
01917d
+  return (insn & 0x40) | ((insn << 3) & 0x20) | ((insn >> 16) & 0x1f);
01917d
+}
01917d
+
01917d
+/* The D field in a DX form instruction when the field is split
01917d
+   into separate D0, D1 and D2 fields.  */
01917d
+
01917d
+static unsigned long
01917d
+insert_dxd (unsigned long insn,
01917d
+	    long value,
01917d
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	    const char **errmsg ATTRIBUTE_UNUSED)
01917d
+{
01917d
+  return insn | (value & 0xffc1) | ((value & 0x3e) << 15);
01917d
+}
01917d
+
01917d
+static long
01917d
+extract_dxd (unsigned long insn,
01917d
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	     int *invalid ATTRIBUTE_UNUSED)
01917d
+{
01917d
+  unsigned long dxd = (insn & 0xffc1) | ((insn >> 15) & 0x3e);
01917d
+  return (dxd ^ 0x8000) - 0x8000;
01917d
+}
01917d
+
01917d
+static unsigned long
01917d
+insert_dxdn (unsigned long insn,
01917d
+	    long value,
01917d
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	    const char **errmsg ATTRIBUTE_UNUSED)
01917d
+{
01917d
+  return insert_dxd (insn, -value, dialect, errmsg);
01917d
+}
01917d
+
01917d
+static long
01917d
+extract_dxdn (unsigned long insn,
01917d
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	     int *invalid ATTRIBUTE_UNUSED)
01917d
+{
01917d
+  return -extract_dxd (insn, dialect, invalid);
01917d
+}
01917d
+
01917d
 /* FXM mask in mfcr and mtcrf instructions.  */
01917d
 
01917d
 static unsigned long
01917d
@@ -1343,6 +1468,58 @@ extract_fxm (unsigned long insn,
01917d
   return mask;
01917d
 }
01917d
 
01917d
+/* The L field in an X form instruction which must have the value zero.  */
01917d
+
01917d
+static unsigned long
01917d
+insert_l0 (unsigned long insn,
01917d
+	   long value,
01917d
+	   ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	   const char **errmsg)
01917d
+{
01917d
+  if (value != 0)
01917d
+    *errmsg = _("invalid operand constant");
01917d
+  return insn & ~(0x1 << 21);
01917d
+}
01917d
+
01917d
+static long
01917d
+extract_l0 (unsigned long insn,
01917d
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	    int *invalid)
01917d
+{
01917d
+  long value;
01917d
+
01917d
+  value = (insn >> 21) & 0x1;
01917d
+  if (value != 0)
01917d
+    *invalid = 1;
01917d
+  return value;
01917d
+}
01917d
+
01917d
+/* The L field in an X form instruction which must have the value one.  */
01917d
+
01917d
+static unsigned long
01917d
+insert_l1 (unsigned long insn,
01917d
+	   long value,
01917d
+	   ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	   const char **errmsg)
01917d
+{
01917d
+  if (value != 1)
01917d
+    *errmsg = _("invalid operand constant");
01917d
+  return insn | (0x1 << 21);
01917d
+}
01917d
+
01917d
+static long
01917d
+extract_l1 (unsigned long insn,
01917d
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	    int *invalid)
01917d
+{
01917d
+  long value;
01917d
+
01917d
+  value = (insn >> 21) & 0x1;
01917d
+  if (value != 1)
01917d
+    *invalid = 1;
01917d
+  return value;
01917d
+}
01917d
+
01917d
 static unsigned long
01917d
 insert_li20 (unsigned long insn,
01917d
 	     long value,
01917d
@@ -1398,16 +1575,16 @@ insert_ls (unsigned long insn,
01917d
 static unsigned long
01917d
 insert_esync (unsigned long insn,
01917d
 	      long value,
01917d
-	      ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	      ppc_cpu_t dialect,
01917d
 	      const char **errmsg)
01917d
 {
01917d
-  unsigned long ls;
01917d
+  unsigned long ls = (insn >> 21) & 0x03;
01917d
 
01917d
-  ls = (insn >> 21) & 0x03;
01917d
   if (value == 0)
01917d
     {
01917d
-      if (ls > 1)
01917d
-	*errmsg = _("illegal L operand value");
01917d
+      if (((dialect & PPC_OPCODE_E6500) != 0 && ls > 1)
01917d
+	  || ((dialect & PPC_OPCODE_POWER9) != 0 && ls > 2))
01917d
+        *errmsg = _("illegal L operand value");
01917d
       return insn;
01917d
     }
01917d
 
01917d
@@ -1945,6 +2122,24 @@ extract_xt6 (unsigned long insn,
01917d
   return ((insn << 5) & 0x20) | ((insn >> 21) & 0x1f);
01917d
 }
01917d
 
01917d
+/* The XT and XS fields in an DQ form VSX instruction.  This is split.  */
01917d
+static unsigned long
01917d
+insert_xtq6 (unsigned long insn,
01917d
+	    long value,
01917d
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	    const char **errmsg ATTRIBUTE_UNUSED)
01917d
+{
01917d
+  return insn | ((value & 0x1f) << 21) | ((value & 0x20) >> 2);
01917d
+}
01917d
+
01917d
+static long
01917d
+extract_xtq6 (unsigned long insn,
01917d
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
01917d
+	     int *invalid ATTRIBUTE_UNUSED)
01917d
+{
01917d
+  return ((insn << 2) & 0x20) | ((insn >> 21) & 0x1f);
01917d
+}
01917d
+
01917d
 /* The XA field in an XX3 form instruction.  This is split.  */
01917d
 
01917d
 static unsigned long
01917d
@@ -2258,10 +2453,18 @@ extract_vleil (unsigned long insn,
01917d
 /* The main opcode mask with the RA field clear.  */
01917d
 #define DRA_MASK (OP_MASK | RA_MASK)
01917d
 
01917d
+/* A DQ form VSX instruction.  */
01917d
+#define DQX(op, xop) (OP (op) | ((xop) & 0x7))
01917d
+#define DQX_MASK DQX (0x3f, 7)
01917d
+
01917d
 /* A DS form instruction.  */
01917d
 #define DSO(op, xop) (OP (op) | ((xop) & 0x3))
01917d
 #define DS_MASK DSO (0x3f, 3)
01917d
 
01917d
+/* An DX form instruction.  */
01917d
+#define DX(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1))
01917d
+#define DX_MASK DX (0x3f, 0x1f)
01917d
+
01917d
 /* An EVSEL form instruction.  */
01917d
 #define EVSEL(op, xop) (OP (op) | (((unsigned long)(xop)) & 0xff) << 3)
01917d
 #define EVSEL_MASK EVSEL(0x3f, 0xff)
01917d
@@ -2374,6 +2577,9 @@ extract_vleil (unsigned long insn,
01917d
 /* A VX_MASK with a PS field.  */
01917d
 #define VXPS_MASK (VX_MASK & ~(0x1 << 9))
01917d
 
01917d
+/* A VX_MASK with the VA field fixed with a PS field.  */
01917d
+#define VXVAPS_MASK ((VX_MASK | (0x1f << 16)) & ~(0x1 << 9))
01917d
+
01917d
 /* A VA form instruction.  */
01917d
 #define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))
01917d
 
01917d
@@ -2389,9 +2595,15 @@ extract_vleil (unsigned long insn,
01917d
 /* The mask for a VXR form instruction.  */
01917d
 #define VXR_MASK VXR(0x3f, 0x3ff, 1)
01917d
 
01917d
+/* A VX form instruction with a VA tertiary opcode.  */
01917d
+#define VXVA(op, xop, vaop) (VX(op,xop) | (((vaop) & 0x1f) << 16))
01917d
+
01917d
 /* An X form instruction.  */
01917d
 #define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
01917d
 
01917d
+/* A X form instruction for Quad-Precision FP Instructions.  */
01917d
+#define XVA(op, xop, vaop) (X(op,xop) | (((vaop) & 0x1f) << 16))
01917d
+
01917d
 /* An EX form instruction.  */
01917d
 #define EX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7ff))
01917d
 
01917d
@@ -2401,6 +2613,9 @@ extract_vleil (unsigned long insn,
01917d
 /* An XX2 form instruction.  */
01917d
 #define XX2(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 2))
01917d
 
01917d
+/* A XX2 form instruction with the VA bits specified.  */
01917d
+#define XX2VA(op, xop, vaop) (XX2(op,xop) | (((vaop) & 0x1f) << 16))
01917d
+
01917d
 /* An XX3 form instruction.  */
01917d
 #define XX3(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0xff) << 3))
01917d
 
01917d
@@ -2416,12 +2631,18 @@ extract_vleil (unsigned long insn,
01917d
 /* An X form instruction with the RC bit specified.  */
01917d
 #define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
01917d
 
01917d
+/* A X form instruction for Quad-Precision FP Instructions with RC bit.  */
01917d
+#define XVARC(op, xop, vaop, rc) (XVA ((op), (xop), (vaop)) | ((rc) & 1))
01917d
+
01917d
 /* A Z form instruction with the RC bit specified.  */
01917d
 #define ZRC(op, xop, rc) (Z ((op), (xop)) | ((rc) & 1))
01917d
 
01917d
 /* The mask for an X form instruction.  */
01917d
 #define X_MASK XRC (0x3f, 0x3ff, 1)
01917d
 
01917d
+/* The mask for an X form instruction with the BF bits specified.  */
01917d
+#define XBF_MASK (X_MASK | (3 << 21))
01917d
+
01917d
 /* An X form wait instruction with everything filled in except the WC field.  */
01917d
 #define XWC_MASK (XRC (0x3f, 0x3ff, 1) | (7 << 23) | RA_MASK | RB_MASK)
01917d
 
01917d
@@ -2437,9 +2658,18 @@ extract_vleil (unsigned long insn,
01917d
 /* The mask for an XX2 form instruction with the UIM bits specified.  */
01917d
 #define XX2UIM_MASK (XX2 (0x3f, 0x1ff) | (7 << 18))
01917d
 
01917d
+/* The mask for an XX2 form instruction with the 4 UIM bits specified.  */
01917d
+#define XX2UIM4_MASK (XX2 (0x3f, 0x1ff) | (1 << 20))
01917d
+
01917d
 /* The mask for an XX2 form instruction with the BF bits specified.  */
01917d
 #define XX2BF_MASK (XX2_MASK | (3 << 21) | (1))
01917d
 
01917d
+/* The mask for an XX2 form instruction with the BF and DCMX bits specified.  */
01917d
+#define XX2BFD_MASK (XX2 (0x3f, 0x1ff) | 1)
01917d
+
01917d
+/* The mask for an XX2 form instruction with a split DCMX bits specified.  */
01917d
+#define XX2DCMXS_MASK XX2 (0x3f, 0x1ee)
01917d
+
01917d
 /* The mask for an XX3 form instruction.  */
01917d
 #define XX3_MASK XX3 (0x3f, 0xff)
01917d
 
01917d
@@ -2460,11 +2690,13 @@ extract_vleil (unsigned long insn,
01917d
 #define Z_MASK ZRC (0x3f, 0x1ff, 1)
01917d
 #define Z2_MASK ZRC (0x3f, 0xff, 1)
01917d
 
01917d
-/* An X_MASK with the RA field fixed.  */
01917d
+/* An X_MASK with the RA/VA field fixed.  */
01917d
 #define XRA_MASK (X_MASK | RA_MASK)
01917d
+#define XVA_MASK XRA_MASK
01917d
 
01917d
-/* An XRA_MASK with the W field clear.  */
01917d
+/* An XRA_MASK with the A_L/W field clear.  */
01917d
 #define XWRA_MASK (XRA_MASK & ~((unsigned long) 1 << 16))
01917d
+#define XRLA_MASK XWRA_MASK
01917d
 
01917d
 /* An X_MASK with the RB field fixed.  */
01917d
 #define XRB_MASK (X_MASK | RB_MASK)
01917d
@@ -2478,9 +2710,15 @@ extract_vleil (unsigned long insn,
01917d
 /* An X_MASK with the RA and RB fields fixed.  */
01917d
 #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
01917d
 
01917d
+/* An XBF_MASK with the RA and RB fields fixed.  */
01917d
+#define XBFRARB_MASK (XBF_MASK | RA_MASK | RB_MASK)
01917d
+
01917d
 /* An XRARB_MASK, but with the L bit clear.  */
01917d
 #define XRLARB_MASK (XRARB_MASK & ~((unsigned long) 1 << 16))
01917d
 
01917d
+/* An XRARB_MASK, but with the L bits in a darn instruction clear.  */
01917d
+#define XLRAND_MASK (XRARB_MASK & ~((unsigned long) 3 << 16))
01917d
+
01917d
 /* An X_MASK with the RT and RA fields fixed.  */
01917d
 #define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK)
01917d
 
01917d
@@ -2738,6 +2976,7 @@ extract_vleil (unsigned long insn,
01917d
 #define POWER6	PPC_OPCODE_POWER6
01917d
 #define POWER7	PPC_OPCODE_POWER7
01917d
 #define POWER8	PPC_OPCODE_POWER8
01917d
+#define POWER9	PPC_OPCODE_POWER9
01917d
 #define CELL	PPC_OPCODE_CELL
01917d
 #define PPC64	PPC_OPCODE_64 | PPC_OPCODE_64_BRIDGE
01917d
 #define NON32	(PPC_OPCODE_64 | PPC_OPCODE_POWER4	\
01917d
@@ -2753,8 +2992,10 @@ extract_vleil (unsigned long insn,
01917d
 #define PPCPS	PPC_OPCODE_PPCPS
01917d
 #define PPCVEC	PPC_OPCODE_ALTIVEC
01917d
 #define PPCVEC2	PPC_OPCODE_ALTIVEC2
01917d
+#define PPCVEC3	PPC_OPCODE_ALTIVEC2
01917d
 #define PPCVSX	PPC_OPCODE_VSX
01917d
 #define PPCVSX2	PPC_OPCODE_VSX
01917d
+#define PPCVSX3	PPC_OPCODE_VSX3
01917d
 #define POWER	PPC_OPCODE_POWER
01917d
 #define POWER2	PPC_OPCODE_POWER | PPC_OPCODE_POWER2
01917d
 #define PWR2COM PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_COMMON
01917d
@@ -2864,11 +3105,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"twi",		OP(3),		OP_MASK,     PPCCOM,	PPCNONE,	{TO, RA, SI}},
01917d
 {"ti",		OP(3),		OP_MASK,     PWRCOM,	PPCNONE,	{TO, RA, SI}},
01917d
 
01917d
-{"ps_cmpu0",	X  (4,	 0), X_MASK|(3<<21), PPCPS,	PPCNONE,	{BF, FRA, FRB}},
01917d
+{"ps_cmpu0",	X  (4,	 0),    XBF_MASK,    PPCPS,	PPCNONE,	{BF, FRA, FRB}},
01917d
 {"vaddubm",	VX (4,	 0),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vmul10cuq",	VX (4,   1),	VXVB_MASK,   PPCVEC3,	    PPCNONE,	{VD, VA}},
01917d
 {"vmaxub",	VX (4,	 2),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vrlb",	VX (4,	 4),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpequb",	VXR(4,	 6,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vcmpneb",	VXR(4,	 7,0),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vmuloub",	VX (4,	 8),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vaddfp",	VX (4,	10),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"psq_lx",	XW (4,	 6,0),	XW_MASK,     PPCPS,	PPCNONE,	{FRT,RA,RB,PSWM,PSQM}},
01917d
@@ -2914,6 +3157,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vmaddfp",	VXA(4,	46),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VC, VB}},
01917d
 {"ps_sel.",	A  (4,	23,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
01917d
 {"vnmsubfp",	VXA(4,	47),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VC, VB}},
01917d
+{"maddhd",	VXA(4,	48),	VXA_MASK,    POWER9,	PPCNONE,	{RT, RA, RB, RC}},
01917d
+{"maddhdu",	VXA(4,	49),	VXA_MASK,    POWER9,	PPCNONE,	{RT, RA, RB, RC}},
01917d
+{"maddld",	VXA(4,	51),	VXA_MASK,    POWER9,	PPCNONE,	{RT, RA, RB, RC}},
01917d
 {"ps_res",	A  (4,	24,0), AFRAFRC_MASK, PPCPS,	PPCNONE,	{FRT, FRB}},
01917d
 {"ps_res.",	A  (4,	24,1), AFRAFRC_MASK, PPCPS,	PPCNONE,	{FRT, FRB}},
01917d
 {"ps_mul",	A  (4,	25,0), AFRB_MASK,    PPCPS,	PPCNONE,	{FRT, FRA, FRC}},
01917d
@@ -2928,15 +3174,18 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"ps_nmsub.",	A  (4,	30,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
01917d
 {"ps_nmadd",	A  (4,	31,0),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
01917d
 {"ps_nmadd.",	A  (4,	31,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
01917d
-{"ps_cmpo0",	X  (4,	32), X_MASK|(3<<21), PPCPS,	PPCNONE,	{BF, FRA, FRB}},
01917d
+{"ps_cmpo0",	X  (4,	32),    XBF_MASK,    PPCPS,	PPCNONE,	{BF, FRA, FRB}},
01917d
+{"vpermr",	VXA(4,	59),	VXA_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB, VC}},
01917d
 {"vaddeuqm",	VXA(4,	60),	VXA_MASK,    PPCVEC2,	PPCNONE,	{VD, VA, VB, VC}},
01917d
 {"vaddecuq",	VXA(4,	61),	VXA_MASK,    PPCVEC2,	PPCNONE,	{VD, VA, VB, VC}},
01917d
 {"vsubeuqm",	VXA(4,	62),	VXA_MASK,    PPCVEC2,	PPCNONE,	{VD, VA, VB, VC}},
01917d
 {"vsubecuq",	VXA(4,	63),	VXA_MASK,    PPCVEC2,	PPCNONE,	{VD, VA, VB, VC}},
01917d
 {"vadduhm",	VX (4,	64),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vmul10ecuq",	VX (4,  65),	VX_MASK,     PPCVEC3,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vmaxuh",	VX (4,	66),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vrlh",	VX (4,	68),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpequh",	VXR(4,	70,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vcmpneh",	VXR(4,  71,0),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vmulouh",	VX (4,	72),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vsubfp",	VX (4,	74),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"psq_lux",	XW (4,	38,0),	XW_MASK,     PPCPS,	PPCNONE,	{FRT,RA,RB,PSWM,PSQM}},
01917d
@@ -2951,11 +3200,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"machhw.",	XO (4,	44,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"nmachhw",	XO (4,	46,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"nmachhw.",	XO (4,	46,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
-{"ps_cmpu1",	X  (4,	64), X_MASK|(3<<21), PPCPS,	PPCNONE,	{BF, FRA, FRB}},
01917d
+{"ps_cmpu1",	X  (4,	64),    XBF_MASK,    PPCPS,	PPCNONE,	{BF, FRA, FRB}},
01917d
 {"vadduwm",	VX (4,	128),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vmaxuw",	VX (4,	130),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vrlw",	VX (4,	132),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vrlwmi",	VX (4,  133),	VX_MASK,     PPCVEC3,       PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpequw",	VXR(4,	134,0), VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vcmpnew",	VXR(4,  135,0),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vmulouw",	VX (4,  136),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vmuluwm",	VX (4,  137),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vmrghw",	VX (4,	140),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -2964,10 +3215,11 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"ps_mr.",	XRC(4,	72,1),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
01917d
 {"machhwsu",	XO (4,	76,0,0),XO_MASK,     MULHW|PPCVLE,  PPCNONE,	{RT, RA, RB}},
01917d
 {"machhwsu.",	XO (4,	76,0,1),XO_MASK,     MULHW|PPCVLE,  PPCNONE,	{RT, RA, RB}},
01917d
-{"ps_cmpo1",	X  (4,	96), X_MASK|(3<<21), PPCPS,	PPCNONE,	{BF, FRA, FRB}},
01917d
+{"ps_cmpo1",	X  (4,	96),    XBF_MASK,    PPCPS,	PPCNONE,	{BF, FRA, FRB}},
01917d
 {"vaddudm",	VX (4, 192),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vmaxud",	VX (4, 194),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vrld",	VX (4, 196),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
+{"vrldmi",	VX (4, 197),	VX_MASK,     PPCVEC3,   PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpeqfp",	VXR(4, 198,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpequd",	VXR(4, 199,0),	VXR_MASK,    PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vpkuwus",	VX (4, 206),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -2977,6 +3229,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"nmachhws.",	XO (4, 110,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"vadduqm",	VX (4, 256),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vmaxsb",	VX (4, 258),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vcmpnezb",	VXR(4, 263,0),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vslb",	VX (4, 260),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vmulosb",	VX (4, 264),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vrefp",	VX (4, 266),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
@@ -2991,6 +3244,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vaddcuq",	VX (4, 320),	VX_MASK,     PPCVEC2,      PPCNONE,	{VD, VA, VB}},
01917d
 {"vmaxsh",	VX (4, 322),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vslh",	VX (4, 324),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vcmpnezh",	VXR(4, 327,0),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vmulosh",	VX (4, 328),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vrsqrtefp",	VX (4, 330),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"vmrglh",	VX (4, 332),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -3004,6 +3258,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vaddcuw",	VX (4, 384),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vmaxsw",	VX (4, 386),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vslw",	VX (4, 388),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vrlwnm",	VX (4, 389),	VX_MASK,     PPCVEC3,       PPCNONE,	{VD, VA, VB}},
01917d
+{"vcmpnezw",	VXR(4, 391,0),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vmulosw",	VX (4, 392),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vexptefp",	VX (4, 394),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"vmrglw",	VX (4, 396),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -3012,6 +3268,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"macchwsu.",	XO (4, 204,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"vmaxsd",	VX (4, 450),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vsl",		VX (4, 452),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vrldnm",	VX (4, 453),	VX_MASK,     PPCVEC3,       PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpgefp",	VXR(4, 454,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vlogefp",	VX (4, 458),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"vpkswss",	VX (4, 462),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -3021,6 +3278,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"nmacchws.",	XO (4, 238,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"evaddw",	VX (4, 512),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vaddubs",	VX (4, 512),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vmul10uq",	VX (4, 513),	VXVB_MASK,   PPCVEC3,	    PPCNONE,	{VD, VA}},
01917d
 {"evaddiw",	VX (4, 514),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB, UIMM}},
01917d
 {"vminub",	VX (4, 514),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"evsubfw",	VX (4, 516),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
@@ -3037,6 +3295,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evextsh",	VX (4, 523),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
01917d
 {"evrndw",	VX (4, 524),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
01917d
 {"vspltb",	VX (4, 524),	VXUIMM4_MASK,PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM4}},
01917d
+{"vextractub",	VX (4, 525),	VXUIMM4_MASK,PPCVEC3,	    PPCNONE,	{VD, VB, UIMM4}},
01917d
 {"evcntlzw",	VX (4, 525),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
01917d
 {"evcntlsw",	VX (4, 526),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
01917d
 {"vupkhsb",	VX (4, 526),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
@@ -3075,12 +3334,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evcmpeq",	VX (4, 564),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
01917d
 {"cget",	APU(4, 284,0),	APU_RA_MASK, PPC405,	PPCNONE,	{RT, FSL}},
01917d
 {"vadduhs",	VX (4, 576),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vmul10euq",	VX (4, 577),	VX_MASK,     PPCVEC3,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vminuh",	VX (4, 578),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vsrh",	VX (4, 580),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpgtuh",	VXR(4, 582,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vmuleuh",	VX (4, 584),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vrfiz",	VX (4, 586),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"vsplth",	VX (4, 588),	VXUIMM3_MASK,PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM3}},
01917d
+{"vextractuh",	VX (4, 589),	VXUIMM4_MASK,PPCVEC3,	    PPCNONE,	{VD, VB, UIMM4}},
01917d
 {"vupkhsh",	VX (4, 590),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"nget",	APU(4, 300,0),	APU_RA_MASK, PPC405,	PPCNONE,	{RT, FSL}},
01917d
 {"evsel",	EVSEL(4,79),	EVSEL_MASK,  PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB, CRFS}},
01917d
@@ -3100,6 +3361,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vrfip",	VX (4, 650),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"evfscmpgt",	VX (4, 652),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
01917d
 {"vspltw",	VX (4, 652),	VXUIMM2_MASK,PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM2}},
01917d
+{"vextractuw",	VX (4, 653),	VXUIMM4_MASK,PPCVEC3,	    PPCNONE,	{VD, VB, UIMM4}},
01917d
 {"evfscmplt",	VX (4, 653),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
01917d
 {"evfscmpeq",	VX (4, 654),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
01917d
 {"vupklsb",	VX (4, 654),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
@@ -3131,6 +3393,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"efsdiv",	VX (4, 713),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vrfim",	VX (4, 714),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"efscmpgt",	VX (4, 716),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
01917d
+{"vextractd",	VX (4, 717),	VXUIMM4_MASK,PPCVEC3,	    PPCNONE,	{VD, VB, UIMM4}},
01917d
 {"efscmplt",	VX (4, 717),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
01917d
 {"efscmpeq",	VX (4, 718),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
01917d
 {"vupklsh",	VX (4, 718),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
@@ -3195,6 +3458,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vcuxwfp",	VX (4, 778),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
01917d
 {"evlhhousplatx",VX(4, 780),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vspltisb",	VX (4, 780),	VXVB_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, SIMM}},
01917d
+{"vinsertb",	VX (4, 781),	VXUIMM4_MASK,PPCVEC3,	    PPCNONE,	{VD, VB, UIMM4}},
01917d
 {"evlhhousplat",VX (4, 781),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_2, RA}},
01917d
 {"evlhhossplatx",VX(4, 782),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vpkpx",	VX (4, 782),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -3228,6 +3492,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evstwwox",	VX (4, 828),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"evstwwo",	VX (4, 829),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
01917d
 {"vaddshs",	VX (4, 832),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"bcdcpsgn.",	VX (4, 833),	VX_MASK,     PPCVEC3,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vminsh",	VX (4, 834),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vsrah",	VX (4, 836),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpgtsh",	VXR(4, 838,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -3235,6 +3500,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vcfsx",	VX (4, 842),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
01917d
 {"vcsxwfp",	VX (4, 842),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
01917d
 {"vspltish",	VX (4, 844),	VXVB_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, SIMM}},
01917d
+{"vinserth",	VX (4, 845),	VXUIMM4_MASK,PPCVEC3,	    PPCNONE,	{VD, VB, UIMM4}},
01917d
 {"vupkhpx",	VX (4, 846),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"mullhw",	XRC(4, 424,0),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"mullhw.",	XRC(4, 424,1),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
@@ -3250,6 +3516,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vctuxs",	VX (4, 906),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
01917d
 {"vcfpuxws",	VX (4, 906),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
01917d
 {"vspltisw",	VX (4, 908),	VXVB_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, SIMM}},
01917d
+{"vinsertw",	VX (4, 909),	VXUIMM4_MASK,PPCVEC3,	    PPCNONE,	{VD, VB, UIMM4}},
01917d
 {"maclhwsu",	XO (4, 460,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"maclhwsu.",	XO (4, 460,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"vminsd",	VX (4, 962),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
@@ -3258,6 +3525,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vcmpgtsd",	VXR(4, 967,0),	VXR_MASK,    PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vctsxs",	VX (4, 970),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
01917d
 {"vcfpsxws",	VX (4, 970),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
01917d
+{"vinsertd",	VX (4, 973),	VXUIMM4_MASK,PPCVEC3,	    PPCNONE,	{VD, VB, UIMM4}},
01917d
 {"vupklpx",	VX (4, 974),	VXVA_MASK,   PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
01917d
 {"maclhws",	XO (4, 492,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"maclhws.",	XO (4, 492,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
@@ -3270,6 +3538,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evmhessf",	VX (4,1027),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vand",	VX (4,1028),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpequb.",	VXR(4,	 6,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vcmpneb.",	VXR(4,	 7,1),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"udi0fcm.",	APU(4, 515,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
 {"udi0fcm",	APU(4, 515,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
 {"evmhossf",	VX (4,1031),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
@@ -3302,6 +3571,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vcmpequh.",	VXR(4,	70,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"udi1fcm.",	APU(4, 547,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
 {"udi1fcm",	APU(4, 547,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
+{"vcmpneh.",	VXR(4,  71,1),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"evmwhssf",	VX (4,1095),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vpmsumh",	VX (4,1096),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"evmwlumi",	VX (4,1096),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
@@ -3331,10 +3601,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evmwsmia",	VX (4,1145),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"evmwsmfa",	VX (4,1147),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vsubuwm",	VX (4,1152),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"bcdus.",	VX (4,1153),	VX_MASK,     PPCVEC3,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vavguw",	VX (4,1154),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vabsduw",	VX (4,1155),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vmr",		VX (4,1156),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VBA}},
01917d
 {"vor",		VX (4,1156),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vcmpnew.",	VXR(4, 135,1),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vpmsumw",	VX (4,1160),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpequw.",	VXR(4, 134,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"udi2fcm.",	APU(4, 579,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
@@ -3345,6 +3617,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"ps_merge10.",	XOPS(4,592,1),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
01917d
 {"vsubudm",	VX (4,1216),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"evaddusiaaw",	VX (4,1216),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
01917d
+{"bcds.",	VX (4,1217),	VXPS_MASK,   PPCVEC3,	    PPCNONE,	{VD, VA, VB, PS}},
01917d
 {"evaddssiaaw",	VX (4,1217),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
01917d
 {"evsubfusiaaw",VX (4,1218),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
01917d
 {"evsubfssiaaw",VX (4,1219),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
01917d
@@ -3370,6 +3643,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"ps_merge11.",	XOPS(4,624,1),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
01917d
 {"vsubuqm",	VX (4,1280),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
 {"evmheusiaaw",	VX (4,1280),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
+{"bcdtrunc.",	VX (4,1281),	VXPS_MASK,   PPCVEC3,	    PPCNONE,	{VD, VA, VB, PS}},
01917d
 {"evmhessiaaw",	VX (4,1281),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vavgsb",	VX (4,1282),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"evmhessfaaw",	VX (4,1283),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
@@ -3379,6 +3653,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evmhossiaaw",	VX (4,1285),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"udi4fcm.",	APU(4, 643,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
 {"udi4fcm",	APU(4, 643,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
+{"vcmpnezb.",	VXR(4, 263,1),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"evmhossfaaw",	VX (4,1287),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"evmheumiaaw",	VX (4,1288),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vcipher",	VX (4,1288),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
@@ -3399,11 +3674,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evmhogsmfaa",	VX (4,1327),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vsubcuq",	VX (4,1344),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"evmwlusiaaw",	VX (4,1344),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
+{"bcdutrunc.",	VX (4,1345),	VX_MASK,     PPCVEC3,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"evmwlssiaaw",	VX (4,1345),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vavgsh",	VX (4,1346),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vorc",	VX (4,1348),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"udi5fcm.",	APU(4, 675,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
 {"udi5fcm",	APU(4, 675,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
+{"vcmpnezh.",	VXR(4, 327,1),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vncipher",	VX (4,1352),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"evmwlumiaaw",	VX (4,1352),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vncipherlast",VX (4,1353),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
@@ -3421,6 +3698,13 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evmheusianw",	VX (4,1408),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vsubcuw",	VX (4,1408),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"evmhessianw",	VX (4,1409),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
+{"bcdctsq.",	VXVA(4,1409,0),	VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"bcdcfsq.",	VXVA(4,1409,2),	VXVAPS_MASK, PPCVEC3,	    PPCNONE,	{VD, VB, PS}},
01917d
+{"bcdctz.",	VXVA(4,1409,4),	VXVAPS_MASK, PPCVEC3,	    PPCNONE,	{VD, VB, PS}},
01917d
+{"bcdctn.",	VXVA(4,1409,5),	VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"bcdcfz.",	VXVA(4,1409,6),	VXVAPS_MASK, PPCVEC3,	    PPCNONE,	{VD, VB, PS}},
01917d
+{"bcdcfn.",	VXVA(4,1409,7),	VXVAPS_MASK, PPCVEC3,	    PPCNONE,	{VD, VB, PS}},
01917d
+{"bcdsetsgn.",	VXVA(4,1409,31),VXVAPS_MASK, PPCVEC3,	    PPCNONE,	{VD, VB, PS}},
01917d
 {"vavgsw",	VX (4,1410),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"evmhessfanw",	VX (4,1411),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vnand",	VX (4,1412),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
@@ -3428,6 +3712,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evmhossianw",	VX (4,1413),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"udi6fcm.",	APU(4, 707,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
 {"udi6fcm",	APU(4, 707,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
01917d
+{"vcmpnezw.",	VXR(4, 391,1),	VXR_MASK,    PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"evmhossfanw",	VX (4,1415),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"evmheumianw",	VX (4,1416),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"evmhesmianw",	VX (4,1417),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
@@ -3444,6 +3729,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"evmhogsmian",	VX (4,1453),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"evmhogsmfan",	VX (4,1455),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"evmwlusianw",	VX (4,1472),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
+{"bcdsr.",	VX (4,1473),	VXPS_MASK,   PPCVEC3,	    PPCNONE,	{VD, VA, VB, PS}},
01917d
 {"evmwlssianw",	VX (4,1473),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"vsld",	VX (4,1476),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpgefp.",	VXR(4, 454,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -3452,6 +3738,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vsbox",	VX (4,1480),	VXVB_MASK,   PPCVEC2,	    PPCNONE,	{VD, VA}},
01917d
 {"evmwlumianw",	VX (4,1480),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"evmwlsmianw",	VX (4,1481),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
+{"vbpermd",	VX (4,1484),	VX_MASK,     PPCVEC3,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"vpksdss",	VX (4,1486),	VX_MASK,     PPCVEC2,	    PPCNONE,	{VD, VA, VB}},
01917d
 {"evmwssfan",	VX (4,1491),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
01917d
 {"macchwso",	XO (4, 236,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
@@ -3462,17 +3749,35 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"nmacchwso",	XO (4, 238,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"nmacchwso.",	XO (4, 238,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"vsububs",	VX (4,1536),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vclzlsbb",	VXVA(4,1538,0), VXVA_MASK,   PPCVEC3,	    PPCNONE,	{RT, VB}},
01917d
+{"vctzlsbb",	VXVA(4,1538,1), VXVA_MASK,   PPCVEC3,	    PPCNONE,	{RT, VB}},
01917d
+{"vnegw",	VXVA(4,1538,6), VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vnegd",	VXVA(4,1538,7), VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vprtybw",	VXVA(4,1538,8), VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vprtybd",	VXVA(4,1538,9), VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vprtybq",	VXVA(4,1538,10),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vextsb2w",	VXVA(4,1538,16),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vextsh2w",	VXVA(4,1538,17),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vextsb2d",	VXVA(4,1538,24),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vextsh2d",	VXVA(4,1538,25),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vextsw2d",	VXVA(4,1538,26),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vctzb",	VXVA(4,1538,28),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vctzh",	VXVA(4,1538,29),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vctzw",	VXVA(4,1538,30),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
+{"vctzd",	VXVA(4,1538,31),VXVA_MASK,   PPCVEC3,	    PPCNONE,	{VD, VB}},
01917d
 {"mfvscr",	VX (4,1540),	VXVAVB_MASK, PPCVEC|PPCVLE, PPCNONE,	{VD}},
01917d
 {"vcmpgtub.",	VXR(4, 518,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"udi8fcm.",	APU(4, 771,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"udi8fcm",	APU(4, 771,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"vsum4ubs",	VX (4,1544),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vextublx",	VX (4,1549),	VX_MASK,     PPCVEC3,	    PPCNONE,	{RT, RA, VB}},
01917d
 {"vsubuhs",	VX (4,1600),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"mtvscr",	VX (4,1604),	VXVDVA_MASK, PPCVEC|PPCVLE, PPCNONE,	{VB}},
01917d
 {"vcmpgtuh.",	VXR(4, 582,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vsum4shs",	VX (4,1608),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"udi9fcm.",	APU(4, 804,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"udi9fcm",	APU(4, 804,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
+{"vextuhlx",	VX (4,1613),	VX_MASK,     PPCVEC3,	PPCNONE,	{RT, RA, VB}},
01917d
 {"vupkhsw",	VX (4,1614),	VXVA_MASK,   PPCVEC2,	    PPCNONE,	{VD, VB}},
01917d
 {"vsubuws",	VX (4,1664),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vshasigmaw",	VX (4,1666),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, ST, SIX}},
01917d
@@ -3482,6 +3787,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"udi10fcm",	APU(4, 835,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"vsum2sws",	VX (4,1672),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vmrgow",	VX (4,1676),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
+{"vextuwlx",	VX (4,1677),	VX_MASK,     PPCVEC3,	PPCNONE,	{RT, RA, VB}},
01917d
 {"vshasigmad",	VX (4,1730),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, ST, SIX}},
01917d
 {"vsrd",	VX (4,1732),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpgtfp.",	VXR(4, 710,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
@@ -3492,16 +3798,20 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"vsubsbs",	VX (4,1792),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vclzb",	VX (4,1794),	VXVA_MASK,   PPCVEC2,	PPCNONE,	{VD, VB}},
01917d
 {"vpopcntb",	VX (4,1795),	VXVA_MASK,   PPCVEC2,	PPCNONE,	{VD, VB}},
01917d
+{"vsrv",	VX (4,1796),	VX_MASK,     PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpgtsb.",	VXR(4, 774,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"udi12fcm.",	APU(4, 899,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"udi12fcm",	APU(4, 899,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"vsum4sbs",	VX (4,1800),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vextubrx",	VX (4,1805),	VX_MASK,     PPCVEC3,	PPCNONE,	{RT, RA, VB}},
01917d
 {"maclhwuo",	XO (4, 396,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"maclhwuo.",	XO (4, 396,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"vsubshs",	VX (4,1856),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vclzh",	VX (4,1858),	VXVA_MASK,   PPCVEC2,	PPCNONE,	{VD, VB}},
01917d
 {"vpopcnth",	VX (4,1859),	VXVA_MASK,   PPCVEC2,	PPCNONE,	{VD, VB}},
01917d
+{"vslv",	VX (4,1860),	VX_MASK,     PPCVEC3,	PPCNONE,	{VD, VA, VB}},
01917d
 {"vcmpgtsh.",	VXR(4, 838,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
+{"vextuhrx",	VX (4,1869),	VX_MASK,     PPCVEC3,	PPCNONE,	{RT, RA, VB}},
01917d
 {"udi13fcm.",	APU(4, 931,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"udi13fcm",	APU(4, 931,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"maclhwo",	XO (4, 428,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
@@ -3516,6 +3826,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"udi14fcm",	APU(4, 963,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
01917d
 {"vsumsws",	VX (4,1928),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
01917d
 {"vmrgew",	VX (4,1932),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
01917d
+{"vextuwrx",	VX (4,1933),	VX_MASK,     PPCVEC3,	PPCNONE,	{RT, RA, VB}},
01917d
 {"maclhwsuo",	XO (4, 460,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"maclhwsuo.",	XO (4, 460,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"vclzd",	VX (4,1986),	VXVA_MASK,   PPCVEC2,	PPCNONE,	{VD, VB}},
01917d
@@ -3854,6 +4165,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"mcrf",      XL(19,0), XLBB_MASK|(3<<21)|(3<<16), COM,	PPCNONE,	{BF, BFA}},
01917d
 
01917d
+{"addpcis",   DX(19,2),		DX_MASK,     POWER9,	PPCNONE,	{RT, DXD}},
01917d
+{"subpcis",   DX(19,2),		DX_MASK,     POWER9,	PPCNONE,	{RT, NDXD}},
01917d
+
01917d
 {"bdnzlr",   XLO(19,BODNZ,16,0),	XLBOBIBB_MASK, PPCCOM,	 PPCNONE,	{0}},
01917d
 {"bdnzlr-",  XLO(19,BODNZ,16,0),	XLBOBIBB_MASK, PPCCOM,   ISA_V2,	{0}},
01917d
 {"bdnzlrl",  XLO(19,BODNZ,16,1),	XLBOBIBB_MASK, PPCCOM,	 PPCNONE,	{0}},
01917d
@@ -4113,17 +4427,20 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"crset",	XL(19,289),	XL_MASK,     PPCCOM,	PPCNONE,	{BT, BAT, BBA}},
01917d
 {"creqv",	XL(19,289),	XL_MASK,     COM,	PPCNONE,	{BT, BA, BB}},
01917d
 
01917d
-{"doze",	XL(19,402),	0xffffffff,  POWER6,	PPCNONE,	{0}},
01917d
+{"urfid",	XL(19,306),	0xffffffff,  POWER9,	PPCNONE,	{0}},
01917d
+{"stop",	XL(19,370),	0xffffffff,  POWER9,	PPCNONE,	{0}},
01917d
+
01917d
+{"doze",	XL(19,402),	0xffffffff,  POWER6,	POWER9,		{0}},
01917d
 
01917d
 {"crorc",	XL(19,417),	XL_MASK,     COM,	PPCNONE,	{BT, BA, BB}},
01917d
 
01917d
-{"nap",		XL(19,434),	0xffffffff,  POWER6,	PPCNONE,	{0}},
01917d
+{"nap",		XL(19,434),	0xffffffff,  POWER6,	POWER9,		{0}},
01917d
 
01917d
 {"crmove",	XL(19,449),	XL_MASK,     PPCCOM,	PPCNONE,	{BT, BA, BBA}},
01917d
 {"cror",	XL(19,449),	XL_MASK,     COM,	PPCNONE,	{BT, BA, BB}},
01917d
 
01917d
-{"sleep",	XL(19,466),	0xffffffff,  POWER6,	PPCNONE,	{0}},
01917d
-{"rvwinkle",	XL(19,498),	0xffffffff,  POWER6,	PPCNONE,	{0}},
01917d
+{"sleep",	XL(19,466),	0xffffffff,  POWER6,	POWER9,		{0}},
01917d
+{"rvwinkle",	XL(19,498),	0xffffffff,  POWER6,	POWER9,		{0}},
01917d
 
01917d
 {"bctr",    XLO(19,BOU,528,0),		XLBOBIBB_MASK, COM,	 PPCNONE,	{0}},
01917d
 {"bctrl",   XLO(19,BOU,528,1),		XLBOBIBB_MASK, COM,	 PPCNONE,	{0}},
01917d
@@ -4459,7 +4776,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"ldepx",	X(31,29),	X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
01917d
 
01917d
-{"waitasec",	X(31,30),	XRTRARB_MASK,POWER8,	PPCNONE,	{0}},
01917d
+{"waitasec",	X(31,30),	XRTRARB_MASK,POWER8,	POWER9,		{0}},
01917d
+{"wait",	X(31,30),	XWC_MASK,    POWER9,	PPCNONE,	{WC}},
01917d
 
01917d
 {"lwepx",	X(31,31),	X_MASK,	     E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
01917d
 
01917d
@@ -4591,6 +4909,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"dcbfep",	XRT(31,127,0),	XRT_MASK,    E500MC|PPCA2|PPCVLE, PPCNONE, {RA0, RB}},
01917d
 
01917d
+{"setb",	X(31,128),	XRB_MASK|(3<<16), POWER9, PPCNONE,	{RT, BFA}},
01917d
+
01917d
 {"wrtee",	X(31,131),	XRARB_MASK,  PPC403|BOOKE|PPCA2|PPC476|PPCVLE, PPCNONE, {RS}},
01917d
 
01917d
 {"dcbtstls",	X(31,134),	X_MASK,	     PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
01917d
@@ -4673,6 +4993,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"prtyd",	X(31,186),	XRB_MASK, POWER6|PPCA2,	PPCNONE,	{RA, RS}},
01917d
 
01917d
+{"cmprb",	X(31,192),	XCMP_MASK,   POWER9,	PPCNONE,	{BF, L, RA, RB}},
01917d
+
01917d
 {"icblq.",	XRC(31,198,1),	X_MASK,      E6500,	PPCNONE,	{CT, RA0, RB}},
01917d
 
01917d
 {"stvewx",	X(31,199),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA0, RB}},
01917d
@@ -4711,6 +5033,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"stbepx",	X(31,223),	X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RS, RA0, RB}},
01917d
 
01917d
+{"cmpeqb",	X(31,224),	XCMPL_MASK,   POWER9,	PPCNONE,	{BF, RA, RB}},
01917d
+
01917d
 {"icblc",	X(31,230),	X_MASK,	PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
01917d
 
01917d
 {"stvx",	X(31,231),	X_MASK,      PPCVEC|PPCVLE, PPCNONE,	{VS, RA0, RB}},
01917d
@@ -4770,14 +5094,22 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"doz",		XO(31,264,0,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
01917d
 {"doz.",	XO(31,264,0,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"modud",	X(31,265),	X_MASK,      POWER9,	PPCNONE,	{RT, RA, RB}},
01917d
+
01917d
 {"add",		XO(31,266,0,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"cax",		XO(31,266,0,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
01917d
 {"add.",	XO(31,266,0,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"cax.",	XO(31,266,0,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"moduw",	X(31,267),	X_MASK,      POWER9,	PPCNONE,	{RT, RA, RB}},
01917d
+
01917d
+{"lxvx",	X(31,268),	XX1_MASK|1<<6, PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
+{"lxvl",	X(31,269),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
+
01917d
 {"ehpriv",	X(31,270),	0xffffffff, E500MC|PPCA2|PPCVLE, PPCNONE, {0}},
01917d
 
01917d
-{"tlbiel",	X(31,274),	XRTLRA_MASK, POWER4,	PPC476,		{RB, L}},
01917d
+{"tlbiel",	X(31,274),	X_MASK|1<<20,POWER9,	PPC476,  	{RB, RSO, RIC, PRS, X_R}},
01917d
+{"tlbiel",	X(31,274),	XRTLRA_MASK, POWER4,	POWER9|PPC476,	{RB, L}},
01917d
 
01917d
 {"mfapidi",	X(31,275),	X_MASK,      BOOKE,	E500|TITAN,  	{RT, RA}},
01917d
 
01917d
@@ -4805,12 +5137,19 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"lvexhx",	X(31,293),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
01917d
 {"lvepx",	X(31,295),	X_MASK,      PPCVEC2|PPCVLE, PPCNONE,	{VD, RA0, RB}},
01917d
 
01917d
+{"lxvll",	X(31,301),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
+
01917d
 {"mfbhrbe",	X(31,302),	X_MASK,      POWER8,	PPCNONE,	{RT, BHRBE}},
01917d
 
01917d
-{"tlbie",	X(31,306),	XRA_MASK,    POWER7,	TITAN,  	{RB, RS}},
01917d
+{"tlbie",	X(31,306),	X_MASK|1<<20,POWER9,	TITAN,  	{RB, RS, RIC, PRS, X_R}},
01917d
+{"tlbie",	X(31,306),	XRA_MASK,    POWER7,	POWER9|TITAN,  	{RB, RS}},
01917d
 {"tlbie",	X(31,306),	XRTLRA_MASK, PPC,	E500|POWER7|TITAN,  	{RB, L}},
01917d
 {"tlbi",	X(31,306),	XRT_MASK,    POWER,	PPCNONE,	{RA0, RB}},
01917d
 
01917d
+{"mfvsrld",	X(31,307),	XX1RB_MASK,  PPCVSX3,	PPCNONE,	{RA, XS6}},
01917d
+
01917d
+{"ldmx",	X(31,309),	X_MASK,      POWER9,	PPCNONE,  	{RT, RA0, RB}},
01917d
+
01917d
 {"eciwx",	X(31,310),	X_MASK,      PPC,	E500|TITAN,  	{RT, RA0, RB}},
01917d
 
01917d
 {"lhzux",	X(31,311),	X_MASK,      COM|PPCVLE, PPCNONE,	{RT, RAL, RB}},
01917d
@@ -4871,6 +5210,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"mfpmr",	X(31,334),	X_MASK, PPCPMR|PPCE300|PPCVLE, PPCNONE,	{RT, PMR}},
01917d
 {"mftmr",	X(31,366),	X_MASK,	PPCTMR|E6500,	PPCNONE,	{RT, TMR}},
01917d
 
01917d
+{"slbsync",	X(31,338),      0xffffffff,  POWER9,	PPCNONE,	{0}},
01917d
+
01917d
 {"mfmq",	XSPR(31,339,  0), XSPR_MASK, M601,	PPCNONE,	{RT}},
01917d
 {"mfxer",	XSPR(31,339,  1), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RT}},
01917d
 {"mfrtcu",	XSPR(31,339,  4), XSPR_MASK, COM,	TITAN,  	{RT}},
01917d
@@ -5087,6 +5428,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"divs",	XO(31,363,0,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
01917d
 {"divs.",	XO(31,363,0,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"lxvwsx",	X(31,364),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
+
01917d
 {"tlbia",	X(31,370),	0xffffffff,  PPC,	E500|TITAN,  	{0}},
01917d
 
01917d
 {"mftbu",	XSPR(31,371,269), XSPR_MASK, PPC,	NO371|POWER4,	{RT}},
01917d
@@ -5114,10 +5457,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"divweu",	XO(31,395,0,0),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
01917d
 {"divweu.",	XO(31,395,0,1),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"stxvx",	X(31,396),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XS6, RA0, RB}},
01917d
+{"stxvl",	X(31,397),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XS6, RA0, RB}},
01917d
+
01917d
 {"dcblce",	X(31,398),	X_MASK,      PPCCHLK,	E500MC,		{CT, RA, RB}},
01917d
 
01917d
 {"slbmte",	X(31,402),	XRA_MASK,    PPC64,	PPCNONE,	{RS, RB}},
01917d
 
01917d
+{"mtvsrws",	X(31,403),	XX1RB_MASK,  PPCVSX3,	PPCNONE,	{XT6, RA}},
01917d
+
01917d
 {"pbt.",	XRC(31,404,1),	X_MASK,      POWER8,	PPCNONE,	{RS, RA0, RB}},
01917d
 
01917d
 {"icswx",	XRC(31,406,0),	X_MASK,   POWER7|PPCA2,	PPCNONE,	{RS, RA, RB}},
01917d
@@ -5141,10 +5489,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"divwe",	XO(31,427,0,0),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
01917d
 {"divwe.",	XO(31,427,0,1),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"stxvll",	X(31,429),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XS6, RA0, RB}},
01917d
+
01917d
 {"clrbhrb",	X(31,430),	0xffffffff,  POWER8,	PPCNONE,	{0}},
01917d
 
01917d
 {"slbie",	X(31,434),	XRTRA_MASK,  PPC64,	PPCNONE,	{RB}},
01917d
 
01917d
+{"mtvsrdd",	X(31,435),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
+
01917d
 {"ecowx",	X(31,438),	X_MASK,      PPC,	E500|TITAN,  	{RT, RA0, RB}},
01917d
 
01917d
 {"sthux",	X(31,439),	X_MASK,      COM|PPCVLE, PPCNONE,	{RS, RAS, RB}},
01917d
@@ -5214,6 +5566,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"mtpmr",	X(31,462),	X_MASK, PPCPMR|PPCE300|PPCVLE, PPCNONE,	{PMR, RS}},
01917d
 {"mttmr",	X(31,494),	X_MASK,	PPCTMR|E6500,	PPCNONE,	{TMR, RS}},
01917d
 
01917d
+{"slbieg",	X(31,466),	XRA_MASK,    POWER9,	PPCNONE,	{RS, RB}},
01917d
+
01917d
 {"mtmq",	XSPR(31,467,  0), XSPR_MASK, M601,	PPCNONE,	{RS}},
01917d
 {"mtxer",	XSPR(31,467,  1), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RS}},
01917d
 {"mtlr",	XSPR(31,467,  8), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RS}},
01917d
@@ -5413,7 +5767,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"cmpb",	X(31,508),	X_MASK, POWER6|PPCA2|PPC476, PPCNONE,	{RA, RS, RB}},
01917d
 
01917d
-{"mcrxr",	X(31,512), XRARB_MASK|(3<<21), COM|PPCVLE, POWER7,	{BF}},
01917d
+{"mcrxr",	X(31,512),	XBFRARB_MASK, COM|PPCVLE, POWER7,	{BF}},
01917d
 
01917d
 {"lbdx",	X(31,515),	X_MASK,      E500MC|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
@@ -5456,6 +5810,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"rrib",	XRC(31,537,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
01917d
 {"rrib.",	XRC(31,537,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
01917d
 
01917d
+{"cnttzw",	XRC(31,538,0),	XRB_MASK,    POWER9,	PPCNONE,	{RA, RS}},
01917d
+{"cnttzw.",	XRC(31,538,1),	XRB_MASK,    POWER9,	PPCNONE,	{RA, RS}},
01917d
+
01917d
 {"srd",		XRC(31,539,0),	X_MASK,      PPC64,	PPCNONE,	{RA, RS, RB}},
01917d
 {"srd.",	XRC(31,539,1),	X_MASK,      PPC64,	PPCNONE,	{RA, RS, RB}},
01917d
 
01917d
@@ -5480,10 +5837,17 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"lfsux",	X(31,567),	X_MASK,      COM,	PPCEFS,		{FRT, RAS, RB}},
01917d
 
01917d
+{"cnttzd",	XRC(31,570,0),	XRB_MASK,    POWER9,	PPCNONE,	{RA, RS}},
01917d
+{"cnttzd.",	XRC(31,570,1),	XRB_MASK,    POWER9,	PPCNONE,	{RA, RS}},
01917d
+
01917d
+{"mcrxrx",	X(31,576),	XBFRARB_MASK, POWER9,	PPCNONE,	{BF}},
01917d
+
01917d
 {"lwdx",	X(31,579),	X_MASK,      E500MC|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
 {"lvtlx",	X(31,581),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
01917d
 
01917d
+{"lwat",	X(31,582),	X_MASK,      POWER9,	PPCNONE,	{RT, RA0, FC}},
01917d
+
01917d
 {"lwfcmux",	APU(31,583,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
01917d
 
01917d
 {"lxsdx",	X(31,588),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA0, RB}},
01917d
@@ -5496,8 +5860,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"hwsync",	XSYNC(31,598,0), 0xffffffff, POWER4,	BOOKE|PPC476,	{0}},
01917d
 {"lwsync",	XSYNC(31,598,1), 0xffffffff, PPC,	E500,		{0}},
01917d
 {"ptesync",	XSYNC(31,598,2), 0xffffffff, PPC64,	PPCNONE,	{0}},
01917d
-{"sync",	X(31,598),	XSYNCLE_MASK,E6500,	PPCNONE,	{LS, ESYNC}},
01917d
-{"sync",	X(31,598),	XSYNC_MASK, PPCCOM|PPCVLE, BOOKE|PPC476, {LS}},
01917d
+{"sync",	X(31,598),	XSYNCLE_MASK,POWER9|E6500, PPCNONE,	{LS, ESYNC}},
01917d
+{"sync",	X(31,598),	XSYNC_MASK, PPCCOM|PPCVLE, BOOKE|PPC476|POWER9, {LS}},
01917d
 {"msync",	X(31,598),	0xffffffff, BOOKE|PPCA2|PPC476, PPCNONE, {0}},
01917d
 {"sync",	X(31,598),	0xffffffff, BOOKE|PPC476, E6500,	{0}},
01917d
 {"lwsync",	X(31,598),	0xffffffff, E500,	PPCNONE,	{0}},
01917d
@@ -5512,6 +5876,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"lvswx",	X(31,613),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
01917d
 
01917d
+{"ldat",	X(31,614),	X_MASK,      POWER9,	PPCNONE,	{RT, RA0, FC}},
01917d
+
01917d
 {"lqfcmux",	APU(31,615,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
01917d
 
01917d
 {"nego",	XO(31,104,1,0),	XORB_MASK,   COM|PPCVLE, PPCNONE,	{RT, RA}},
01917d
@@ -5584,6 +5950,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"stvflx",	X(31,709),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
01917d
 
01917d
+{"stwat",	X(31,710),	X_MASK,      POWER9,	PPCNONE,	{RS, RA0, FC}},
01917d
+
01917d
 {"stwfcmux",	APU(31,711,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
01917d
 
01917d
 {"stxsdx",	X(31,716),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA0, RB}},
01917d
@@ -5620,6 +5988,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"stvswx",	X(31,741),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
01917d
 
01917d
+{"stdat",	X(31,742),	X_MASK,      POWER9,	PPCNONE,	{RS, RA0, FC}},
01917d
+
01917d
 {"stqfcmux",	APU(31,743,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
01917d
 
01917d
 {"subfmeo",	XO(31,232,1,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
01917d
@@ -5644,6 +6014,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"tresume.",	XRCL(31,750,1,1), XRTRARB_MASK,PPCHTM,	PPCNONE,	{0}},
01917d
 {"tsr.",	XRC(31,750,1),    XRTLRARB_MASK,PPCHTM,	PPCNONE,	{L}},
01917d
 
01917d
+{"darn",	X(31,755),	XLRAND_MASK, POWER9,	PPCNONE,	{RT, LRAND}},
01917d
+
01917d
 {"dcba",	X(31,758), XRT_MASK, PPC405|PPC7450|BOOKE|PPCA2|PPC476|PPCVLE, PPCNONE, {RA0, RB}},
01917d
 {"dcbal",	XOPL(31,758,1), XRT_MASK,    E500MC,	PPCNONE,	{RA0, RB}},
01917d
 
01917d
@@ -5653,6 +6025,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"srliq.",	XRC(31,760,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, SH}},
01917d
 
01917d
 {"lvsm",	X(31,773),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
01917d
+
01917d
+{"copy_first",	XOPL(31,774,1),	XRT_MASK,    POWER9,	PPCNONE,	{RA0, RB}},
01917d
+{"copy",	X(31,774),	XLRT_MASK,   POWER9,	PPCNONE,	{RA0, RB, L}},
01917d
+
01917d
 {"stvepxl",	X(31,775),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
01917d
 {"lvlxl",	X(31,775),	X_MASK,      CELL,	PPCNONE,	{VD, RA0, RB}},
01917d
 {"ldfcmux",	APU(31,775,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
01917d
@@ -5665,7 +6041,11 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"addo.",	XO(31,266,1,1),	XO_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 {"caxo.",	XO(31,266,1,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"modsd",	X(31,777),	X_MASK,      POWER9,	PPCNONE,	{RT, RA, RB}},
01917d
+{"modsw",	X(31,779),	X_MASK,      POWER9,	PPCNONE,	{RT, RA, RB}},
01917d
+
01917d
 {"lxvw4x",	X(31,780),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA0, RB}},
01917d
+{"lxsibzx",	X(31,781),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
 
01917d
 {"tabortwc.",	XRC(31,782,1),	X_MASK,      PPCHTM,	PPCNONE,	{TO, RA, RB}},
01917d
 
01917d
@@ -5692,6 +6072,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"stvepx",	X(31,807),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
01917d
 {"lvrxl",	X(31,807),	X_MASK,      CELL,	PPCNONE,	{VD, RA0, RB}},
01917d
 
01917d
+{"lxvh8x",	X(31,812),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
+{"lxsihzx",	X(31,813),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
+
01917d
 {"tabortdc.",	XRC(31,814,1),	X_MASK,      PPCHTM,	PPCNONE,	{TO, RA, RB}},
01917d
 
01917d
 {"rac",		X(31,818),	X_MASK,      M601,	PPCNONE,	{RT, RA, RB}},
01917d
@@ -5714,17 +6097,20 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 
01917d
 {"lvtlxl",	X(31,837),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
01917d
 
01917d
+{"cp_abort",	X(31,838),	XRTRARB_MASK,POWER9,	PPCNONE,	{0}},
01917d
+
01917d
 {"divo",	XO(31,331,1,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
01917d
 {"divo.",	XO(31,331,1,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
 {"lxvd2x",	X(31,844),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA0, RB}},
01917d
-{"lxvx",	X(31,844),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA0, RB}},
01917d
+{"lxvx",	X(31,844),	XX1_MASK,    POWER8,	POWER9|PPCVSX3,	{XT6, RA0, RB}},
01917d
 
01917d
 {"tabortwci.",	XRC(31,846,1),	X_MASK,      PPCHTM,	PPCNONE,	{TO, RA, HTM_SI}},
01917d
 
01917d
 {"tlbsrx.",	XRC(31,850,1),	XRT_MASK,    PPCA2,	PPCNONE,	{RA0, RB}},
01917d
 
01917d
-{"slbmfev",	X(31,851),	XRA_MASK,    PPC64,	PPCNONE,	{RT, RB}},
01917d
+{"slbmfev",	X(31,851),	XRLA_MASK,   POWER9,	PPCNONE,	{RT, RB, A_L}},
01917d
+{"slbmfev",	X(31,851),	XRA_MASK,    PPC64,	POWER9,		{RT, RB}},
01917d
 
01917d
 {"lbzcix",	X(31,853),	X_MASK,      POWER6,	PPCNONE,	{RT, RA0, RB}},
01917d
 
01917d
@@ -5743,12 +6129,25 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"divso",	XO(31,363,1,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
01917d
 {"divso.",	XO(31,363,1,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"lxvb16x",	X(31,876),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA0, RB}},
01917d
+
01917d
 {"tabortdci.",	XRC(31,878,1),	X_MASK,      PPCHTM,	PPCNONE,	{TO, RA, HTM_SI}},
01917d
 
01917d
+{"rmieg",	X(31,882),	XRTRA_MASK,  POWER9,	PPCNONE,	{RB}},
01917d
+
01917d
 {"ldcix",	X(31,885),	X_MASK,      POWER6,	PPCNONE,	{RT, RA0, RB}},
01917d
 
01917d
+{"msgsync",	X(31,886),	0xffffffff,  POWER9,	PPCNONE,	{0}},
01917d
+
01917d
 {"lfiwzx",	X(31,887),	X_MASK,   POWER7|PPCA2,	PPCNONE,	{FRT, RA0, RB}},
01917d
 
01917d
+{"extswsli",	XS(31,445,0),	XS_MASK,     POWER9,	PPCNONE,	{RA, RS, SH6}},
01917d
+{"extswsli.",	XS(31,445,1),	XS_MASK,     POWER9,	PPCNONE,	{RA, RS, SH6}},
01917d
+
01917d
+{"paste",	XRC(31,902,0),  XLRT_MASK,   POWER9,	PPCNONE,	{RA0, RB, L0}},
01917d
+{"paste_last",	XRCL(31,902,1,1),XRT_MASK,   POWER9,	PPCNONE,	{RA0, RB}},
01917d
+{"paste.",	XRC(31,902,1),  XLRT_MASK,   POWER9,	PPCNONE,	{RA0, RB, L1}},
01917d
+
01917d
 {"stvlxl",	X(31,903),	X_MASK,      CELL,	PPCNONE,	{VS, RA0, RB}},
01917d
 {"stdfcmux",	APU(31,903,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
01917d
 
01917d
@@ -5758,13 +6157,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"divweuo.",	XO(31,395,1,1),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
 {"stxvw4x",	X(31,908),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA0, RB}},
01917d
+{"stxsibx",	X(31,909),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XS6, RA0, RB}},
01917d
 
01917d
 {"tabort.",	XRC(31,910,1),	XRTRB_MASK,  PPCHTM,	PPCNONE,	{RA}},
01917d
 
01917d
 {"tlbsx",	XRC(31,914,0),	X_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE, {RTO, RA0, RB}},
01917d
 {"tlbsx.",	XRC(31,914,1),	X_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE, {RTO, RA0, RB}},
01917d
 
01917d
-{"slbmfee",	X(31,915),	XRA_MASK,    PPC64,	PPCNONE,	{RT, RB}},
01917d
+{"slbmfee",	X(31,915),	XRLA_MASK,   POWER9,	PPCNONE,	{RT, RB, A_L}},
01917d
+{"slbmfee",	X(31,915),	XRA_MASK,    PPC64,	POWER9,		{RT, RB}},
01917d
 
01917d
 {"stwcix",	X(31,917),	X_MASK,      POWER6,	PPCNONE,	{RS, RA0, RB}},
01917d
 
01917d
@@ -5799,6 +6200,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"divweo",	XO(31,427,1,0),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
01917d
 {"divweo.",	XO(31,427,1,1),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"stxvh8x",	X(31,940),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XS6, RA0, RB}},
01917d
+{"stxsihx",	X(31,941),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XS6, RA0, RB}},
01917d
+
01917d
 {"treclaim.",	XRC(31,942,1),	XRTRB_MASK,  PPCHTM,	PPCNONE,	{RA}},
01917d
 
01917d
 {"tlbrehi",	XTLB(31,946,0),	XTLB_MASK,   PPC403,	PPCA2,		{RT, RA}},
01917d
@@ -5830,7 +6234,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"divwuo.",	XO(31,459,1,1),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
 {"stxvd2x",	X(31,972),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA0, RB}},
01917d
-{"stxvx",	X(31,972),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA0, RB}},
01917d
+{"stxvx",	X(31,972),	XX1_MASK,    POWER8,	POWER9|PPCVSX3,	{XS6, RA0, RB}},
01917d
 
01917d
 {"tlbld",	X(31,978),	XRTRA_MASK,  PPC, PPC403|BOOKE|PPCA2|PPC476, {RB}},
01917d
 {"tlbwehi",	XTLB(31,978,0),	XTLB_MASK,   PPC403,	PPCNONE,	{RT, RA}},
01917d
@@ -5863,6 +6267,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"divwo",	XO(31,491,1,0),	XO_MASK,   PPC|PPCVLE,	PPCNONE,	{RT, RA, RB}},
01917d
 {"divwo.",	XO(31,491,1,1),	XO_MASK,   PPC|PPCVLE,	PPCNONE,	{RT, RA, RB}},
01917d
 
01917d
+{"stxvb16x",	X(31,1004),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XS6, RA0, RB}},
01917d
+
01917d
 {"trechkpt.",	XRC(31,1006,1),	XRTRARB_MASK,PPCHTM,	PPCNONE,	{0}},
01917d
 
01917d
 {"tlbli",	X(31,1010),	XRTRA_MASK,  PPC,	TITAN,  	{RB}},
01917d
@@ -5947,6 +6353,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"psq_l",	OP(56),		OP_MASK,     PPCPS,	PPCNONE,	{FRT,PSD,RA,PSW,PSQ}},
01917d
 {"lfq",		OP(56),		OP_MASK,     POWER2,	PPCNONE,	{FRT, D, RA0}},
01917d
 
01917d
+{"lxsd",	DSO(57,2),	DS_MASK,     PPCVSX3,	PPCNONE,	{VD, DS, RA0}},
01917d
+{"lxssp",	DSO(57,3),	DS_MASK,     PPCVSX3,	PPCNONE,	{VD, DS, RA0}},
01917d
 {"lfdp",	OP(57),		OP_MASK,     POWER6,	POWER7,		{FRTp, DS, RA0}},
01917d
 {"psq_lu",	OP(57),		OP_MASK,     PPCPS,	PPCNONE,	{FRT,PSD,RA,PSW,PSQ}},
01917d
 {"lfqu",	OP(57),		OP_MASK,     POWER2,	PPCNONE,	{FRT, D, RA0}},
01917d
@@ -6046,6 +6454,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"dcmpu",	X(59,642),	X_MASK,      POWER6,	PPCNONE,	{BF,  FRA, FRB}},
01917d
 
01917d
 {"dtstsf",	X(59,674),	X_MASK,      POWER6,	PPCNONE,	{BF,  FRA, FRB}},
01917d
+{"dtstsfi",	X(59,675),      X_MASK|1<<22,POWER9,	PPCNONE,	{BF, UIM6, FRB}},
01917d
 
01917d
 {"drsp",	XRC(59,770,0),	X_MASK,      POWER6,	PPCNONE,	{FRT, FRB}},
01917d
 {"drsp.",	XRC(59,770,1),	X_MASK,      POWER6,	PPCNONE,	{FRT, FRB}},
01917d
@@ -6068,6 +6477,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"xsaddsp",	XX3(60,0),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsmaddasp",	XX3(60,1),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xxsldwi",	XX3(60,2),	XX3SHW_MASK, PPCVSX,	PPCNONE,	{XT6, XA6, XB6, SHW}},
01917d
+{"xscmpeqdp",	XX3(60,3),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xsrsqrtesp",	XX2(60,10),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
+{"xssqrtsp",	XX2(60,11),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
 {"xxsel",	XX4(60,3),	XX4_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6, XC6}},
01917d
 {"xssubsp",	XX3(60,8),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsmaddmsp",	XX3(60,9),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
@@ -6076,163 +6488,203 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"xxswapd",	XX3(60,10)|(2<<8), XX3_MASK, PPCVSX,	PPCNONE,	{XT6, XA6, XB6S}},
01917d
 {"xxmrgld",	XX3(60,10)|(3<<8), XX3_MASK, PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xxpermdi",	XX3(60,10),	XX3DM_MASK,  PPCVSX,	PPCNONE,	{XT6, XA6, XB6, DM}},
01917d
-{"xsrsqrtesp",	XX2(60,10),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
-{"xssqrtsp",	XX2(60,11),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscmpgtdp",	XX3(60,11),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xsresp",	XX2(60,26),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
 {"xsmulsp",	XX3(60,16),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsmsubasp",	XX3(60,17),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xxmrghw",	XX3(60,18),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xscmpgedp",	XX3(60,19),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsdivsp",	XX3(60,24),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsmsubmsp",	XX3(60,25),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xsresp",	XX2(60,26),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
+{"xxperm",	XX3(60,26),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xscmpnedp",	XX3(60,27),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsadddp",	XX3(60,32),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsmaddadp",	XX3(60,33),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xscmpudp",	XX3(60,35),	XX3BF_MASK,  PPCVSX,	PPCNONE,	{BF, XA6, XB6}},
01917d
+{"xscvdpuxws",	XX2(60,72),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsrdpi",	XX2(60,73),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsrsqrtedp",	XX2(60,74),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xssqrtdp",	XX2(60,75),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xssubdp",	XX3(60,40),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsmaddmdp",	XX3(60,41),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xscmpodp",	XX3(60,43),	XX3BF_MASK,  PPCVSX,	PPCNONE,	{BF, XA6, XB6}},
01917d
+{"xscvdpsxws",	XX2(60,88),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsrdpiz",	XX2(60,89),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsredp",	XX2(60,90),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xsmuldp",	XX3(60,48),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsmsubadp",	XX3(60,49),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xxmrglw",	XX3(60,50),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xsrdpip",	XX2(60,105),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xstsqrtdp",	XX2(60,106),	XX2BF_MASK,  PPCVSX,	PPCNONE,	{BF, XB6}},
01917d
+{"xsrdpic",	XX2(60,107),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xsdivdp",	XX3(60,56),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsmsubmdp",	XX3(60,57),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xxpermr",	XX3(60,58),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xscmpexpdp",	XX3(60,59),	XX3BF_MASK,  PPCVSX3,	PPCNONE,	{BF, XA6, XB6}},
01917d
+{"xsrdpim",	XX2(60,121),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xstdivdp",	XX3(60,61),	XX3BF_MASK,  PPCVSX,	PPCNONE,	{BF, XA6, XB6}},
01917d
 {"xvaddsp",	XX3(60,64),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvmaddasp",	XX3(60,65),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpeqsp",	XX3RC(60,67,0),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpeqsp.",	XX3RC(60,67,1),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvspuxws",	XX2(60,136),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrspi",	XX2(60,137),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrsqrtesp",	XX2(60,138),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvsqrtsp",	XX2(60,139),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvsubsp",	XX3(60,72),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xscvdpuxws",	XX2(60,72),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvmaddmsp",	XX3(60,73),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xsrdpi",	XX2(60,73),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xsrsqrtedp",	XX2(60,74),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xssqrtdp",	XX2(60,75),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvcmpgtsp",	XX3RC(60,75,0),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpgtsp.",	XX3RC(60,75,1),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvspsxws",	XX2(60,152),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrspiz",	XX2(60,153),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvresp",	XX2(60,154),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvmulsp",	XX3(60,80),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvmsubasp",	XX3(60,81),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xxspltw",	XX2(60,164),	XX2UIM_MASK, PPCVSX,	PPCNONE,	{XT6, XB6, UIM}},
01917d
+{"xxextractuw",	XX2(60,165),	XX2UIM4_MASK,PPCVSX3,	PPCNONE,	{XT6, XB6, UIMM4}},
01917d
 {"xvcmpgesp",	XX3RC(60,83,0),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpgesp.",	XX3RC(60,83,1),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvuxwsp",	XX2(60,168),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrspip",	XX2(60,169),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvtsqrtsp",	XX2(60,170),	XX2BF_MASK,  PPCVSX,	PPCNONE,	{BF, XB6}},
01917d
+{"xvrspic",	XX2(60,171),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvdivsp",	XX3(60,88),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xscvdpsxws",	XX2(60,88),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvmsubmsp",	XX3(60,89),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xsrdpiz",	XX2(60,89),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xsredp",	XX2(60,90),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xxspltib",	X(60,360),	XX1_MASK|3<<19, PPCVSX3,PPCNONE,	{XT6, IMM8}},
01917d
+{"xxinsertw",	XX2(60,181),	XX2UIM4_MASK,PPCVSX3,	PPCNONE,	{XT6, XB6, UIMM4}},
01917d
+{"xvcmpnesp",	XX3RC(60,91,0), XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcmpnesp.",	XX3RC(60,91,1), XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvsxwsp",	XX2(60,184),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrspim",	XX2(60,185),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvtdivsp",	XX3(60,93),	XX3BF_MASK,  PPCVSX,	PPCNONE,	{BF, XA6, XB6}},
01917d
 {"xvadddp",	XX3(60,96),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvmaddadp",	XX3(60,97),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpeqdp",	XX3RC(60,99,0),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpeqdp.",	XX3RC(60,99,1),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvdpuxws",	XX2(60,200),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrdpi",	XX2(60,201),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrsqrtedp",	XX2(60,202),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvsqrtdp",	XX2(60,203),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvsubdp",	XX3(60,104),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvmaddmdp",	XX3(60,105),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xsrdpip",	XX2(60,105),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xstsqrtdp",	XX2(60,106),	XX2BF_MASK,  PPCVSX,	PPCNONE,	{BF, XB6}},
01917d
-{"xsrdpic",	XX2(60,107),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvcmpgtdp",	XX3RC(60,107,0), XX3_MASK,   PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpgtdp.",	XX3RC(60,107,1), XX3_MASK,   PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvdpsxws",	XX2(60,216),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrdpiz",	XX2(60,217),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvredp",	XX2(60,218),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvmuldp",	XX3(60,112),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvmsubadp",	XX3(60,113),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpgedp",	XX3RC(60,115,0), XX3_MASK,   PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcmpgedp.",	XX3RC(60,115,1), XX3_MASK,   PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvuxwdp",	XX2(60,232),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrdpip",	XX2(60,233),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvtsqrtdp",	XX2(60,234),	XX2BF_MASK,  PPCVSX,	PPCNONE,	{BF, XB6}},
01917d
+{"xvrdpic",	XX2(60,235),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvdivdp",	XX3(60,120),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvmsubmdp",	XX3(60,121),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xsrdpim",	XX2(60,121),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvcmpnedp",	XX3RC(60,123,0), XX3_MASK,   PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcmpnedp.",	XX3RC(60,123,1), XX3_MASK,   PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvsxwdp",	XX2(60,248),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvrdpim",	XX2(60,249),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvtdivdp",	XX3(60,125),	XX3BF_MASK,  PPCVSX,	PPCNONE,	{BF, XA6, XB6}},
01917d
+{"xsmaxcdp",	XX3(60,128),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsnmaddasp",	XX3(60,129),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xxland",	XX3(60,130),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvcvspuxws",	XX2(60,136),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvdpsp",	XX2(60,265),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvdpspn",	XX2(60,267),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsmincdp",	XX3(60,136),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsnmaddmsp",	XX3(60,137),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrspi",	XX2(60,137),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xxlandc",	XX3(60,138),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrsqrtesp",	XX2(60,138),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvsqrtsp",	XX2(60,139),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsrsp",	XX2(60,281),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsmaxjdp",	XX3(60,144),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsnmsubasp",	XX3(60,145),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xxlor",	XX3(60,146),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvcvspsxws",	XX2(60,152),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvuxdsp",	XX2(60,296),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
+{"xststdcsp",	XX2(60,298),	XX2BFD_MASK, PPCVSX3,	PPCNONE,	{BF, XB6, DCMX}},
01917d
+{"xsminjdp",	XX3(60,152),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsnmsubmsp",	XX3(60,153),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrspiz",	XX2(60,153),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xxlxor",	XX3(60,154),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvresp",	XX2(60,154),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvsxdsp",	XX2(60,312),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
 {"xsmaxdp",	XX3(60,160),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsnmaddadp",	XX3(60,161),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xxlnor",	XX3(60,162),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xxspltw",	XX2(60,164),	XX2UIM_MASK, PPCVSX,	PPCNONE,	{XT6, XB6, UIM}},
01917d
+{"xscvdpuxds",	XX2(60,328),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvspdp",	XX2(60,329),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvspdpn",	XX2(60,331),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
 {"xsmindp",	XX3(60,168),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvcvuxwsp",	XX2(60,168),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xsnmaddmdp",	XX3(60,169),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrspip",	XX2(60,169),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvtsqrtsp",	XX2(60,170),	XX2BF_MASK,  PPCVSX,	PPCNONE,	{BF, XB6}},
01917d
 {"xxlorc",	XX3(60,170),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrspic",	XX2(60,171),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvdpsxds",	XX2(60,344),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsabsdp",	XX2(60,345),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsxexpdp",	XX2VA(60,347,0),XX2_MASK|1,  PPCVSX3,	PPCNONE,	{RT, XB6}},
01917d
+{"xsxsigdp",	XX2VA(60,347,1),XX2_MASK|1,  PPCVSX3,	PPCNONE,	{RT, XB6}},
01917d
+{"xscvhpdp",	XX2VA(60,347,16),XX2_MASK,   PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvdphp",	XX2VA(60,347,17),XX2_MASK,   PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
 {"xscpsgndp",	XX3(60,176),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xsnmsubadp",	XX3(60,177),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xxlnand",	XX3(60,178),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvcvsxwsp",	XX2(60,184),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xscvuxddp",	XX2(60,360),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsnabsdp",	XX2(60,361),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xststdcdp",	XX2(60,362),	XX2BFD_MASK, PPCVSX3,	PPCNONE,	{BF, XB6, DCMX}},
01917d
 {"xsnmsubmdp",	XX3(60,185),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrspim",	XX2(60,185),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xxleqv",	XX3(60,186),	XX3_MASK,    PPCVSX2,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xscvsxddp",	XX2(60,376),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsnegdp",	XX2(60,377),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvmaxsp",	XX3(60,192),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvnmaddasp",	XX3(60,193),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvcvspuxds",	XX2(60,392),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvcvdpsp",	XX2(60,393),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvminsp",	XX3(60,200),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvcvdpuxws",	XX2(60,200),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvnmaddmsp",	XX3(60,201),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrdpi",	XX2(60,201),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvrsqrtedp",	XX2(60,202),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvsqrtdp",	XX2(60,203),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvcvspsxds",	XX2(60,408),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvabssp",	XX2(60,409),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvmovsp",	XX3(60,208),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6S}},
01917d
 {"xvcpsgnsp",	XX3(60,208),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvnmsubasp",	XX3(60,209),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvcvdpsxws",	XX2(60,216),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvnmsubmsp",	XX3(60,217),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrdpiz",	XX2(60,217),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvredp",	XX2(60,218),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvmaxdp",	XX3(60,224),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvnmaddadp",	XX3(60,225),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvmindp",	XX3(60,232),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvnmaddmdp",	XX3(60,233),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvcvuxwdp",	XX2(60,232),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvrdpip",	XX2(60,233),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvtsqrtdp",	XX2(60,234),	XX2BF_MASK,  PPCVSX,	PPCNONE,	{BF, XB6}},
01917d
-{"xvrdpic",	XX2(60,235),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvmovdp",	XX3(60,240),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6S}},
01917d
-{"xvcpsgndp",	XX3(60,240),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvnmsubadp",	XX3(60,241),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvcvsxwdp",	XX2(60,248),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvnmsubmdp",	XX3(60,249),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
-{"xvrdpim",	XX2(60,249),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvdpsp",	XX2(60,265),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvdpspn",	XX2(60,267),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
-{"xsrsp",	XX2(60,281),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvuxdsp",	XX2(60,296),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvsxdsp",	XX2(60,312),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvdpuxds",	XX2(60,328),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvspdp",	XX2(60,329),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvspdpn",	XX2(60,331),	XX2_MASK,    PPCVSX2,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvdpsxds",	XX2(60,344),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xsabsdp",	XX2(60,345),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvuxddp",	XX2(60,360),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xsnabsdp",	XX2(60,361),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xscvsxddp",	XX2(60,376),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xsnegdp",	XX2(60,377),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvcvspuxds",	XX2(60,392),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvcvdpsp",	XX2(60,393),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvcvspsxds",	XX2(60,408),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
-{"xvabssp",	XX2(60,409),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvcvuxdsp",	XX2(60,424),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvnabssp",	XX2(60,425),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvtstdcsp",	XX2(60,426),	XX2DCMXS_MASK,PPCVSX3,	PPCNONE,	{XT6, XB6, DCMXS}},
01917d
+{"xviexpsp",	XX3(60,216),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvnmsubmsp",	XX3(60,217),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcvsxdsp",	XX2(60,440),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvnegsp",	XX2(60,441),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvmaxdp",	XX3(60,224),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvnmaddadp",	XX3(60,225),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcvdpuxds",	XX2(60,456),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvcvspdp",	XX2(60,457),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xsiexpdp",	X(60,918),	XX1_MASK,    PPCVSX3,	PPCNONE,	{XT6, RA, RB}},
01917d
+{"xvmindp",	XX3(60,232),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvnmaddmdp",	XX3(60,233),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcvdpsxds",	XX2(60,472),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvabsdp",	XX2(60,473),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvxexpdp",	XX2VA(60,475,0),XX2_MASK,    PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvxsigdp",	XX2VA(60,475,1),XX2_MASK,    PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xxbrh",	XX2VA(60,475,7),XX2_MASK,    PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvxexpsp",	XX2VA(60,475,8),XX2_MASK,    PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvxsigsp",	XX2VA(60,475,9),XX2_MASK,    PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xxbrw",	XX2VA(60,475,15),XX2_MASK,   PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xxbrd",	XX2VA(60,475,23),XX2_MASK,   PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvcvhpsp",	XX2VA(60,475,24),XX2_MASK,   PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvcvsphp",	XX2VA(60,475,25),XX2_MASK,   PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xxbrq",	XX2VA(60,475,31),XX2_MASK,   PPCVSX3,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvmovdp",	XX3(60,240),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6S}},
01917d
+{"xvcpsgndp",	XX3(60,240),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvnmsubadp",	XX3(60,241),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcvuxddp",	XX2(60,488),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvnabsdp",	XX2(60,489),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
+{"xvtstdcdp",	XX2(60,490),	XX2DCMXS_MASK,PPCVSX3,	PPCNONE,	{XT6, XB6, DCMXS}},
01917d
+{"xviexpdp",	XX3(60,248),	XX3_MASK,    PPCVSX3,	PPCNONE,	{XT6, XA6, XB6}},
01917d
+{"xvnmsubmdp",	XX3(60,249),	XX3_MASK,    PPCVSX,	PPCNONE,	{XT6, XA6, XB6}},
01917d
 {"xvcvsxddp",	XX2(60,504),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 {"xvnegdp",	XX2(60,505),	XX2_MASK,    PPCVSX,	PPCNONE,	{XT6, XB6}},
01917d
 
01917d
 {"psq_st",	OP(60),		OP_MASK,     PPCPS,	PPCNONE,	{FRS,PSD,RA,PSW,PSQ}},
01917d
 {"stfq",	OP(60),		OP_MASK,     POWER2,	PPCNONE,	{FRS, D, RA}},
01917d
 
01917d
+{"lxv",		DQX(61,1),	DQX_MASK,    PPCVSX3,	PPCNONE,	{XTQ6, DQ, RA0}},
01917d
+{"stxv",	DQX(61,5),	DQX_MASK,    PPCVSX3,	PPCNONE,	{XSQ6, DQ, RA0}},
01917d
+{"stxsd",	DSO(61,2),	DS_MASK,     PPCVSX3,	PPCNONE,	{VS, DS, RA0}},
01917d
+{"stxssp",	DSO(61,3),	DS_MASK,     PPCVSX3,	PPCNONE,	{VS, DS, RA0}},
01917d
 {"stfdp",	OP(61),		OP_MASK,     POWER6,	POWER7,		{FRSp, DS, RA0}},
01917d
 {"psq_stu",	OP(61),		OP_MASK,     PPCPS,	PPCNONE,	{FRS,PSD,RA,PSW,PSQ}},
01917d
 {"stfqu",	OP(61),		OP_MASK,     POWER2,	PPCNONE,	{FRS, D, RA}},
01917d
@@ -6241,7 +6693,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"stdu",	DSO(62,1),	DS_MASK,     PPC64,	PPCNONE,	{RS, DS, RAS}},
01917d
 {"stq",		DSO(62,2),	DS_MASK,     POWER4,	PPC476,		{RSQ, DS, RA0}},
01917d
 
01917d
-{"fcmpu",	X(63,0),     X_MASK|(3<<21), COM,	PPCEFS,		{BF, FRA, FRB}},
01917d
+{"fcmpu",	X(63,0),        XBF_MASK,    COM,	PPCEFS,		{BF, FRA, FRB}},
01917d
 
01917d
 {"daddq",	XRC(63,2,0),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRAp, FRBp}},
01917d
 {"daddq.",	XRC(63,2,1),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRAp, FRBp}},
01917d
@@ -6249,6 +6701,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"dquaq",	ZRC(63,3,0),	Z2_MASK,     POWER6,	PPCNONE,	{FRTp, FRAp, FRBp, RMC}},
01917d
 {"dquaq.",	ZRC(63,3,1),	Z2_MASK,     POWER6,	PPCNONE,	{FRTp, FRAp, FRBp, RMC}},
01917d
 
01917d
+{"xsaddqp",	XRC(63,4,0),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+{"xsaddqpo",	XRC(63,4,1),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
+{"xsrqpi",	ZRC(63,5,0),	Z2_MASK,     PPCVSX3,	PPCNONE,	{R, VD, VB, RMC}},
01917d
+{"xsrqpix",	ZRC(63,5,1),	Z2_MASK,     PPCVSX3,	PPCNONE,	{R, VD, VB, RMC}},
01917d
+
01917d
 {"fcpsgn",	XRC(63,8,0),	X_MASK, POWER6|PPCA2|PPC476, PPCNONE,	{FRT, FRA, FRB}},
01917d
 {"fcpsgn.",	XRC(63,8,1),	X_MASK, POWER6|PPCA2|PPC476, PPCNONE,	{FRT, FRA, FRB}},
01917d
 
01917d
@@ -6321,7 +6779,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"fnmadd.",	A(63,31,1),	A_MASK,      PPCCOM,	PPCEFS,		{FRT, FRA, FRC, FRB}},
01917d
 {"fnma.",	A(63,31,1),	A_MASK,      PWRCOM,	PPCNONE,	{FRT, FRA, FRC, FRB}},
01917d
 
01917d
-{"fcmpo",	X(63,32),    X_MASK|(3<<21), COM,	PPCEFS,		{BF, FRA, FRB}},
01917d
+{"fcmpo",	X(63,32),       XBF_MASK,    COM,	PPCEFS,		{BF, FRA, FRB}},
01917d
 
01917d
 {"dmulq",	XRC(63,34,0),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRAp, FRBp}},
01917d
 {"dmulq.",	XRC(63,34,1),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRAp, FRBp}},
01917d
@@ -6329,6 +6787,11 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"drrndq",	ZRC(63,35,0),	Z2_MASK,     POWER6,	PPCNONE,	{FRTp, FRA, FRBp, RMC}},
01917d
 {"drrndq.",	ZRC(63,35,1),	Z2_MASK,     POWER6,	PPCNONE,	{FRTp, FRA, FRBp, RMC}},
01917d
 
01917d
+{"xsmulqp",	XRC(63,36,0),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+{"xsmulqpo",	XRC(63,36,1),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
+{"xsrqpxp",	Z(63,37),	Z2_MASK,     PPCVSX3,	PPCNONE,	{R, VD, VB, RMC}},
01917d
+
01917d
 {"mtfsb1",	XRC(63,38,0),	XRARB_MASK,  COM,	PPCNONE,	{BT}},
01917d
 {"mtfsb1.",	XRC(63,38,1),	XRARB_MASK,  COM,	PPCNONE,	{BT}},
01917d
 
01917d
@@ -6355,10 +6818,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"drintxq",	ZRC(63,99,0),	Z2_MASK,     POWER6,	PPCNONE,	{R, FRTp, FRBp, RMC}},
01917d
 {"drintxq.",	ZRC(63,99,1),	Z2_MASK,     POWER6,	PPCNONE,	{R, FRTp, FRBp, RMC}},
01917d
 
01917d
-{"ftdiv",	X(63,128),   X_MASK|(3<<21), POWER7,	PPCNONE,	{BF, FRA, FRB}},
01917d
+{"xscpsgnqp",	X(63,100),      X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
+{"ftdiv",	X(63,128),      XBF_MASK,    POWER7,	PPCNONE,	{BF, FRA, FRB}},
01917d
 
01917d
 {"dcmpoq",	X(63,130),	X_MASK,      POWER6,	PPCNONE,	{BF, FRAp, FRBp}},
01917d
 
01917d
+{"xscmpoqp",	X(63,132),      XBF_MASK,    PPCVSX3,	PPCNONE,	{BF, VA, VB}},
01917d
+
01917d
 {"mtfsfi",  XRC(63,134,0), XWRA_MASK|(3<<21)|(1<<11), POWER6|PPCA2|PPC476, PPCNONE, {BFF, U, W}},
01917d
 {"mtfsfi",  XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, POWER6|PPCA2|PPC476, {BFF, U}},
01917d
 {"mtfsfi.", XRC(63,134,1), XWRA_MASK|(3<<21)|(1<<11), POWER6|PPCA2|PPC476, PPCNONE, {BFF, U, W}},
01917d
@@ -6372,9 +6839,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"fctiwuz",	XRC(63,143,0),	XRA_MASK,    POWER7,	PPCNONE,	{FRT, FRB}},
01917d
 {"fctiwuz.",	XRC(63,143,1),	XRA_MASK,    POWER7,	PPCNONE,	{FRT, FRB}},
01917d
 
01917d
-{"ftsqrt",	X(63,160), X_MASK|(3<<21|FRA_MASK), POWER7, PPCNONE,	{BF, FRB}},
01917d
+{"ftsqrt",	X(63,160),      XBF_MASK|FRA_MASK, POWER7, PPCNONE,	{BF, FRB}},
01917d
 
01917d
 {"dtstexq",	X(63,162),	X_MASK,      POWER6,	PPCNONE,	{BF, FRAp, FRBp}},
01917d
+
01917d
+{"xscmpexpqp",	X(63,164),      XBF_MASK,    PPCVSX3,	PPCNONE,	{BF, VA, VB}},
01917d
+
01917d
 {"dtstdcq",	Z(63,194),	Z_MASK,      POWER6,	PPCNONE,	{BF, FRAp, DCM}},
01917d
 {"dtstdgq",	Z(63,226),	Z_MASK,      POWER6,	PPCNONE,	{BF, FRAp, DGM}},
01917d
 
01917d
@@ -6396,27 +6866,53 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"dxexq",	XRC(63,354,0),	X_MASK,      POWER6,	PPCNONE,	{FRT, FRBp}},
01917d
 {"dxexq.",	XRC(63,354,1),	X_MASK,      POWER6,	PPCNONE,	{FRT, FRBp}},
01917d
 
01917d
+{"xsmaddqp",	XRC(63,388,0),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+{"xsmaddqpo",	XRC(63,388,1),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
 {"frin",	XRC(63,392,0),	XRA_MASK,    POWER5,	PPCNONE,	{FRT, FRB}},
01917d
 {"frin.",	XRC(63,392,1),	XRA_MASK,    POWER5,	PPCNONE,	{FRT, FRB}},
01917d
+
01917d
+{"xsmsubqp",	XRC(63,420,0),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+{"xsmsubqpo",	XRC(63,420,1),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
 {"friz",	XRC(63,424,0),	XRA_MASK,    POWER5,	PPCNONE,	{FRT, FRB}},
01917d
 {"friz.",	XRC(63,424,1),	XRA_MASK,    POWER5,	PPCNONE,	{FRT, FRB}},
01917d
+
01917d
+{"xsnmaddqp",	XRC(63,452,0),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+{"xsnmaddqpo",	XRC(63,452,1),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
 {"frip",	XRC(63,456,0),	XRA_MASK,    POWER5,	PPCNONE,	{FRT, FRB}},
01917d
 {"frip.",	XRC(63,456,1),	XRA_MASK,    POWER5,	PPCNONE,	{FRT, FRB}},
01917d
+
01917d
+{"xsnmsubqp",	XRC(63,484,0),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+{"xsnmsubqpo",	XRC(63,484,1),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
 {"frim",	XRC(63,488,0),	XRA_MASK,    POWER5,	PPCNONE,	{FRT, FRB}},
01917d
 {"frim.",	XRC(63,488,1),	XRA_MASK,    POWER5,	PPCNONE,	{FRT, FRB}},
01917d
 
01917d
 {"dsubq",	XRC(63,514,0),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRAp, FRBp}},
01917d
 {"dsubq.",	XRC(63,514,1),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRAp, FRBp}},
01917d
 
01917d
+{"xssubqp",	XRC(63,516,0),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+{"xssubqpo",	XRC(63,516,1),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
 {"ddivq",	XRC(63,546,0),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRAp, FRBp}},
01917d
 {"ddivq.",	XRC(63,546,1),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRAp, FRBp}},
01917d
 
01917d
+{"xsdivqp",	XRC(63,548,0),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+{"xsdivqpo",	XRC(63,548,1),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
 {"mffs",	XRC(63,583,0),	XRARB_MASK,  COM,	PPCEFS,		{FRT}},
01917d
 {"mffs.",	XRC(63,583,1),	XRARB_MASK,  COM,	PPCEFS,		{FRT}},
01917d
 
01917d
 {"dcmpuq",	X(63,642),	X_MASK,      POWER6,	PPCNONE,	{BF, FRAp, FRBp}},
01917d
 
01917d
+{"xscmpuqp",	X(63,644),      XBF_MASK,    PPCVSX3,	PPCNONE,	{BF, VA, VB}},
01917d
+
01917d
 {"dtstsfq",	X(63,674),	X_MASK,      POWER6,	PPCNONE,	{BF, FRA, FRBp}},
01917d
+{"dtstsfiq",	X(63,675),      X_MASK|1<<22,POWER9,	PPCNONE,	{BF, UIM6, FRBp}},
01917d
+
01917d
+{"xststdcqp",	X(63,708),      X_MASK,      PPCVSX3,	PPCNONE,	{BF, VB, DCMX}},
01917d
 
01917d
 {"mtfsf",	XFL(63,711,0),	XFL_MASK, POWER6|PPCA2|PPC476, PPCNONE,	{FLM, FRB, XFL_L, W}},
01917d
 {"mtfsf",	XFL(63,711,0),	XFL_MASK,    COM, POWER6|PPCA2|PPC476|PPCEFS,	{FLM, FRB}},
01917d
@@ -6429,6 +6925,14 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"dcffixq",	XRC(63,802,0),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRB}},
01917d
 {"dcffixq.",	XRC(63,802,1),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRB}},
01917d
 
01917d
+{"xsabsqp",	XVA(63,804,0),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xsxexpqp",	XVA(63,804,2),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xsnabsqp",	XVA(63,804,8),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xsnegqp",	XVA(63,804,16),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xsxsigqp",	XVA(63,804,18),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xssqrtqp",	XVARC(63,804,27,0), XVA_MASK, PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xssqrtqpo",	XVARC(63,804,27,1), XVA_MASK, PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+
01917d
 {"fctid",	XRC(63,814,0),	XRA_MASK,    PPC64,	PPCNONE,	{FRT, FRB}},
01917d
 {"fctid",	XRC(63,814,0),	XRA_MASK,    PPC476,	PPCNONE,	{FRT, FRB}},
01917d
 {"fctid.",	XRC(63,814,1),	XRA_MASK,    PPC64,	PPCNONE,	{FRT, FRB}},
01917d
@@ -6442,6 +6946,16 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"denbcdq",	XRC(63,834,0),	X_MASK,      POWER6,	PPCNONE,	{S, FRTp, FRBp}},
01917d
 {"denbcdq.",	XRC(63,834,1),	X_MASK,      POWER6,	PPCNONE,	{S, FRTp, FRBp}},
01917d
 
01917d
+{"xscvqpuwz",	XVA(63,836,1),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xscvudqp",	XVA(63,836,2),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xscvqpswz",	XVA(63,836,9),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xscvsdqp",	XVA(63,836,10),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xscvqpudz",	XVA(63,836,17),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xscvqpdp",	XVARC(63,836,20,0), XVA_MASK, PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xscvqpdpo",	XVARC(63,836,20,1), XVA_MASK, PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xscvdpqp",	XVA(63,836,22),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+{"xscvqpsdz",	XVA(63,836,25),	XVA_MASK,    PPCVSX3,	PPCNONE,	{VD, VB}},
01917d
+
01917d
 {"fmrgow",	X(63,838),	X_MASK,      PPCVSX2,	PPCNONE,	{FRT, FRA, FRB}},
01917d
 
01917d
 {"fcfid",	XRC(63,846,0),	XRA_MASK,    PPC64,	PPCNONE,	{FRT, FRB}},
01917d
@@ -6452,6 +6966,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
01917d
 {"diexq",	XRC(63,866,0),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRA, FRBp}},
01917d
 {"diexq.",	XRC(63,866,1),	X_MASK,      POWER6,	PPCNONE,	{FRTp, FRA, FRBp}},
01917d
 
01917d
+{"xsiexpqp",	X(63,868),	X_MASK,      PPCVSX3,	PPCNONE,	{VD, VA, VB}},
01917d
+
01917d
 {"fctidu",	XRC(63,942,0),	XRA_MASK, POWER7|PPCA2,	PPCNONE,	{FRT, FRB}},
01917d
 {"fctidu.",	XRC(63,942,1),	XRA_MASK, POWER7|PPCA2,	PPCNONE,	{FRT, FRB}},
01917d