Blame SOURCES/gdb-rhbz1320945-power9-24of38.patch

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