Merge tag 'libnvdimm-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 29 Jul 2016 00:22:07 +0000 (17:22 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 29 Jul 2016 00:38:16 +0000 (17:38 -0700)
Pull libnvdimm updates from Dan Williams:

 - Replace pcommit with ADR / directed-flushing.

   The pcommit instruction, which has not shipped on any product, is
   deprecated.  Instead, the requirement is that platforms implement
   either ADR, or provide one or more flush addresses per nvdimm.

   ADR (Asynchronous DRAM Refresh) flushes data in posted write buffers
   to the memory controller on a power-fail event.

   Flush addresses are defined in ACPI 6.x as an NVDIMM Firmware
   Interface Table (NFIT) sub-structure: "Flush Hint Address Structure".
   A flush hint is an mmio address that when written and fenced assures
   that all previous posted writes targeting a given dimm have been
   flushed to media.

 - On-demand ARS (address range scrub).

   Linux uses the results of the ACPI ARS commands to track bad blocks
   in pmem devices.  When latent errors are detected we re-scrub the
   media to refresh the bad block list, userspace can also request a
   re-scrub at any time.

 - Support for the Microsoft DSM (device specific method) command
   format.

 - Support for EDK2/OVMF virtual disk device memory ranges.

 - Various fixes and cleanups across the subsystem.

* tag 'libnvdimm-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm: (41 commits)
  libnvdimm-btt: Delete an unnecessary check before the function call "__nd_device_register"
  nfit: do an ARS scrub on hitting a latent media error
  nfit: move to nfit/ sub-directory
  nfit, libnvdimm: allow an ARS scrub to be triggered on demand
  libnvdimm: register nvdimm_bus devices with an nd_bus driver
  pmem: clarify a debug print in pmem_clear_poison
  x86/insn: remove pcommit
  Revert "KVM: x86: add pcommit support"
  nfit, tools/testing/nvdimm/: unify shutdown paths
  libnvdimm: move ->module to struct nvdimm_bus_descriptor
  nfit: cleanup acpi_nfit_init calling convention
  nfit: fix _FIT evaluation memory leak + use after free
  tools/testing/nvdimm: add manufacturing_{date|location} dimm properties
  tools/testing/nvdimm: add virtual ramdisk range
  acpi, nfit: treat virtual ramdisk SPA as pmem region
  pmem: kill __pmem address space
  pmem: kill wmb_pmem()
  libnvdimm, pmem: use nvdimm_flush() for namespace I/O writes
  fs/dax: remove wmb_pmem()
  libnvdimm, pmem: flush posted-write queues on shutdown
  ...

26 files changed:
1  2 
Documentation/filesystems/Locking
arch/powerpc/sysdev/axonram.c
arch/x86/include/asm/cpufeatures.h
arch/x86/kvm/vmx.c
arch/x86/lib/x86-opcode-map.txt
drivers/acpi/Kconfig
drivers/acpi/Makefile
drivers/block/brd.c
drivers/md/dm-linear.c
drivers/md/dm-snap.c
drivers/md/dm-stripe.c
drivers/md/dm-target.c
drivers/md/dm.c
drivers/nvdimm/blk.c
drivers/nvdimm/bus.c
drivers/nvdimm/pmem.c
drivers/s390/block/dcssblk.c
fs/dax.c
include/linux/blkdev.h
include/linux/compiler.h
include/linux/device-mapper.h
kernel/memremap.c
tools/perf/arch/x86/tests/insn-x86-dat-32.c
tools/perf/arch/x86/tests/insn-x86-dat-64.c
tools/perf/arch/x86/tests/insn-x86-dat-src.c
tools/perf/util/intel-pt-decoder/x86-opcode-map.txt

index ef46d3ac5774445169098e250980fe4a3f21305b,d9c37ec4c7605b0f329f595af1c69edc3a0ba7fa..1b3c39a7de627f572ece87d2a1c6ddd2cff27144
@@@ -15,14 -15,11 +15,14 @@@ prototypes
        int (*d_compare)(const struct dentry *, const struct dentry *,
                        unsigned int, const char *, const struct qstr *);
        int (*d_delete)(struct dentry *);
 +      int (*d_init)(struct dentry *);
        void (*d_release)(struct dentry *);
        void (*d_iput)(struct dentry *, struct inode *);
        char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen);
        struct vfsmount *(*d_automount)(struct path *path);
        int (*d_manage)(struct dentry *, bool);
 +      struct dentry *(*d_real)(struct dentry *, const struct inode *,
 +                               unsigned int);
  
  locking rules:
                rename_lock     ->d_lock        may block       rcu-walk
@@@ -31,14 -28,12 +31,14 @@@ d_weak_revalidate:no               no              yes             n
  d_hash                no              no              no              maybe
  d_compare:    yes             no              no              maybe
  d_delete:     no              yes             no              no
 +d_init:       no              no              yes             no
  d_release:    no              no              yes             no
  d_prune:        no              yes             no              no
  d_iput:               no              no              yes             no
  d_dname:      no              no              no              no
  d_automount:  no              no              yes             no
  d_manage:     no              no              yes (ref-walk)  maybe
 +d_real                no              no              yes             no
  
  --------------------------- inode_operations --------------------------- 
  prototypes:
@@@ -71,6 -66,7 +71,6 @@@
                                struct file *, unsigned open_flag,
                                umode_t create_mode, int *opened);
        int (*tmpfile) (struct inode *, struct dentry *, umode_t);
 -      int (*dentry_open)(struct dentry *, struct file *, const struct cred *);
  
  locking rules:
        all may block
@@@ -99,6 -95,7 +99,6 @@@ fiemap:               n
  update_time:  no
  atomic_open:  yes
  tmpfile:      no
 -dentry_open:  no
  
        Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
  victim.
@@@ -182,6 -179,7 +182,6 @@@ unlocks and drops the reference
  prototypes:
        int (*writepage)(struct page *page, struct writeback_control *wbc);
        int (*readpage)(struct file *, struct page *);
 -      int (*sync_page)(struct page *);
        int (*writepages)(struct address_space *, struct writeback_control *);
        int (*set_page_dirty)(struct page *page);
        int (*readpages)(struct file *filp, struct address_space *mapping,
        int (*releasepage) (struct page *, int);
        void (*freepage)(struct page *);
        int (*direct_IO)(struct kiocb *, struct iov_iter *iter);
 +      bool (*isolate_page) (struct page *, isolate_mode_t);
        int (*migratepage)(struct address_space *, struct page *, struct page *);
 +      void (*putback_page) (struct page *);
        int (*launder_page)(struct page *);
        int (*is_partially_uptodate)(struct page *, unsigned long, unsigned long);
        int (*error_remove_page)(struct address_space *, struct page *);
@@@ -212,6 -208,7 +212,6 @@@ locking rules
                        PageLocked(page)        i_mutex
  writepage:            yes, unlocks (see below)
  readpage:             yes, unlocks
 -sync_page:            maybe
  writepages:
  set_page_dirty                no
  readpages:
@@@ -222,17 -219,15 +222,17 @@@ invalidatepage:         ye
  releasepage:          yes
  freepage:             yes
  direct_IO:
 +isolate_page:         yes
  migratepage:          yes (both)
 +putback_page:         yes
  launder_page:         yes
  is_partially_uptodate:        yes
  error_remove_page:    yes
  swap_activate:                no
  swap_deactivate:      no
  
 -      ->write_begin(), ->write_end(), ->sync_page() and ->readpage()
 -may be called from the request handler (/dev/loop).
 +      ->write_begin(), ->write_end() and ->readpage() may be called from
 +the request handler (/dev/loop).
  
        ->readpage() unlocks the page, either synchronously or via I/O
  completion.
@@@ -288,6 -283,11 +288,6 @@@ will leave the page itself marked clea
  radix tree.  This incoherency can lead to all sorts of hard-to-debug problems
  in the filesystem like having dirty inodes at umount and losing written data.
  
 -      ->sync_page() locking rules are not well-defined - usually it is called
 -with lock on page, but that is not guaranteed. Considering the currently
 -existing instances of this method ->sync_page() itself doesn't look
 -well-defined...
 -
        ->writepages() is used for periodic writeback and for syscall-initiated
  sync operations.  The address_space should start I/O against at least
  *nr_to_write pages.  *nr_to_write must be decremented for each page which is
@@@ -395,7 -395,7 +395,7 @@@ prototypes
        int (*release) (struct gendisk *, fmode_t);
        int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
        int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
-       int (*direct_access) (struct block_device *, sector_t, void __pmem **,
+       int (*direct_access) (struct block_device *, sector_t, void **,
                                unsigned long *);
        int (*media_changed) (struct gendisk *);
        void (*unlock_native_capacity) (struct gendisk *);
@@@ -544,13 -544,13 +544,13 @@@ subsequent truncate), and then return w
  locked. The VM will unlock the page.
  
        ->map_pages() is called when VM asks to map easy accessible pages.
 -Filesystem should find and map pages associated with offsets from "pgoff"
 -till "max_pgoff". ->map_pages() is called with page table locked and must
 +Filesystem should find and map pages associated with offsets from "start_pgoff"
 +till "end_pgoff". ->map_pages() is called with page table locked and must
  not block.  If it's not possible to reach a page without blocking,
  filesystem should skip it. Filesystem should use do_set_pte() to setup
 -page table entry. Pointer to entry associated with offset "pgoff" is
 -passed in "pte" field in vm_fault structure. Pointers to entries for other
 -offsets should be calculated relative to "pte".
 +page table entry. Pointer to entry associated with the page is passed in
 +"pte" field in fault_env structure. Pointers to entries for other offsets
 +should be calculated relative to "pte".
  
        ->page_mkwrite() is called when a previously read-only pte is
  about to become writeable. The filesystem again must ensure that there are
index f9af6461521ab899396ce101d54e5a61af5a9df0,a87489d007dcdd62e02f0c3b4b47c5bbe6ab74ba..9144204442eb68438544a2e51af57ae13850af44
@@@ -143,12 -143,12 +143,12 @@@ axon_ram_make_request(struct request_qu
   */
  static long
  axon_ram_direct_access(struct block_device *device, sector_t sector,
-                      void __pmem **kaddr, pfn_t *pfn, long size)
+                      void **kaddr, pfn_t *pfn, long size)
  {
        struct axon_ram_bank *bank = device->bd_disk->private_data;
        loff_t offset = (loff_t)sector << AXON_RAM_SECTOR_SHIFT;
  
-       *kaddr = (void __pmem __force *) bank->io_addr + offset;
+       *kaddr = (void *) bank->io_addr + offset;
        *pfn = phys_to_pfn_t(bank->ph_addr + offset, PFN_DEV);
        return bank->size - offset;
  }
@@@ -223,6 -223,7 +223,6 @@@ static int axon_ram_probe(struct platfo
        bank->disk->first_minor = azfs_minor;
        bank->disk->fops = &axon_ram_devops;
        bank->disk->private_data = bank;
 -      bank->disk->driverfs_dev = &device->dev;
  
        sprintf(bank->disk->disk_name, "%s%d",
                        AXON_RAM_DEVICE_NAME, axon_ram_bank_id);
        set_capacity(bank->disk, bank->size >> AXON_RAM_SECTOR_SHIFT);
        blk_queue_make_request(bank->disk->queue, axon_ram_make_request);
        blk_queue_logical_block_size(bank->disk->queue, AXON_RAM_SECTOR_SIZE);
 -      add_disk(bank->disk);
 +      device_add_disk(&device->dev, bank->disk);
  
        bank->irq_id = irq_of_parse_and_map(device->dev.of_node, 0);
        if (bank->irq_id == NO_IRQ) {
index c64b1e9c5d1a30d916be2d944a3e94134b240fb0,700d97df7d28f032ac158950e69711d3d35fbd62..d683993248c8cf485cdc953325acb36a298b73c3
  #define X86_FEATURE_RDSEED    ( 9*32+18) /* The RDSEED instruction */
  #define X86_FEATURE_ADX               ( 9*32+19) /* The ADCX and ADOX instructions */
  #define X86_FEATURE_SMAP      ( 9*32+20) /* Supervisor Mode Access Prevention */
- #define X86_FEATURE_PCOMMIT   ( 9*32+22) /* PCOMMIT instruction */
  #define X86_FEATURE_CLFLUSHOPT        ( 9*32+23) /* CLFLUSHOPT instruction */
  #define X86_FEATURE_CLWB      ( 9*32+24) /* CLWB instruction */
  #define X86_FEATURE_AVX512PF  ( 9*32+26) /* AVX-512 Prefetch */
  #define X86_BUG_FXSAVE_LEAK   X86_BUG(6) /* FXSAVE leaks FOP/FIP/FOP */
  #define X86_BUG_CLFLUSH_MONITOR       X86_BUG(7) /* AAI65, CLFLUSH required before MONITOR */
  #define X86_BUG_SYSRET_SS_ATTRS       X86_BUG(8) /* SYSRET doesn't fix up SS attrs */
 -#define X86_BUG_NULL_SEG      X86_BUG(9) /* Nulling a selector preserves the base */
 -#define X86_BUG_SWAPGS_FENCE  X86_BUG(10) /* SWAPGS without input dep on GS */
 -
 -
  #ifdef CONFIG_X86_32
  /*
   * 64-bit kernels don't use X86_BUG_ESPFIX.  Make the define conditional
   */
  #define X86_BUG_ESPFIX                X86_BUG(9) /* "" IRET to 16-bit SS corrupts ESP/RSP high bits */
  #endif
 +#define X86_BUG_NULL_SEG      X86_BUG(10) /* Nulling a selector preserves the base */
 +#define X86_BUG_SWAPGS_FENCE  X86_BUG(11) /* SWAPGS without input dep on GS */
  
  #endif /* _ASM_X86_CPUFEATURES_H */
diff --combined arch/x86/kvm/vmx.c
index 7758680db20b78abbf35f1b263c5f9d8da33b5e1,48394e9d56efe01ab2feae9caa3ffa54da6f1954..df07a0a4611ffa81b059229aaa08d04a2981bc56
@@@ -2707,8 -2707,7 +2707,7 @@@ static void nested_vmx_setup_ctls_msrs(
                SECONDARY_EXEC_APIC_REGISTER_VIRT |
                SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
                SECONDARY_EXEC_WBINVD_EXITING |
-               SECONDARY_EXEC_XSAVES |
-               SECONDARY_EXEC_PCOMMIT;
+               SECONDARY_EXEC_XSAVES;
  
        if (enable_ept) {
                /* nested EPT: emulate EPT also to L1 */
@@@ -3270,7 -3269,6 +3269,6 @@@ static __init int setup_vmcs_config(str
                        SECONDARY_EXEC_SHADOW_VMCS |
                        SECONDARY_EXEC_XSAVES |
                        SECONDARY_EXEC_ENABLE_PML |
-                       SECONDARY_EXEC_PCOMMIT |
                        SECONDARY_EXEC_TSC_SCALING;
                if (adjust_vmx_controls(min2, opt2,
                                        MSR_IA32_VMX_PROCBASED_CTLS2,
@@@ -4858,9 -4856,6 +4856,6 @@@ static u32 vmx_secondary_exec_control(s
        if (!enable_pml)
                exec_control &= ~SECONDARY_EXEC_ENABLE_PML;
  
-       /* Currently, we allow L1 guest to directly run pcommit instruction. */
-       exec_control &= ~SECONDARY_EXEC_PCOMMIT;
        return exec_control;
  }
  
@@@ -4904,9 -4899,10 +4899,10 @@@ static int vmx_vcpu_setup(struct vcpu_v
  
        vmcs_write32(CPU_BASED_VM_EXEC_CONTROL, vmx_exec_control(vmx));
  
-       if (cpu_has_secondary_exec_ctrls())
+       if (cpu_has_secondary_exec_ctrls()) {
                vmcs_write32(SECONDARY_VM_EXEC_CONTROL,
                                vmx_secondary_exec_control(vmx));
+       }
  
        if (kvm_vcpu_apicv_active(&vmx->vcpu)) {
                vmcs_write64(EOI_EXIT_BITMAP0, 0);
        if (vmx_xsaves_supported())
                vmcs_write64(XSS_EXIT_BITMAP, VMX_XSS_EXIT_BITMAP);
  
 +      if (enable_pml) {
 +              ASSERT(vmx->pml_pg);
 +              vmcs_write64(PML_ADDRESS, page_to_phys(vmx->pml_pg));
 +              vmcs_write16(GUEST_PML_INDEX, PML_ENTITY_NUM - 1);
 +      }
 +
        return 0;
  }
  
@@@ -7564,13 -7554,6 +7560,6 @@@ static int handle_pml_full(struct kvm_v
        return 1;
  }
  
- static int handle_pcommit(struct kvm_vcpu *vcpu)
- {
-       /* we never catch pcommit instruct for L1 guest. */
-       WARN_ON(1);
-       return 1;
- }
  /*
   * The exit handlers return 1 if the exit was handled fully and guest execution
   * may resume.  Otherwise they set the kvm_run parameter to indicate what needs
@@@ -7621,7 -7604,6 +7610,6 @@@ static int (*const kvm_vmx_exit_handler
        [EXIT_REASON_XSAVES]                  = handle_xsaves,
        [EXIT_REASON_XRSTORS]                 = handle_xrstors,
        [EXIT_REASON_PML_FULL]                = handle_pml_full,
-       [EXIT_REASON_PCOMMIT]                 = handle_pcommit,
  };
  
  static const int kvm_vmx_max_exit_handlers =
@@@ -7930,8 -7912,6 +7918,6 @@@ static bool nested_vmx_exit_handled(str
                 * the XSS exit bitmap in vmcs12.
                 */
                return nested_cpu_has2(vmcs12, SECONDARY_EXEC_XSAVES);
-       case EXIT_REASON_PCOMMIT:
-               return nested_cpu_has2(vmcs12, SECONDARY_EXEC_PCOMMIT);
        default:
                return true;
        }
@@@ -7943,6 -7923,22 +7929,6 @@@ static void vmx_get_exit_info(struct kv
        *info2 = vmcs_read32(VM_EXIT_INTR_INFO);
  }
  
 -static int vmx_create_pml_buffer(struct vcpu_vmx *vmx)
 -{
 -      struct page *pml_pg;
 -
 -      pml_pg = alloc_page(GFP_KERNEL | __GFP_ZERO);
 -      if (!pml_pg)
 -              return -ENOMEM;
 -
 -      vmx->pml_pg = pml_pg;
 -
 -      vmcs_write64(PML_ADDRESS, page_to_phys(vmx->pml_pg));
 -      vmcs_write16(GUEST_PML_INDEX, PML_ENTITY_NUM - 1);
 -
 -      return 0;
 -}
 -
  static void vmx_destroy_pml_buffer(struct vcpu_vmx *vmx)
  {
        if (vmx->pml_pg) {
@@@ -8214,7 -8210,6 +8200,7 @@@ static int vmx_handle_exit(struct kvm_v
        if ((vectoring_info & VECTORING_INFO_VALID_MASK) &&
                        (exit_reason != EXIT_REASON_EXCEPTION_NMI &&
                        exit_reason != EXIT_REASON_EPT_VIOLATION &&
 +                      exit_reason != EXIT_REASON_PML_FULL &&
                        exit_reason != EXIT_REASON_TASK_SWITCH)) {
                vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
                vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_DELIVERY_EV;
@@@ -8845,22 -8840,6 +8831,22 @@@ static void vmx_load_vmcs01(struct kvm_
        put_cpu();
  }
  
 +/*
 + * Ensure that the current vmcs of the logical processor is the
 + * vmcs01 of the vcpu before calling free_nested().
 + */
 +static void vmx_free_vcpu_nested(struct kvm_vcpu *vcpu)
 +{
 +       struct vcpu_vmx *vmx = to_vmx(vcpu);
 +       int r;
 +
 +       r = vcpu_load(vcpu);
 +       BUG_ON(r);
 +       vmx_load_vmcs01(vcpu);
 +       free_nested(vmx);
 +       vcpu_put(vcpu);
 +}
 +
  static void vmx_free_vcpu(struct kvm_vcpu *vcpu)
  {
        struct vcpu_vmx *vmx = to_vmx(vcpu);
                vmx_destroy_pml_buffer(vmx);
        free_vpid(vmx->vpid);
        leave_guest_mode(vcpu);
 -      vmx_load_vmcs01(vcpu);
 -      free_nested(vmx);
 +      vmx_free_vcpu_nested(vcpu);
        free_loaded_vmcs(vmx->loaded_vmcs);
        kfree(vmx->guest_msrs);
        kvm_vcpu_uninit(vcpu);
@@@ -8891,26 -8871,14 +8877,26 @@@ static struct kvm_vcpu *vmx_create_vcpu
        if (err)
                goto free_vcpu;
  
 +      err = -ENOMEM;
 +
 +      /*
 +       * If PML is turned on, failure on enabling PML just results in failure
 +       * of creating the vcpu, therefore we can simplify PML logic (by
 +       * avoiding dealing with cases, such as enabling PML partially on vcpus
 +       * for the guest, etc.
 +       */
 +      if (enable_pml) {
 +              vmx->pml_pg = alloc_page(GFP_KERNEL | __GFP_ZERO);
 +              if (!vmx->pml_pg)
 +                      goto uninit_vcpu;
 +      }
 +
        vmx->guest_msrs = kmalloc(PAGE_SIZE, GFP_KERNEL);
        BUILD_BUG_ON(ARRAY_SIZE(vmx_msr_index) * sizeof(vmx->guest_msrs[0])
                     > PAGE_SIZE);
  
 -      err = -ENOMEM;
 -      if (!vmx->guest_msrs) {
 -              goto uninit_vcpu;
 -      }
 +      if (!vmx->guest_msrs)
 +              goto free_pml;
  
        vmx->loaded_vmcs = &vmx->vmcs01;
        vmx->loaded_vmcs->vmcs = alloc_vmcs();
        vmx->nested.current_vmptr = -1ull;
        vmx->nested.current_vmcs12 = NULL;
  
 -      /*
 -       * If PML is turned on, failure on enabling PML just results in failure
 -       * of creating the vcpu, therefore we can simplify PML logic (by
 -       * avoiding dealing with cases, such as enabling PML partially on vcpus
 -       * for the guest, etc.
 -       */
 -      if (enable_pml) {
 -              err = vmx_create_pml_buffer(vmx);
 -              if (err)
 -                      goto free_vmcs;
 -      }
 -
        return &vmx->vcpu;
  
  free_vmcs:
        free_loaded_vmcs(vmx->loaded_vmcs);
  free_msrs:
        kfree(vmx->guest_msrs);
 +free_pml:
 +      vmx_destroy_pml_buffer(vmx);
  uninit_vcpu:
        kvm_vcpu_uninit(&vmx->vcpu);
  free_vcpu:
@@@ -9094,15 -9072,6 +9080,6 @@@ static void vmx_cpuid_update(struct kvm
  
        if (cpu_has_secondary_exec_ctrls())
                vmcs_set_secondary_exec_control(secondary_exec_ctl);
-       if (static_cpu_has(X86_FEATURE_PCOMMIT) && nested) {
-               if (guest_cpuid_has_pcommit(vcpu))
-                       vmx->nested.nested_vmx_secondary_ctls_high |=
-                               SECONDARY_EXEC_PCOMMIT;
-               else
-                       vmx->nested.nested_vmx_secondary_ctls_high &=
-                               ~SECONDARY_EXEC_PCOMMIT;
-       }
  }
  
  static void vmx_set_supported_cpuid(u32 func, struct kvm_cpuid_entry2 *entry)
@@@ -9715,8 -9684,7 +9692,7 @@@ static void prepare_vmcs02(struct kvm_v
                exec_control &= ~(SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
                                  SECONDARY_EXEC_RDTSCP |
                                  SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
-                                 SECONDARY_EXEC_APIC_REGISTER_VIRT |
-                                 SECONDARY_EXEC_PCOMMIT);
+                                 SECONDARY_EXEC_APIC_REGISTER_VIRT);
                if (nested_cpu_has(vmcs12,
                                CPU_BASED_ACTIVATE_SECONDARY_CONTROLS))
                        exec_control |= vmcs12->secondary_vm_exec_control;
index ec378cd7b71ee4e067d0a4a9beb59413def3296c,28632ee683772bf26e9c7a5a740340b507a9e5d9..767be7c760340bd33b7e4a18b9a8f3a71d9db33e
  # opcode: escape # escaped-name
  # EndTable
  #
 +# mnemonics that begin with lowercase 'v' accept a VEX or EVEX prefix
 +# mnemonics that begin with lowercase 'k' accept a VEX prefix
 +#
  #<group maps>
  # GrpTable: GrpXXX
  # reg:  mnemonic [operand1[,operand2...]] [(extra1)[,(extra2)...] [| 2nd-mnemonic ...]
  # EndTable
  #
  # AVX Superscripts
 +#  (ev): this opcode requires EVEX prefix.
 +#  (evo): this opcode is changed by EVEX prefix (EVEX opcode)
  #  (v): this opcode requires VEX prefix.
  #  (v1): this opcode only supports 128bit VEX.
  #
@@@ -142,7 -137,7 +142,7 @@@ AVXcode
  # 0x60 - 0x6f
  60: PUSHA/PUSHAD (i64)
  61: POPA/POPAD (i64)
 -62: BOUND Gv,Ma (i64)
 +62: BOUND Gv,Ma (i64) | EVEX (Prefix)
  63: ARPL Ew,Gw (i64) | MOVSXD Gv,Ev (o64)
  64: SEG=FS (Prefix)
  65: SEG=GS (Prefix)
@@@ -404,17 -399,17 +404,17 @@@ AVXcode: 
  3f:
  # 0x0f 0x40-0x4f
  40: CMOVO Gv,Ev
 -41: CMOVNO Gv,Ev
 -42: CMOVB/C/NAE Gv,Ev
 +41: CMOVNO Gv,Ev | kandw/q Vk,Hk,Uk | kandb/d Vk,Hk,Uk (66)
 +42: CMOVB/C/NAE Gv,Ev | kandnw/q Vk,Hk,Uk | kandnb/d Vk,Hk,Uk (66)
  43: CMOVAE/NB/NC Gv,Ev
 -44: CMOVE/Z Gv,Ev
 -45: CMOVNE/NZ Gv,Ev
 -46: CMOVBE/NA Gv,Ev
 -47: CMOVA/NBE Gv,Ev
 +44: CMOVE/Z Gv,Ev | knotw/q Vk,Uk | knotb/d Vk,Uk (66)
 +45: CMOVNE/NZ Gv,Ev | korw/q Vk,Hk,Uk | korb/d Vk,Hk,Uk (66)
 +46: CMOVBE/NA Gv,Ev | kxnorw/q Vk,Hk,Uk | kxnorb/d Vk,Hk,Uk (66)
 +47: CMOVA/NBE Gv,Ev | kxorw/q Vk,Hk,Uk | kxorb/d Vk,Hk,Uk (66)
  48: CMOVS Gv,Ev
  49: CMOVNS Gv,Ev
 -4a: CMOVP/PE Gv,Ev
 -4b: CMOVNP/PO Gv,Ev
 +4a: CMOVP/PE Gv,Ev | kaddw/q Vk,Hk,Uk | kaddb/d Vk,Hk,Uk (66)
 +4b: CMOVNP/PO Gv,Ev | kunpckbw Vk,Hk,Uk (66) | kunpckwd/dq Vk,Hk,Uk
  4c: CMOVL/NGE Gv,Ev
  4d: CMOVNL/GE Gv,Ev
  4e: CMOVLE/NG Gv,Ev
  58: vaddps Vps,Hps,Wps | vaddpd Vpd,Hpd,Wpd (66) | vaddss Vss,Hss,Wss (F3),(v1) | vaddsd Vsd,Hsd,Wsd (F2),(v1)
  59: vmulps Vps,Hps,Wps | vmulpd Vpd,Hpd,Wpd (66) | vmulss Vss,Hss,Wss (F3),(v1) | vmulsd Vsd,Hsd,Wsd (F2),(v1)
  5a: vcvtps2pd Vpd,Wps | vcvtpd2ps Vps,Wpd (66) | vcvtss2sd Vsd,Hx,Wss (F3),(v1) | vcvtsd2ss Vss,Hx,Wsd (F2),(v1)
 -5b: vcvtdq2ps Vps,Wdq | vcvtps2dq Vdq,Wps (66) | vcvttps2dq Vdq,Wps (F3)
 +5b: vcvtdq2ps Vps,Wdq | vcvtqq2ps Vps,Wqq (evo) | vcvtps2dq Vdq,Wps (66) | vcvttps2dq Vdq,Wps (F3)
  5c: vsubps Vps,Hps,Wps | vsubpd Vpd,Hpd,Wpd (66) | vsubss Vss,Hss,Wss (F3),(v1) | vsubsd Vsd,Hsd,Wsd (F2),(v1)
  5d: vminps Vps,Hps,Wps | vminpd Vpd,Hpd,Wpd (66) | vminss Vss,Hss,Wss (F3),(v1) | vminsd Vsd,Hsd,Wsd (F2),(v1)
  5e: vdivps Vps,Hps,Wps | vdivpd Vpd,Hpd,Wpd (66) | vdivss Vss,Hss,Wss (F3),(v1) | vdivsd Vsd,Hsd,Wsd (F2),(v1)
  6c: vpunpcklqdq Vx,Hx,Wx (66),(v1)
  6d: vpunpckhqdq Vx,Hx,Wx (66),(v1)
  6e: movd/q Pd,Ey | vmovd/q Vy,Ey (66),(v1)
 -6f: movq Pq,Qq | vmovdqa Vx,Wx (66) | vmovdqu Vx,Wx (F3)
 +6f: movq Pq,Qq | vmovdqa Vx,Wx (66) | vmovdqa32/64 Vx,Wx (66),(evo) | vmovdqu Vx,Wx (F3) | vmovdqu32/64 Vx,Wx (F3),(evo) | vmovdqu8/16 Vx,Wx (F2),(ev)
  # 0x0f 0x70-0x7f
  70: pshufw Pq,Qq,Ib | vpshufd Vx,Wx,Ib (66),(v1) | vpshufhw Vx,Wx,Ib (F3),(v1) | vpshuflw Vx,Wx,Ib (F2),(v1)
  71: Grp12 (1A)
  76: pcmpeqd Pq,Qq | vpcmpeqd Vx,Hx,Wx (66),(v1)
  # Note: Remove (v), because vzeroall and vzeroupper becomes emms without VEX.
  77: emms | vzeroupper | vzeroall
 -78: VMREAD Ey,Gy
 -79: VMWRITE Gy,Ey
 -7a:
 -7b:
 +78: VMREAD Ey,Gy | vcvttps2udq/pd2udq Vx,Wpd (evo) | vcvttsd2usi Gv,Wx (F2),(ev) | vcvttss2usi Gv,Wx (F3),(ev) | vcvttps2uqq/pd2uqq Vx,Wx (66),(ev)
 +79: VMWRITE Gy,Ey | vcvtps2udq/pd2udq Vx,Wpd (evo) | vcvtsd2usi Gv,Wx (F2),(ev) | vcvtss2usi Gv,Wx (F3),(ev) | vcvtps2uqq/pd2uqq Vx,Wx (66),(ev)
 +7a: vcvtudq2pd/uqq2pd Vpd,Wx (F3),(ev) | vcvtudq2ps/uqq2ps Vpd,Wx (F2),(ev) | vcvttps2qq/pd2qq Vx,Wx (66),(ev)
 +7b: vcvtusi2sd Vpd,Hpd,Ev (F2),(ev) | vcvtusi2ss Vps,Hps,Ev (F3),(ev) | vcvtps2qq/pd2qq Vx,Wx (66),(ev)
  7c: vhaddpd Vpd,Hpd,Wpd (66) | vhaddps Vps,Hps,Wps (F2)
  7d: vhsubpd Vpd,Hpd,Wpd (66) | vhsubps Vps,Hps,Wps (F2)
  7e: movd/q Ey,Pd | vmovd/q Ey,Vy (66),(v1) | vmovq Vq,Wq (F3),(v1)
 -7f: movq Qq,Pq | vmovdqa Wx,Vx (66) | vmovdqu Wx,Vx (F3)
 +7f: movq Qq,Pq | vmovdqa Wx,Vx (66) | vmovdqa32/64 Wx,Vx (66),(evo) | vmovdqu Wx,Vx (F3) | vmovdqu32/64 Wx,Vx (F3),(evo) | vmovdqu8/16 Wx,Vx (F2),(ev)
  # 0x0f 0x80-0x8f
  # Note: "forced64" is Intel CPU behavior (see comment about CALL insn).
  80: JO Jz (f64)
  8e: JLE/JNG Jz (f64)
  8f: JNLE/JG Jz (f64)
  # 0x0f 0x90-0x9f
 -90: SETO Eb
 -91: SETNO Eb
 -92: SETB/C/NAE Eb
 -93: SETAE/NB/NC Eb
 +90: SETO Eb | kmovw/q Vk,Wk | kmovb/d Vk,Wk (66)
 +91: SETNO Eb | kmovw/q Mv,Vk | kmovb/d Mv,Vk (66)
 +92: SETB/C/NAE Eb | kmovw Vk,Rv | kmovb Vk,Rv (66) | kmovq/d Vk,Rv (F2)
 +93: SETAE/NB/NC Eb | kmovw Gv,Uk | kmovb Gv,Uk (66) | kmovq/d Gv,Uk (F2)
  94: SETE/Z Eb
  95: SETNE/NZ Eb
  96: SETBE/NA Eb
  97: SETA/NBE Eb
 -98: SETS Eb
 -99: SETNS Eb
 +98: SETS Eb | kortestw/q Vk,Uk | kortestb/d Vk,Uk (66)
 +99: SETNS Eb | ktestw/q Vk,Uk | ktestb/d Vk,Uk (66)
  9a: SETP/PE Eb
  9b: SETNP/PO Eb
  9c: SETL/NGE Eb
@@@ -569,11 -564,11 +569,11 @@@ d7: pmovmskb Gd,Nq | vpmovmskb Gd,Ux (6
  d8: psubusb Pq,Qq | vpsubusb Vx,Hx,Wx (66),(v1)
  d9: psubusw Pq,Qq | vpsubusw Vx,Hx,Wx (66),(v1)
  da: pminub Pq,Qq | vpminub Vx,Hx,Wx (66),(v1)
 -db: pand Pq,Qq | vpand Vx,Hx,Wx (66),(v1)
 +db: pand Pq,Qq | vpand Vx,Hx,Wx (66),(v1) | vpandd/q Vx,Hx,Wx (66),(evo)
  dc: paddusb Pq,Qq | vpaddusb Vx,Hx,Wx (66),(v1)
  dd: paddusw Pq,Qq | vpaddusw Vx,Hx,Wx (66),(v1)
  de: pmaxub Pq,Qq | vpmaxub Vx,Hx,Wx (66),(v1)
 -df: pandn Pq,Qq | vpandn Vx,Hx,Wx (66),(v1)
 +df: pandn Pq,Qq | vpandn Vx,Hx,Wx (66),(v1) | vpandnd/q Vx,Hx,Wx (66),(evo)
  # 0x0f 0xe0-0xef
  e0: pavgb Pq,Qq | vpavgb Vx,Hx,Wx (66),(v1)
  e1: psraw Pq,Qq | vpsraw Vx,Hx,Wx (66),(v1)
@@@ -581,16 -576,16 +581,16 @@@ e2: psrad Pq,Qq | vpsrad Vx,Hx,Wx (66),
  e3: pavgw Pq,Qq | vpavgw Vx,Hx,Wx (66),(v1)
  e4: pmulhuw Pq,Qq | vpmulhuw Vx,Hx,Wx (66),(v1)
  e5: pmulhw Pq,Qq | vpmulhw Vx,Hx,Wx (66),(v1)
 -e6: vcvttpd2dq Vx,Wpd (66) | vcvtdq2pd Vx,Wdq (F3) | vcvtpd2dq Vx,Wpd (F2)
 +e6: vcvttpd2dq Vx,Wpd (66) | vcvtdq2pd Vx,Wdq (F3) | vcvtdq2pd/qq2pd Vx,Wdq (F3),(evo) | vcvtpd2dq Vx,Wpd (F2)
  e7: movntq Mq,Pq | vmovntdq Mx,Vx (66)
  e8: psubsb Pq,Qq | vpsubsb Vx,Hx,Wx (66),(v1)
  e9: psubsw Pq,Qq | vpsubsw Vx,Hx,Wx (66),(v1)
  ea: pminsw Pq,Qq | vpminsw Vx,Hx,Wx (66),(v1)
 -eb: por Pq,Qq | vpor Vx,Hx,Wx (66),(v1)
 +eb: por Pq,Qq | vpor Vx,Hx,Wx (66),(v1) | vpord/q Vx,Hx,Wx (66),(evo)
  ec: paddsb Pq,Qq | vpaddsb Vx,Hx,Wx (66),(v1)
  ed: paddsw Pq,Qq | vpaddsw Vx,Hx,Wx (66),(v1)
  ee: pmaxsw Pq,Qq | vpmaxsw Vx,Hx,Wx (66),(v1)
 -ef: pxor Pq,Qq | vpxor Vx,Hx,Wx (66),(v1)
 +ef: pxor Pq,Qq | vpxor Vx,Hx,Wx (66),(v1) | vpxord/q Vx,Hx,Wx (66),(evo)
  # 0x0f 0xf0-0xff
  f0: vlddqu Vx,Mx (F2)
  f1: psllw Pq,Qq | vpsllw Vx,Hx,Wx (66),(v1)
@@@ -631,105 -626,81 +631,105 @@@ AVXcode: 
  0e: vtestps Vx,Wx (66),(v)
  0f: vtestpd Vx,Wx (66),(v)
  # 0x0f 0x38 0x10-0x1f
 -10: pblendvb Vdq,Wdq (66)
 -11:
 -12:
 -13: vcvtph2ps Vx,Wx,Ib (66),(v)
 -14: blendvps Vdq,Wdq (66)
 -15: blendvpd Vdq,Wdq (66)
 -16: vpermps Vqq,Hqq,Wqq (66),(v)
 +10: pblendvb Vdq,Wdq (66) | vpsrlvw Vx,Hx,Wx (66),(evo) | vpmovuswb Wx,Vx (F3),(ev)
 +11: vpmovusdb Wx,Vd (F3),(ev) | vpsravw Vx,Hx,Wx (66),(ev)
 +12: vpmovusqb Wx,Vq (F3),(ev) | vpsllvw Vx,Hx,Wx (66),(ev)
 +13: vcvtph2ps Vx,Wx (66),(v) | vpmovusdw Wx,Vd (F3),(ev)
 +14: blendvps Vdq,Wdq (66) | vpmovusqw Wx,Vq (F3),(ev) | vprorvd/q Vx,Hx,Wx (66),(evo)
 +15: blendvpd Vdq,Wdq (66) | vpmovusqd Wx,Vq (F3),(ev) | vprolvd/q Vx,Hx,Wx (66),(evo)
 +16: vpermps Vqq,Hqq,Wqq (66),(v) | vpermps/d Vqq,Hqq,Wqq (66),(evo)
  17: vptest Vx,Wx (66)
  18: vbroadcastss Vx,Wd (66),(v)
 -19: vbroadcastsd Vqq,Wq (66),(v)
 -1a: vbroadcastf128 Vqq,Mdq (66),(v)
 -1b:
 +19: vbroadcastsd Vqq,Wq (66),(v) | vbroadcastf32x2 Vqq,Wq (66),(evo)
 +1a: vbroadcastf128 Vqq,Mdq (66),(v) | vbroadcastf32x4/64x2 Vqq,Wq (66),(evo)
 +1b: vbroadcastf32x8/64x4 Vqq,Mdq (66),(ev)
  1c: pabsb Pq,Qq | vpabsb Vx,Wx (66),(v1)
  1d: pabsw Pq,Qq | vpabsw Vx,Wx (66),(v1)
  1e: pabsd Pq,Qq | vpabsd Vx,Wx (66),(v1)
 -1f:
 +1f: vpabsq Vx,Wx (66),(ev)
  # 0x0f 0x38 0x20-0x2f
 -20: vpmovsxbw Vx,Ux/Mq (66),(v1)
 -21: vpmovsxbd Vx,Ux/Md (66),(v1)
 -22: vpmovsxbq Vx,Ux/Mw (66),(v1)
 -23: vpmovsxwd Vx,Ux/Mq (66),(v1)
 -24: vpmovsxwq Vx,Ux/Md (66),(v1)
 -25: vpmovsxdq Vx,Ux/Mq (66),(v1)
 -26:
 -27:
 -28: vpmuldq Vx,Hx,Wx (66),(v1)
 -29: vpcmpeqq Vx,Hx,Wx (66),(v1)
 -2a: vmovntdqa Vx,Mx (66),(v1)
 +20: vpmovsxbw Vx,Ux/Mq (66),(v1) | vpmovswb Wx,Vx (F3),(ev)
 +21: vpmovsxbd Vx,Ux/Md (66),(v1) | vpmovsdb Wx,Vd (F3),(ev)
 +22: vpmovsxbq Vx,Ux/Mw (66),(v1) | vpmovsqb Wx,Vq (F3),(ev)
 +23: vpmovsxwd Vx,Ux/Mq (66),(v1) | vpmovsdw Wx,Vd (F3),(ev)
 +24: vpmovsxwq Vx,Ux/Md (66),(v1) | vpmovsqw Wx,Vq (F3),(ev)
 +25: vpmovsxdq Vx,Ux/Mq (66),(v1) | vpmovsqd Wx,Vq (F3),(ev)
 +26: vptestmb/w Vk,Hx,Wx (66),(ev) | vptestnmb/w Vk,Hx,Wx (F3),(ev)
 +27: vptestmd/q Vk,Hx,Wx (66),(ev) | vptestnmd/q Vk,Hx,Wx (F3),(ev)
 +28: vpmuldq Vx,Hx,Wx (66),(v1) | vpmovm2b/w Vx,Uk (F3),(ev)
 +29: vpcmpeqq Vx,Hx,Wx (66),(v1) | vpmovb2m/w2m Vk,Ux (F3),(ev)
 +2a: vmovntdqa Vx,Mx (66),(v1) | vpbroadcastmb2q Vx,Uk (F3),(ev)
  2b: vpackusdw Vx,Hx,Wx (66),(v1)
 -2c: vmaskmovps Vx,Hx,Mx (66),(v)
 -2d: vmaskmovpd Vx,Hx,Mx (66),(v)
 +2c: vmaskmovps Vx,Hx,Mx (66),(v) | vscalefps/d Vx,Hx,Wx (66),(evo)
 +2d: vmaskmovpd Vx,Hx,Mx (66),(v) | vscalefss/d Vx,Hx,Wx (66),(evo)
  2e: vmaskmovps Mx,Hx,Vx (66),(v)
  2f: vmaskmovpd Mx,Hx,Vx (66),(v)
  # 0x0f 0x38 0x30-0x3f
 -30: vpmovzxbw Vx,Ux/Mq (66),(v1)
 -31: vpmovzxbd Vx,Ux/Md (66),(v1)
 -32: vpmovzxbq Vx,Ux/Mw (66),(v1)
 -33: vpmovzxwd Vx,Ux/Mq (66),(v1)
 -34: vpmovzxwq Vx,Ux/Md (66),(v1)
 -35: vpmovzxdq Vx,Ux/Mq (66),(v1)
 -36: vpermd Vqq,Hqq,Wqq (66),(v)
 +30: vpmovzxbw Vx,Ux/Mq (66),(v1) | vpmovwb Wx,Vx (F3),(ev)
 +31: vpmovzxbd Vx,Ux/Md (66),(v1) | vpmovdb Wx,Vd (F3),(ev)
 +32: vpmovzxbq Vx,Ux/Mw (66),(v1) | vpmovqb Wx,Vq (F3),(ev)
 +33: vpmovzxwd Vx,Ux/Mq (66),(v1) | vpmovdw Wx,Vd (F3),(ev)
 +34: vpmovzxwq Vx,Ux/Md (66),(v1) | vpmovqw Wx,Vq (F3),(ev)
 +35: vpmovzxdq Vx,Ux/Mq (66),(v1) | vpmovqd Wx,Vq (F3),(ev)
 +36: vpermd Vqq,Hqq,Wqq (66),(v) | vpermd/q Vqq,Hqq,Wqq (66),(evo)
  37: vpcmpgtq Vx,Hx,Wx (66),(v1)
 -38: vpminsb Vx,Hx,Wx (66),(v1)
 -39: vpminsd Vx,Hx,Wx (66),(v1)
 -3a: vpminuw Vx,Hx,Wx (66),(v1)
 -3b: vpminud Vx,Hx,Wx (66),(v1)
 +38: vpminsb Vx,Hx,Wx (66),(v1) | vpmovm2d/q Vx,Uk (F3),(ev)
 +39: vpminsd Vx,Hx,Wx (66),(v1) | vpminsd/q Vx,Hx,Wx (66),(evo) | vpmovd2m/q2m Vk,Ux (F3),(ev)
 +3a: vpminuw Vx,Hx,Wx (66),(v1) | vpbroadcastmw2d Vx,Uk (F3),(ev)
 +3b: vpminud Vx,Hx,Wx (66),(v1) | vpminud/q Vx,Hx,Wx (66),(evo)
  3c: vpmaxsb Vx,Hx,Wx (66),(v1)
 -3d: vpmaxsd Vx,Hx,Wx (66),(v1)
 +3d: vpmaxsd Vx,Hx,Wx (66),(v1) | vpmaxsd/q Vx,Hx,Wx (66),(evo)
  3e: vpmaxuw Vx,Hx,Wx (66),(v1)
 -3f: vpmaxud Vx,Hx,Wx (66),(v1)
 +3f: vpmaxud Vx,Hx,Wx (66),(v1) | vpmaxud/q Vx,Hx,Wx (66),(evo)
  # 0x0f 0x38 0x40-0x8f
 -40: vpmulld Vx,Hx,Wx (66),(v1)
 +40: vpmulld Vx,Hx,Wx (66),(v1) | vpmulld/q Vx,Hx,Wx (66),(evo)
  41: vphminposuw Vdq,Wdq (66),(v1)
 -42:
 -43:
 -44:
 +42: vgetexpps/d Vx,Wx (66),(ev)
 +43: vgetexpss/d Vx,Hx,Wx (66),(ev)
 +44: vplzcntd/q Vx,Wx (66),(ev)
  45: vpsrlvd/q Vx,Hx,Wx (66),(v)
 -46: vpsravd Vx,Hx,Wx (66),(v)
 +46: vpsravd Vx,Hx,Wx (66),(v) | vpsravd/q Vx,Hx,Wx (66),(evo)
  47: vpsllvd/q Vx,Hx,Wx (66),(v)
 -# Skip 0x48-0x57
 +# Skip 0x48-0x4b
 +4c: vrcp14ps/d Vpd,Wpd (66),(ev)
 +4d: vrcp14ss/d Vsd,Hpd,Wsd (66),(ev)
 +4e: vrsqrt14ps/d Vpd,Wpd (66),(ev)
 +4f: vrsqrt14ss/d Vsd,Hsd,Wsd (66),(ev)
 +# Skip 0x50-0x57
  58: vpbroadcastd Vx,Wx (66),(v)
 -59: vpbroadcastq Vx,Wx (66),(v)
 -5a: vbroadcasti128 Vqq,Mdq (66),(v)
 -# Skip 0x5b-0x77
 +59: vpbroadcastq Vx,Wx (66),(v) | vbroadcasti32x2 Vx,Wx (66),(evo)
 +5a: vbroadcasti128 Vqq,Mdq (66),(v) | vbroadcasti32x4/64x2 Vx,Wx (66),(evo)
 +5b: vbroadcasti32x8/64x4 Vqq,Mdq (66),(ev)
 +# Skip 0x5c-0x63
 +64: vpblendmd/q Vx,Hx,Wx (66),(ev)
 +65: vblendmps/d Vx,Hx,Wx (66),(ev)
 +66: vpblendmb/w Vx,Hx,Wx (66),(ev)
 +# Skip 0x67-0x74
 +75: vpermi2b/w Vx,Hx,Wx (66),(ev)
 +76: vpermi2d/q Vx,Hx,Wx (66),(ev)
 +77: vpermi2ps/d Vx,Hx,Wx (66),(ev)
  78: vpbroadcastb Vx,Wx (66),(v)
  79: vpbroadcastw Vx,Wx (66),(v)
 -# Skip 0x7a-0x7f
 +7a: vpbroadcastb Vx,Rv (66),(ev)
 +7b: vpbroadcastw Vx,Rv (66),(ev)
 +7c: vpbroadcastd/q Vx,Rv (66),(ev)
 +7d: vpermt2b/w Vx,Hx,Wx (66),(ev)
 +7e: vpermt2d/q Vx,Hx,Wx (66),(ev)
 +7f: vpermt2ps/d Vx,Hx,Wx (66),(ev)
  80: INVEPT Gy,Mdq (66)
  81: INVPID Gy,Mdq (66)
  82: INVPCID Gy,Mdq (66)
 +83: vpmultishiftqb Vx,Hx,Wx (66),(ev)
 +88: vexpandps/d Vpd,Wpd (66),(ev)
 +89: vpexpandd/q Vx,Wx (66),(ev)
 +8a: vcompressps/d Wx,Vx (66),(ev)
 +8b: vpcompressd/q Wx,Vx (66),(ev)
  8c: vpmaskmovd/q Vx,Hx,Mx (66),(v)
 +8d: vpermb/w Vx,Hx,Wx (66),(ev)
  8e: vpmaskmovd/q Mx,Vx,Hx (66),(v)
  # 0x0f 0x38 0x90-0xbf (FMA)
 -90: vgatherdd/q Vx,Hx,Wx (66),(v)
 -91: vgatherqd/q Vx,Hx,Wx (66),(v)
 +90: vgatherdd/q Vx,Hx,Wx (66),(v) | vpgatherdd/q Vx,Wx (66),(evo)
 +91: vgatherqd/q Vx,Hx,Wx (66),(v) | vpgatherqd/q Vx,Wx (66),(evo)
  92: vgatherdps/d Vx,Hx,Wx (66),(v)
  93: vgatherqps/d Vx,Hx,Wx (66),(v)
  94:
  9d: vfnmadd132ss/d Vx,Hx,Wx (66),(v),(v1)
  9e: vfnmsub132ps/d Vx,Hx,Wx (66),(v)
  9f: vfnmsub132ss/d Vx,Hx,Wx (66),(v),(v1)
 +a0: vpscatterdd/q Wx,Vx (66),(ev)
 +a1: vpscatterqd/q Wx,Vx (66),(ev)
 +a2: vscatterdps/d Wx,Vx (66),(ev)
 +a3: vscatterqps/d Wx,Vx (66),(ev)
  a6: vfmaddsub213ps/d Vx,Hx,Wx (66),(v)
  a7: vfmsubadd213ps/d Vx,Hx,Wx (66),(v)
  a8: vfmadd213ps/d Vx,Hx,Wx (66),(v)
@@@ -758,8 -725,6 +758,8 @@@ ac: vfnmadd213ps/d Vx,Hx,Wx (66),(v
  ad: vfnmadd213ss/d Vx,Hx,Wx (66),(v),(v1)
  ae: vfnmsub213ps/d Vx,Hx,Wx (66),(v)
  af: vfnmsub213ss/d Vx,Hx,Wx (66),(v),(v1)
 +b4: vpmadd52luq Vx,Hx,Wx (66),(ev)
 +b5: vpmadd52huq Vx,Hx,Wx (66),(ev)
  b6: vfmaddsub231ps/d Vx,Hx,Wx (66),(v)
  b7: vfmsubadd231ps/d Vx,Hx,Wx (66),(v)
  b8: vfmadd231ps/d Vx,Hx,Wx (66),(v)
@@@ -771,15 -736,12 +771,15 @@@ bd: vfnmadd231ss/d Vx,Hx,Wx (66),(v),(v
  be: vfnmsub231ps/d Vx,Hx,Wx (66),(v)
  bf: vfnmsub231ss/d Vx,Hx,Wx (66),(v),(v1)
  # 0x0f 0x38 0xc0-0xff
 -c8: sha1nexte Vdq,Wdq
 +c4: vpconflictd/q Vx,Wx (66),(ev)
 +c6: Grp18 (1A)
 +c7: Grp19 (1A)
 +c8: sha1nexte Vdq,Wdq | vexp2ps/d Vx,Wx (66),(ev)
  c9: sha1msg1 Vdq,Wdq
 -ca: sha1msg2 Vdq,Wdq
 -cb: sha256rnds2 Vdq,Wdq
 -cc: sha256msg1 Vdq,Wdq
 -cd: sha256msg2 Vdq,Wdq
 +ca: sha1msg2 Vdq,Wdq | vrcp28ps/d Vx,Wx (66),(ev)
 +cb: sha256rnds2 Vdq,Wdq | vrcp28ss/d Vx,Hx,Wx (66),(ev)
 +cc: sha256msg1 Vdq,Wdq | vrsqrt28ps/d Vx,Wx (66),(ev)
 +cd: sha256msg2 Vdq,Wdq | vrsqrt28ss/d Vx,Hx,Wx (66),(ev)
  db: VAESIMC Vdq,Wdq (66),(v1)
  dc: VAESENC Vdq,Hdq,Wdq (66),(v1)
  dd: VAESENCLAST Vdq,Hdq,Wdq (66),(v1)
@@@ -801,15 -763,15 +801,15 @@@ AVXcode: 
  00: vpermq Vqq,Wqq,Ib (66),(v)
  01: vpermpd Vqq,Wqq,Ib (66),(v)
  02: vpblendd Vx,Hx,Wx,Ib (66),(v)
 -03:
 +03: valignd/q Vx,Hx,Wx,Ib (66),(ev)
  04: vpermilps Vx,Wx,Ib (66),(v)
  05: vpermilpd Vx,Wx,Ib (66),(v)
  06: vperm2f128 Vqq,Hqq,Wqq,Ib (66),(v)
  07:
 -08: vroundps Vx,Wx,Ib (66)
 -09: vroundpd Vx,Wx,Ib (66)
 -0a: vroundss Vss,Wss,Ib (66),(v1)
 -0b: vroundsd Vsd,Wsd,Ib (66),(v1)
 +08: vroundps Vx,Wx,Ib (66) | vrndscaleps Vx,Wx,Ib (66),(evo)
 +09: vroundpd Vx,Wx,Ib (66) | vrndscalepd Vx,Wx,Ib (66),(evo)
 +0a: vroundss Vss,Wss,Ib (66),(v1) | vrndscaless Vx,Hx,Wx,Ib (66),(evo)
 +0b: vroundsd Vsd,Wsd,Ib (66),(v1) | vrndscalesd Vx,Hx,Wx,Ib (66),(evo)
  0c: vblendps Vx,Hx,Wx,Ib (66)
  0d: vblendpd Vx,Hx,Wx,Ib (66)
  0e: vpblendw Vx,Hx,Wx,Ib (66),(v1)
  15: vpextrw Rd/Mw,Vdq,Ib (66),(v1)
  16: vpextrd/q Ey,Vdq,Ib (66),(v1)
  17: vextractps Ed,Vdq,Ib (66),(v1)
 -18: vinsertf128 Vqq,Hqq,Wqq,Ib (66),(v)
 -19: vextractf128 Wdq,Vqq,Ib (66),(v)
 +18: vinsertf128 Vqq,Hqq,Wqq,Ib (66),(v) | vinsertf32x4/64x2 Vqq,Hqq,Wqq,Ib (66),(evo)
 +19: vextractf128 Wdq,Vqq,Ib (66),(v) | vextractf32x4/64x2 Wdq,Vqq,Ib (66),(evo)
 +1a: vinsertf32x8/64x4 Vqq,Hqq,Wqq,Ib (66),(ev)
 +1b: vextractf32x8/64x4 Wdq,Vqq,Ib (66),(ev)
  1d: vcvtps2ph Wx,Vx,Ib (66),(v)
 +1e: vpcmpud/q Vk,Hd,Wd,Ib (66),(ev)
 +1f: vpcmpd/q Vk,Hd,Wd,Ib (66),(ev)
  20: vpinsrb Vdq,Hdq,Ry/Mb,Ib (66),(v1)
  21: vinsertps Vdq,Hdq,Udq/Md,Ib (66),(v1)
  22: vpinsrd/q Vdq,Hdq,Ey,Ib (66),(v1)
 -38: vinserti128 Vqq,Hqq,Wqq,Ib (66),(v)
 -39: vextracti128 Wdq,Vqq,Ib (66),(v)
 +23: vshuff32x4/64x2 Vx,Hx,Wx,Ib (66),(ev)
 +25: vpternlogd/q Vx,Hx,Wx,Ib (66),(ev)
 +26: vgetmantps/d Vx,Wx,Ib (66),(ev)
 +27: vgetmantss/d Vx,Hx,Wx,Ib (66),(ev)
 +30: kshiftrb/w Vk,Uk,Ib (66),(v)
 +31: kshiftrd/q Vk,Uk,Ib (66),(v)
 +32: kshiftlb/w Vk,Uk,Ib (66),(v)
 +33: kshiftld/q Vk,Uk,Ib (66),(v)
 +38: vinserti128 Vqq,Hqq,Wqq,Ib (66),(v) | vinserti32x4/64x2 Vqq,Hqq,Wqq,Ib (66),(evo)
 +39: vextracti128 Wdq,Vqq,Ib (66),(v) | vextracti32x4/64x2 Wdq,Vqq,Ib (66),(evo)
 +3a: vinserti32x8/64x4 Vqq,Hqq,Wqq,Ib (66),(ev)
 +3b: vextracti32x8/64x4 Wdq,Vqq,Ib (66),(ev)
 +3e: vpcmpub/w Vk,Hk,Wx,Ib (66),(ev)
 +3f: vpcmpb/w Vk,Hk,Wx,Ib (66),(ev)
  40: vdpps Vx,Hx,Wx,Ib (66)
  41: vdppd Vdq,Hdq,Wdq,Ib (66),(v1)
 -42: vmpsadbw Vx,Hx,Wx,Ib (66),(v1)
 +42: vmpsadbw Vx,Hx,Wx,Ib (66),(v1) | vdbpsadbw Vx,Hx,Wx,Ib (66),(evo)
 +43: vshufi32x4/64x2 Vx,Hx,Wx,Ib (66),(ev)
  44: vpclmulqdq Vdq,Hdq,Wdq,Ib (66),(v1)
  46: vperm2i128 Vqq,Hqq,Wqq,Ib (66),(v)
  4a: vblendvps Vx,Hx,Wx,Lx (66),(v)
  4b: vblendvpd Vx,Hx,Wx,Lx (66),(v)
  4c: vpblendvb Vx,Hx,Wx,Lx (66),(v1)
 +50: vrangeps/d Vx,Hx,Wx,Ib (66),(ev)
 +51: vrangess/d Vx,Hx,Wx,Ib (66),(ev)
 +54: vfixupimmps/d Vx,Hx,Wx,Ib (66),(ev)
 +55: vfixupimmss/d Vx,Hx,Wx,Ib (66),(ev)
 +56: vreduceps/d Vx,Wx,Ib (66),(ev)
 +57: vreducess/d Vx,Hx,Wx,Ib (66),(ev)
  60: vpcmpestrm Vdq,Wdq,Ib (66),(v1)
  61: vpcmpestri Vdq,Wdq,Ib (66),(v1)
  62: vpcmpistrm Vdq,Wdq,Ib (66),(v1)
  63: vpcmpistri Vdq,Wdq,Ib (66),(v1)
 +66: vfpclassps/d Vk,Wx,Ib (66),(ev)
 +67: vfpclassss/d Vk,Wx,Ib (66),(ev)
  cc: sha1rnds4 Vdq,Wdq,Ib
  df: VAESKEYGEN Vdq,Wdq,Ib (66),(v1)
  f0: RORX Gy,Ey,Ib (F2),(v)
@@@ -990,10 -927,8 +990,10 @@@ GrpTable: Grp1
  EndTable
  
  GrpTable: Grp13
 +0: vprord/q Hx,Wx,Ib (66),(ev)
 +1: vprold/q Hx,Wx,Ib (66),(ev)
  2: psrld Nq,Ib (11B) | vpsrld Hx,Ux,Ib (66),(11B),(v1)
 -4: psrad Nq,Ib (11B) | vpsrad Hx,Ux,Ib (66),(11B),(v1)
 +4: psrad Nq,Ib (11B) | vpsrad Hx,Ux,Ib (66),(11B),(v1) | vpsrad/q Hx,Ux,Ib (66),(evo)
  6: pslld Nq,Ib (11B) | vpslld Hx,Ux,Ib (66),(11B),(v1)
  EndTable
  
@@@ -1012,7 -947,7 +1012,7 @@@ GrpTable: Grp1
  4: XSAVE
  5: XRSTOR | lfence (11B)
  6: XSAVEOPT | clwb (66) | mfence (11B)
- 7: clflush | clflushopt (66) | sfence (11B) | pcommit (66),(11B)
+ 7: clflush | clflushopt (66) | sfence (11B)
  EndTable
  
  GrpTable: Grp16
@@@ -1028,20 -963,6 +1028,20 @@@ GrpTable: Grp1
  3: BLSI By,Ey (v)
  EndTable
  
 +GrpTable: Grp18
 +1: vgatherpf0dps/d Wx (66),(ev)
 +2: vgatherpf1dps/d Wx (66),(ev)
 +5: vscatterpf0dps/d Wx (66),(ev)
 +6: vscatterpf1dps/d Wx (66),(ev)
 +EndTable
 +
 +GrpTable: Grp19
 +1: vgatherpf0qps/d Wx (66),(ev)
 +2: vgatherpf1qps/d Wx (66),(ev)
 +5: vscatterpf0qps/d Wx (66),(ev)
 +6: vscatterpf1qps/d Wx (66),(ev)
 +EndTable
 +
  # AMD's Prefetch Group
  GrpTable: GrpP
  0: PREFETCH
diff --combined drivers/acpi/Kconfig
index acad70a0bb0dcccdc6d263b5767535554b668c7c,415b148a8698b71567290c56f6411b7176239bbf..aebd944bdaa125e6c0cd52dc475fe366c0feb4ba
@@@ -213,10 -213,6 +213,10 @@@ config ACPI_CPU_FREQ_PS
        bool
        select THERMAL
  
 +config ACPI_PROCESSOR_CSTATE
 +      def_bool y
 +      depends on IA64 || X86
 +
  config ACPI_PROCESSOR_IDLE
        bool
        select CPU_IDLE
@@@ -238,7 -234,7 +238,7 @@@ config ACPI_CPPC_LI
  config ACPI_PROCESSOR
        tristate "Processor"
        depends on X86 || IA64 || ARM64
 -      select ACPI_PROCESSOR_IDLE if X86 || IA64
 +      select ACPI_PROCESSOR_IDLE
        select ACPI_CPU_FREQ_PSS if X86 || IA64
        default y
        help
@@@ -295,8 -291,8 +295,8 @@@ config ACPI_THERMA
  config ACPI_NUMA
        bool "NUMA support"
        depends on NUMA
 -      depends on (X86 || IA64)
 -      default y if IA64_GENERIC || IA64_SGI_SN2
 +      depends on (X86 || IA64 || ARM64)
 +      default y if IA64_GENERIC || IA64_SGI_SN2 || ARM64
  
  config ACPI_CUSTOM_DSDT_FILE
        string "Custom DSDT Table file to include"
@@@ -315,12 -311,9 +315,12 @@@ config ACPI_CUSTOM_DSD
        bool
        default ACPI_CUSTOM_DSDT_FILE != ""
  
 +config ARCH_HAS_ACPI_TABLE_UPGRADE
 +      def_bool n
 +
  config ACPI_TABLE_UPGRADE
        bool "Allow upgrading ACPI tables via initrd"
 -      depends on BLK_DEV_INITRD && X86
 +      depends on BLK_DEV_INITRD && ARCH_HAS_ACPI_TABLE_UPGRADE
        default y
        help
          This option provides functionality to upgrade arbitrary ACPI tables
@@@ -454,35 -447,9 +454,10 @@@ config ACPI_REDUCED_HARDWARE_ONL
  
          If you are unsure what to do, do not enable this option.
  
- config ACPI_NFIT
-       tristate "ACPI NVDIMM Firmware Interface Table (NFIT)"
-       depends on PHYS_ADDR_T_64BIT
-       depends on BLK_DEV
-       depends on ARCH_HAS_MMIO_FLUSH
-       select LIBNVDIMM
-       help
-         Infrastructure to probe ACPI 6 compliant platforms for
-         NVDIMMs (NFIT) and register a libnvdimm device tree.  In
-         addition to storage devices this also enables libnvdimm to pass
-         ACPI._DSM messages for platform/dimm configuration.
-         To compile this driver as a module, choose M here:
-         the module will be called nfit.
- config ACPI_NFIT_DEBUG
-       bool "NFIT DSM debug"
-       depends on ACPI_NFIT
-       depends on DYNAMIC_DEBUG
-       default n
-       help
-         Enabling this option causes the nfit driver to dump the
-         input and output buffers of _DSM operations on the ACPI0012
-         device and its children.  This can be very verbose, so leave
-         it disabled unless you are debugging a hardware / firmware
-         issue.
+ source "drivers/acpi/nfit/Kconfig"
  
  source "drivers/acpi/apei/Kconfig"
 +source "drivers/acpi/dptf/Kconfig"
  
  config ACPI_EXTLOG
        tristate "Extended Error Log support"
@@@ -527,20 -494,6 +502,20 @@@ config XPOWER_PMIC_OPREGIO
        help
          This config adds ACPI operation region support for XPower AXP288 PMIC.
  
 +config BXT_WC_PMIC_OPREGION
 +      bool "ACPI operation region support for BXT WhiskeyCove PMIC"
 +      depends on INTEL_SOC_PMIC
 +      help
 +        This config adds ACPI operation region support for BXT WhiskeyCove PMIC.
 +
  endif
  
 +config ACPI_CONFIGFS
 +      tristate "ACPI configfs support"
 +      select CONFIGFS_FS
 +      help
 +        Select this option to enable support for ACPI configuration from
 +        userspace. The configurable ACPI groups will be visible under
 +        /config/acpi, assuming configfs is mounted under /config.
 +
  endif # ACPI
diff --combined drivers/acpi/Makefile
index 88f54f03e3d228a0bfabb674cc1a72b9a5177151,64a575a6f7ef9a89197458db171251321ee57b3b..35a6ccbe302580ecf713d5ec623168dc7ab48a0d
@@@ -44,6 -44,7 +44,6 @@@ acpi-y                                += acpi_lpss.o acpi_apd.
  acpi-y                                += acpi_platform.o
  acpi-y                                += acpi_pnp.o
  acpi-$(CONFIG_ARM_AMBA)       += acpi_amba.o
 -acpi-y                                += int340x_thermal.o
  acpi-y                                += power.o
  acpi-y                                += event.o
  acpi-$(CONFIG_ACPI_REDUCED_HARDWARE_ONLY) += evged.o
@@@ -69,7 -70,7 +69,7 @@@ obj-$(CONFIG_ACPI_PCI_SLOT)   += pci_slot
  obj-$(CONFIG_ACPI_PROCESSOR)  += processor.o
  obj-$(CONFIG_ACPI)            += container.o
  obj-$(CONFIG_ACPI_THERMAL)    += thermal.o
- obj-$(CONFIG_ACPI_NFIT)               += nfit.o
+ obj-$(CONFIG_ACPI_NFIT)               += nfit/
  obj-$(CONFIG_ACPI)            += acpi_memhotplug.o
  obj-$(CONFIG_ACPI_HOTPLUG_IOAPIC) += ioapic.o
  obj-$(CONFIG_ACPI_BATTERY)    += battery.o
@@@ -98,9 -99,5 +98,9 @@@ obj-$(CONFIG_ACPI_EXTLOG)     += acpi_extlo
  obj-$(CONFIG_PMIC_OPREGION)   += pmic/intel_pmic.o
  obj-$(CONFIG_CRC_PMIC_OPREGION) += pmic/intel_pmic_crc.o
  obj-$(CONFIG_XPOWER_PMIC_OPREGION) += pmic/intel_pmic_xpower.o
 +obj-$(CONFIG_BXT_WC_PMIC_OPREGION) += pmic/intel_pmic_bxtwc.o
 +
 +obj-$(CONFIG_ACPI_CONFIGFS)   += acpi_configfs.o
  
  video-objs                    += acpi_video.o video_detect.o
 +obj-y                         += dptf/
diff --combined drivers/block/brd.c
index ba5145d384d8013df86b1f36047303df26708518,5f1fe4e6208d749e0999525b2d5db0bfee5fc65d..3022dad240719138d0a0aca0f7b6a7d2486f862a
@@@ -339,7 -339,7 +339,7 @@@ static blk_qc_t brd_make_request(struc
        if (bio_end_sector(bio) > get_capacity(bdev->bd_disk))
                goto io_error;
  
 -      if (unlikely(bio->bi_rw & REQ_DISCARD)) {
 +      if (unlikely(bio_op(bio) == REQ_OP_DISCARD)) {
                if (sector & ((PAGE_SIZE >> SECTOR_SHIFT) - 1) ||
                    bio->bi_iter.bi_size & ~PAGE_MASK)
                        goto io_error;
                goto out;
        }
  
 -      rw = bio_rw(bio);
 -      if (rw == READA)
 -              rw = READ;
 +      rw = bio_data_dir(bio);
  
        bio_for_each_segment(bvec, bio, iter) {
                unsigned int len = bvec.bv_len;
@@@ -379,7 -381,7 +379,7 @@@ static int brd_rw_page(struct block_dev
  
  #ifdef CONFIG_BLK_DEV_RAM_DAX
  static long brd_direct_access(struct block_device *bdev, sector_t sector,
-                       void __pmem **kaddr, pfn_t *pfn, long size)
+                       void **kaddr, pfn_t *pfn, long size)
  {
        struct brd_device *brd = bdev->bd_disk->private_data;
        struct page *page;
        page = brd_insert_page(brd, sector);
        if (!page)
                return -ENOSPC;
-       *kaddr = (void __pmem *)page_address(page);
+       *kaddr = page_address(page);
        *pfn = page_to_pfn_t(page);
  
        return PAGE_SIZE;
@@@ -507,9 -509,7 +507,9 @@@ static struct brd_device *brd_alloc(in
        blk_queue_max_discard_sectors(brd->brd_queue, UINT_MAX);
        brd->brd_queue->limits.discard_zeroes_data = 1;
        queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, brd->brd_queue);
 -
 +#ifdef CONFIG_BLK_DEV_RAM_DAX
 +      queue_flag_set_unlocked(QUEUE_FLAG_DAX, brd->brd_queue);
 +#endif
        disk = brd->brd_disk = alloc_disk(max_part);
        if (!disk)
                goto out_free_queue;
diff --combined drivers/md/dm-linear.c
index 6d35dd4e9efbe45384dca916bf447396a30fe02e,05c35aacb3aaeadb4cfddd73a14fed73a7c1bbe0..4788b0b989a9bac661f07a8deb2c7a86a96c8677
@@@ -141,27 -141,9 +141,27 @@@ static int linear_iterate_devices(struc
        return fn(ti, lc->dev, lc->start, ti->len, data);
  }
  
-                                void __pmem **kaddr, pfn_t *pfn, long size)
 +static long linear_direct_access(struct dm_target *ti, sector_t sector,
++                               void **kaddr, pfn_t *pfn, long size)
 +{
 +      struct linear_c *lc = ti->private;
 +      struct block_device *bdev = lc->dev->bdev;
 +      struct blk_dax_ctl dax = {
 +              .sector = linear_map_sector(ti, sector),
 +              .size = size,
 +      };
 +      long ret;
 +
 +      ret = bdev_direct_access(bdev, &dax);
 +      *kaddr = dax.addr;
 +      *pfn = dax.pfn;
 +
 +      return ret;
 +}
 +
  static struct target_type linear_target = {
        .name   = "linear",
 -      .version = {1, 2, 1},
 +      .version = {1, 3, 0},
        .module = THIS_MODULE,
        .ctr    = linear_ctr,
        .dtr    = linear_dtr,
        .status = linear_status,
        .prepare_ioctl = linear_prepare_ioctl,
        .iterate_devices = linear_iterate_devices,
 +      .direct_access = linear_direct_access,
  };
  
  int __init dm_linear_init(void)
diff --combined drivers/md/dm-snap.c
index 731e1f5bd89574deb711419ebe8eaf7a544e605d,70bb0e8b62ce38c36975949923a6be13ef789fe5..ce2a910709f722ce065e365fd53a9ee326b6477e
@@@ -1680,7 -1680,7 +1680,7 @@@ static int snapshot_map(struct dm_targe
  
        init_tracked_chunk(bio);
  
 -      if (bio->bi_rw & REQ_FLUSH) {
 +      if (bio->bi_rw & REQ_PREFLUSH) {
                bio->bi_bdev = s->cow->bdev;
                return DM_MAPIO_REMAPPED;
        }
         * to copy an exception */
        down_write(&s->lock);
  
 -      if (!s->valid || (unlikely(s->snapshot_overflowed) && bio_rw(bio) == WRITE)) {
 +      if (!s->valid || (unlikely(s->snapshot_overflowed) &&
 +          bio_data_dir(bio) == WRITE)) {
                r = -EIO;
                goto out_unlock;
        }
         * flags so we should only get this if we are
         * writeable.
         */
 -      if (bio_rw(bio) == WRITE) {
 +      if (bio_data_dir(bio) == WRITE) {
                pe = __lookup_pending_exception(s, chunk);
                if (!pe) {
                        up_write(&s->lock);
@@@ -1800,7 -1799,7 +1800,7 @@@ static int snapshot_merge_map(struct dm
  
        init_tracked_chunk(bio);
  
 -      if (bio->bi_rw & REQ_FLUSH) {
 +      if (bio->bi_rw & REQ_PREFLUSH) {
                if (!dm_bio_get_target_bio_nr(bio))
                        bio->bi_bdev = s->origin->bdev;
                else
        e = dm_lookup_exception(&s->complete, chunk);
        if (e) {
                /* Queue writes overlapping with chunks being merged */
 -              if (bio_rw(bio) == WRITE &&
 +              if (bio_data_dir(bio) == WRITE &&
                    chunk >= s->first_merging_chunk &&
                    chunk < (s->first_merging_chunk +
                             s->num_merging_chunks)) {
  
                remap_exception(s, e, bio, chunk);
  
 -              if (bio_rw(bio) == WRITE)
 +              if (bio_data_dir(bio) == WRITE)
                        track_chunk(s, bio, chunk);
                goto out_unlock;
        }
  redirect_to_origin:
        bio->bi_bdev = s->origin->bdev;
  
 -      if (bio_rw(bio) == WRITE) {
 +      if (bio_data_dir(bio) == WRITE) {
                up_write(&s->lock);
                return do_origin(s->origin, bio);
        }
@@@ -2286,10 -2285,10 +2286,10 @@@ static int origin_map(struct dm_target 
  
        bio->bi_bdev = o->dev->bdev;
  
 -      if (unlikely(bio->bi_rw & REQ_FLUSH))
 +      if (unlikely(bio->bi_rw & REQ_PREFLUSH))
                return DM_MAPIO_REMAPPED;
  
 -      if (bio_rw(bio) != WRITE)
 +      if (bio_data_dir(bio) != WRITE)
                return DM_MAPIO_REMAPPED;
  
        available_sectors = o->split_boundary -
        return do_origin(o->dev, bio);
  }
  
-               void __pmem **kaddr, pfn_t *pfn, long size)
 +static long origin_direct_access(struct dm_target *ti, sector_t sector,
++              void **kaddr, pfn_t *pfn, long size)
 +{
 +      DMWARN("device does not support dax.");
 +      return -EIO;
 +}
 +
  /*
   * Set the target "max_io_len" field to the minimum of all the snapshots'
   * chunk sizes.
@@@ -2368,7 -2360,6 +2368,7 @@@ static struct target_type origin_targe
        .postsuspend = origin_postsuspend,
        .status  = origin_status,
        .iterate_devices = origin_iterate_devices,
 +      .direct_access = origin_direct_access,
  };
  
  static struct target_type snapshot_target = {
diff --combined drivers/md/dm-stripe.c
index 01bb9cf2a8c2318e1b5cf704728637acf95665c9,797ddb900b062079cae7aca92b0b7bad2ead619f..83f1d46671953323bd7390d57a6eef4099b61d5d
@@@ -286,14 -286,14 +286,14 @@@ static int stripe_map(struct dm_target 
        uint32_t stripe;
        unsigned target_bio_nr;
  
 -      if (bio->bi_rw & REQ_FLUSH) {
 +      if (bio->bi_rw & REQ_PREFLUSH) {
                target_bio_nr = dm_bio_get_target_bio_nr(bio);
                BUG_ON(target_bio_nr >= sc->stripes);
                bio->bi_bdev = sc->stripe[target_bio_nr].dev->bdev;
                return DM_MAPIO_REMAPPED;
        }
 -      if (unlikely(bio->bi_rw & REQ_DISCARD) ||
 -          unlikely(bio->bi_rw & REQ_WRITE_SAME)) {
 +      if (unlikely(bio_op(bio) == REQ_OP_DISCARD) ||
 +          unlikely(bio_op(bio) == REQ_OP_WRITE_SAME)) {
                target_bio_nr = dm_bio_get_target_bio_nr(bio);
                BUG_ON(target_bio_nr >= sc->stripes);
                return stripe_map_range(sc, bio, target_bio_nr);
        return DM_MAPIO_REMAPPED;
  }
  
-                                void __pmem **kaddr, pfn_t *pfn, long size)
 +static long stripe_direct_access(struct dm_target *ti, sector_t sector,
++                               void **kaddr, pfn_t *pfn, long size)
 +{
 +      struct stripe_c *sc = ti->private;
 +      uint32_t stripe;
 +      struct block_device *bdev;
 +      struct blk_dax_ctl dax = {
 +              .size = size,
 +      };
 +      long ret;
 +
 +      stripe_map_sector(sc, sector, &stripe, &dax.sector);
 +
 +      dax.sector += sc->stripe[stripe].physical_start;
 +      bdev = sc->stripe[stripe].dev->bdev;
 +
 +      ret = bdev_direct_access(bdev, &dax);
 +      *kaddr = dax.addr;
 +      *pfn = dax.pfn;
 +
 +      return ret;
 +}
 +
  /*
   * Stripe status:
   *
@@@ -439,7 -416,7 +439,7 @@@ static void stripe_io_hints(struct dm_t
  
  static struct target_type stripe_target = {
        .name   = "striped",
 -      .version = {1, 5, 1},
 +      .version = {1, 6, 0},
        .module = THIS_MODULE,
        .ctr    = stripe_ctr,
        .dtr    = stripe_dtr,
        .status = stripe_status,
        .iterate_devices = stripe_iterate_devices,
        .io_hints = stripe_io_hints,
 +      .direct_access = stripe_direct_access,
  };
  
  int __init dm_stripe_init(void)
diff --combined drivers/md/dm-target.c
index 6eecd6b36f768fb0ea4e056b5742afce02089e28,a317dd884ba6b5aca1b1355e7537b28bfa5c1bd4..710ae28fd618256ea0b1da6fc34c40ae6e473066
@@@ -4,7 -4,7 +4,7 @@@
   * This file is released under the GPL.
   */
  
 -#include "dm.h"
 +#include "dm-core.h"
  
  #include <linux/module.h>
  #include <linux/init.h>
@@@ -148,15 -148,9 +148,15 @@@ static void io_err_release_clone_rq(str
  {
  }
  
-                                void __pmem **kaddr, pfn_t *pfn, long size)
 +static long io_err_direct_access(struct dm_target *ti, sector_t sector,
++                               void **kaddr, pfn_t *pfn, long size)
 +{
 +      return -EIO;
 +}
 +
  static struct target_type error_target = {
        .name = "error",
 -      .version = {1, 4, 0},
 +      .version = {1, 5, 0},
        .features = DM_TARGET_WILDCARD,
        .ctr  = io_err_ctr,
        .dtr  = io_err_dtr,
        .map_rq = io_err_map_rq,
        .clone_and_map_rq = io_err_clone_and_map_rq,
        .release_clone_rq = io_err_release_clone_rq,
 +      .direct_access = io_err_direct_access,
  };
  
  int __init dm_target_init(void)
diff --combined drivers/md/dm.c
index ceb69fc0b10b32773bd41d3c0b8beadf442571f7,1b2f96205361e28d3332fe3b71dbd5947cb4b9c8..25d1d97154a8b68c0f847acdfdc74cca4aa711f1
@@@ -5,13 -5,13 +5,13 @@@
   * This file is released under the GPL.
   */
  
 -#include "dm.h"
 +#include "dm-core.h"
 +#include "dm-rq.h"
  #include "dm-uevent.h"
  
  #include <linux/init.h>
  #include <linux/module.h>
  #include <linux/mutex.h>
 -#include <linux/moduleparam.h>
  #include <linux/blkpg.h>
  #include <linux/bio.h>
  #include <linux/mempool.h>
  #include <linux/hdreg.h>
  #include <linux/delay.h>
  #include <linux/wait.h>
 -#include <linux/kthread.h>
 -#include <linux/ktime.h>
 -#include <linux/elevator.h> /* for rq_end_sector() */
 -#include <linux/blk-mq.h>
  #include <linux/pr.h>
  
 -#include <trace/events/block.h>
 -
  #define DM_MSG_PREFIX "core"
  
  #ifdef CONFIG_PRINTK
@@@ -57,6 -63,7 +57,6 @@@ static DECLARE_WORK(deferred_remove_wor
  static struct workqueue_struct *deferred_remove_workqueue;
  
  /*
 - * For bio-based dm.
   * One of these is allocated per bio.
   */
  struct dm_io {
        struct dm_stats_aux stats_aux;
  };
  
 -/*
 - * For request-based dm.
 - * One of these is allocated per request.
 - */
 -struct dm_rq_target_io {
 -      struct mapped_device *md;
 -      struct dm_target *ti;
 -      struct request *orig, *clone;
 -      struct kthread_work work;
 -      int error;
 -      union map_info info;
 -      struct dm_stats_aux stats_aux;
 -      unsigned long duration_jiffies;
 -      unsigned n_sectors;
 -};
 -
 -/*
 - * For request-based dm - the bio clones we allocate are embedded in these
 - * structs.
 - *
 - * We allocate these with bio_alloc_bioset, using the front_pad parameter when
 - * the bioset is created - this means the bio has to come at the end of the
 - * struct.
 - */
 -struct dm_rq_clone_bio_info {
 -      struct bio *orig;
 -      struct dm_rq_target_io *tio;
 -      struct bio clone;
 -};
 -
  #define MINOR_ALLOCED ((void *)-1)
  
  /*
  #define DMF_DEFERRED_REMOVE 6
  #define DMF_SUSPENDED_INTERNALLY 7
  
 -/*
 - * Work processed by per-device workqueue.
 - */
 -struct mapped_device {
 -      struct srcu_struct io_barrier;
 -      struct mutex suspend_lock;
 -
 -      /*
 -       * The current mapping (struct dm_table *).
 -       * Use dm_get_live_table{_fast} or take suspend_lock for
 -       * dereference.
 -       */
 -      void __rcu *map;
 -
 -      struct list_head table_devices;
 -      struct mutex table_devices_lock;
 -
 -      unsigned long flags;
 -
 -      struct request_queue *queue;
 -      int numa_node_id;
 -
 -      unsigned type;
 -      /* Protect queue and type against concurrent access. */
 -      struct mutex type_lock;
 -
 -      atomic_t holders;
 -      atomic_t open_count;
 -
 -      struct dm_target *immutable_target;
 -      struct target_type *immutable_target_type;
 -
 -      struct gendisk *disk;
 -      char name[16];
 -
 -      void *interface_ptr;
 -
 -      /*
 -       * A list of ios that arrived while we were suspended.
 -       */
 -      atomic_t pending[2];
 -      wait_queue_head_t wait;
 -      struct work_struct work;
 -      spinlock_t deferred_lock;
 -      struct bio_list deferred;
 -
 -      /*
 -       * Event handling.
 -       */
 -      wait_queue_head_t eventq;
 -      atomic_t event_nr;
 -      atomic_t uevent_seq;
 -      struct list_head uevent_list;
 -      spinlock_t uevent_lock; /* Protect access to uevent_list */
 -
 -      /* the number of internal suspends */
 -      unsigned internal_suspend_count;
 -
 -      /*
 -       * Processing queue (flush)
 -       */
 -      struct workqueue_struct *wq;
 -
 -      /*
 -       * io objects are allocated from here.
 -       */
 -      mempool_t *io_pool;
 -      mempool_t *rq_pool;
 -
 -      struct bio_set *bs;
 -
 -      /*
 -       * freeze/thaw support require holding onto a super block
 -       */
 -      struct super_block *frozen_sb;
 -
 -      /* forced geometry settings */
 -      struct hd_geometry geometry;
 -
 -      struct block_device *bdev;
 -
 -      /* kobject and completion */
 -      struct dm_kobject_holder kobj_holder;
 -
 -      /* zero-length flush that will be cloned and submitted to targets */
 -      struct bio flush_bio;
 -
 -      struct dm_stats stats;
 -
 -      struct kthread_worker kworker;
 -      struct task_struct *kworker_task;
 -
 -      /* for request-based merge heuristic in dm_request_fn() */
 -      unsigned seq_rq_merge_deadline_usecs;
 -      int last_rq_rw;
 -      sector_t last_rq_pos;
 -      ktime_t last_rq_start_time;
 -
 -      /* for blk-mq request-based DM support */
 -      struct blk_mq_tag_set *tag_set;
 -      bool use_blk_mq:1;
 -      bool init_tio_pdu:1;
 -};
 -
 -#ifdef CONFIG_DM_MQ_DEFAULT
 -static bool use_blk_mq = true;
 -#else
 -static bool use_blk_mq = false;
 -#endif
 -
 -#define DM_MQ_NR_HW_QUEUES 1
 -#define DM_MQ_QUEUE_DEPTH 2048
  #define DM_NUMA_NODE NUMA_NO_NODE
 -
 -static unsigned dm_mq_nr_hw_queues = DM_MQ_NR_HW_QUEUES;
 -static unsigned dm_mq_queue_depth = DM_MQ_QUEUE_DEPTH;
  static int dm_numa_node = DM_NUMA_NODE;
  
 -bool dm_use_blk_mq(struct mapped_device *md)
 -{
 -      return md->use_blk_mq;
 -}
 -EXPORT_SYMBOL_GPL(dm_use_blk_mq);
 -
  /*
   * For mempools pre-allocation at the table loading time.
   */
@@@ -101,6 -259,9 +101,6 @@@ struct table_device 
        struct dm_dev dm_dev;
  };
  
 -#define RESERVED_BIO_BASED_IOS                16
 -#define RESERVED_REQUEST_BASED_IOS    256
 -#define RESERVED_MAX_IOS              1024
  static struct kmem_cache *_io_cache;
  static struct kmem_cache *_rq_tio_cache;
  static struct kmem_cache *_rq_cache;
  /*
   * Bio-based DM's mempools' reserved IOs set by the user.
   */
 +#define RESERVED_BIO_BASED_IOS                16
  static unsigned reserved_bio_based_ios = RESERVED_BIO_BASED_IOS;
  
 -/*
 - * Request-based DM's mempools' reserved IOs set by the user.
 - */
 -static unsigned reserved_rq_based_ios = RESERVED_REQUEST_BASED_IOS;
 -
  static int __dm_get_module_param_int(int *module_param, int min, int max)
  {
        int param = ACCESS_ONCE(*module_param);
        return param;
  }
  
 -static unsigned __dm_get_module_param(unsigned *module_param,
 -                                    unsigned def, unsigned max)
 +unsigned __dm_get_module_param(unsigned *module_param,
 +                             unsigned def, unsigned max)
  {
        unsigned param = ACCESS_ONCE(*module_param);
        unsigned modified_param = 0;
  unsigned dm_get_reserved_bio_based_ios(void)
  {
        return __dm_get_module_param(&reserved_bio_based_ios,
 -                                   RESERVED_BIO_BASED_IOS, RESERVED_MAX_IOS);
 +                                   RESERVED_BIO_BASED_IOS, DM_RESERVED_MAX_IOS);
  }
  EXPORT_SYMBOL_GPL(dm_get_reserved_bio_based_ios);
  
 -unsigned dm_get_reserved_rq_based_ios(void)
 -{
 -      return __dm_get_module_param(&reserved_rq_based_ios,
 -                                   RESERVED_REQUEST_BASED_IOS, RESERVED_MAX_IOS);
 -}
 -EXPORT_SYMBOL_GPL(dm_get_reserved_rq_based_ios);
 -
 -static unsigned dm_get_blk_mq_nr_hw_queues(void)
 -{
 -      return __dm_get_module_param(&dm_mq_nr_hw_queues, 1, 32);
 -}
 -
 -static unsigned dm_get_blk_mq_queue_depth(void)
 -{
 -      return __dm_get_module_param(&dm_mq_queue_depth,
 -                                   DM_MQ_QUEUE_DEPTH, BLK_MQ_MAX_DEPTH);
 -}
 -
  static unsigned dm_get_numa_node(void)
  {
        return __dm_get_module_param_int(&dm_numa_node,
@@@ -496,7 -679,29 +496,7 @@@ static void free_tio(struct dm_target_i
        bio_put(&tio->clone);
  }
  
 -static struct dm_rq_target_io *alloc_old_rq_tio(struct mapped_device *md,
 -                                              gfp_t gfp_mask)
 -{
 -      return mempool_alloc(md->io_pool, gfp_mask);
 -}
 -
 -static void free_old_rq_tio(struct dm_rq_target_io *tio)
 -{
 -      mempool_free(tio, tio->md->io_pool);
 -}
 -
 -static struct request *alloc_old_clone_request(struct mapped_device *md,
 -                                             gfp_t gfp_mask)
 -{
 -      return mempool_alloc(md->rq_pool, gfp_mask);
 -}
 -
 -static void free_old_clone_request(struct mapped_device *md, struct request *rq)
 -{
 -      mempool_free(rq, md->rq_pool);
 -}
 -
 -static int md_in_flight(struct mapped_device *md)
 +int md_in_flight(struct mapped_device *md)
  {
        return atomic_read(&md->pending[READ]) +
               atomic_read(&md->pending[WRITE]);
@@@ -518,9 -723,8 +518,9 @@@ static void start_io_acct(struct dm_io 
                atomic_inc_return(&md->pending[rw]));
  
        if (unlikely(dm_stats_used(&md->stats)))
 -              dm_stats_account_io(&md->stats, bio->bi_rw, bio->bi_iter.bi_sector,
 -                                  bio_sectors(bio), false, 0, &io->stats_aux);
 +              dm_stats_account_io(&md->stats, bio_data_dir(bio),
 +                                  bio->bi_iter.bi_sector, bio_sectors(bio),
 +                                  false, 0, &io->stats_aux);
  }
  
  static void end_io_acct(struct dm_io *io)
        generic_end_io_acct(rw, &dm_disk(md)->part0, io->start_time);
  
        if (unlikely(dm_stats_used(&md->stats)))
 -              dm_stats_account_io(&md->stats, bio->bi_rw, bio->bi_iter.bi_sector,
 -                                  bio_sectors(bio), true, duration, &io->stats_aux);
 +              dm_stats_account_io(&md->stats, bio_data_dir(bio),
 +                                  bio->bi_iter.bi_sector, bio_sectors(bio),
 +                                  true, duration, &io->stats_aux);
  
        /*
         * After this is decremented the bio must not be touched if it is
@@@ -798,12 -1001,12 +798,12 @@@ static void dec_pending(struct dm_io *i
                if (io_error == DM_ENDIO_REQUEUE)
                        return;
  
 -              if ((bio->bi_rw & REQ_FLUSH) && bio->bi_iter.bi_size) {
 +              if ((bio->bi_rw & REQ_PREFLUSH) && bio->bi_iter.bi_size) {
                        /*
                         * Preflush done for flush with data, reissue
 -                       * without REQ_FLUSH.
 +                       * without REQ_PREFLUSH.
                         */
 -                      bio->bi_rw &= ~REQ_FLUSH;
 +                      bio->bi_rw &= ~REQ_PREFLUSH;
                        queue_io(md, bio);
                } else {
                        /* done with normal IO or empty flush */
        }
  }
  
 -static void disable_write_same(struct mapped_device *md)
 +void disable_write_same(struct mapped_device *md)
  {
        struct queue_limits *limits = dm_get_queue_limits(md);
  
@@@ -848,7 -1051,7 +848,7 @@@ static void clone_endio(struct bio *bio
                }
        }
  
 -      if (unlikely(r == -EREMOTEIO && (bio->bi_rw & REQ_WRITE_SAME) &&
 +      if (unlikely(r == -EREMOTEIO && (bio_op(bio) == REQ_OP_WRITE_SAME) &&
                     !bdev_get_queue(bio->bi_bdev)->limits.max_write_same_sectors))
                disable_write_same(md);
  
        dec_pending(io, error);
  }
  
 -/*
 - * Partial completion handling for request-based dm
 - */
 -static void end_clone_bio(struct bio *clone)
 -{
 -      struct dm_rq_clone_bio_info *info =
 -              container_of(clone, struct dm_rq_clone_bio_info, clone);
 -      struct dm_rq_target_io *tio = info->tio;
 -      struct bio *bio = info->orig;
 -      unsigned int nr_bytes = info->orig->bi_iter.bi_size;
 -      int error = clone->bi_error;
 -
 -      bio_put(clone);
 -
 -      if (tio->error)
 -              /*
 -               * An error has already been detected on the request.
 -               * Once error occurred, just let clone->end_io() handle
 -               * the remainder.
 -               */
 -              return;
 -      else if (error) {
 -              /*
 -               * Don't notice the error to the upper layer yet.
 -               * The error handling decision is made by the target driver,
 -               * when the request is completed.
 -               */
 -              tio->error = error;
 -              return;
 -      }
 -
 -      /*
 -       * I/O for the bio successfully completed.
 -       * Notice the data completion to the upper layer.
 -       */
 -
 -      /*
 -       * bios are processed from the head of the list.
 -       * So the completing bio should always be rq->bio.
 -       * If it's not, something wrong is happening.
 -       */
 -      if (tio->orig->bio != bio)
 -              DMERR("bio completion is going in the middle of the request");
 -
 -      /*
 -       * Update the original request.
 -       * Do not use blk_end_request() here, because it may complete
 -       * the original request before the clone, and break the ordering.
 -       */
 -      blk_update_request(tio->orig, 0, nr_bytes);
 -}
 -
 -static struct dm_rq_target_io *tio_from_request(struct request *rq)
 -{
 -      return (rq->q->mq_ops ? blk_mq_rq_to_pdu(rq) : rq->special);
 -}
 -
 -static void rq_end_stats(struct mapped_device *md, struct request *orig)
 -{
 -      if (unlikely(dm_stats_used(&md->stats))) {
 -              struct dm_rq_target_io *tio = tio_from_request(orig);
 -              tio->duration_jiffies = jiffies - tio->duration_jiffies;
 -              dm_stats_account_io(&md->stats, orig->cmd_flags, blk_rq_pos(orig),
 -                                  tio->n_sectors, true, tio->duration_jiffies,
 -                                  &tio->stats_aux);
 -      }
 -}
 -
 -/*
 - * Don't touch any member of the md after calling this function because
 - * the md may be freed in dm_put() at the end of this function.
 - * Or do dm_get() before calling this function and dm_put() later.
 - */
 -static void rq_completed(struct mapped_device *md, int rw, bool run_queue)
 -{
 -      atomic_dec(&md->pending[rw]);
 -
 -      /* nudge anyone waiting on suspend queue */
 -      if (!md_in_flight(md))
 -              wake_up(&md->wait);
 -
 -      /*
 -       * Run this off this callpath, as drivers could invoke end_io while
 -       * inside their request_fn (and holding the queue lock). Calling
 -       * back into ->request_fn() could deadlock attempting to grab the
 -       * queue lock again.
 -       */
 -      if (!md->queue->mq_ops && run_queue)
 -              blk_run_queue_async(md->queue);
 -
 -      /*
 -       * dm_put() must be at the end of this function. See the comment above
 -       */
 -      dm_put(md);
 -}
 -
 -static void free_rq_clone(struct request *clone)
 -{
 -      struct dm_rq_target_io *tio = clone->end_io_data;
 -      struct mapped_device *md = tio->md;
 -
 -      blk_rq_unprep_clone(clone);
 -
 -      if (md->type == DM_TYPE_MQ_REQUEST_BASED)
 -              /* stacked on blk-mq queue(s) */
 -              tio->ti->type->release_clone_rq(clone);
 -      else if (!md->queue->mq_ops)
 -              /* request_fn queue stacked on request_fn queue(s) */
 -              free_old_clone_request(md, clone);
 -
 -      if (!md->queue->mq_ops)
 -              free_old_rq_tio(tio);
 -}
 -
 -/*
 - * Complete the clone and the original request.
 - * Must be called without clone's queue lock held,
 - * see end_clone_request() for more details.
 - */
 -static void dm_end_request(struct request *clone, int error)
 -{
 -      int rw = rq_data_dir(clone);
 -      struct dm_rq_target_io *tio = clone->end_io_data;
 -      struct mapped_device *md = tio->md;
 -      struct request *rq = tio->orig;
 -
 -      if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
 -              rq->errors = clone->errors;
 -              rq->resid_len = clone->resid_len;
 -
 -              if (rq->sense)
 -                      /*
 -                       * We are using the sense buffer of the original
 -                       * request.
 -                       * So setting the length of the sense data is enough.
 -                       */
 -                      rq->sense_len = clone->sense_len;
 -      }
 -
 -      free_rq_clone(clone);
 -      rq_end_stats(md, rq);
 -      if (!rq->q->mq_ops)
 -              blk_end_request_all(rq, error);
 -      else
 -              blk_mq_end_request(rq, error);
 -      rq_completed(md, rw, true);
 -}
 -
 -static void dm_unprep_request(struct request *rq)
 -{
 -      struct dm_rq_target_io *tio = tio_from_request(rq);
 -      struct request *clone = tio->clone;
 -
 -      if (!rq->q->mq_ops) {
 -              rq->special = NULL;
 -              rq->cmd_flags &= ~REQ_DONTPREP;
 -      }
 -
 -      if (clone)
 -              free_rq_clone(clone);
 -      else if (!tio->md->queue->mq_ops)
 -              free_old_rq_tio(tio);
 -}
 -
 -/*
 - * Requeue the original request of a clone.
 - */
 -static void dm_old_requeue_request(struct request *rq)
 -{
 -      struct request_queue *q = rq->q;
 -      unsigned long flags;
 -
 -      spin_lock_irqsave(q->queue_lock, flags);
 -      blk_requeue_request(q, rq);
 -      blk_run_queue_async(q);
 -      spin_unlock_irqrestore(q->queue_lock, flags);
 -}
 -
 -static void dm_mq_requeue_request(struct request *rq)
 -{
 -      struct request_queue *q = rq->q;
 -      unsigned long flags;
 -
 -      blk_mq_requeue_request(rq);
 -      spin_lock_irqsave(q->queue_lock, flags);
 -      if (!blk_queue_stopped(q))
 -              blk_mq_kick_requeue_list(q);
 -      spin_unlock_irqrestore(q->queue_lock, flags);
 -}
 -
 -static void dm_requeue_original_request(struct mapped_device *md,
 -                                      struct request *rq)
 -{
 -      int rw = rq_data_dir(rq);
 -
 -      rq_end_stats(md, rq);
 -      dm_unprep_request(rq);
 -
 -      if (!rq->q->mq_ops)
 -              dm_old_requeue_request(rq);
 -      else
 -              dm_mq_requeue_request(rq);
 -
 -      rq_completed(md, rw, false);
 -}
 -
 -static void dm_old_stop_queue(struct request_queue *q)
 -{
 -      unsigned long flags;
 -
 -      spin_lock_irqsave(q->queue_lock, flags);
 -      if (blk_queue_stopped(q)) {
 -              spin_unlock_irqrestore(q->queue_lock, flags);
 -              return;
 -      }
 -
 -      blk_stop_queue(q);
 -      spin_unlock_irqrestore(q->queue_lock, flags);
 -}
 -
 -static void dm_stop_queue(struct request_queue *q)
 -{
 -      if (!q->mq_ops)
 -              dm_old_stop_queue(q);
 -      else
 -              blk_mq_stop_hw_queues(q);
 -}
 -
 -static void dm_old_start_queue(struct request_queue *q)
 -{
 -      unsigned long flags;
 -
 -      spin_lock_irqsave(q->queue_lock, flags);
 -      if (blk_queue_stopped(q))
 -              blk_start_queue(q);
 -      spin_unlock_irqrestore(q->queue_lock, flags);
 -}
 -
 -static void dm_start_queue(struct request_queue *q)
 -{
 -      if (!q->mq_ops)
 -              dm_old_start_queue(q);
 -      else {
 -              blk_mq_start_stopped_hw_queues(q, true);
 -              blk_mq_kick_requeue_list(q);
 -      }
 -}
 -
 -static void dm_done(struct request *clone, int error, bool mapped)
 -{
 -      int r = error;
 -      struct dm_rq_target_io *tio = clone->end_io_data;
 -      dm_request_endio_fn rq_end_io = NULL;
 -
 -      if (tio->ti) {
 -              rq_end_io = tio->ti->type->rq_end_io;
 -
 -              if (mapped && rq_end_io)
 -                      r = rq_end_io(tio->ti, clone, error, &tio->info);
 -      }
 -
 -      if (unlikely(r == -EREMOTEIO && (clone->cmd_flags & REQ_WRITE_SAME) &&
 -                   !clone->q->limits.max_write_same_sectors))
 -              disable_write_same(tio->md);
 -
 -      if (r <= 0)
 -              /* The target wants to complete the I/O */
 -              dm_end_request(clone, r);
 -      else if (r == DM_ENDIO_INCOMPLETE)
 -              /* The target will handle the I/O */
 -              return;
 -      else if (r == DM_ENDIO_REQUEUE)
 -              /* The target wants to requeue the I/O */
 -              dm_requeue_original_request(tio->md, tio->orig);
 -      else {
 -              DMWARN("unimplemented target endio return value: %d", r);
 -              BUG();
 -      }
 -}
 -
 -/*
 - * Request completion handler for request-based dm
 - */
 -static void dm_softirq_done(struct request *rq)
 -{
 -      bool mapped = true;
 -      struct dm_rq_target_io *tio = tio_from_request(rq);
 -      struct request *clone = tio->clone;
 -      int rw;
 -
 -      if (!clone) {
 -              rq_end_stats(tio->md, rq);
 -              rw = rq_data_dir(rq);
 -              if (!rq->q->mq_ops) {
 -                      blk_end_request_all(rq, tio->error);
 -                      rq_completed(tio->md, rw, false);
 -                      free_old_rq_tio(tio);
 -              } else {
 -                      blk_mq_end_request(rq, tio->error);
 -                      rq_completed(tio->md, rw, false);
 -              }
 -              return;
 -      }
 -
 -      if (rq->cmd_flags & REQ_FAILED)
 -              mapped = false;
 -
 -      dm_done(clone, tio->error, mapped);
 -}
 -
 -/*
 - * Complete the clone and the original request with the error status
 - * through softirq context.
 - */
 -static void dm_complete_request(struct request *rq, int error)
 -{
 -      struct dm_rq_target_io *tio = tio_from_request(rq);
 -
 -      tio->error = error;
 -      if (!rq->q->mq_ops)
 -              blk_complete_request(rq);
 -      else
 -              blk_mq_complete_request(rq, error);
 -}
 -
 -/*
 - * Complete the not-mapped clone and the original request with the error status
 - * through softirq context.
 - * Target's rq_end_io() function isn't called.
 - * This may be used when the target's map_rq() or clone_and_map_rq() functions fail.
 - */
 -static void dm_kill_unmapped_request(struct request *rq, int error)
 -{
 -      rq->cmd_flags |= REQ_FAILED;
 -      dm_complete_request(rq, error);
 -}
 -
 -/*
 - * Called with the clone's queue lock held (in the case of .request_fn)
 - */
 -static void end_clone_request(struct request *clone, int error)
 -{
 -      struct dm_rq_target_io *tio = clone->end_io_data;
 -
 -      if (!clone->q->mq_ops) {
 -              /*
 -               * For just cleaning up the information of the queue in which
 -               * the clone was dispatched.
 -               * The clone is *NOT* freed actually here because it is alloced
 -               * from dm own mempool (REQ_ALLOCED isn't set).
 -               */
 -              __blk_put_request(clone->q, clone);
 -      }
 -
 -      /*
 -       * Actual request completion is done in a softirq context which doesn't
 -       * hold the clone's queue lock.  Otherwise, deadlock could occur because:
 -       *     - another request may be submitted by the upper level driver
 -       *       of the stacking during the completion
 -       *     - the submission which requires queue lock may be done
 -       *       against this clone's queue
 -       */
 -      dm_complete_request(tio->orig, error);
 -}
 -
  /*
   * Return maximum size of I/O possible at the supplied sector up to the current
   * target boundary.
@@@ -905,42 -1473,15 +905,42 @@@ int dm_set_target_max_io_len(struct dm_
  }
  EXPORT_SYMBOL_GPL(dm_set_target_max_io_len);
  
 -/*
 - * A target may call dm_accept_partial_bio only from the map routine.  It is
 - * allowed for all bio types except REQ_FLUSH.
 - *
 - * dm_accept_partial_bio informs the dm that the target only wants to process
 - * additional n_sectors sectors of the bio and the rest of the data should be
 - * sent in a next bio.
 - *
 - * A diagram that explains the arithmetics:
 +static long dm_blk_direct_access(struct block_device *bdev, sector_t sector,
-                                void __pmem **kaddr, pfn_t *pfn, long size)
++                               void **kaddr, pfn_t *pfn, long size)
 +{
 +      struct mapped_device *md = bdev->bd_disk->private_data;
 +      struct dm_table *map;
 +      struct dm_target *ti;
 +      int srcu_idx;
 +      long len, ret = -EIO;
 +
 +      map = dm_get_live_table(md, &srcu_idx);
 +      if (!map)
 +              goto out;
 +
 +      ti = dm_table_find_target(map, sector);
 +      if (!dm_target_is_valid(ti))
 +              goto out;
 +
 +      len = max_io_len(sector, ti) << SECTOR_SHIFT;
 +      size = min(len, size);
 +
 +      if (ti->type->direct_access)
 +              ret = ti->type->direct_access(ti, sector, kaddr, pfn, size);
 +out:
 +      dm_put_live_table(md, srcu_idx);
 +      return min(ret, size);
 +}
 +
 +/*
 + * A target may call dm_accept_partial_bio only from the map routine.  It is
 + * allowed for all bio types except REQ_PREFLUSH.
 + *
 + * dm_accept_partial_bio informs the dm that the target only wants to process
 + * additional n_sectors sectors of the bio and the rest of the data should be
 + * sent in a next bio.
 + *
 + * A diagram that explains the arithmetics:
   * +--------------------+---------------+-------+
   * |         1          |       2       |   3   |
   * +--------------------+---------------+-------+
@@@ -964,7 -1505,7 +964,7 @@@ void dm_accept_partial_bio(struct bio *
  {
        struct dm_target_io *tio = container_of(bio, struct dm_target_io, clone);
        unsigned bi_size = bio->bi_iter.bi_size >> SECTOR_SHIFT;
 -      BUG_ON(bio->bi_rw & REQ_FLUSH);
 +      BUG_ON(bio->bi_rw & REQ_PREFLUSH);
        BUG_ON(bi_size > *tio->len_ptr);
        BUG_ON(n_sectors > bi_size);
        *tio->len_ptr -= bi_size - n_sectors;
@@@ -1131,175 -1672,521 +1131,175 @@@ static int __clone_and_map_data_bio(str
  
  typedef unsigned (*get_num_bios_fn)(struct dm_target *ti);
  
 -static unsigned get_num_discard_bios(struct dm_target *ti)
 -{
 -      return ti->num_discard_bios;
 -}
 -
 -static unsigned get_num_write_same_bios(struct dm_target *ti)
 -{
 -      return ti->num_write_same_bios;
 -}
 -
 -typedef bool (*is_split_required_fn)(struct dm_target *ti);
 -
 -static bool is_split_required_for_discard(struct dm_target *ti)
 -{
 -      return ti->split_discard_bios;
 -}
 -
 -static int __send_changing_extent_only(struct clone_info *ci,
 -                                     get_num_bios_fn get_num_bios,
 -                                     is_split_required_fn is_split_required)
 -{
 -      struct dm_target *ti;
 -      unsigned len;
 -      unsigned num_bios;
 -
 -      do {
 -              ti = dm_table_find_target(ci->map, ci->sector);
 -              if (!dm_target_is_valid(ti))
 -                      return -EIO;
 -
 -              /*
 -               * Even though the device advertised support for this type of
 -               * request, that does not mean every target supports it, and
 -               * reconfiguration might also have changed that since the
 -               * check was performed.
 -               */
 -              num_bios = get_num_bios ? get_num_bios(ti) : 0;
 -              if (!num_bios)
 -                      return -EOPNOTSUPP;
 -
 -              if (is_split_required && !is_split_required(ti))
 -                      len = min((sector_t)ci->sector_count, max_io_len_target_boundary(ci->sector, ti));
 -              else
 -                      len = min((sector_t)ci->sector_count, max_io_len(ci->sector, ti));
 -
 -              __send_duplicate_bios(ci, ti, num_bios, &len);
 -
 -              ci->sector += len;
 -      } while (ci->sector_count -= len);
 -
 -      return 0;
 -}
 -
 -static int __send_discard(struct clone_info *ci)
 -{
 -      return __send_changing_extent_only(ci, get_num_discard_bios,
 -                                         is_split_required_for_discard);
 -}
 -
 -static int __send_write_same(struct clone_info *ci)
 -{
 -      return __send_changing_extent_only(ci, get_num_write_same_bios, NULL);
 -}
 -
 -/*
 - * Select the correct strategy for processing a non-flush bio.
 - */
 -static int __split_and_process_non_flush(struct clone_info *ci)
 -{
 -      struct bio *bio = ci->bio;
 -      struct dm_target *ti;
 -      unsigned len;
 -      int r;
 -
 -      if (unlikely(bio->bi_rw & REQ_DISCARD))
 -              return __send_discard(ci);
 -      else if (unlikely(bio->bi_rw & REQ_WRITE_SAME))
 -              return __send_write_same(ci);
 -
 -      ti = dm_table_find_target(ci->map, ci->sector);
 -      if (!dm_target_is_valid(ti))
 -              return -EIO;
 -
 -      len = min_t(sector_t, max_io_len(ci->sector, ti), ci->sector_count);
 -
 -      r = __clone_and_map_data_bio(ci, ti, ci->sector, &len);
 -      if (r < 0)
 -              return r;
 -
 -      ci->sector += len;
 -      ci->sector_count -= len;
 -
 -      return 0;
 -}
 -
 -/*
 - * Entry point to split a bio into clones and submit them to the targets.
 - */
 -static void __split_and_process_bio(struct mapped_device *md,
 -                                  struct dm_table *map, struct bio *bio)
 -{
 -      struct clone_info ci;
 -      int error = 0;
 -
 -      if (unlikely(!map)) {
 -              bio_io_error(bio);
 -              return;
 -      }
 -
 -      ci.map = map;
 -      ci.md = md;
 -      ci.io = alloc_io(md);
 -      ci.io->error = 0;
 -      atomic_set(&ci.io->io_count, 1);
 -      ci.io->bio = bio;
 -      ci.io->md = md;
 -      spin_lock_init(&ci.io->endio_lock);
 -      ci.sector = bio->bi_iter.bi_sector;
 -
 -      start_io_acct(ci.io);
 -
 -      if (bio->bi_rw & REQ_FLUSH) {
 -              ci.bio = &ci.md->flush_bio;
 -              ci.sector_count = 0;
 -              error = __send_empty_flush(&ci);
 -              /* dec_pending submits any data associated with flush */
 -      } else {
 -              ci.bio = bio;
 -              ci.sector_count = bio_sectors(bio);
 -              while (ci.sector_count && !error)
 -                      error = __split_and_process_non_flush(&ci);
 -      }
 -
 -      /* drop the extra reference count */
 -      dec_pending(ci.io, error);
 -}
 -/*-----------------------------------------------------------------
 - * CRUD END
 - *---------------------------------------------------------------*/
 -
 -/*
 - * The request function that just remaps the bio built up by
 - * dm_merge_bvec.
 - */
 -static blk_qc_t dm_make_request(struct request_queue *q, struct bio *bio)
 -{
 -      int rw = bio_data_dir(bio);
 -      struct mapped_device *md = q->queuedata;
 -      int srcu_idx;
 -      struct dm_table *map;
 -
 -      map = dm_get_live_table(md, &srcu_idx);
 -
 -      generic_start_io_acct(rw, bio_sectors(bio), &dm_disk(md)->part0);
 -
 -      /* if we're suspended, we have to queue this io for later */
 -      if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags))) {
 -              dm_put_live_table(md, srcu_idx);
 -
 -              if (bio_rw(bio) != READA)
 -                      queue_io(md, bio);
 -              else
 -                      bio_io_error(bio);
 -              return BLK_QC_T_NONE;
 -      }
 -
 -      __split_and_process_bio(md, map, bio);
 -      dm_put_live_table(md, srcu_idx);
 -      return BLK_QC_T_NONE;
 -}
 -
 -int dm_request_based(struct mapped_device *md)
 -{
 -      return blk_queue_stackable(md->queue);
 -}
 -
 -static void dm_dispatch_clone_request(struct request *clone, struct request *rq)
 -{
 -      int r;
 -
 -      if (blk_queue_io_stat(clone->q))
 -              clone->cmd_flags |= REQ_IO_STAT;
 -
 -      clone->start_time = jiffies;
 -      r = blk_insert_cloned_request(clone->q, clone);
 -      if (r)
 -              /* must complete clone in terms of original request */
 -              dm_complete_request(rq, r);
 -}
 -
 -static int dm_rq_bio_constructor(struct bio *bio, struct bio *bio_orig,
 -                               void *data)
 -{
 -      struct dm_rq_target_io *tio = data;
 -      struct dm_rq_clone_bio_info *info =
 -              container_of(bio, struct dm_rq_clone_bio_info, clone);
 -
 -      info->orig = bio_orig;
 -      info->tio = tio;
 -      bio->bi_end_io = end_clone_bio;
 -
 -      return 0;
 -}
 -
 -static int setup_clone(struct request *clone, struct request *rq,
 -                     struct dm_rq_target_io *tio, gfp_t gfp_mask)
 -{
 -      int r;
 -
 -      r = blk_rq_prep_clone(clone, rq, tio->md->bs, gfp_mask,
 -                            dm_rq_bio_constructor, tio);
 -      if (r)
 -              return r;
 -
 -      clone->cmd = rq->cmd;
 -      clone->cmd_len = rq->cmd_len;
 -      clone->sense = rq->sense;
 -      clone->end_io = end_clone_request;
 -      clone->end_io_data = tio;
 -
 -      tio->clone = clone;
 -
 -      return 0;
 -}
 -
 -static struct request *clone_old_rq(struct request *rq, struct mapped_device *md,
 -                                  struct dm_rq_target_io *tio, gfp_t gfp_mask)
 -{
 -      /*
 -       * Create clone for use with .request_fn request_queue
 -       */
 -      struct request *clone;
 -
 -      clone = alloc_old_clone_request(md, gfp_mask);
 -      if (!clone)
 -              return NULL;
 -
 -      blk_rq_init(NULL, clone);
 -      if (setup_clone(clone, rq, tio, gfp_mask)) {
 -              /* -ENOMEM */
 -              free_old_clone_request(md, clone);
 -              return NULL;
 -      }
 -
 -      return clone;
 -}
 -
 -static void map_tio_request(struct kthread_work *work);
 -
 -static void init_tio(struct dm_rq_target_io *tio, struct request *rq,
 -                   struct mapped_device *md)
 -{
 -      tio->md = md;
 -      tio->ti = NULL;
 -      tio->clone = NULL;
 -      tio->orig = rq;
 -      tio->error = 0;
 -      /*
 -       * Avoid initializing info for blk-mq; it passes
 -       * target-specific data through info.ptr
 -       * (see: dm_mq_init_request)
 -       */
 -      if (!md->init_tio_pdu)
 -              memset(&tio->info, 0, sizeof(tio->info));
 -      if (md->kworker_task)
 -              init_kthread_work(&tio->work, map_tio_request);
 -}
 -
 -static struct dm_rq_target_io *dm_old_prep_tio(struct request *rq,
 -                                             struct mapped_device *md,
 -                                             gfp_t gfp_mask)
 -{
 -      struct dm_rq_target_io *tio;
 -      int srcu_idx;
 -      struct dm_table *table;
 -
 -      tio = alloc_old_rq_tio(md, gfp_mask);
 -      if (!tio)
 -              return NULL;
 -
 -      init_tio(tio, rq, md);
 -
 -      table = dm_get_live_table(md, &srcu_idx);
 -      /*
 -       * Must clone a request if this .request_fn DM device
 -       * is stacked on .request_fn device(s).
 -       */
 -      if (!dm_table_mq_request_based(table)) {
 -              if (!clone_old_rq(rq, md, tio, gfp_mask)) {
 -                      dm_put_live_table(md, srcu_idx);
 -                      free_old_rq_tio(tio);
 -                      return NULL;
 -              }
 -      }
 -      dm_put_live_table(md, srcu_idx);
 -
 -      return tio;
 -}
 -
 -/*
 - * Called with the queue lock held.
 - */
 -static int dm_old_prep_fn(struct request_queue *q, struct request *rq)
 -{
 -      struct mapped_device *md = q->queuedata;
 -      struct dm_rq_target_io *tio;
 -
 -      if (unlikely(rq->special)) {
 -              DMWARN("Already has something in rq->special.");
 -              return BLKPREP_KILL;
 -      }
 -
 -      tio = dm_old_prep_tio(rq, md, GFP_ATOMIC);
 -      if (!tio)
 -              return BLKPREP_DEFER;
 -
 -      rq->special = tio;
 -      rq->cmd_flags |= REQ_DONTPREP;
 -
 -      return BLKPREP_OK;
 -}
 -
 -/*
 - * Returns:
 - * 0                : the request has been processed
 - * DM_MAPIO_REQUEUE : the original request needs to be requeued
 - * < 0              : the request was completed due to failure
 - */
 -static int map_request(struct dm_rq_target_io *tio, struct request *rq,
 -                     struct mapped_device *md)
 -{
 -      int r;
 -      struct dm_target *ti = tio->ti;
 -      struct request *clone = NULL;
 -
 -      if (tio->clone) {
 -              clone = tio->clone;
 -              r = ti->type->map_rq(ti, clone, &tio->info);
 -      } else {
 -              r = ti->type->clone_and_map_rq(ti, rq, &tio->info, &clone);
 -              if (r < 0) {
 -                      /* The target wants to complete the I/O */
 -                      dm_kill_unmapped_request(rq, r);
 -                      return r;
 -              }
 -              if (r != DM_MAPIO_REMAPPED)
 -                      return r;
 -              if (setup_clone(clone, rq, tio, GFP_ATOMIC)) {
 -                      /* -ENOMEM */
 -                      ti->type->release_clone_rq(clone);
 -                      return DM_MAPIO_REQUEUE;
 -              }
 -      }
 -
 -      switch (r) {
 -      case DM_MAPIO_SUBMITTED:
 -              /* The target has taken the I/O to submit by itself later */
 -              break;
 -      case DM_MAPIO_REMAPPED:
 -              /* The target has remapped the I/O so dispatch it */
 -              trace_block_rq_remap(clone->q, clone, disk_devt(dm_disk(md)),
 -                                   blk_rq_pos(rq));
 -              dm_dispatch_clone_request(clone, rq);
 -              break;
 -      case DM_MAPIO_REQUEUE:
 -              /* The target wants to requeue the I/O */
 -              dm_requeue_original_request(md, tio->orig);
 -              break;
 -      default:
 -              if (r > 0) {
 -                      DMWARN("unimplemented target map return value: %d", r);
 -                      BUG();
 -              }
 -
 -              /* The target wants to complete the I/O */
 -              dm_kill_unmapped_request(rq, r);
 -              return r;
 -      }
 -
 -      return 0;
 +static unsigned get_num_discard_bios(struct dm_target *ti)
 +{
 +      return ti->num_discard_bios;
  }
  
 -static void map_tio_request(struct kthread_work *work)
 +static unsigned get_num_write_same_bios(struct dm_target *ti)
  {
 -      struct dm_rq_target_io *tio = container_of(work, struct dm_rq_target_io, work);
 -      struct request *rq = tio->orig;
 -      struct mapped_device *md = tio->md;
 +      return ti->num_write_same_bios;
 +}
 +
 +typedef bool (*is_split_required_fn)(struct dm_target *ti);
  
 -      if (map_request(tio, rq, md) == DM_MAPIO_REQUEUE)
 -              dm_requeue_original_request(md, rq);
 +static bool is_split_required_for_discard(struct dm_target *ti)
 +{
 +      return ti->split_discard_bios;
  }
  
 -static void dm_start_request(struct mapped_device *md, struct request *orig)
 +static int __send_changing_extent_only(struct clone_info *ci,
 +                                     get_num_bios_fn get_num_bios,
 +                                     is_split_required_fn is_split_required)
  {
 -      if (!orig->q->mq_ops)
 -              blk_start_request(orig);
 -      else
 -              blk_mq_start_request(orig);
 -      atomic_inc(&md->pending[rq_data_dir(orig)]);
 +      struct dm_target *ti;
 +      unsigned len;
 +      unsigned num_bios;
  
 -      if (md->seq_rq_merge_deadline_usecs) {
 -              md->last_rq_pos = rq_end_sector(orig);
 -              md->last_rq_rw = rq_data_dir(orig);
 -              md->last_rq_start_time = ktime_get();
 -      }
 +      do {
 +              ti = dm_table_find_target(ci->map, ci->sector);
 +              if (!dm_target_is_valid(ti))
 +                      return -EIO;
  
 -      if (unlikely(dm_stats_used(&md->stats))) {
 -              struct dm_rq_target_io *tio = tio_from_request(orig);
 -              tio->duration_jiffies = jiffies;
 -              tio->n_sectors = blk_rq_sectors(orig);
 -              dm_stats_account_io(&md->stats, orig->cmd_flags, blk_rq_pos(orig),
 -                                  tio->n_sectors, false, 0, &tio->stats_aux);
 -      }
 +              /*
 +               * Even though the device advertised support for this type of
 +               * request, that does not mean every target supports it, and
 +               * reconfiguration might also have changed that since the
 +               * check was performed.
 +               */
 +              num_bios = get_num_bios ? get_num_bios(ti) : 0;
 +              if (!num_bios)
 +                      return -EOPNOTSUPP;
  
 -      /*
 -       * Hold the md reference here for the in-flight I/O.
 -       * We can't rely on the reference count by device opener,
 -       * because the device may be closed during the request completion
 -       * when all bios are completed.
 -       * See the comment in rq_completed() too.
 -       */
 -      dm_get(md);
 +              if (is_split_required && !is_split_required(ti))
 +                      len = min((sector_t)ci->sector_count, max_io_len_target_boundary(ci->sector, ti));
 +              else
 +                      len = min((sector_t)ci->sector_count, max_io_len(ci->sector, ti));
 +
 +              __send_duplicate_bios(ci, ti, num_bios, &len);
 +
 +              ci->sector += len;
 +      } while (ci->sector_count -= len);
 +
 +      return 0;
  }
  
 -#define MAX_SEQ_RQ_MERGE_DEADLINE_USECS 100000
 +static int __send_discard(struct clone_info *ci)
 +{
 +      return __send_changing_extent_only(ci, get_num_discard_bios,
 +                                         is_split_required_for_discard);
 +}
  
 -ssize_t dm_attr_rq_based_seq_io_merge_deadline_show(struct mapped_device *md, char *buf)
 +static int __send_write_same(struct clone_info *ci)
  {
 -      return sprintf(buf, "%u\n", md->seq_rq_merge_deadline_usecs);
 +      return __send_changing_extent_only(ci, get_num_write_same_bios, NULL);
  }
  
 -ssize_t dm_attr_rq_based_seq_io_merge_deadline_store(struct mapped_device *md,
 -                                                   const char *buf, size_t count)
 +/*
 + * Select the correct strategy for processing a non-flush bio.
 + */
 +static int __split_and_process_non_flush(struct clone_info *ci)
  {
 -      unsigned deadline;
 +      struct bio *bio = ci->bio;
 +      struct dm_target *ti;
 +      unsigned len;
 +      int r;
 +
 +      if (unlikely(bio_op(bio) == REQ_OP_DISCARD))
 +              return __send_discard(ci);
 +      else if (unlikely(bio_op(bio) == REQ_OP_WRITE_SAME))
 +              return __send_write_same(ci);
  
 -      if (!dm_request_based(md) || md->use_blk_mq)
 -              return count;
 +      ti = dm_table_find_target(ci->map, ci->sector);
 +      if (!dm_target_is_valid(ti))
 +              return -EIO;
  
 -      if (kstrtouint(buf, 10, &deadline))
 -              return -EINVAL;
 +      len = min_t(sector_t, max_io_len(ci->sector, ti), ci->sector_count);
  
 -      if (deadline > MAX_SEQ_RQ_MERGE_DEADLINE_USECS)
 -              deadline = MAX_SEQ_RQ_MERGE_DEADLINE_USECS;
 +      r = __clone_and_map_data_bio(ci, ti, ci->sector, &len);
 +      if (r < 0)
 +              return r;
  
 -      md->seq_rq_merge_deadline_usecs = deadline;
 +      ci->sector += len;
 +      ci->sector_count -= len;
  
 -      return count;
 +      return 0;
  }
  
 -static bool dm_request_peeked_before_merge_deadline(struct mapped_device *md)
 +/*
 + * Entry point to split a bio into clones and submit them to the targets.
 + */
 +static void __split_and_process_bio(struct mapped_device *md,
 +                                  struct dm_table *map, struct bio *bio)
  {
 -      ktime_t kt_deadline;
 +      struct clone_info ci;
 +      int error = 0;
 +
 +      if (unlikely(!map)) {
 +              bio_io_error(bio);
 +              return;
 +      }
 +
 +      ci.map = map;
 +      ci.md = md;
 +      ci.io = alloc_io(md);
 +      ci.io->error = 0;
 +      atomic_set(&ci.io->io_count, 1);
 +      ci.io->bio = bio;
 +      ci.io->md = md;
 +      spin_lock_init(&ci.io->endio_lock);
 +      ci.sector = bio->bi_iter.bi_sector;
  
 -      if (!md->seq_rq_merge_deadline_usecs)
 -              return false;
 +      start_io_acct(ci.io);
  
 -      kt_deadline = ns_to_ktime((u64)md->seq_rq_merge_deadline_usecs * NSEC_PER_USEC);
 -      kt_deadline = ktime_add_safe(md->last_rq_start_time, kt_deadline);
 +      if (bio->bi_rw & REQ_PREFLUSH) {
 +              ci.bio = &ci.md->flush_bio;
 +              ci.sector_count = 0;
 +              error = __send_empty_flush(&ci);
 +              /* dec_pending submits any data associated with flush */
 +      } else {
 +              ci.bio = bio;
 +              ci.sector_count = bio_sectors(bio);
 +              while (ci.sector_count && !error)
 +                      error = __split_and_process_non_flush(&ci);
 +      }
  
 -      return !ktime_after(ktime_get(), kt_deadline);
 +      /* drop the extra reference count */
 +      dec_pending(ci.io, error);
  }
 +/*-----------------------------------------------------------------
 + * CRUD END
 + *---------------------------------------------------------------*/
  
  /*
 - * q->request_fn for request-based dm.
 - * Called with the queue lock held.
 + * The request function that just remaps the bio built up by
 + * dm_merge_bvec.
   */
 -static void dm_request_fn(struct request_queue *q)
 +static blk_qc_t dm_make_request(struct request_queue *q, struct bio *bio)
  {
 +      int rw = bio_data_dir(bio);
        struct mapped_device *md = q->queuedata;
 -      struct dm_target *ti = md->immutable_target;
 -      struct request *rq;
 -      struct dm_rq_target_io *tio;
 -      sector_t pos = 0;
 -
 -      if (unlikely(!ti)) {
 -              int srcu_idx;
 -              struct dm_table *map = dm_get_live_table(md, &srcu_idx);
 -
 -              ti = dm_table_find_target(map, pos);
 -              dm_put_live_table(md, srcu_idx);
 -      }
 -
 -      /*
 -       * For suspend, check blk_queue_stopped() and increment
 -       * ->pending within a single queue_lock not to increment the
 -       * number of in-flight I/Os after the queue is stopped in
 -       * dm_suspend().
 -       */
 -      while (!blk_queue_stopped(q)) {
 -              rq = blk_peek_request(q);
 -              if (!rq)
 -                      return;
 +      int srcu_idx;
 +      struct dm_table *map;
  
 -              /* always use block 0 to find the target for flushes for now */
 -              pos = 0;
 -              if (!(rq->cmd_flags & REQ_FLUSH))
 -                      pos = blk_rq_pos(rq);
 +      map = dm_get_live_table(md, &srcu_idx);
  
 -              if ((dm_request_peeked_before_merge_deadline(md) &&
 -                   md_in_flight(md) && rq->bio && rq->bio->bi_vcnt == 1 &&
 -                   md->last_rq_pos == pos && md->last_rq_rw == rq_data_dir(rq)) ||
 -                  (ti->type->busy && ti->type->busy(ti))) {
 -                      blk_delay_queue(q, HZ / 100);
 -                      return;
 -              }
 +      generic_start_io_acct(rw, bio_sectors(bio), &dm_disk(md)->part0);
  
 -              dm_start_request(md, rq);
 +      /* if we're suspended, we have to queue this io for later */
 +      if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags))) {
 +              dm_put_live_table(md, srcu_idx);
  
 -              tio = tio_from_request(rq);
 -              /* Establish tio->ti before queuing work (map_tio_request) */
 -              tio->ti = ti;
 -              queue_kthread_work(&md->kworker, &tio->work);
 -              BUG_ON(!irqs_disabled());
 +              if (!(bio->bi_rw & REQ_RAHEAD))
 +                      queue_io(md, bio);
 +              else
 +                      bio_io_error(bio);
 +              return BLK_QC_T_NONE;
        }
 +
 +      __split_and_process_bio(md, map, bio);
 +      dm_put_live_table(md, srcu_idx);
 +      return BLK_QC_T_NONE;
  }
  
  static int dm_any_congested(void *congested_data, int bdi_bits)
@@@ -1379,7 -2266,7 +1379,7 @@@ static const struct block_device_operat
  
  static void dm_wq_work(struct work_struct *work);
  
 -static void dm_init_md_queue(struct mapped_device *md)
 +void dm_init_md_queue(struct mapped_device *md)
  {
        /*
         * Request-based dm devices cannot be stacked on top of bio-based dm
        md->queue->backing_dev_info.congested_data = md;
  }
  
 -static void dm_init_normal_md_queue(struct mapped_device *md)
 +void dm_init_normal_md_queue(struct mapped_device *md)
  {
        md->use_blk_mq = false;
        dm_init_md_queue(md);
@@@ -1440,8 -2327,6 +1440,8 @@@ static void cleanup_mapped_device(struc
                bdput(md->bdev);
                md->bdev = NULL;
        }
 +
 +      dm_mq_cleanup_mapped_device(md);
  }
  
  /*
@@@ -1475,7 -2360,7 +1475,7 @@@ static struct mapped_device *alloc_dev(
                goto bad_io_barrier;
  
        md->numa_node_id = numa_node_id;
 -      md->use_blk_mq = use_blk_mq;
 +      md->use_blk_mq = dm_use_blk_mq_default();
        md->init_tio_pdu = false;
        md->type = DM_TYPE_NONE;
        mutex_init(&md->suspend_lock);
  
        bio_init(&md->flush_bio);
        md->flush_bio.bi_bdev = md->bdev;
 -      md->flush_bio.bi_rw = WRITE_FLUSH;
 +      bio_set_op_attrs(&md->flush_bio, REQ_OP_WRITE, WRITE_FLUSH);
  
        dm_stats_init(&md->stats);
  
@@@ -1560,6 -2445,10 +1560,6 @@@ static void free_dev(struct mapped_devi
        unlock_fs(md);
  
        cleanup_mapped_device(md);
 -      if (md->tag_set) {
 -              blk_mq_free_tag_set(md->tag_set);
 -              kfree(md->tag_set);
 -      }
  
        free_table_devices(&md->table_devices);
        dm_stats_cleanup(&md->stats);
@@@ -1575,7 -2464,7 +1575,7 @@@ static void __bind_mempools(struct mapp
  
        if (md->bs) {
                /* The md already has necessary mempools. */
 -              if (dm_table_get_type(t) == DM_TYPE_BIO_BASED) {
 +              if (dm_table_bio_based(t)) {
                        /*
                         * Reload bioset because front_pad may have changed
                         * because a different table was loaded.
@@@ -1765,15 -2654,176 +1765,15 @@@ struct queue_limits *dm_get_queue_limit
  }
  EXPORT_SYMBOL_GPL(dm_get_queue_limits);
  
 -static void dm_old_init_rq_based_worker_thread(struct mapped_device *md)
 -{
 -      /* Initialize the request-based DM worker thread */
 -      init_kthread_worker(&md->kworker);
 -      md->kworker_task = kthread_run(kthread_worker_fn, &md->kworker,
 -                                     "kdmwork-%s", dm_device_name(md));
 -}
 -
 -/*
 - * Fully initialize a .request_fn request-based queue.
 - */
 -static int dm_old_init_request_queue(struct mapped_device *md)
 -{
 -      /* Fully initialize the queue */
 -      if (!blk_init_allocated_queue(md->queue, dm_request_fn, NULL))
 -              return -EINVAL;
 -
 -      /* disable dm_request_fn's merge heuristic by default */
 -      md->seq_rq_merge_deadline_usecs = 0;
 -
 -      dm_init_normal_md_queue(md);
 -      blk_queue_softirq_done(md->queue, dm_softirq_done);
 -      blk_queue_prep_rq(md->queue, dm_old_prep_fn);
 -
 -      dm_old_init_rq_based_worker_thread(md);
 -
 -      elv_register_queue(md->queue);
 -
 -      return 0;
 -}
 -
 -static int dm_mq_init_request(void *data, struct request *rq,
 -                            unsigned int hctx_idx, unsigned int request_idx,
 -                            unsigned int numa_node)
 -{
 -      struct mapped_device *md = data;
 -      struct dm_rq_target_io *tio = blk_mq_rq_to_pdu(rq);
 -
 -      /*
 -       * Must initialize md member of tio, otherwise it won't
 -       * be available in dm_mq_queue_rq.
 -       */
 -      tio->md = md;
 -
 -      if (md->init_tio_pdu) {
 -              /* target-specific per-io data is immediately after the tio */
 -              tio->info.ptr = tio + 1;
 -      }
 -
 -      return 0;
 -}
 -
 -static int dm_mq_queue_rq(struct blk_mq_hw_ctx *hctx,
 -                        const struct blk_mq_queue_data *bd)
 -{
 -      struct request *rq = bd->rq;
 -      struct dm_rq_target_io *tio = blk_mq_rq_to_pdu(rq);
 -      struct mapped_device *md = tio->md;
 -      struct dm_target *ti = md->immutable_target;
 -
 -      if (unlikely(!ti)) {
 -              int srcu_idx;
 -              struct dm_table *map = dm_get_live_table(md, &srcu_idx);
 -
 -              ti = dm_table_find_target(map, 0);
 -              dm_put_live_table(md, srcu_idx);
 -      }
 -
 -      if (ti->type->busy && ti->type->busy(ti))
 -              return BLK_MQ_RQ_QUEUE_BUSY;
 -
 -      dm_start_request(md, rq);
 -
 -      /* Init tio using md established in .init_request */
 -      init_tio(tio, rq, md);
 -
 -      /*
 -       * Establish tio->ti before queuing work (map_tio_request)
 -       * or making direct call to map_request().
 -       */
 -      tio->ti = ti;
 -
 -      /* Direct call is fine since .queue_rq allows allocations */
 -      if (map_request(tio, rq, md) == DM_MAPIO_REQUEUE) {
 -              /* Undo dm_start_request() before requeuing */
 -              rq_end_stats(md, rq);
 -              rq_completed(md, rq_data_dir(rq), false);
 -              return BLK_MQ_RQ_QUEUE_BUSY;
 -      }
 -
 -      return BLK_MQ_RQ_QUEUE_OK;
 -}
 -
 -static struct blk_mq_ops dm_mq_ops = {
 -      .queue_rq = dm_mq_queue_rq,
 -      .map_queue = blk_mq_map_queue,
 -      .complete = dm_softirq_done,
 -      .init_request = dm_mq_init_request,
 -};
 -
 -static int dm_mq_init_request_queue(struct mapped_device *md,
 -                                  struct dm_target *immutable_tgt)
 -{
 -      struct request_queue *q;
 -      int err;
 -
 -      if (dm_get_md_type(md) == DM_TYPE_REQUEST_BASED) {
 -              DMERR("request-based dm-mq may only be stacked on blk-mq device(s)");
 -              return -EINVAL;
 -      }
 -
 -      md->tag_set = kzalloc_node(sizeof(struct blk_mq_tag_set), GFP_KERNEL, md->numa_node_id);
 -      if (!md->tag_set)
 -              return -ENOMEM;
 -
 -      md->tag_set->ops = &dm_mq_ops;
 -      md->tag_set->queue_depth = dm_get_blk_mq_queue_depth();
 -      md->tag_set->numa_node = md->numa_node_id;
 -      md->tag_set->flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE;
 -      md->tag_set->nr_hw_queues = dm_get_blk_mq_nr_hw_queues();
 -      md->tag_set->driver_data = md;
 -
 -      md->tag_set->cmd_size = sizeof(struct dm_rq_target_io);
 -      if (immutable_tgt && immutable_tgt->per_io_data_size) {
 -              /* any target-specific per-io data is immediately after the tio */
 -              md->tag_set->cmd_size += immutable_tgt->per_io_data_size;
 -              md->init_tio_pdu = true;
 -      }
 -
 -      err = blk_mq_alloc_tag_set(md->tag_set);
 -      if (err)
 -              goto out_kfree_tag_set;
 -
 -      q = blk_mq_init_allocated_queue(md->tag_set, md->queue);
 -      if (IS_ERR(q)) {
 -              err = PTR_ERR(q);
 -              goto out_tag_set;
 -      }
 -      dm_init_md_queue(md);
 -
 -      /* backfill 'mq' sysfs registration normally done in blk_register_queue */
 -      blk_mq_register_disk(md->disk);
 -
 -      return 0;
 -
 -out_tag_set:
 -      blk_mq_free_tag_set(md->tag_set);
 -out_kfree_tag_set:
 -      kfree(md->tag_set);
 -
 -      return err;
 -}
 -
 -static unsigned filter_md_type(unsigned type, struct mapped_device *md)
 -{
 -      if (type == DM_TYPE_BIO_BASED)
 -              return type;
 -
 -      return !md->use_blk_mq ? DM_TYPE_REQUEST_BASED : DM_TYPE_MQ_REQUEST_BASED;
 -}
 -
  /*
   * Setup the DM device's queue based on md's type
   */
  int dm_setup_md_queue(struct mapped_device *md, struct dm_table *t)
  {
        int r;
 -      unsigned md_type = filter_md_type(dm_get_md_type(md), md);
 +      unsigned type = dm_get_md_type(md);
  
 -      switch (md_type) {
 +      switch (type) {
        case DM_TYPE_REQUEST_BASED:
                r = dm_old_init_request_queue(md);
                if (r) {
                }
                break;
        case DM_TYPE_MQ_REQUEST_BASED:
 -              r = dm_mq_init_request_queue(md, dm_table_get_immutable_target(t));
 +              r = dm_mq_init_request_queue(md, t);
                if (r) {
                        DMERR("Cannot initialize queue for request-based dm-mq mapped device");
                        return r;
                }
                break;
        case DM_TYPE_BIO_BASED:
 +      case DM_TYPE_DAX_BIO_BASED:
                dm_init_normal_md_queue(md);
                blk_queue_make_request(md->queue, dm_make_request);
                /*
                 */
                bioset_free(md->queue->bio_split);
                md->queue->bio_split = NULL;
 +
 +              if (type == DM_TYPE_DAX_BIO_BASED)
 +                      queue_flag_set_unlocked(QUEUE_FLAG_DAX, md->queue);
                break;
        }
  
@@@ -2495,9 -3541,10 +2495,9 @@@ struct dm_md_mempools *dm_alloc_md_memp
        if (!pools)
                return NULL;
  
 -      type = filter_md_type(type, md);
 -
        switch (type) {
        case DM_TYPE_BIO_BASED:
 +      case DM_TYPE_DAX_BIO_BASED:
                cachep = _io_cache;
                pool_size = dm_get_reserved_bio_based_ios();
                front_pad = roundup(per_io_data_size, __alignof__(struct dm_target_io)) + offsetof(struct dm_target_io, clone);
@@@ -2554,76 -3601,26 +2554,76 @@@ void dm_free_md_mempools(struct dm_md_m
        kfree(pools);
  }
  
 -static int dm_pr_register(struct block_device *bdev, u64 old_key, u64 new_key,
 -                        u32 flags)
 +struct dm_pr {
 +      u64     old_key;
 +      u64     new_key;
 +      u32     flags;
 +      bool    fail_early;
 +};
 +
 +static int dm_call_pr(struct block_device *bdev, iterate_devices_callout_fn fn,
 +                    void *data)
  {
        struct mapped_device *md = bdev->bd_disk->private_data;
 -      const struct pr_ops *ops;
 -      fmode_t mode;
 -      int r;
 +      struct dm_table *table;
 +      struct dm_target *ti;
 +      int ret = -ENOTTY, srcu_idx;
  
 -      r = dm_grab_bdev_for_ioctl(md, &bdev, &mode);
 -      if (r < 0)
 -              return r;
 +      table = dm_get_live_table(md, &srcu_idx);
 +      if (!table || !dm_table_get_size(table))
 +              goto out;
  
 -      ops = bdev->bd_disk->fops->pr_ops;
 -      if (ops && ops->pr_register)
 -              r = ops->pr_register(bdev, old_key, new_key, flags);
 -      else
 -              r = -EOPNOTSUPP;
 +      /* We only support devices that have a single target */
 +      if (dm_table_get_num_targets(table) != 1)
 +              goto out;
 +      ti = dm_table_get_target(table, 0);
  
 -      bdput(bdev);
 -      return r;
 +      ret = -EINVAL;
 +      if (!ti->type->iterate_devices)
 +              goto out;
 +
 +      ret = ti->type->iterate_devices(ti, fn, data);
 +out:
 +      dm_put_live_table(md, srcu_idx);
 +      return ret;
 +}
 +
 +/*
 + * For register / unregister we need to manually call out to every path.
 + */
 +static int __dm_pr_register(struct dm_target *ti, struct dm_dev *dev,
 +                          sector_t start, sector_t len, void *data)
 +{
 +      struct dm_pr *pr = data;
 +      const struct pr_ops *ops = dev->bdev->bd_disk->fops->pr_ops;
 +
 +      if (!ops || !ops->pr_register)
 +              return -EOPNOTSUPP;
 +      return ops->pr_register(dev->bdev, pr->old_key, pr->new_key, pr->flags);
 +}
 +
 +static int dm_pr_register(struct block_device *bdev, u64 old_key, u64 new_key,
 +                        u32 flags)
 +{
 +      struct dm_pr pr = {
 +              .old_key        = old_key,
 +              .new_key        = new_key,
 +              .flags          = flags,
 +              .fail_early     = true,
 +      };
 +      int ret;
 +
 +      ret = dm_call_pr(bdev, __dm_pr_register, &pr);
 +      if (ret && new_key) {
 +              /* unregister all paths if we failed to register any path */
 +              pr.old_key = new_key;
 +              pr.new_key = 0;
 +              pr.flags = 0;
 +              pr.fail_early = false;
 +              dm_call_pr(bdev, __dm_pr_register, &pr);
 +      }
 +
 +      return ret;
  }
  
  static int dm_pr_reserve(struct block_device *bdev, u64 key, enum pr_type type,
@@@ -2724,7 -3721,6 +2724,7 @@@ static const struct block_device_operat
        .open = dm_blk_open,
        .release = dm_blk_close,
        .ioctl = dm_blk_ioctl,
 +      .direct_access = dm_blk_direct_access,
        .getgeo = dm_blk_getgeo,
        .pr_ops = &dm_pr_ops,
        .owner = THIS_MODULE
@@@ -2742,6 -3738,18 +2742,6 @@@ MODULE_PARM_DESC(major, "The major numb
  module_param(reserved_bio_based_ios, uint, S_IRUGO | S_IWUSR);
  MODULE_PARM_DESC(reserved_bio_based_ios, "Reserved IOs in bio-based mempools");
  
 -module_param(reserved_rq_based_ios, uint, S_IRUGO | S_IWUSR);
 -MODULE_PARM_DESC(reserved_rq_based_ios, "Reserved IOs in request-based mempools");
 -
 -module_param(use_blk_mq, bool, S_IRUGO | S_IWUSR);
 -MODULE_PARM_DESC(use_blk_mq, "Use block multiqueue for request-based DM devices");
 -
 -module_param(dm_mq_nr_hw_queues, uint, S_IRUGO | S_IWUSR);
 -MODULE_PARM_DESC(dm_mq_nr_hw_queues, "Number of hardware queues for request-based dm-mq devices");
 -
 -module_param(dm_mq_queue_depth, uint, S_IRUGO | S_IWUSR);
 -MODULE_PARM_DESC(dm_mq_queue_depth, "Queue depth for request-based dm-mq devices");
 -
  module_param(dm_numa_node, int, S_IRUGO | S_IWUSR);
  MODULE_PARM_DESC(dm_numa_node, "NUMA node for DM device memory allocations");
  
diff --combined drivers/nvdimm/blk.c
index 7e262ef06ede793ebb378770977fd12fefaf79a6,dfe691cf4d743986fade7f6b61c719aaa3c8c5ae..9faaa9694d8741adb64b5aae8754f44d24a01e13
@@@ -267,10 -267,8 +267,8 @@@ static int nsblk_attach_disk(struct nd_
        q = blk_alloc_queue(GFP_KERNEL);
        if (!q)
                return -ENOMEM;
-       if (devm_add_action(dev, nd_blk_release_queue, q)) {
-               blk_cleanup_queue(q);
+       if (devm_add_action_or_reset(dev, nd_blk_release_queue, q))
                return -ENOMEM;
-       }
  
        blk_queue_make_request(q, nd_blk_make_request);
        blk_queue_max_hw_sectors(q, UINT_MAX);
        disk = alloc_disk(0);
        if (!disk)
                return -ENOMEM;
-       if (devm_add_action(dev, nd_blk_release_disk, disk)) {
-               put_disk(disk);
-               return -ENOMEM;
-       }
  
 -      disk->driverfs_dev      = dev;
        disk->first_minor       = 0;
        disk->fops              = &nd_blk_fops;
        disk->queue             = q;
        disk->flags             = GENHD_FL_EXT_DEVT;
        nvdimm_namespace_disk_name(&nsblk->common, disk->disk_name);
        set_capacity(disk, 0);
 -      add_disk(disk);
 +      device_add_disk(dev, disk);
  
+       if (devm_add_action_or_reset(dev, nd_blk_release_disk, disk))
+               return -ENOMEM;
        if (nsblk_meta_size(nsblk)) {
                int rc = nd_integrity_init(disk, nsblk_meta_size(nsblk));
  
diff --combined drivers/nvdimm/bus.c
index 5e4e5c772ea54ff9f5696a1f7d2816d0ebff4d5c,46d7e555b0440469eb28855e98a151c44abeff57..458daf9273362a19cc26d6a4f2c9113764f493b8
@@@ -31,6 -31,7 +31,7 @@@
  int nvdimm_major;
  static int nvdimm_bus_major;
  static struct class *nd_class;
+ static DEFINE_IDA(nd_ida);
  
  static int to_nd_device_type(struct device *dev)
  {
@@@ -60,20 -61,13 +61,13 @@@ static int nvdimm_bus_uevent(struct dev
                        to_nd_device_type(dev));
  }
  
- static int nvdimm_bus_match(struct device *dev, struct device_driver *drv)
- {
-       struct nd_device_driver *nd_drv = to_nd_device_driver(drv);
-       return !!test_bit(to_nd_device_type(dev), &nd_drv->type);
- }
  static struct module *to_bus_provider(struct device *dev)
  {
        /* pin bus providers while regions are enabled */
        if (is_nd_pmem(dev) || is_nd_blk(dev)) {
                struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
  
-               return nvdimm_bus->module;
+               return nvdimm_bus->nd_desc->module;
        }
        return NULL;
  }
@@@ -136,6 -130,21 +130,21 @@@ static int nvdimm_bus_remove(struct dev
        return rc;
  }
  
+ static void nvdimm_bus_shutdown(struct device *dev)
+ {
+       struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
+       struct nd_device_driver *nd_drv = NULL;
+       if (dev->driver)
+               nd_drv = to_nd_device_driver(dev->driver);
+       if (nd_drv && nd_drv->shutdown) {
+               nd_drv->shutdown(dev);
+               dev_dbg(&nvdimm_bus->dev, "%s.shutdown(%s)\n",
+                               dev->driver->name, dev_name(dev));
+       }
+ }
  void nd_device_notify(struct device *dev, enum nvdimm_event event)
  {
        device_lock(dev);
@@@ -208,14 -217,187 +217,187 @@@ long nvdimm_clear_poison(struct device 
  }
  EXPORT_SYMBOL_GPL(nvdimm_clear_poison);
  
+ static int nvdimm_bus_match(struct device *dev, struct device_driver *drv);
  static struct bus_type nvdimm_bus_type = {
        .name = "nd",
        .uevent = nvdimm_bus_uevent,
        .match = nvdimm_bus_match,
        .probe = nvdimm_bus_probe,
        .remove = nvdimm_bus_remove,
+       .shutdown = nvdimm_bus_shutdown,
+ };
+ static void nvdimm_bus_release(struct device *dev)
+ {
+       struct nvdimm_bus *nvdimm_bus;
+       nvdimm_bus = container_of(dev, struct nvdimm_bus, dev);
+       ida_simple_remove(&nd_ida, nvdimm_bus->id);
+       kfree(nvdimm_bus);
+ }
+ static bool is_nvdimm_bus(struct device *dev)
+ {
+       return dev->release == nvdimm_bus_release;
+ }
+ struct nvdimm_bus *walk_to_nvdimm_bus(struct device *nd_dev)
+ {
+       struct device *dev;
+       for (dev = nd_dev; dev; dev = dev->parent)
+               if (is_nvdimm_bus(dev))
+                       break;
+       dev_WARN_ONCE(nd_dev, !dev, "invalid dev, not on nd bus\n");
+       if (dev)
+               return to_nvdimm_bus(dev);
+       return NULL;
+ }
+ struct nvdimm_bus *to_nvdimm_bus(struct device *dev)
+ {
+       struct nvdimm_bus *nvdimm_bus;
+       nvdimm_bus = container_of(dev, struct nvdimm_bus, dev);
+       WARN_ON(!is_nvdimm_bus(dev));
+       return nvdimm_bus;
+ }
+ EXPORT_SYMBOL_GPL(to_nvdimm_bus);
+ struct nvdimm_bus *nvdimm_bus_register(struct device *parent,
+               struct nvdimm_bus_descriptor *nd_desc)
+ {
+       struct nvdimm_bus *nvdimm_bus;
+       int rc;
+       nvdimm_bus = kzalloc(sizeof(*nvdimm_bus), GFP_KERNEL);
+       if (!nvdimm_bus)
+               return NULL;
+       INIT_LIST_HEAD(&nvdimm_bus->list);
+       INIT_LIST_HEAD(&nvdimm_bus->mapping_list);
+       INIT_LIST_HEAD(&nvdimm_bus->poison_list);
+       init_waitqueue_head(&nvdimm_bus->probe_wait);
+       nvdimm_bus->id = ida_simple_get(&nd_ida, 0, 0, GFP_KERNEL);
+       mutex_init(&nvdimm_bus->reconfig_mutex);
+       if (nvdimm_bus->id < 0) {
+               kfree(nvdimm_bus);
+               return NULL;
+       }
+       nvdimm_bus->nd_desc = nd_desc;
+       nvdimm_bus->dev.parent = parent;
+       nvdimm_bus->dev.release = nvdimm_bus_release;
+       nvdimm_bus->dev.groups = nd_desc->attr_groups;
+       nvdimm_bus->dev.bus = &nvdimm_bus_type;
+       dev_set_name(&nvdimm_bus->dev, "ndbus%d", nvdimm_bus->id);
+       rc = device_register(&nvdimm_bus->dev);
+       if (rc) {
+               dev_dbg(&nvdimm_bus->dev, "registration failed: %d\n", rc);
+               goto err;
+       }
+       return nvdimm_bus;
+  err:
+       put_device(&nvdimm_bus->dev);
+       return NULL;
+ }
+ EXPORT_SYMBOL_GPL(nvdimm_bus_register);
+ void nvdimm_bus_unregister(struct nvdimm_bus *nvdimm_bus)
+ {
+       if (!nvdimm_bus)
+               return;
+       device_unregister(&nvdimm_bus->dev);
+ }
+ EXPORT_SYMBOL_GPL(nvdimm_bus_unregister);
+ static int child_unregister(struct device *dev, void *data)
+ {
+       /*
+        * the singular ndctl class device per bus needs to be
+        * "device_destroy"ed, so skip it here
+        *
+        * i.e. remove classless children
+        */
+       if (dev->class)
+               /* pass */;
+       else
+               nd_device_unregister(dev, ND_SYNC);
+       return 0;
+ }
+ static void free_poison_list(struct list_head *poison_list)
+ {
+       struct nd_poison *pl, *next;
+       list_for_each_entry_safe(pl, next, poison_list, list) {
+               list_del(&pl->list);
+               kfree(pl);
+       }
+       list_del_init(poison_list);
+ }
+ static int nd_bus_remove(struct device *dev)
+ {
+       struct nvdimm_bus *nvdimm_bus = to_nvdimm_bus(dev);
+       mutex_lock(&nvdimm_bus_list_mutex);
+       list_del_init(&nvdimm_bus->list);
+       mutex_unlock(&nvdimm_bus_list_mutex);
+       nd_synchronize();
+       device_for_each_child(&nvdimm_bus->dev, NULL, child_unregister);
+       nvdimm_bus_lock(&nvdimm_bus->dev);
+       free_poison_list(&nvdimm_bus->poison_list);
+       nvdimm_bus_unlock(&nvdimm_bus->dev);
+       nvdimm_bus_destroy_ndctl(nvdimm_bus);
+       return 0;
+ }
+ static int nd_bus_probe(struct device *dev)
+ {
+       struct nvdimm_bus *nvdimm_bus = to_nvdimm_bus(dev);
+       int rc;
+       rc = nvdimm_bus_create_ndctl(nvdimm_bus);
+       if (rc)
+               return rc;
+       mutex_lock(&nvdimm_bus_list_mutex);
+       list_add_tail(&nvdimm_bus->list, &nvdimm_bus_list);
+       mutex_unlock(&nvdimm_bus_list_mutex);
+       /* enable bus provider attributes to look up their local context */
+       dev_set_drvdata(dev, nvdimm_bus->nd_desc);
+       return 0;
+ }
+ static struct nd_device_driver nd_bus_driver = {
+       .probe = nd_bus_probe,
+       .remove = nd_bus_remove,
+       .drv = {
+               .name = "nd_bus",
+               .suppress_bind_attrs = true,
+               .bus = &nvdimm_bus_type,
+               .owner = THIS_MODULE,
+               .mod_name = KBUILD_MODNAME,
+       },
  };
  
+ static int nvdimm_bus_match(struct device *dev, struct device_driver *drv)
+ {
+       struct nd_device_driver *nd_drv = to_nd_device_driver(drv);
+       if (is_nvdimm_bus(dev) && nd_drv == &nd_bus_driver)
+               return true;
+       return !!test_bit(to_nd_device_type(dev), &nd_drv->type);
+ }
  static ASYNC_DOMAIN_EXCLUSIVE(nd_async_domain);
  
  void nd_synchronize(void)
@@@ -312,7 -494,7 +494,7 @@@ EXPORT_SYMBOL(__nd_driver_register)
  
  int nvdimm_revalidate_disk(struct gendisk *disk)
  {
 -      struct device *dev = disk->driverfs_dev;
 +      struct device *dev = disk_to_dev(disk)->parent;
        struct nd_region *nd_region = to_nd_region(dev->parent);
        const char *pol = nd_region->ro ? "only" : "write";
  
@@@ -395,12 -577,10 +577,10 @@@ int nvdimm_bus_create_ndctl(struct nvdi
        dev = device_create(nd_class, &nvdimm_bus->dev, devt, nvdimm_bus,
                        "ndctl%d", nvdimm_bus->id);
  
-       if (IS_ERR(dev)) {
+       if (IS_ERR(dev))
                dev_dbg(&nvdimm_bus->dev, "failed to register ndctl%d: %ld\n",
                                nvdimm_bus->id, PTR_ERR(dev));
-               return PTR_ERR(dev);
-       }
-       return 0;
+       return PTR_ERR_OR_ZERO(dev);
  }
  
  void nvdimm_bus_destroy_ndctl(struct nvdimm_bus *nvdimm_bus)
@@@ -850,8 -1030,14 +1030,14 @@@ int __init nvdimm_bus_init(void
                goto err_class;
        }
  
+       rc = driver_register(&nd_bus_driver.drv);
+       if (rc)
+               goto err_nd_bus;
        return 0;
  
+  err_nd_bus:
+       class_destroy(nd_class);
   err_class:
        unregister_chrdev(nvdimm_major, "dimmctl");
   err_dimm_chrdev:
  
  void nvdimm_bus_exit(void)
  {
+       driver_unregister(&nd_bus_driver.drv);
        class_destroy(nd_class);
        unregister_chrdev(nvdimm_bus_major, "ndctl");
        unregister_chrdev(nvdimm_major, "dimmctl");
        bus_unregister(&nvdimm_bus_type);
+       ida_destroy(&nd_ida);
  }
diff --combined drivers/nvdimm/pmem.c
index 36cb39047d5b77b17eb3d04980b82b36980e7ce4,9f75eb85cf7c79d5b0093b35485106bdea11f9da..b511099457db5cbb155e5b6270bc9bb8a3677cc6
  #include <linux/slab.h>
  #include <linux/pmem.h>
  #include <linux/nd.h>
+ #include "pmem.h"
  #include "pfn.h"
  #include "nd.h"
  
- struct pmem_device {
-       /* One contiguous memory region per device */
-       phys_addr_t             phys_addr;
-       /* when non-zero this device is hosting a 'pfn' instance */
-       phys_addr_t             data_offset;
-       u64                     pfn_flags;
-       void __pmem             *virt_addr;
-       /* immutable base size of the namespace */
-       size_t                  size;
-       /* trim size when namespace capacity has been section aligned */
-       u32                     pfn_pad;
-       struct badblocks        bb;
- };
+ static struct device *to_dev(struct pmem_device *pmem)
+ {
+       /*
+        * nvdimm bus services need a 'dev' parameter, and we record the device
+        * at init in bb.dev.
+        */
+       return pmem->bb.dev;
+ }
+ static struct nd_region *to_region(struct pmem_device *pmem)
+ {
+       return to_nd_region(to_dev(pmem)->parent);
+ }
  
  static void pmem_clear_poison(struct pmem_device *pmem, phys_addr_t offset,
                unsigned int len)
  {
-       struct device *dev = pmem->bb.dev;
+       struct device *dev = to_dev(pmem);
        sector_t sector;
        long cleared;
  
@@@ -57,7 -58,7 +58,7 @@@
        cleared = nvdimm_clear_poison(dev, pmem->phys_addr + offset, len);
  
        if (cleared > 0 && cleared / 512) {
-               dev_dbg(dev, "%s: %llx clear %ld sector%s\n",
+               dev_dbg(dev, "%s: %#llx clear %ld sector%s\n",
                                __func__, (unsigned long long) sector,
                                cleared / 512, cleared / 512 > 1 ? "s" : "");
                badblocks_clear(&pmem->bb, sector, cleared / 512);
@@@ -73,7 -74,7 +74,7 @@@ static int pmem_do_bvec(struct pmem_dev
        bool bad_pmem = false;
        void *mem = kmap_atomic(page);
        phys_addr_t pmem_off = sector * 512 + pmem->data_offset;
-       void __pmem *pmem_addr = pmem->virt_addr + pmem_off;
+       void *pmem_addr = pmem->virt_addr + pmem_off;
  
        if (unlikely(is_bad_pmem(&pmem->bb, sector, len)))
                bad_pmem = true;
        return rc;
  }
  
+ /* account for REQ_FLUSH rename, replace with REQ_PREFLUSH after v4.8-rc1 */
+ #ifndef REQ_FLUSH
+ #define REQ_FLUSH REQ_PREFLUSH
+ #endif
  static blk_qc_t pmem_make_request(struct request_queue *q, struct bio *bio)
  {
        int rc = 0;
        struct bio_vec bvec;
        struct bvec_iter iter;
        struct pmem_device *pmem = q->queuedata;
+       struct nd_region *nd_region = to_region(pmem);
+       if (bio->bi_rw & REQ_FLUSH)
+               nvdimm_flush(nd_region);
  
        do_acct = nd_iostat_start(bio, &start);
        bio_for_each_segment(bvec, bio, iter) {
        if (do_acct)
                nd_iostat_end(bio, start);
  
-       if (bio_data_dir(bio))
-               wmb_pmem();
+       if (bio->bi_rw & REQ_FUA)
+               nvdimm_flush(nd_region);
  
        bio_endio(bio);
        return BLK_QC_T_NONE;
@@@ -148,8 -158,6 +158,6 @@@ static int pmem_rw_page(struct block_de
        int rc;
  
        rc = pmem_do_bvec(pmem, page, PAGE_SIZE, 0, rw, sector);
-       if (rw & WRITE)
-               wmb_pmem();
  
        /*
         * The ->rw_page interface is subtle and tricky.  The core
        return rc;
  }
  
- static long pmem_direct_access(struct block_device *bdev, sector_t sector,
-                     void __pmem **kaddr, pfn_t *pfn, long size)
+ /* see "strong" declaration in tools/testing/nvdimm/pmem-dax.c */
+ __weak long pmem_direct_access(struct block_device *bdev, sector_t sector,
+                     void **kaddr, pfn_t *pfn, long size)
  {
        struct pmem_device *pmem = bdev->bd_queue->queuedata;
        resource_size_t offset = sector * 512 + pmem->data_offset;
@@@ -195,7 -204,7 +204,7 @@@ static void pmem_release_queue(void *q
        blk_cleanup_queue(q);
  }
  
- void pmem_release_disk(void *disk)
static void pmem_release_disk(void *disk)
  {
        del_gendisk(disk);
        put_disk(disk);
@@@ -205,6 -214,7 +214,7 @@@ static int pmem_attach_disk(struct devi
                struct nd_namespace_common *ndns)
  {
        struct nd_namespace_io *nsio = to_nd_namespace_io(&ndns->dev);
+       struct nd_region *nd_region = to_nd_region(dev->parent);
        struct vmem_altmap __altmap, *altmap = NULL;
        struct resource *res = &nsio->res;
        struct nd_pfn *nd_pfn = NULL;
        dev_set_drvdata(dev, pmem);
        pmem->phys_addr = res->start;
        pmem->size = resource_size(res);
-       if (!arch_has_wmb_pmem())
+       if (nvdimm_has_flush(nd_region) < 0)
                dev_warn(dev, "unable to guarantee persistence of writes\n");
  
        if (!devm_request_mem_region(dev, res->start, resource_size(res),
         * At release time the queue must be dead before
         * devm_memremap_pages is unwound
         */
-       if (devm_add_action(dev, pmem_release_queue, q)) {
-               blk_cleanup_queue(q);
+       if (devm_add_action_or_reset(dev, pmem_release_queue, q))
                return -ENOMEM;
-       }
  
        if (IS_ERR(addr))
                return PTR_ERR(addr);
-       pmem->virt_addr = (void __pmem *) addr;
+       pmem->virt_addr = addr;
  
+       blk_queue_write_cache(q, true, true);
        blk_queue_make_request(q, pmem_make_request);
        blk_queue_physical_block_size(q, PAGE_SIZE);
        blk_queue_max_hw_sectors(q, UINT_MAX);
        blk_queue_bounce_limit(q, BLK_BOUNCE_ANY);
        queue_flag_set_unlocked(QUEUE_FLAG_NONROT, q);
 +      queue_flag_set_unlocked(QUEUE_FLAG_DAX, q);
        q->queuedata = pmem;
  
        disk = alloc_disk_node(0, nid);
        if (!disk)
                return -ENOMEM;
-       if (devm_add_action(dev, pmem_release_disk, disk)) {
-               put_disk(disk);
-               return -ENOMEM;
-       }
  
        disk->fops              = &pmem_fops;
        disk->queue             = q;
        disk->flags             = GENHD_FL_EXT_DEVT;
        nvdimm_namespace_disk_name(ndns, disk->disk_name);
 -      disk->driverfs_dev = dev;
        set_capacity(disk, (pmem->size - pmem->pfn_pad - pmem->data_offset)
                        / 512);
        if (devm_init_badblocks(dev, &pmem->bb))
                return -ENOMEM;
-       nvdimm_badblocks_populate(to_nd_region(dev->parent), &pmem->bb, res);
+       nvdimm_badblocks_populate(nd_region, &pmem->bb, res);
        disk->bb = &pmem->bb;
 -      add_disk(disk);
 +      device_add_disk(dev, disk);
+       if (devm_add_action_or_reset(dev, pmem_release_disk, disk))
+               return -ENOMEM;
        revalidate_disk(disk);
  
        return 0;
@@@ -340,13 -349,20 +349,20 @@@ static int nd_pmem_remove(struct devic
  {
        if (is_nd_btt(dev))
                nvdimm_namespace_detach_btt(to_nd_btt(dev));
+       nvdimm_flush(to_nd_region(dev->parent));
        return 0;
  }
  
+ static void nd_pmem_shutdown(struct device *dev)
+ {
+       nvdimm_flush(to_nd_region(dev->parent));
+ }
  static void nd_pmem_notify(struct device *dev, enum nvdimm_event event)
  {
-       struct nd_region *nd_region = to_nd_region(dev->parent);
        struct pmem_device *pmem = dev_get_drvdata(dev);
+       struct nd_region *nd_region = to_region(pmem);
        resource_size_t offset = 0, end_trunc = 0;
        struct nd_namespace_common *ndns;
        struct nd_namespace_io *nsio;
@@@ -382,6 -398,7 +398,7 @@@ static struct nd_device_driver nd_pmem_
        .probe = nd_pmem_probe,
        .remove = nd_pmem_remove,
        .notify = nd_pmem_notify,
+       .shutdown = nd_pmem_shutdown,
        .drv = {
                .name = "nd_pmem",
        },
index fac1b51ea0dee9a55738d030efed1aaf1a43e5bc,023c5c975dc047f941d3b31b984a2dcc53ce8b11..9d66b4fb174b80231a98737bf3f9fafeb4849c66
@@@ -31,7 -31,7 +31,7 @@@ static void dcssblk_release(struct gend
  static blk_qc_t dcssblk_make_request(struct request_queue *q,
                                                struct bio *bio);
  static long dcssblk_direct_access(struct block_device *bdev, sector_t secnum,
-                        void __pmem **kaddr, pfn_t *pfn, long size);
+                        void **kaddr, pfn_t *pfn, long size);
  
  static char dcssblk_segments[DCSSBLK_PARM_LEN] = "\0";
  
@@@ -615,9 -615,9 +615,9 @@@ dcssblk_add_store(struct device *dev, s
        dev_info->dcssblk_queue = blk_alloc_queue(GFP_KERNEL);
        dev_info->gd->queue = dev_info->dcssblk_queue;
        dev_info->gd->private_data = dev_info;
 -      dev_info->gd->driverfs_dev = &dev_info->dev;
        blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request);
        blk_queue_logical_block_size(dev_info->dcssblk_queue, 4096);
 +      queue_flag_set_unlocked(QUEUE_FLAG_DAX, dev_info->dcssblk_queue);
  
        seg_byte_size = (dev_info->end - dev_info->start + 1);
        set_capacity(dev_info->gd, seg_byte_size >> 9); // size in sectors
                goto put_dev;
  
        get_device(&dev_info->dev);
 -      add_disk(dev_info->gd);
 +      device_add_disk(&dev_info->dev, dev_info->gd);
  
        switch (dev_info->segment_type) {
                case SEG_TYPE_SR:
@@@ -884,7 -884,7 +884,7 @@@ fail
  
  static long
  dcssblk_direct_access (struct block_device *bdev, sector_t secnum,
-                       void __pmem **kaddr, pfn_t *pfn, long size)
+                       void **kaddr, pfn_t *pfn, long size)
  {
        struct dcssblk_dev_info *dev_info;
        unsigned long offset, dev_sz;
                return -ENODEV;
        dev_sz = dev_info->end - dev_info->start;
        offset = secnum * 512;
-       *kaddr = (void __pmem *) (dev_info->start + offset);
+       *kaddr = (void *) dev_info->start + offset;
        *pfn = __pfn_to_pfn_t(PFN_DOWN(dev_info->start + offset), PFN_DEV);
  
        return dev_sz - offset;
diff --combined fs/dax.c
index 432b9e6dd63b90b7a98a4820f1c45e257d007517,a7d93283c551a8f6b96e21ff9290818f51e36c35..993dc6fe0416e17e8a0ca5c8a432b8daf574df86
+++ b/fs/dax.c
@@@ -75,13 -75,13 +75,13 @@@ static long dax_map_atomic(struct block
        struct request_queue *q = bdev->bd_queue;
        long rc = -EIO;
  
-       dax->addr = (void __pmem *) ERR_PTR(-EIO);
+       dax->addr = ERR_PTR(-EIO);
        if (blk_queue_enter(q, true) != 0)
                return rc;
  
        rc = bdev_direct_access(bdev, dax);
        if (rc < 0) {
-               dax->addr = (void __pmem *) ERR_PTR(rc);
+               dax->addr = ERR_PTR(rc);
                blk_queue_exit(q);
                return rc;
        }
@@@ -147,12 -147,12 +147,12 @@@ static ssize_t dax_io(struct inode *ino
                      struct buffer_head *bh)
  {
        loff_t pos = start, max = start, bh_max = start;
-       bool hole = false, need_wmb = false;
+       bool hole = false;
        struct block_device *bdev = NULL;
        int rw = iov_iter_rw(iter), rc;
        long map_len = 0;
        struct blk_dax_ctl dax = {
-               .addr = (void __pmem *) ERR_PTR(-EIO),
+               .addr = ERR_PTR(-EIO),
        };
        unsigned blkbits = inode->i_blkbits;
        sector_t file_blks = (i_size_read(inode) + (1 << blkbits) - 1)
  
                if (iov_iter_rw(iter) == WRITE) {
                        len = copy_from_iter_pmem(dax.addr, max - pos, iter);
-                       need_wmb = true;
                } else if (!hole)
                        len = copy_to_iter((void __force *) dax.addr, max - pos,
                                        iter);
                        dax.addr += len;
        }
  
-       if (need_wmb)
-               wmb_pmem();
        dax_unmap_atomic(bdev, &dax);
  
        return (pos == start) ? rc : pos - start;
@@@ -788,7 -785,6 +785,6 @@@ int dax_writeback_mapping_range(struct 
                                return ret;
                }
        }
-       wmb_pmem();
        return 0;
  }
  EXPORT_SYMBOL_GPL(dax_writeback_mapping_range);
@@@ -819,16 -815,16 +815,16 @@@ static int dax_insert_mapping(struct ad
  }
  
  /**
 - * __dax_fault - handle a page fault on a DAX file
 + * dax_fault - handle a page fault on a DAX file
   * @vma: The virtual memory area where the fault occurred
   * @vmf: The description of the fault
   * @get_block: The filesystem method used to translate file offsets to blocks
   *
   * When a page fault occurs, filesystems may call this helper in their
 - * fault handler for DAX files. __dax_fault() assumes the caller has done all
 + * fault handler for DAX files. dax_fault() assumes the caller has done all
   * the necessary locking for the page fault to proceed successfully.
   */
 -int __dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
 +int dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
                        get_block_t get_block)
  {
        struct file *file = vma->vm_file;
                return VM_FAULT_SIGBUS | major;
        return VM_FAULT_NOPAGE | major;
  }
 -EXPORT_SYMBOL(__dax_fault);
 -
 -/**
 - * dax_fault - handle a page fault on a DAX file
 - * @vma: The virtual memory area where the fault occurred
 - * @vmf: The description of the fault
 - * @get_block: The filesystem method used to translate file offsets to blocks
 - *
 - * When a page fault occurs, filesystems may call this helper in their
 - * fault handler for DAX files.
 - */
 -int dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
 -            get_block_t get_block)
 -{
 -      int result;
 -      struct super_block *sb = file_inode(vma->vm_file)->i_sb;
 -
 -      if (vmf->flags & FAULT_FLAG_WRITE) {
 -              sb_start_pagefault(sb);
 -              file_update_time(vma->vm_file);
 -      }
 -      result = __dax_fault(vma, vmf, get_block);
 -      if (vmf->flags & FAULT_FLAG_WRITE)
 -              sb_end_pagefault(sb);
 -
 -      return result;
 -}
  EXPORT_SYMBOL_GPL(dax_fault);
  
  #if defined(CONFIG_TRANSPARENT_HUGEPAGE)
@@@ -940,16 -963,7 +936,16 @@@ static void __dax_dbg(struct buffer_hea
  
  #define dax_pmd_dbg(bh, address, reason)      __dax_dbg(bh, address, reason, "dax_pmd")
  
 -int __dax_pmd_fault(struct vm_area_struct *vma, unsigned long address,
 +/**
 + * dax_pmd_fault - handle a PMD fault on a DAX file
 + * @vma: The virtual memory area where the fault occurred
 + * @vmf: The description of the fault
 + * @get_block: The filesystem method used to translate file offsets to blocks
 + *
 + * When a page fault occurs, filesystems may call this helper in their
 + * pmd_fault handler for DAX files.
 + */
 +int dax_pmd_fault(struct vm_area_struct *vma, unsigned long address,
                pmd_t *pmd, unsigned int flags, get_block_t get_block)
  {
        struct file *file = vma->vm_file;
                 *
                 * The PMD path doesn't have an equivalent to
                 * dax_pfn_mkwrite(), though, so for a read followed by a
 -               * write we traverse all the way through __dax_pmd_fault()
 +               * write we traverse all the way through dax_pmd_fault()
                 * twice.  This means we can just skip inserting a radix tree
                 * entry completely on the initial read and just wait until
                 * the write to insert a dirty entry.
        result = VM_FAULT_FALLBACK;
        goto out;
  }
 -EXPORT_SYMBOL_GPL(__dax_pmd_fault);
 -
 -/**
 - * dax_pmd_fault - handle a PMD fault on a DAX file
 - * @vma: The virtual memory area where the fault occurred
 - * @vmf: The description of the fault
 - * @get_block: The filesystem method used to translate file offsets to blocks
 - *
 - * When a page fault occurs, filesystems may call this helper in their
 - * pmd_fault handler for DAX files.
 - */
 -int dax_pmd_fault(struct vm_area_struct *vma, unsigned long address,
 -                      pmd_t *pmd, unsigned int flags, get_block_t get_block)
 -{
 -      int result;
 -      struct super_block *sb = file_inode(vma->vm_file)->i_sb;
 -
 -      if (flags & FAULT_FLAG_WRITE) {
 -              sb_start_pagefault(sb);
 -              file_update_time(vma->vm_file);
 -      }
 -      result = __dax_pmd_fault(vma, address, pmd, flags, get_block);
 -      if (flags & FAULT_FLAG_WRITE)
 -              sb_end_pagefault(sb);
 -
 -      return result;
 -}
  EXPORT_SYMBOL_GPL(dax_pmd_fault);
  #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
  
@@@ -1187,7 -1228,6 +1183,6 @@@ int __dax_zero_page_range(struct block_
                if (dax_map_atomic(bdev, &dax) < 0)
                        return PTR_ERR(dax.addr);
                clear_pmem(dax.addr + offset, length);
-               wmb_pmem();
                dax_unmap_atomic(bdev, &dax);
        }
        return 0;
diff --combined include/linux/blkdev.h
index c96db9c22d1031496d01c0622a65ea0df8e2965a,fde908b2836b946308ffe3617bc2800250d4d505..adf33079771e740a93630305d229ef7d5578b814
@@@ -90,17 -90,18 +90,17 @@@ struct request 
        struct list_head queuelist;
        union {
                struct call_single_data csd;
 -              unsigned long fifo_time;
 +              u64 fifo_time;
        };
  
        struct request_queue *q;
        struct blk_mq_ctx *mq_ctx;
  
 -      u64 cmd_flags;
 +      int cpu;
        unsigned cmd_type;
 +      u64 cmd_flags;
        unsigned long atomic_flags;
  
 -      int cpu;
 -
        /* the following two fields are internal, NEVER access directly */
        unsigned int __data_len;        /* total data len */
        sector_t __sector;              /* sector cursor */
        struct request *next_rq;
  };
  
 +#define REQ_OP_SHIFT (8 * sizeof(u64) - REQ_OP_BITS)
 +#define req_op(req)  ((req)->cmd_flags >> REQ_OP_SHIFT)
 +
 +#define req_set_op(req, op) do {                              \
 +      WARN_ON(op >= (1 << REQ_OP_BITS));                      \
 +      (req)->cmd_flags &= ((1ULL << REQ_OP_SHIFT) - 1);       \
 +      (req)->cmd_flags |= ((u64) (op) << REQ_OP_SHIFT);       \
 +} while (0)
 +
 +#define req_set_op_attrs(req, op, flags) do { \
 +      req_set_op(req, op);                    \
 +      (req)->cmd_flags |= flags;              \
 +} while (0)
 +
  static inline unsigned short req_get_ioprio(struct request *req)
  {
        return req->ioprio;
@@@ -496,7 -483,7 +496,7 @@@ struct request_queue 
  #define QUEUE_FLAG_DISCARD     14     /* supports DISCARD */
  #define QUEUE_FLAG_NOXMERGES   15     /* No extended merges */
  #define QUEUE_FLAG_ADD_RANDOM  16     /* Contributes to random pool */
 -#define QUEUE_FLAG_SECDISCARD  17     /* supports SECDISCARD */
 +#define QUEUE_FLAG_SECERASE    17     /* supports secure erase */
  #define QUEUE_FLAG_SAME_FORCE  18     /* force complete on same CPU */
  #define QUEUE_FLAG_DEAD        19     /* queue tear-down finished */
  #define QUEUE_FLAG_INIT_DONE   20     /* queue is initialized */
  #define QUEUE_FLAG_WC        23       /* Write back caching */
  #define QUEUE_FLAG_FUA               24       /* device supports FUA writes */
  #define QUEUE_FLAG_FLUSH_NQ    25     /* flush not queueuable */
 +#define QUEUE_FLAG_DAX         26     /* device supports DAX */
  
  #define QUEUE_FLAG_DEFAULT    ((1 << QUEUE_FLAG_IO_STAT) |            \
                                 (1 << QUEUE_FLAG_STACKABLE)    |       \
@@@ -593,9 -579,8 +593,9 @@@ static inline void queue_flag_clear(uns
  #define blk_queue_stackable(q)        \
        test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags)
  #define blk_queue_discard(q)  test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags)
 -#define blk_queue_secdiscard(q)       (blk_queue_discard(q) && \
 -      test_bit(QUEUE_FLAG_SECDISCARD, &(q)->queue_flags))
 +#define blk_queue_secure_erase(q) \
 +      (test_bit(QUEUE_FLAG_SECERASE, &(q)->queue_flags))
 +#define blk_queue_dax(q)      test_bit(QUEUE_FLAG_DAX, &(q)->queue_flags)
  
  #define blk_noretry_request(rq) \
        ((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \
  
  #define list_entry_rq(ptr)    list_entry((ptr), struct request, queuelist)
  
 -#define rq_data_dir(rq)               ((int)((rq)->cmd_flags & 1))
 +#define rq_data_dir(rq)               (op_is_write(req_op(rq)) ? WRITE : READ)
  
  /*
   * Driver can handle struct request, if it either has an old style
@@@ -631,14 -616,14 +631,14 @@@ static inline unsigned int blk_queue_cl
  /*
   * We regard a request as sync, if either a read or a sync write
   */
 -static inline bool rw_is_sync(unsigned int rw_flags)
 +static inline bool rw_is_sync(int op, unsigned int rw_flags)
  {
 -      return !(rw_flags & REQ_WRITE) || (rw_flags & REQ_SYNC);
 +      return op == REQ_OP_READ || (rw_flags & REQ_SYNC);
  }
  
  static inline bool rq_is_sync(struct request *rq)
  {
 -      return rw_is_sync(rq->cmd_flags);
 +      return rw_is_sync(req_op(rq), rq->cmd_flags);
  }
  
  static inline bool blk_rl_full(struct request_list *rl, bool sync)
@@@ -667,10 -652,22 +667,10 @@@ static inline bool rq_mergeable(struct 
        if (rq->cmd_type != REQ_TYPE_FS)
                return false;
  
 -      if (rq->cmd_flags & REQ_NOMERGE_FLAGS)
 +      if (req_op(rq) == REQ_OP_FLUSH)
                return false;
  
 -      return true;
 -}
 -
 -static inline bool blk_check_merge_flags(unsigned int flags1,
 -                                       unsigned int flags2)
 -{
 -      if ((flags1 & REQ_DISCARD) != (flags2 & REQ_DISCARD))
 -              return false;
 -
 -      if ((flags1 & REQ_SECURE) != (flags2 & REQ_SECURE))
 -              return false;
 -
 -      if ((flags1 & REQ_WRITE_SAME) != (flags2 & REQ_WRITE_SAME))
 +      if (rq->cmd_flags & REQ_NOMERGE_FLAGS)
                return false;
  
        return true;
@@@ -789,6 -786,8 +789,6 @@@ extern void blk_rq_init(struct request_
  extern void blk_put_request(struct request *);
  extern void __blk_put_request(struct request_queue *, struct request *);
  extern struct request *blk_get_request(struct request_queue *, int, gfp_t);
 -extern struct request *blk_make_request(struct request_queue *, struct bio *,
 -                                      gfp_t);
  extern void blk_rq_set_block_pc(struct request *);
  extern void blk_requeue_request(struct request_queue *, struct request *);
  extern void blk_add_request_payload(struct request *rq, struct page *page,
@@@ -801,7 -800,6 +801,7 @@@ extern int blk_rq_prep_clone(struct req
  extern void blk_rq_unprep_clone(struct request *rq);
  extern int blk_insert_cloned_request(struct request_queue *q,
                                     struct request *rq);
 +extern int blk_rq_append_bio(struct request *rq, struct bio *bio);
  extern void blk_delay_queue(struct request_queue *, unsigned long);
  extern void blk_queue_split(struct request_queue *, struct bio **,
                            struct bio_set *);
@@@ -881,12 -879,12 +881,12 @@@ static inline unsigned int blk_rq_cur_s
  }
  
  static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q,
 -                                                   unsigned int cmd_flags)
 +                                                   int op)
  {
 -      if (unlikely(cmd_flags & REQ_DISCARD))
 +      if (unlikely(op == REQ_OP_DISCARD))
                return min(q->limits.max_discard_sectors, UINT_MAX >> 9);
  
 -      if (unlikely(cmd_flags & REQ_WRITE_SAME))
 +      if (unlikely(op == REQ_OP_WRITE_SAME))
                return q->limits.max_write_same_sectors;
  
        return q->limits.max_sectors;
@@@ -906,19 -904,18 +906,19 @@@ static inline unsigned int blk_max_size
                        (offset & (q->limits.chunk_sectors - 1));
  }
  
 -static inline unsigned int blk_rq_get_max_sectors(struct request *rq)
 +static inline unsigned int blk_rq_get_max_sectors(struct request *rq,
 +                                                sector_t offset)
  {
        struct request_queue *q = rq->q;
  
        if (unlikely(rq->cmd_type != REQ_TYPE_FS))
                return q->limits.max_hw_sectors;
  
 -      if (!q->limits.chunk_sectors || (rq->cmd_flags & REQ_DISCARD))
 -              return blk_queue_get_max_sectors(q, rq->cmd_flags);
 +      if (!q->limits.chunk_sectors || (req_op(rq) == REQ_OP_DISCARD))
 +              return blk_queue_get_max_sectors(q, req_op(rq));
  
 -      return min(blk_max_size_offset(q, blk_rq_pos(rq)),
 -                      blk_queue_get_max_sectors(q, rq->cmd_flags));
 +      return min(blk_max_size_offset(q, offset),
 +                      blk_queue_get_max_sectors(q, req_op(rq)));
  }
  
  static inline unsigned int blk_rq_count_bios(struct request *rq)
@@@ -1138,16 -1135,13 +1138,16 @@@ static inline struct request *blk_map_q
        return bqt->tag_index[tag];
  }
  
 -#define BLKDEV_DISCARD_SECURE  0x01    /* secure discard */
 +
 +#define BLKDEV_DISCARD_SECURE (1 << 0)        /* issue a secure erase */
 +#define BLKDEV_DISCARD_ZERO   (1 << 1)        /* must reliably zero data */
  
  extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *);
  extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
                sector_t nr_sects, gfp_t gfp_mask, unsigned long flags);
  extern int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
 -              sector_t nr_sects, gfp_t gfp_mask, int type, struct bio **biop);
 +              sector_t nr_sects, gfp_t gfp_mask, int flags,
 +              struct bio **biop);
  extern int blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
                sector_t nr_sects, gfp_t gfp_mask, struct page *page);
  extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
@@@ -1665,7 -1659,7 +1665,7 @@@ static inline bool integrity_req_gap_fr
   */
  struct blk_dax_ctl {
        sector_t sector;
-       void __pmem *addr;
+       void *addr;
        long size;
        pfn_t pfn;
  };
@@@ -1676,8 -1670,8 +1676,8 @@@ struct block_device_operations 
        int (*rw_page)(struct block_device *, sector_t, struct page *, int rw);
        int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
        int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
-       long (*direct_access)(struct block_device *, sector_t, void __pmem **,
-                       pfn_t *, long);
+       long (*direct_access)(struct block_device *, sector_t, void **, pfn_t *,
+                       long);
        unsigned int (*check_events) (struct gendisk *disk,
                                      unsigned int clearing);
        /* ->media_changed() is DEPRECATED, use ->check_events() instead */
diff --combined include/linux/compiler.h
index 2e853b679a5da9c4061053b714801d7434728154,b966974938eda8714d511eb4f8eb60ee6ff97d61..1bb95484272501bbc8d0603da489f56b4f87714a
@@@ -17,7 -17,6 +17,6 @@@
  # define __release(x) __context__(x,-1)
  # define __cond_lock(x,c)     ((c) ? ({ __acquire(x); 1; }) : 0)
  # define __percpu     __attribute__((noderef, address_space(3)))
- # define __pmem               __attribute__((noderef, address_space(5)))
  #ifdef CONFIG_SPARSE_RCU_POINTER
  # define __rcu                __attribute__((noderef, address_space(4)))
  #else /* CONFIG_SPARSE_RCU_POINTER */
@@@ -45,7 -44,6 +44,6 @@@ extern void __chk_io_ptr(const volatil
  # define __cond_lock(x,c) (c)
  # define __percpu
  # define __rcu
- # define __pmem
  # define __private
  # define ACCESS_PRIVATE(p, member) ((p)->member)
  #endif /* __CHECKER__ */
@@@ -304,6 -302,23 +302,6 @@@ static __always_inline void __write_onc
        __u.__val;                                      \
  })
  
 -/**
 - * smp_cond_acquire() - Spin wait for cond with ACQUIRE ordering
 - * @cond: boolean expression to wait for
 - *
 - * Equivalent to using smp_load_acquire() on the condition variable but employs
 - * the control dependency of the wait to reduce the barrier on many platforms.
 - *
 - * The control dependency provides a LOAD->STORE order, the additional RMB
 - * provides LOAD->LOAD order, together they provide LOAD->{LOAD,STORE} order,
 - * aka. ACQUIRE.
 - */
 -#define smp_cond_acquire(cond)        do {            \
 -      while (!(cond))                         \
 -              cpu_relax();                    \
 -      smp_rmb(); /* ctrl + rmb := acquire */  \
 -} while (0)
 -
  #endif /* __KERNEL__ */
  
  #endif /* __ASSEMBLY__ */
   * Similar to rcu_dereference(), but for situations where the pointed-to
   * object's lifetime is managed by something other than RCU.  That
   * "something other" might be reference counting or simple immortality.
 + *
 + * The seemingly unused void * variable is to validate @p is indeed a pointer
 + * type. All pointer types silently cast to void *.
   */
  #define lockless_dereference(p) \
  ({ \
        typeof(p) _________p1 = READ_ONCE(p); \
 +      __maybe_unused const void * const _________p2 = _________p1; \
        smp_read_barrier_depends(); /* Dependency order vs. p above. */ \
        (_________p1); \
  })
index b0db857f334b95630a4a05ff5b10a6c8383f0c6c,0830c9e86f0ddb94e897758724439df922721d97..91acfce74a220010549536edde925ef9e3ec81c0
@@@ -19,15 -19,6 +19,15 @@@ struct dm_table
  struct mapped_device;
  struct bio_vec;
  
 +/*
 + * Type of table, mapped_device's mempool and request_queue
 + */
 +#define DM_TYPE_NONE                  0
 +#define DM_TYPE_BIO_BASED             1
 +#define DM_TYPE_REQUEST_BASED         2
 +#define DM_TYPE_MQ_REQUEST_BASED      3
 +#define DM_TYPE_DAX_BIO_BASED         4
 +
  typedef enum { STATUSTYPE_INFO, STATUSTYPE_TABLE } status_type_t;
  
  union map_info {
@@@ -125,14 -116,6 +125,14 @@@ typedef void (*dm_io_hints_fn) (struct 
   */
  typedef int (*dm_busy_fn) (struct dm_target *ti);
  
-                                    void __pmem **kaddr, pfn_t *pfn, long size);
 +/*
 + * Returns:
 + *  < 0 : error
 + * >= 0 : the number of bytes accessible at the address
 + */
 +typedef long (*dm_direct_access_fn) (struct dm_target *ti, sector_t sector,
++                                   void **kaddr, pfn_t *pfn, long size);
 +
  void dm_error(const char *message);
  
  struct dm_dev {
@@@ -179,7 -162,6 +179,7 @@@ struct target_type 
        dm_busy_fn busy;
        dm_iterate_devices_fn iterate_devices;
        dm_io_hints_fn io_hints;
 +      dm_direct_access_fn direct_access;
  
        /* For internal device-mapper use. */
        struct list_head list;
@@@ -460,14 -442,6 +460,14 @@@ int dm_table_add_target(struct dm_tabl
   * Target_ctr should call this if it needs to add any callbacks.
   */
  void dm_table_add_target_callbacks(struct dm_table *t, struct dm_target_callbacks *cb);
 +
 +/*
 + * Target can use this to set the table's type.
 + * Can only ever be called from a target's ctr.
 + * Useful for "hybrid" target (supports both bio-based
 + * and request-based).
 + */
 +void dm_table_set_type(struct dm_table *t, unsigned type);
  
  /*
   * Finally call this to make the table ready for use.
diff --combined kernel/memremap.c
index ddb3247a872a60b3ec5e716ac503f8bd13254d97,852e5266124a07a5f1aa7d9735cfb107dbe6ce40..251d16b4cb41e67111ff2f1f783bf39cdea13822
@@@ -169,12 -169,6 +169,6 @@@ void devm_memunmap(struct device *dev, 
  }
  EXPORT_SYMBOL(devm_memunmap);
  
- pfn_t phys_to_pfn_t(phys_addr_t addr, u64 flags)
- {
-       return __pfn_to_pfn_t(addr >> PAGE_SHIFT, flags);
- }
- EXPORT_SYMBOL(phys_to_pfn_t);
  #ifdef CONFIG_ZONE_DEVICE
  static DEFINE_MUTEX(pgmap_lock);
  static RADIX_TREE(pgmap_radix, GFP_KERNEL);
@@@ -308,6 -302,12 +302,6 @@@ void *devm_memremap_pages(struct devic
        if (is_ram == REGION_INTERSECTS)
                return __va(res->start);
  
 -      if (altmap && !IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP)) {
 -              dev_err(dev, "%s: altmap requires CONFIG_SPARSEMEM_VMEMMAP=y\n",
 -                              __func__);
 -              return ERR_PTR(-ENXIO);
 -      }
 -
        if (!ref)
                return ERR_PTR(-EINVAL);
  
@@@ -395,6 -395,7 +389,6 @@@ void vmem_altmap_free(struct vmem_altma
        altmap->alloc -= nr_pfns;
  }
  
 -#ifdef CONFIG_SPARSEMEM_VMEMMAP
  struct vmem_altmap *to_vmem_altmap(unsigned long memmap_start)
  {
        /*
  
        return pgmap ? pgmap->altmap : NULL;
  }
 -#endif /* CONFIG_SPARSEMEM_VMEMMAP */
  #endif /* CONFIG_ZONE_DEVICE */
index 3918dd52e903c9c07db1c027d2680d743f145977,38a48daed154dd322549d5c32e18a9bc868b6ac1..0f196eec9f48ab7b126ace056b8f28bc8b367f71
  
  {{0x0f, 0x31, }, 2, 0, "", "",
  "0f 31                \trdtsc  ",},
 +{{0xc4, 0xe2, 0x7d, 0x13, 0xeb, }, 5, 0, "", "",
 +"c4 e2 7d 13 eb       \tvcvtph2ps %xmm3,%ymm5",},
 +{{0x62, 0x81, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 81 78 56 34 12    \tbound  %eax,0x12345678(%ecx)",},
 +{{0x62, 0x88, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 88 78 56 34 12    \tbound  %ecx,0x12345678(%eax)",},
 +{{0x62, 0x90, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 90 78 56 34 12    \tbound  %edx,0x12345678(%eax)",},
 +{{0x62, 0x98, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 98 78 56 34 12    \tbound  %ebx,0x12345678(%eax)",},
 +{{0x62, 0xa0, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 a0 78 56 34 12    \tbound  %esp,0x12345678(%eax)",},
 +{{0x62, 0xa8, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 a8 78 56 34 12    \tbound  %ebp,0x12345678(%eax)",},
 +{{0x62, 0xb0, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 b0 78 56 34 12    \tbound  %esi,0x12345678(%eax)",},
 +{{0x62, 0xb8, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 b8 78 56 34 12    \tbound  %edi,0x12345678(%eax)",},
 +{{0x62, 0x08, }, 2, 0, "", "",
 +"62 08                \tbound  %ecx,(%eax)",},
 +{{0x62, 0x05, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 05 78 56 34 12    \tbound  %eax,0x12345678",},
 +{{0x62, 0x14, 0x01, }, 3, 0, "", "",
 +"62 14 01             \tbound  %edx,(%ecx,%eax,1)",},
 +{{0x62, 0x14, 0x05, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"62 14 05 78 56 34 12 \tbound  %edx,0x12345678(,%eax,1)",},
 +{{0x62, 0x14, 0x08, }, 3, 0, "", "",
 +"62 14 08             \tbound  %edx,(%eax,%ecx,1)",},
 +{{0x62, 0x14, 0xc8, }, 3, 0, "", "",
 +"62 14 c8             \tbound  %edx,(%eax,%ecx,8)",},
 +{{0x62, 0x50, 0x12, }, 3, 0, "", "",
 +"62 50 12             \tbound  %edx,0x12(%eax)",},
 +{{0x62, 0x55, 0x12, }, 3, 0, "", "",
 +"62 55 12             \tbound  %edx,0x12(%ebp)",},
 +{{0x62, 0x54, 0x01, 0x12, }, 4, 0, "", "",
 +"62 54 01 12          \tbound  %edx,0x12(%ecx,%eax,1)",},
 +{{0x62, 0x54, 0x05, 0x12, }, 4, 0, "", "",
 +"62 54 05 12          \tbound  %edx,0x12(%ebp,%eax,1)",},
 +{{0x62, 0x54, 0x08, 0x12, }, 4, 0, "", "",
 +"62 54 08 12          \tbound  %edx,0x12(%eax,%ecx,1)",},
 +{{0x62, 0x54, 0xc8, 0x12, }, 4, 0, "", "",
 +"62 54 c8 12          \tbound  %edx,0x12(%eax,%ecx,8)",},
 +{{0x62, 0x90, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 90 78 56 34 12    \tbound  %edx,0x12345678(%eax)",},
 +{{0x62, 0x95, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "", "",
 +"62 95 78 56 34 12    \tbound  %edx,0x12345678(%ebp)",},
 +{{0x62, 0x94, 0x01, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"62 94 01 78 56 34 12 \tbound  %edx,0x12345678(%ecx,%eax,1)",},
 +{{0x62, 0x94, 0x05, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"62 94 05 78 56 34 12 \tbound  %edx,0x12345678(%ebp,%eax,1)",},
 +{{0x62, 0x94, 0x08, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"62 94 08 78 56 34 12 \tbound  %edx,0x12345678(%eax,%ecx,1)",},
 +{{0x62, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"62 94 c8 78 56 34 12 \tbound  %edx,0x12345678(%eax,%ecx,8)",},
 +{{0x66, 0x62, 0x81, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 81 78 56 34 12 \tbound  %ax,0x12345678(%ecx)",},
 +{{0x66, 0x62, 0x88, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 88 78 56 34 12 \tbound  %cx,0x12345678(%eax)",},
 +{{0x66, 0x62, 0x90, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 90 78 56 34 12 \tbound  %dx,0x12345678(%eax)",},
 +{{0x66, 0x62, 0x98, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 98 78 56 34 12 \tbound  %bx,0x12345678(%eax)",},
 +{{0x66, 0x62, 0xa0, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 a0 78 56 34 12 \tbound  %sp,0x12345678(%eax)",},
 +{{0x66, 0x62, 0xa8, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 a8 78 56 34 12 \tbound  %bp,0x12345678(%eax)",},
 +{{0x66, 0x62, 0xb0, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 b0 78 56 34 12 \tbound  %si,0x12345678(%eax)",},
 +{{0x66, 0x62, 0xb8, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 b8 78 56 34 12 \tbound  %di,0x12345678(%eax)",},
 +{{0x66, 0x62, 0x08, }, 3, 0, "", "",
 +"66 62 08             \tbound  %cx,(%eax)",},
 +{{0x66, 0x62, 0x05, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 05 78 56 34 12 \tbound  %ax,0x12345678",},
 +{{0x66, 0x62, 0x14, 0x01, }, 4, 0, "", "",
 +"66 62 14 01          \tbound  %dx,(%ecx,%eax,1)",},
 +{{0x66, 0x62, 0x14, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 62 14 05 78 56 34 12 \tbound  %dx,0x12345678(,%eax,1)",},
 +{{0x66, 0x62, 0x14, 0x08, }, 4, 0, "", "",
 +"66 62 14 08          \tbound  %dx,(%eax,%ecx,1)",},
 +{{0x66, 0x62, 0x14, 0xc8, }, 4, 0, "", "",
 +"66 62 14 c8          \tbound  %dx,(%eax,%ecx,8)",},
 +{{0x66, 0x62, 0x50, 0x12, }, 4, 0, "", "",
 +"66 62 50 12          \tbound  %dx,0x12(%eax)",},
 +{{0x66, 0x62, 0x55, 0x12, }, 4, 0, "", "",
 +"66 62 55 12          \tbound  %dx,0x12(%ebp)",},
 +{{0x66, 0x62, 0x54, 0x01, 0x12, }, 5, 0, "", "",
 +"66 62 54 01 12       \tbound  %dx,0x12(%ecx,%eax,1)",},
 +{{0x66, 0x62, 0x54, 0x05, 0x12, }, 5, 0, "", "",
 +"66 62 54 05 12       \tbound  %dx,0x12(%ebp,%eax,1)",},
 +{{0x66, 0x62, 0x54, 0x08, 0x12, }, 5, 0, "", "",
 +"66 62 54 08 12       \tbound  %dx,0x12(%eax,%ecx,1)",},
 +{{0x66, 0x62, 0x54, 0xc8, 0x12, }, 5, 0, "", "",
 +"66 62 54 c8 12       \tbound  %dx,0x12(%eax,%ecx,8)",},
 +{{0x66, 0x62, 0x90, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 90 78 56 34 12 \tbound  %dx,0x12345678(%eax)",},
 +{{0x66, 0x62, 0x95, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"66 62 95 78 56 34 12 \tbound  %dx,0x12345678(%ebp)",},
 +{{0x66, 0x62, 0x94, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 62 94 01 78 56 34 12 \tbound  %dx,0x12345678(%ecx,%eax,1)",},
 +{{0x66, 0x62, 0x94, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 62 94 05 78 56 34 12 \tbound  %dx,0x12345678(%ebp,%eax,1)",},
 +{{0x66, 0x62, 0x94, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 62 94 08 78 56 34 12 \tbound  %dx,0x12345678(%eax,%ecx,1)",},
 +{{0x66, 0x62, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 62 94 c8 78 56 34 12 \tbound  %dx,0x12345678(%eax,%ecx,8)",},
 +{{0x0f, 0x41, 0xd8, }, 3, 0, "", "",
 +"0f 41 d8             \tcmovno %eax,%ebx",},
 +{{0x0f, 0x41, 0x88, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 41 88 78 56 34 12 \tcmovno 0x12345678(%eax),%ecx",},
 +{{0x66, 0x0f, 0x41, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 0f 41 88 78 56 34 12 \tcmovno 0x12345678(%eax),%cx",},
 +{{0x0f, 0x44, 0xd8, }, 3, 0, "", "",
 +"0f 44 d8             \tcmove  %eax,%ebx",},
 +{{0x0f, 0x44, 0x88, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 44 88 78 56 34 12 \tcmove  0x12345678(%eax),%ecx",},
 +{{0x66, 0x0f, 0x44, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 0f 44 88 78 56 34 12 \tcmove  0x12345678(%eax),%cx",},
 +{{0x0f, 0x90, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 90 80 78 56 34 12 \tseto   0x12345678(%eax)",},
 +{{0x0f, 0x91, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 91 80 78 56 34 12 \tsetno  0x12345678(%eax)",},
 +{{0x0f, 0x92, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 92 80 78 56 34 12 \tsetb   0x12345678(%eax)",},
 +{{0x0f, 0x92, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 92 80 78 56 34 12 \tsetb   0x12345678(%eax)",},
 +{{0x0f, 0x92, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 92 80 78 56 34 12 \tsetb   0x12345678(%eax)",},
 +{{0x0f, 0x93, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 93 80 78 56 34 12 \tsetae  0x12345678(%eax)",},
 +{{0x0f, 0x93, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 93 80 78 56 34 12 \tsetae  0x12345678(%eax)",},
 +{{0x0f, 0x93, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 93 80 78 56 34 12 \tsetae  0x12345678(%eax)",},
 +{{0x0f, 0x98, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 98 80 78 56 34 12 \tsets   0x12345678(%eax)",},
 +{{0x0f, 0x99, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 99 80 78 56 34 12 \tsetns  0x12345678(%eax)",},
 +{{0xc5, 0xcc, 0x41, 0xef, }, 4, 0, "", "",
 +"c5 cc 41 ef          \tkandw  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x41, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 41 ef       \tkandq  %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x41, 0xef, }, 4, 0, "", "",
 +"c5 cd 41 ef          \tkandb  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x41, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 41 ef       \tkandd  %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x42, 0xef, }, 4, 0, "", "",
 +"c5 cc 42 ef          \tkandnw %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x42, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 42 ef       \tkandnq %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x42, 0xef, }, 4, 0, "", "",
 +"c5 cd 42 ef          \tkandnb %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x42, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 42 ef       \tkandnd %k7,%k6,%k5",},
 +{{0xc5, 0xf8, 0x44, 0xf7, }, 4, 0, "", "",
 +"c5 f8 44 f7          \tknotw  %k7,%k6",},
 +{{0xc4, 0xe1, 0xf8, 0x44, 0xf7, }, 5, 0, "", "",
 +"c4 e1 f8 44 f7       \tknotq  %k7,%k6",},
 +{{0xc5, 0xf9, 0x44, 0xf7, }, 4, 0, "", "",
 +"c5 f9 44 f7          \tknotb  %k7,%k6",},
 +{{0xc4, 0xe1, 0xf9, 0x44, 0xf7, }, 5, 0, "", "",
 +"c4 e1 f9 44 f7       \tknotd  %k7,%k6",},
 +{{0xc5, 0xcc, 0x45, 0xef, }, 4, 0, "", "",
 +"c5 cc 45 ef          \tkorw   %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x45, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 45 ef       \tkorq   %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x45, 0xef, }, 4, 0, "", "",
 +"c5 cd 45 ef          \tkorb   %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x45, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 45 ef       \tkord   %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x46, 0xef, }, 4, 0, "", "",
 +"c5 cc 46 ef          \tkxnorw %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x46, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 46 ef       \tkxnorq %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x46, 0xef, }, 4, 0, "", "",
 +"c5 cd 46 ef          \tkxnorb %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x46, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 46 ef       \tkxnord %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x47, 0xef, }, 4, 0, "", "",
 +"c5 cc 47 ef          \tkxorw  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x47, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 47 ef       \tkxorq  %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x47, 0xef, }, 4, 0, "", "",
 +"c5 cd 47 ef          \tkxorb  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x47, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 47 ef       \tkxord  %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x4a, 0xef, }, 4, 0, "", "",
 +"c5 cc 4a ef          \tkaddw  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x4a, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 4a ef       \tkaddq  %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x4a, 0xef, }, 4, 0, "", "",
 +"c5 cd 4a ef          \tkaddb  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x4a, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 4a ef       \tkaddd  %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x4b, 0xef, }, 4, 0, "", "",
 +"c5 cd 4b ef          \tkunpckbw %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x4b, 0xef, }, 4, 0, "", "",
 +"c5 cc 4b ef          \tkunpckwd %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x4b, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 4b ef       \tkunpckdq %k7,%k6,%k5",},
 +{{0xc5, 0xf8, 0x90, 0xee, }, 4, 0, "", "",
 +"c5 f8 90 ee          \tkmovw  %k6,%k5",},
 +{{0xc5, 0xf8, 0x90, 0x29, }, 4, 0, "", "",
 +"c5 f8 90 29          \tkmovw  (%ecx),%k5",},
 +{{0xc5, 0xf8, 0x90, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 9, 0, "", "",
 +"c5 f8 90 ac c8 23 01 00 00 \tkmovw  0x123(%eax,%ecx,8),%k5",},
 +{{0xc5, 0xf8, 0x91, 0x29, }, 4, 0, "", "",
 +"c5 f8 91 29          \tkmovw  %k5,(%ecx)",},
 +{{0xc5, 0xf8, 0x91, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 9, 0, "", "",
 +"c5 f8 91 ac c8 23 01 00 00 \tkmovw  %k5,0x123(%eax,%ecx,8)",},
 +{{0xc5, 0xf8, 0x92, 0xe8, }, 4, 0, "", "",
 +"c5 f8 92 e8          \tkmovw  %eax,%k5",},
 +{{0xc5, 0xf8, 0x92, 0xed, }, 4, 0, "", "",
 +"c5 f8 92 ed          \tkmovw  %ebp,%k5",},
 +{{0xc5, 0xf8, 0x93, 0xc5, }, 4, 0, "", "",
 +"c5 f8 93 c5          \tkmovw  %k5,%eax",},
 +{{0xc5, 0xf8, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 f8 93 ed          \tkmovw  %k5,%ebp",},
 +{{0xc4, 0xe1, 0xf8, 0x90, 0xee, }, 5, 0, "", "",
 +"c4 e1 f8 90 ee       \tkmovq  %k6,%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x90, 0x29, }, 5, 0, "", "",
 +"c4 e1 f8 90 29       \tkmovq  (%ecx),%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x90, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 e1 f8 90 ac c8 23 01 00 00 \tkmovq  0x123(%eax,%ecx,8),%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x91, 0x29, }, 5, 0, "", "",
 +"c4 e1 f8 91 29       \tkmovq  %k5,(%ecx)",},
 +{{0xc4, 0xe1, 0xf8, 0x91, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 e1 f8 91 ac c8 23 01 00 00 \tkmovq  %k5,0x123(%eax,%ecx,8)",},
 +{{0xc5, 0xf9, 0x90, 0xee, }, 4, 0, "", "",
 +"c5 f9 90 ee          \tkmovb  %k6,%k5",},
 +{{0xc5, 0xf9, 0x90, 0x29, }, 4, 0, "", "",
 +"c5 f9 90 29          \tkmovb  (%ecx),%k5",},
 +{{0xc5, 0xf9, 0x90, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 9, 0, "", "",
 +"c5 f9 90 ac c8 23 01 00 00 \tkmovb  0x123(%eax,%ecx,8),%k5",},
 +{{0xc5, 0xf9, 0x91, 0x29, }, 4, 0, "", "",
 +"c5 f9 91 29          \tkmovb  %k5,(%ecx)",},
 +{{0xc5, 0xf9, 0x91, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 9, 0, "", "",
 +"c5 f9 91 ac c8 23 01 00 00 \tkmovb  %k5,0x123(%eax,%ecx,8)",},
 +{{0xc5, 0xf9, 0x92, 0xe8, }, 4, 0, "", "",
 +"c5 f9 92 e8          \tkmovb  %eax,%k5",},
 +{{0xc5, 0xf9, 0x92, 0xed, }, 4, 0, "", "",
 +"c5 f9 92 ed          \tkmovb  %ebp,%k5",},
 +{{0xc5, 0xf9, 0x93, 0xc5, }, 4, 0, "", "",
 +"c5 f9 93 c5          \tkmovb  %k5,%eax",},
 +{{0xc5, 0xf9, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 f9 93 ed          \tkmovb  %k5,%ebp",},
 +{{0xc4, 0xe1, 0xf9, 0x90, 0xee, }, 5, 0, "", "",
 +"c4 e1 f9 90 ee       \tkmovd  %k6,%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x90, 0x29, }, 5, 0, "", "",
 +"c4 e1 f9 90 29       \tkmovd  (%ecx),%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x90, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 e1 f9 90 ac c8 23 01 00 00 \tkmovd  0x123(%eax,%ecx,8),%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x91, 0x29, }, 5, 0, "", "",
 +"c4 e1 f9 91 29       \tkmovd  %k5,(%ecx)",},
 +{{0xc4, 0xe1, 0xf9, 0x91, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 e1 f9 91 ac c8 23 01 00 00 \tkmovd  %k5,0x123(%eax,%ecx,8)",},
 +{{0xc5, 0xfb, 0x92, 0xe8, }, 4, 0, "", "",
 +"c5 fb 92 e8          \tkmovd  %eax,%k5",},
 +{{0xc5, 0xfb, 0x92, 0xed, }, 4, 0, "", "",
 +"c5 fb 92 ed          \tkmovd  %ebp,%k5",},
 +{{0xc5, 0xfb, 0x93, 0xc5, }, 4, 0, "", "",
 +"c5 fb 93 c5          \tkmovd  %k5,%eax",},
 +{{0xc5, 0xfb, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 fb 93 ed          \tkmovd  %k5,%ebp",},
 +{{0xc5, 0xf8, 0x98, 0xee, }, 4, 0, "", "",
 +"c5 f8 98 ee          \tkortestw %k6,%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x98, 0xee, }, 5, 0, "", "",
 +"c4 e1 f8 98 ee       \tkortestq %k6,%k5",},
 +{{0xc5, 0xf9, 0x98, 0xee, }, 4, 0, "", "",
 +"c5 f9 98 ee          \tkortestb %k6,%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x98, 0xee, }, 5, 0, "", "",
 +"c4 e1 f9 98 ee       \tkortestd %k6,%k5",},
 +{{0xc5, 0xf8, 0x99, 0xee, }, 4, 0, "", "",
 +"c5 f8 99 ee          \tktestw %k6,%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x99, 0xee, }, 5, 0, "", "",
 +"c4 e1 f8 99 ee       \tktestq %k6,%k5",},
 +{{0xc5, 0xf9, 0x99, 0xee, }, 4, 0, "", "",
 +"c5 f9 99 ee          \tktestb %k6,%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x99, 0xee, }, 5, 0, "", "",
 +"c4 e1 f9 99 ee       \tktestd %k6,%k5",},
 +{{0xc4, 0xe3, 0xf9, 0x30, 0xee, 0x12, }, 6, 0, "", "",
 +"c4 e3 f9 30 ee 12    \tkshiftrw $0x12,%k6,%k5",},
 +{{0xc4, 0xe3, 0xf9, 0x31, 0xee, 0x5b, }, 6, 0, "", "",
 +"c4 e3 f9 31 ee 5b    \tkshiftrq $0x5b,%k6,%k5",},
 +{{0xc4, 0xe3, 0xf9, 0x32, 0xee, 0x12, }, 6, 0, "", "",
 +"c4 e3 f9 32 ee 12    \tkshiftlw $0x12,%k6,%k5",},
 +{{0xc4, 0xe3, 0xf9, 0x33, 0xee, 0x5b, }, 6, 0, "", "",
 +"c4 e3 f9 33 ee 5b    \tkshiftlq $0x5b,%k6,%k5",},
 +{{0xc5, 0xf8, 0x5b, 0xf5, }, 4, 0, "", "",
 +"c5 f8 5b f5          \tvcvtdq2ps %xmm5,%xmm6",},
 +{{0x62, 0xf1, 0xfc, 0x4f, 0x5b, 0xf5, }, 6, 0, "", "",
 +"62 f1 fc 4f 5b f5    \tvcvtqq2ps %zmm5,%ymm6{%k7}",},
 +{{0xc5, 0xf9, 0x5b, 0xf5, }, 4, 0, "", "",
 +"c5 f9 5b f5          \tvcvtps2dq %xmm5,%xmm6",},
 +{{0xc5, 0xfa, 0x5b, 0xf5, }, 4, 0, "", "",
 +"c5 fa 5b f5          \tvcvttps2dq %xmm5,%xmm6",},
 +{{0x0f, 0x6f, 0xe0, }, 3, 0, "", "",
 +"0f 6f e0             \tmovq   %mm0,%mm4",},
 +{{0xc5, 0xfd, 0x6f, 0xf4, }, 4, 0, "", "",
 +"c5 fd 6f f4          \tvmovdqa %ymm4,%ymm6",},
 +{{0x62, 0xf1, 0x7d, 0x48, 0x6f, 0xf5, }, 6, 0, "", "",
 +"62 f1 7d 48 6f f5    \tvmovdqa32 %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xfd, 0x48, 0x6f, 0xf5, }, 6, 0, "", "",
 +"62 f1 fd 48 6f f5    \tvmovdqa64 %zmm5,%zmm6",},
 +{{0xc5, 0xfe, 0x6f, 0xf4, }, 4, 0, "", "",
 +"c5 fe 6f f4          \tvmovdqu %ymm4,%ymm6",},
 +{{0x62, 0xf1, 0x7e, 0x48, 0x6f, 0xf5, }, 6, 0, "", "",
 +"62 f1 7e 48 6f f5    \tvmovdqu32 %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xfe, 0x48, 0x6f, 0xf5, }, 6, 0, "", "",
 +"62 f1 fe 48 6f f5    \tvmovdqu64 %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0x7f, 0x48, 0x6f, 0xf5, }, 6, 0, "", "",
 +"62 f1 7f 48 6f f5    \tvmovdqu8 %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xff, 0x48, 0x6f, 0xf5, }, 6, 0, "", "",
 +"62 f1 ff 48 6f f5    \tvmovdqu16 %zmm5,%zmm6",},
 +{{0x0f, 0x78, 0xc3, }, 3, 0, "", "",
 +"0f 78 c3             \tvmread %eax,%ebx",},
 +{{0x62, 0xf1, 0x7c, 0x48, 0x78, 0xf5, }, 6, 0, "", "",
 +"62 f1 7c 48 78 f5    \tvcvttps2udq %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xfc, 0x4f, 0x78, 0xf5, }, 6, 0, "", "",
 +"62 f1 fc 4f 78 f5    \tvcvttpd2udq %zmm5,%ymm6{%k7}",},
 +{{0x62, 0xf1, 0x7f, 0x08, 0x78, 0xc6, }, 6, 0, "", "",
 +"62 f1 7f 08 78 c6    \tvcvttsd2usi %xmm6,%eax",},
 +{{0x62, 0xf1, 0x7e, 0x08, 0x78, 0xc6, }, 6, 0, "", "",
 +"62 f1 7e 08 78 c6    \tvcvttss2usi %xmm6,%eax",},
 +{{0x62, 0xf1, 0x7d, 0x4f, 0x78, 0xf5, }, 6, 0, "", "",
 +"62 f1 7d 4f 78 f5    \tvcvttps2uqq %ymm5,%zmm6{%k7}",},
 +{{0x62, 0xf1, 0xfd, 0x48, 0x78, 0xf5, }, 6, 0, "", "",
 +"62 f1 fd 48 78 f5    \tvcvttpd2uqq %zmm5,%zmm6",},
 +{{0x0f, 0x79, 0xd8, }, 3, 0, "", "",
 +"0f 79 d8             \tvmwrite %eax,%ebx",},
 +{{0x62, 0xf1, 0x7c, 0x48, 0x79, 0xf5, }, 6, 0, "", "",
 +"62 f1 7c 48 79 f5    \tvcvtps2udq %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xfc, 0x4f, 0x79, 0xf5, }, 6, 0, "", "",
 +"62 f1 fc 4f 79 f5    \tvcvtpd2udq %zmm5,%ymm6{%k7}",},
 +{{0x62, 0xf1, 0x7f, 0x08, 0x79, 0xc6, }, 6, 0, "", "",
 +"62 f1 7f 08 79 c6    \tvcvtsd2usi %xmm6,%eax",},
 +{{0x62, 0xf1, 0x7e, 0x08, 0x79, 0xc6, }, 6, 0, "", "",
 +"62 f1 7e 08 79 c6    \tvcvtss2usi %xmm6,%eax",},
 +{{0x62, 0xf1, 0x7d, 0x4f, 0x79, 0xf5, }, 6, 0, "", "",
 +"62 f1 7d 4f 79 f5    \tvcvtps2uqq %ymm5,%zmm6{%k7}",},
 +{{0x62, 0xf1, 0xfd, 0x48, 0x79, 0xf5, }, 6, 0, "", "",
 +"62 f1 fd 48 79 f5    \tvcvtpd2uqq %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0x7e, 0x4f, 0x7a, 0xf5, }, 6, 0, "", "",
 +"62 f1 7e 4f 7a f5    \tvcvtudq2pd %ymm5,%zmm6{%k7}",},
 +{{0x62, 0xf1, 0xfe, 0x48, 0x7a, 0xf5, }, 6, 0, "", "",
 +"62 f1 fe 48 7a f5    \tvcvtuqq2pd %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0x7f, 0x48, 0x7a, 0xf5, }, 6, 0, "", "",
 +"62 f1 7f 48 7a f5    \tvcvtudq2ps %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xff, 0x4f, 0x7a, 0xf5, }, 6, 0, "", "",
 +"62 f1 ff 4f 7a f5    \tvcvtuqq2ps %zmm5,%ymm6{%k7}",},
 +{{0x62, 0xf1, 0x7d, 0x4f, 0x7a, 0xf5, }, 6, 0, "", "",
 +"62 f1 7d 4f 7a f5    \tvcvttps2qq %ymm5,%zmm6{%k7}",},
 +{{0x62, 0xf1, 0xfd, 0x48, 0x7a, 0xf5, }, 6, 0, "", "",
 +"62 f1 fd 48 7a f5    \tvcvttpd2qq %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0x57, 0x08, 0x7b, 0xf0, }, 6, 0, "", "",
 +"62 f1 57 08 7b f0    \tvcvtusi2sd %eax,%xmm5,%xmm6",},
 +{{0x62, 0xf1, 0x56, 0x08, 0x7b, 0xf0, }, 6, 0, "", "",
 +"62 f1 56 08 7b f0    \tvcvtusi2ss %eax,%xmm5,%xmm6",},
 +{{0x62, 0xf1, 0x7d, 0x4f, 0x7b, 0xf5, }, 6, 0, "", "",
 +"62 f1 7d 4f 7b f5    \tvcvtps2qq %ymm5,%zmm6{%k7}",},
 +{{0x62, 0xf1, 0xfd, 0x48, 0x7b, 0xf5, }, 6, 0, "", "",
 +"62 f1 fd 48 7b f5    \tvcvtpd2qq %zmm5,%zmm6",},
 +{{0x0f, 0x7f, 0xc4, }, 3, 0, "", "",
 +"0f 7f c4             \tmovq   %mm0,%mm4",},
 +{{0xc5, 0xfd, 0x7f, 0xee, }, 4, 0, "", "",
 +"c5 fd 7f ee          \tvmovdqa %ymm5,%ymm6",},
 +{{0x62, 0xf1, 0x7d, 0x48, 0x7f, 0xee, }, 6, 0, "", "",
 +"62 f1 7d 48 7f ee    \tvmovdqa32 %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xfd, 0x48, 0x7f, 0xee, }, 6, 0, "", "",
 +"62 f1 fd 48 7f ee    \tvmovdqa64 %zmm5,%zmm6",},
 +{{0xc5, 0xfe, 0x7f, 0xee, }, 4, 0, "", "",
 +"c5 fe 7f ee          \tvmovdqu %ymm5,%ymm6",},
 +{{0x62, 0xf1, 0x7e, 0x48, 0x7f, 0xee, }, 6, 0, "", "",
 +"62 f1 7e 48 7f ee    \tvmovdqu32 %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xfe, 0x48, 0x7f, 0xee, }, 6, 0, "", "",
 +"62 f1 fe 48 7f ee    \tvmovdqu64 %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0x7f, 0x48, 0x7f, 0xee, }, 6, 0, "", "",
 +"62 f1 7f 48 7f ee    \tvmovdqu8 %zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xff, 0x48, 0x7f, 0xee, }, 6, 0, "", "",
 +"62 f1 ff 48 7f ee    \tvmovdqu16 %zmm5,%zmm6",},
 +{{0x0f, 0xdb, 0xd1, }, 3, 0, "", "",
 +"0f db d1             \tpand   %mm1,%mm2",},
 +{{0x66, 0x0f, 0xdb, 0xd1, }, 4, 0, "", "",
 +"66 0f db d1          \tpand   %xmm1,%xmm2",},
 +{{0xc5, 0xcd, 0xdb, 0xd4, }, 4, 0, "", "",
 +"c5 cd db d4          \tvpand  %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf1, 0x55, 0x48, 0xdb, 0xf4, }, 6, 0, "", "",
 +"62 f1 55 48 db f4    \tvpandd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x48, 0xdb, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 48 db f4    \tvpandq %zmm4,%zmm5,%zmm6",},
 +{{0x0f, 0xdf, 0xd1, }, 3, 0, "", "",
 +"0f df d1             \tpandn  %mm1,%mm2",},
 +{{0x66, 0x0f, 0xdf, 0xd1, }, 4, 0, "", "",
 +"66 0f df d1          \tpandn  %xmm1,%xmm2",},
 +{{0xc5, 0xcd, 0xdf, 0xd4, }, 4, 0, "", "",
 +"c5 cd df d4          \tvpandn %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf1, 0x55, 0x48, 0xdf, 0xf4, }, 6, 0, "", "",
 +"62 f1 55 48 df f4    \tvpandnd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x48, 0xdf, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 48 df f4    \tvpandnq %zmm4,%zmm5,%zmm6",},
 +{{0xc5, 0xf9, 0xe6, 0xd1, }, 4, 0, "", "",
 +"c5 f9 e6 d1          \tvcvttpd2dq %xmm1,%xmm2",},
 +{{0xc5, 0xfa, 0xe6, 0xf5, }, 4, 0, "", "",
 +"c5 fa e6 f5          \tvcvtdq2pd %xmm5,%xmm6",},
 +{{0x62, 0xf1, 0x7e, 0x4f, 0xe6, 0xf5, }, 6, 0, "", "",
 +"62 f1 7e 4f e6 f5    \tvcvtdq2pd %ymm5,%zmm6{%k7}",},
 +{{0x62, 0xf1, 0xfe, 0x48, 0xe6, 0xf5, }, 6, 0, "", "",
 +"62 f1 fe 48 e6 f5    \tvcvtqq2pd %zmm5,%zmm6",},
 +{{0xc5, 0xfb, 0xe6, 0xd1, }, 4, 0, "", "",
 +"c5 fb e6 d1          \tvcvtpd2dq %xmm1,%xmm2",},
 +{{0x0f, 0xeb, 0xf4, }, 3, 0, "", "",
 +"0f eb f4             \tpor    %mm4,%mm6",},
 +{{0xc5, 0xcd, 0xeb, 0xd4, }, 4, 0, "", "",
 +"c5 cd eb d4          \tvpor   %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf1, 0x55, 0x48, 0xeb, 0xf4, }, 6, 0, "", "",
 +"62 f1 55 48 eb f4    \tvpord  %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x48, 0xeb, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 48 eb f4    \tvporq  %zmm4,%zmm5,%zmm6",},
 +{{0x0f, 0xef, 0xf4, }, 3, 0, "", "",
 +"0f ef f4             \tpxor   %mm4,%mm6",},
 +{{0xc5, 0xcd, 0xef, 0xd4, }, 4, 0, "", "",
 +"c5 cd ef d4          \tvpxor  %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf1, 0x55, 0x48, 0xef, 0xf4, }, 6, 0, "", "",
 +"62 f1 55 48 ef f4    \tvpxord %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x48, 0xef, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 48 ef f4    \tvpxorq %zmm4,%zmm5,%zmm6",},
 +{{0x66, 0x0f, 0x38, 0x10, 0xc1, }, 5, 0, "", "",
 +"66 0f 38 10 c1       \tpblendvb %xmm0,%xmm1,%xmm0",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x10, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 10 f4    \tvpsrlvw %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x10, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 10 ee    \tvpmovuswb %zmm5,%ymm6{%k7}",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x11, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 11 ee    \tvpmovusdb %zmm5,%xmm6{%k7}",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x11, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 11 f4    \tvpsravw %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x12, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 12 ee    \tvpmovusqb %zmm5,%xmm6{%k7}",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x12, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 12 f4    \tvpsllvw %zmm4,%zmm5,%zmm6",},
 +{{0xc4, 0xe2, 0x7d, 0x13, 0xeb, }, 5, 0, "", "",
 +"c4 e2 7d 13 eb       \tvcvtph2ps %xmm3,%ymm5",},
 +{{0x62, 0xf2, 0x7d, 0x4f, 0x13, 0xf5, }, 6, 0, "", "",
 +"62 f2 7d 4f 13 f5    \tvcvtph2ps %ymm5,%zmm6{%k7}",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x13, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 13 ee    \tvpmovusdw %zmm5,%ymm6{%k7}",},
 +{{0x66, 0x0f, 0x38, 0x14, 0xc1, }, 5, 0, "", "",
 +"66 0f 38 14 c1       \tblendvps %xmm0,%xmm1,%xmm0",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x14, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 14 ee    \tvpmovusqw %zmm5,%xmm6{%k7}",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x14, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 14 f4    \tvprorvd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x14, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 14 f4    \tvprorvq %zmm4,%zmm5,%zmm6",},
 +{{0x66, 0x0f, 0x38, 0x15, 0xc1, }, 5, 0, "", "",
 +"66 0f 38 15 c1       \tblendvpd %xmm0,%xmm1,%xmm0",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x15, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 15 ee    \tvpmovusqd %zmm5,%ymm6{%k7}",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x15, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 15 f4    \tvprolvd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x15, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 15 f4    \tvprolvq %zmm4,%zmm5,%zmm6",},
 +{{0xc4, 0xe2, 0x4d, 0x16, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 16 d4       \tvpermps %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x4d, 0x2f, 0x16, 0xd4, }, 6, 0, "", "",
 +"62 f2 4d 2f 16 d4    \tvpermps %ymm4,%ymm6,%ymm2{%k7}",},
 +{{0x62, 0xf2, 0xcd, 0x2f, 0x16, 0xd4, }, 6, 0, "", "",
 +"62 f2 cd 2f 16 d4    \tvpermpd %ymm4,%ymm6,%ymm2{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x19, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 19 f4       \tvbroadcastsd %xmm4,%ymm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x19, 0xf7, }, 6, 0, "", "",
 +"62 f2 7d 48 19 f7    \tvbroadcastf32x2 %xmm7,%zmm6",},
 +{{0xc4, 0xe2, 0x7d, 0x1a, 0x21, }, 5, 0, "", "",
 +"c4 e2 7d 1a 21       \tvbroadcastf128 (%ecx),%ymm4",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x1a, 0x31, }, 6, 0, "", "",
 +"62 f2 7d 48 1a 31    \tvbroadcastf32x4 (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x1a, 0x31, }, 6, 0, "", "",
 +"62 f2 fd 48 1a 31    \tvbroadcastf64x2 (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x1b, 0x31, }, 6, 0, "", "",
 +"62 f2 7d 48 1b 31    \tvbroadcastf32x8 (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x1b, 0x31, }, 6, 0, "", "",
 +"62 f2 fd 48 1b 31    \tvbroadcastf64x4 (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x1f, 0xf4, }, 6, 0, "", "",
 +"62 f2 fd 48 1f f4    \tvpabsq %zmm4,%zmm6",},
 +{{0xc4, 0xe2, 0x79, 0x20, 0xec, }, 5, 0, "", "",
 +"c4 e2 79 20 ec       \tvpmovsxbw %xmm4,%xmm5",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x20, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 20 ee    \tvpmovswb %zmm5,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x21, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 21 f4       \tvpmovsxbd %xmm4,%ymm6",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x21, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 21 ee    \tvpmovsdb %zmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x22, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 22 e4       \tvpmovsxbq %xmm4,%ymm4",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x22, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 22 ee    \tvpmovsqb %zmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x23, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 23 e4       \tvpmovsxwd %xmm4,%ymm4",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x23, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 23 ee    \tvpmovsdw %zmm5,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x24, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 24 f4       \tvpmovsxwq %xmm4,%ymm6",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x24, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 24 ee    \tvpmovsqw %zmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x25, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 25 e4       \tvpmovsxdq %xmm4,%ymm4",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x25, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 25 ee    \tvpmovsqd %zmm5,%ymm6{%k7}",},
 +{{0x62, 0xf2, 0x4d, 0x48, 0x26, 0xed, }, 6, 0, "", "",
 +"62 f2 4d 48 26 ed    \tvptestmb %zmm5,%zmm6,%k5",},
 +{{0x62, 0xf2, 0xcd, 0x48, 0x26, 0xed, }, 6, 0, "", "",
 +"62 f2 cd 48 26 ed    \tvptestmw %zmm5,%zmm6,%k5",},
 +{{0x62, 0xf2, 0x56, 0x48, 0x26, 0xec, }, 6, 0, "", "",
 +"62 f2 56 48 26 ec    \tvptestnmb %zmm4,%zmm5,%k5",},
 +{{0x62, 0xf2, 0xd6, 0x48, 0x26, 0xec, }, 6, 0, "", "",
 +"62 f2 d6 48 26 ec    \tvptestnmw %zmm4,%zmm5,%k5",},
 +{{0x62, 0xf2, 0x4d, 0x48, 0x27, 0xed, }, 6, 0, "", "",
 +"62 f2 4d 48 27 ed    \tvptestmd %zmm5,%zmm6,%k5",},
 +{{0x62, 0xf2, 0xcd, 0x48, 0x27, 0xed, }, 6, 0, "", "",
 +"62 f2 cd 48 27 ed    \tvptestmq %zmm5,%zmm6,%k5",},
 +{{0x62, 0xf2, 0x56, 0x48, 0x27, 0xec, }, 6, 0, "", "",
 +"62 f2 56 48 27 ec    \tvptestnmd %zmm4,%zmm5,%k5",},
 +{{0x62, 0xf2, 0xd6, 0x48, 0x27, 0xec, }, 6, 0, "", "",
 +"62 f2 d6 48 27 ec    \tvptestnmq %zmm4,%zmm5,%k5",},
 +{{0xc4, 0xe2, 0x4d, 0x28, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 28 d4       \tvpmuldq %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x7e, 0x48, 0x28, 0xf5, }, 6, 0, "", "",
 +"62 f2 7e 48 28 f5    \tvpmovm2b %k5,%zmm6",},
 +{{0x62, 0xf2, 0xfe, 0x48, 0x28, 0xf5, }, 6, 0, "", "",
 +"62 f2 fe 48 28 f5    \tvpmovm2w %k5,%zmm6",},
 +{{0xc4, 0xe2, 0x4d, 0x29, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 29 d4       \tvpcmpeqq %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x7e, 0x48, 0x29, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 48 29 ee    \tvpmovb2m %zmm6,%k5",},
 +{{0x62, 0xf2, 0xfe, 0x48, 0x29, 0xee, }, 6, 0, "", "",
 +"62 f2 fe 48 29 ee    \tvpmovw2m %zmm6,%k5",},
 +{{0xc4, 0xe2, 0x7d, 0x2a, 0x21, }, 5, 0, "", "",
 +"c4 e2 7d 2a 21       \tvmovntdqa (%ecx),%ymm4",},
 +{{0x62, 0xf2, 0xfe, 0x48, 0x2a, 0xce, }, 6, 0, "", "",
 +"62 f2 fe 48 2a ce    \tvpbroadcastmb2q %k6,%zmm1",},
 +{{0xc4, 0xe2, 0x5d, 0x2c, 0x31, }, 5, 0, "", "",
 +"c4 e2 5d 2c 31       \tvmaskmovps (%ecx),%ymm4,%ymm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x2c, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 2c f4    \tvscalefps %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x2c, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 2c f4    \tvscalefpd %zmm4,%zmm5,%zmm6",},
 +{{0xc4, 0xe2, 0x5d, 0x2d, 0x31, }, 5, 0, "", "",
 +"c4 e2 5d 2d 31       \tvmaskmovpd (%ecx),%ymm4,%ymm6",},
 +{{0x62, 0xf2, 0x55, 0x0f, 0x2d, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 0f 2d f4    \tvscalefss %xmm4,%xmm5,%xmm6{%k7}",},
 +{{0x62, 0xf2, 0xd5, 0x0f, 0x2d, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 0f 2d f4    \tvscalefsd %xmm4,%xmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x30, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 30 e4       \tvpmovzxbw %xmm4,%ymm4",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x30, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 30 ee    \tvpmovwb %zmm5,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x31, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 31 f4       \tvpmovzxbd %xmm4,%ymm6",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x31, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 31 ee    \tvpmovdb %zmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x32, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 32 e4       \tvpmovzxbq %xmm4,%ymm4",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x32, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 32 ee    \tvpmovqb %zmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x33, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 33 e4       \tvpmovzxwd %xmm4,%ymm4",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x33, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 33 ee    \tvpmovdw %zmm5,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x34, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 34 f4       \tvpmovzxwq %xmm4,%ymm6",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x34, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 34 ee    \tvpmovqw %zmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x35, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 35 e4       \tvpmovzxdq %xmm4,%ymm4",},
 +{{0x62, 0xf2, 0x7e, 0x4f, 0x35, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 4f 35 ee    \tvpmovqd %zmm5,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x4d, 0x36, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 36 d4       \tvpermd %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x4d, 0x2f, 0x36, 0xd4, }, 6, 0, "", "",
 +"62 f2 4d 2f 36 d4    \tvpermd %ymm4,%ymm6,%ymm2{%k7}",},
 +{{0x62, 0xf2, 0xcd, 0x2f, 0x36, 0xd4, }, 6, 0, "", "",
 +"62 f2 cd 2f 36 d4    \tvpermq %ymm4,%ymm6,%ymm2{%k7}",},
 +{{0xc4, 0xe2, 0x4d, 0x38, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 38 d4       \tvpminsb %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x7e, 0x48, 0x38, 0xf5, }, 6, 0, "", "",
 +"62 f2 7e 48 38 f5    \tvpmovm2d %k5,%zmm6",},
 +{{0x62, 0xf2, 0xfe, 0x48, 0x38, 0xf5, }, 6, 0, "", "",
 +"62 f2 fe 48 38 f5    \tvpmovm2q %k5,%zmm6",},
 +{{0xc4, 0xe2, 0x69, 0x39, 0xd9, }, 5, 0, "", "",
 +"c4 e2 69 39 d9       \tvpminsd %xmm1,%xmm2,%xmm3",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x39, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 39 f4    \tvpminsd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x39, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 39 f4    \tvpminsq %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7e, 0x48, 0x39, 0xee, }, 6, 0, "", "",
 +"62 f2 7e 48 39 ee    \tvpmovd2m %zmm6,%k5",},
 +{{0x62, 0xf2, 0xfe, 0x48, 0x39, 0xee, }, 6, 0, "", "",
 +"62 f2 fe 48 39 ee    \tvpmovq2m %zmm6,%k5",},
 +{{0xc4, 0xe2, 0x4d, 0x3a, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 3a d4       \tvpminuw %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x7e, 0x48, 0x3a, 0xf6, }, 6, 0, "", "",
 +"62 f2 7e 48 3a f6    \tvpbroadcastmw2d %k6,%zmm6",},
 +{{0xc4, 0xe2, 0x4d, 0x3b, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 3b d4       \tvpminud %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x3b, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 3b f4    \tvpminud %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x3b, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 3b f4    \tvpminuq %zmm4,%zmm5,%zmm6",},
 +{{0xc4, 0xe2, 0x4d, 0x3d, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 3d d4       \tvpmaxsd %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x3d, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 3d f4    \tvpmaxsd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x3d, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 3d f4    \tvpmaxsq %zmm4,%zmm5,%zmm6",},
 +{{0xc4, 0xe2, 0x4d, 0x3f, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 3f d4       \tvpmaxud %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x3f, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 3f f4    \tvpmaxud %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x3f, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 3f f4    \tvpmaxuq %zmm4,%zmm5,%zmm6",},
 +{{0xc4, 0xe2, 0x4d, 0x40, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 40 d4       \tvpmulld %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x40, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 40 f4    \tvpmulld %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x40, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 40 f4    \tvpmullq %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x42, 0xf5, }, 6, 0, "", "",
 +"62 f2 7d 48 42 f5    \tvgetexpps %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x42, 0xf5, }, 6, 0, "", "",
 +"62 f2 fd 48 42 f5    \tvgetexppd %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x0f, 0x43, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 0f 43 f4    \tvgetexpss %xmm4,%xmm5,%xmm6{%k7}",},
 +{{0x62, 0xf2, 0xe5, 0x0f, 0x43, 0xe2, }, 6, 0, "", "",
 +"62 f2 e5 0f 43 e2    \tvgetexpsd %xmm2,%xmm3,%xmm4{%k7}",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x44, 0xf5, }, 6, 0, "", "",
 +"62 f2 7d 48 44 f5    \tvplzcntd %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x44, 0xf5, }, 6, 0, "", "",
 +"62 f2 fd 48 44 f5    \tvplzcntq %zmm5,%zmm6",},
 +{{0xc4, 0xe2, 0x4d, 0x46, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 46 d4       \tvpsravd %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x46, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 46 f4    \tvpsravd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x46, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 46 f4    \tvpsravq %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x4c, 0xf5, }, 6, 0, "", "",
 +"62 f2 7d 48 4c f5    \tvrcp14ps %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x4c, 0xf5, }, 6, 0, "", "",
 +"62 f2 fd 48 4c f5    \tvrcp14pd %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x0f, 0x4d, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 0f 4d f4    \tvrcp14ss %xmm4,%xmm5,%xmm6{%k7}",},
 +{{0x62, 0xf2, 0xd5, 0x0f, 0x4d, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 0f 4d f4    \tvrcp14sd %xmm4,%xmm5,%xmm6{%k7}",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x4e, 0xf5, }, 6, 0, "", "",
 +"62 f2 7d 48 4e f5    \tvrsqrt14ps %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x4e, 0xf5, }, 6, 0, "", "",
 +"62 f2 fd 48 4e f5    \tvrsqrt14pd %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x0f, 0x4f, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 0f 4f f4    \tvrsqrt14ss %xmm4,%xmm5,%xmm6{%k7}",},
 +{{0x62, 0xf2, 0xd5, 0x0f, 0x4f, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 0f 4f f4    \tvrsqrt14sd %xmm4,%xmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x79, 0x59, 0xf4, }, 5, 0, "", "",
 +"c4 e2 79 59 f4       \tvpbroadcastq %xmm4,%xmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x59, 0xf7, }, 6, 0, "", "",
 +"62 f2 7d 48 59 f7    \tvbroadcasti32x2 %xmm7,%zmm6",},
 +{{0xc4, 0xe2, 0x7d, 0x5a, 0x21, }, 5, 0, "", "",
 +"c4 e2 7d 5a 21       \tvbroadcasti128 (%ecx),%ymm4",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x5a, 0x31, }, 6, 0, "", "",
 +"62 f2 7d 48 5a 31    \tvbroadcasti32x4 (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x5a, 0x31, }, 6, 0, "", "",
 +"62 f2 fd 48 5a 31    \tvbroadcasti64x2 (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x5b, 0x31, }, 6, 0, "", "",
 +"62 f2 7d 48 5b 31    \tvbroadcasti32x8 (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x5b, 0x31, }, 6, 0, "", "",
 +"62 f2 fd 48 5b 31    \tvbroadcasti64x4 (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x64, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 64 f4    \tvpblendmd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x64, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 64 f4    \tvpblendmq %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x65, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 65 f4    \tvblendmps %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x65, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 65 f4    \tvblendmpd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x66, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 66 f4    \tvpblendmb %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x66, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 66 f4    \tvpblendmw %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x75, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 75 f4    \tvpermi2b %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x75, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 75 f4    \tvpermi2w %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x76, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 76 f4    \tvpermi2d %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x76, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 76 f4    \tvpermi2q %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x77, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 77 f4    \tvpermi2ps %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x77, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 77 f4    \tvpermi2pd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x08, 0x7a, 0xd8, }, 6, 0, "", "",
 +"62 f2 7d 08 7a d8    \tvpbroadcastb %eax,%xmm3",},
 +{{0x62, 0xf2, 0x7d, 0x08, 0x7b, 0xd8, }, 6, 0, "", "",
 +"62 f2 7d 08 7b d8    \tvpbroadcastw %eax,%xmm3",},
 +{{0x62, 0xf2, 0x7d, 0x08, 0x7c, 0xd8, }, 6, 0, "", "",
 +"62 f2 7d 08 7c d8    \tvpbroadcastd %eax,%xmm3",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x7d, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 7d f4    \tvpermt2b %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x7d, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 7d f4    \tvpermt2w %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x7e, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 7e f4    \tvpermt2d %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x7e, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 7e f4    \tvpermt2q %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x7f, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 7f f4    \tvpermt2ps %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x7f, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 7f f4    \tvpermt2pd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x83, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 83 f4    \tvpmultishiftqb %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x88, 0x31, }, 6, 0, "", "",
 +"62 f2 7d 48 88 31    \tvexpandps (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x88, 0x31, }, 6, 0, "", "",
 +"62 f2 fd 48 88 31    \tvexpandpd (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x89, 0x31, }, 6, 0, "", "",
 +"62 f2 7d 48 89 31    \tvpexpandd (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x89, 0x31, }, 6, 0, "", "",
 +"62 f2 fd 48 89 31    \tvpexpandq (%ecx),%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x8a, 0x31, }, 6, 0, "", "",
 +"62 f2 7d 48 8a 31    \tvcompressps %zmm6,(%ecx)",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x8a, 0x31, }, 6, 0, "", "",
 +"62 f2 fd 48 8a 31    \tvcompresspd %zmm6,(%ecx)",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0x8b, 0x31, }, 6, 0, "", "",
 +"62 f2 7d 48 8b 31    \tvpcompressd %zmm6,(%ecx)",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0x8b, 0x31, }, 6, 0, "", "",
 +"62 f2 fd 48 8b 31    \tvpcompressq %zmm6,(%ecx)",},
 +{{0x62, 0xf2, 0x55, 0x48, 0x8d, 0xf4, }, 6, 0, "", "",
 +"62 f2 55 48 8d f4    \tvpermb %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0x8d, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 8d f4    \tvpermw %zmm4,%zmm5,%zmm6",},
 +{{0xc4, 0xe2, 0x69, 0x90, 0x4c, 0x7d, 0x02, }, 7, 0, "", "",
 +"c4 e2 69 90 4c 7d 02 \tvpgatherdd %xmm2,0x2(%ebp,%xmm7,2),%xmm1",},
 +{{0xc4, 0xe2, 0xe9, 0x90, 0x4c, 0x7d, 0x04, }, 7, 0, "", "",
 +"c4 e2 e9 90 4c 7d 04 \tvpgatherdq %xmm2,0x4(%ebp,%xmm7,2),%xmm1",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0x90, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 90 b4 fd 7b 00 00 00 \tvpgatherdd 0x7b(%ebp,%zmm7,8),%zmm6{%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0x90, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 90 b4 fd 7b 00 00 00 \tvpgatherdq 0x7b(%ebp,%ymm7,8),%zmm6{%k1}",},
 +{{0xc4, 0xe2, 0x69, 0x91, 0x4c, 0x7d, 0x02, }, 7, 0, "", "",
 +"c4 e2 69 91 4c 7d 02 \tvpgatherqd %xmm2,0x2(%ebp,%xmm7,2),%xmm1",},
 +{{0xc4, 0xe2, 0xe9, 0x91, 0x4c, 0x7d, 0x02, }, 7, 0, "", "",
 +"c4 e2 e9 91 4c 7d 02 \tvpgatherqq %xmm2,0x2(%ebp,%xmm7,2),%xmm1",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0x91, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 91 b4 fd 7b 00 00 00 \tvpgatherqd 0x7b(%ebp,%zmm7,8),%ymm6{%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0x91, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 91 b4 fd 7b 00 00 00 \tvpgatherqq 0x7b(%ebp,%zmm7,8),%zmm6{%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xa0, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 a0 b4 fd 7b 00 00 00 \tvpscatterdd %zmm6,0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xa0, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 a0 b4 fd 7b 00 00 00 \tvpscatterdq %zmm6,0x7b(%ebp,%ymm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xa1, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 a1 b4 fd 7b 00 00 00 \tvpscatterqd %ymm6,0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x29, 0xa1, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 29 a1 b4 fd 7b 00 00 00 \tvpscatterqq %ymm6,0x7b(%ebp,%ymm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xa2, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 a2 b4 fd 7b 00 00 00 \tvscatterdps %zmm6,0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xa2, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 a2 b4 fd 7b 00 00 00 \tvscatterdpd %zmm6,0x7b(%ebp,%ymm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xa3, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 a3 b4 fd 7b 00 00 00 \tvscatterqps %ymm6,0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xa3, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 a3 b4 fd 7b 00 00 00 \tvscatterqpd %zmm6,0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0xb4, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 b4 f4    \tvpmadd52luq %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xd5, 0x48, 0xb5, 0xf4, }, 6, 0, "", "",
 +"62 f2 d5 48 b5 f4    \tvpmadd52huq %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0xc4, 0xf5, }, 6, 0, "", "",
 +"62 f2 7d 48 c4 f5    \tvpconflictd %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0xc4, 0xf5, }, 6, 0, "", "",
 +"62 f2 fd 48 c4 f5    \tvpconflictq %zmm5,%zmm6",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0xc8, 0xfe, }, 6, 0, "", "",
 +"62 f2 7d 48 c8 fe    \tvexp2ps %zmm6,%zmm7",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0xc8, 0xfe, }, 6, 0, "", "",
 +"62 f2 fd 48 c8 fe    \tvexp2pd %zmm6,%zmm7",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0xca, 0xfe, }, 6, 0, "", "",
 +"62 f2 7d 48 ca fe    \tvrcp28ps %zmm6,%zmm7",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0xca, 0xfe, }, 6, 0, "", "",
 +"62 f2 fd 48 ca fe    \tvrcp28pd %zmm6,%zmm7",},
 +{{0x62, 0xf2, 0x4d, 0x0f, 0xcb, 0xfd, }, 6, 0, "", "",
 +"62 f2 4d 0f cb fd    \tvrcp28ss %xmm5,%xmm6,%xmm7{%k7}",},
 +{{0x62, 0xf2, 0xcd, 0x0f, 0xcb, 0xfd, }, 6, 0, "", "",
 +"62 f2 cd 0f cb fd    \tvrcp28sd %xmm5,%xmm6,%xmm7{%k7}",},
 +{{0x62, 0xf2, 0x7d, 0x48, 0xcc, 0xfe, }, 6, 0, "", "",
 +"62 f2 7d 48 cc fe    \tvrsqrt28ps %zmm6,%zmm7",},
 +{{0x62, 0xf2, 0xfd, 0x48, 0xcc, 0xfe, }, 6, 0, "", "",
 +"62 f2 fd 48 cc fe    \tvrsqrt28pd %zmm6,%zmm7",},
 +{{0x62, 0xf2, 0x4d, 0x0f, 0xcd, 0xfd, }, 6, 0, "", "",
 +"62 f2 4d 0f cd fd    \tvrsqrt28ss %xmm5,%xmm6,%xmm7{%k7}",},
 +{{0x62, 0xf2, 0xcd, 0x0f, 0xcd, 0xfd, }, 6, 0, "", "",
 +"62 f2 cd 0f cd fd    \tvrsqrt28sd %xmm5,%xmm6,%xmm7{%k7}",},
 +{{0x62, 0xf3, 0x4d, 0x48, 0x03, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 48 03 fd 12 \tvalignd $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0xcd, 0x48, 0x03, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 48 03 fd 12 \tvalignq $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0xc4, 0xe3, 0x7d, 0x08, 0xd6, 0x05, }, 6, 0, "", "",
 +"c4 e3 7d 08 d6 05    \tvroundps $0x5,%ymm6,%ymm2",},
 +{{0x62, 0xf3, 0x7d, 0x48, 0x08, 0xf5, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 48 08 f5 12 \tvrndscaleps $0x12,%zmm5,%zmm6",},
 +{{0xc4, 0xe3, 0x7d, 0x09, 0xd6, 0x05, }, 6, 0, "", "",
 +"c4 e3 7d 09 d6 05    \tvroundpd $0x5,%ymm6,%ymm2",},
 +{{0x62, 0xf3, 0xfd, 0x48, 0x09, 0xf5, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 48 09 f5 12 \tvrndscalepd $0x12,%zmm5,%zmm6",},
 +{{0xc4, 0xe3, 0x49, 0x0a, 0xd4, 0x05, }, 6, 0, "", "",
 +"c4 e3 49 0a d4 05    \tvroundss $0x5,%xmm4,%xmm6,%xmm2",},
 +{{0x62, 0xf3, 0x55, 0x0f, 0x0a, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 f3 55 0f 0a f4 12 \tvrndscaless $0x12,%xmm4,%xmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe3, 0x49, 0x0b, 0xd4, 0x05, }, 6, 0, "", "",
 +"c4 e3 49 0b d4 05    \tvroundsd $0x5,%xmm4,%xmm6,%xmm2",},
 +{{0x62, 0xf3, 0xd5, 0x0f, 0x0b, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 f3 d5 0f 0b f4 12 \tvrndscalesd $0x12,%xmm4,%xmm5,%xmm6{%k7}",},
 +{{0xc4, 0xe3, 0x5d, 0x18, 0xf4, 0x05, }, 6, 0, "", "",
 +"c4 e3 5d 18 f4 05    \tvinsertf128 $0x5,%xmm4,%ymm4,%ymm6",},
 +{{0x62, 0xf3, 0x55, 0x4f, 0x18, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 f3 55 4f 18 f4 12 \tvinsertf32x4 $0x12,%xmm4,%zmm5,%zmm6{%k7}",},
 +{{0x62, 0xf3, 0xd5, 0x4f, 0x18, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 f3 d5 4f 18 f4 12 \tvinsertf64x2 $0x12,%xmm4,%zmm5,%zmm6{%k7}",},
 +{{0xc4, 0xe3, 0x7d, 0x19, 0xe4, 0x05, }, 6, 0, "", "",
 +"c4 e3 7d 19 e4 05    \tvextractf128 $0x5,%ymm4,%xmm4",},
 +{{0x62, 0xf3, 0x7d, 0x4f, 0x19, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 4f 19 ee 12 \tvextractf32x4 $0x12,%zmm5,%xmm6{%k7}",},
 +{{0x62, 0xf3, 0xfd, 0x4f, 0x19, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 4f 19 ee 12 \tvextractf64x2 $0x12,%zmm5,%xmm6{%k7}",},
 +{{0x62, 0xf3, 0x4d, 0x4f, 0x1a, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 4f 1a fd 12 \tvinsertf32x8 $0x12,%ymm5,%zmm6,%zmm7{%k7}",},
 +{{0x62, 0xf3, 0xcd, 0x4f, 0x1a, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 4f 1a fd 12 \tvinsertf64x4 $0x12,%ymm5,%zmm6,%zmm7{%k7}",},
 +{{0x62, 0xf3, 0x7d, 0x4f, 0x1b, 0xf7, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 4f 1b f7 12 \tvextractf32x8 $0x12,%zmm6,%ymm7{%k7}",},
 +{{0x62, 0xf3, 0xfd, 0x4f, 0x1b, 0xf7, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 4f 1b f7 12 \tvextractf64x4 $0x12,%zmm6,%ymm7{%k7}",},
 +{{0x62, 0xf3, 0x45, 0x48, 0x1e, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 45 48 1e ee 12 \tvpcmpud $0x12,%zmm6,%zmm7,%k5",},
 +{{0x62, 0xf3, 0xc5, 0x48, 0x1e, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 c5 48 1e ee 12 \tvpcmpuq $0x12,%zmm6,%zmm7,%k5",},
 +{{0x62, 0xf3, 0x45, 0x48, 0x1f, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 45 48 1f ee 12 \tvpcmpd $0x12,%zmm6,%zmm7,%k5",},
 +{{0x62, 0xf3, 0xc5, 0x48, 0x1f, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 c5 48 1f ee 12 \tvpcmpq $0x12,%zmm6,%zmm7,%k5",},
 +{{0x62, 0xf3, 0x4d, 0x48, 0x23, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 48 23 fd 12 \tvshuff32x4 $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0xcd, 0x48, 0x23, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 48 23 fd 12 \tvshuff64x2 $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0x4d, 0x48, 0x25, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 48 25 fd 12 \tvpternlogd $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0xcd, 0x48, 0x25, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 48 25 fd 12 \tvpternlogq $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0x7d, 0x48, 0x26, 0xfe, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 48 26 fe 12 \tvgetmantps $0x12,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0xfd, 0x48, 0x26, 0xfe, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 48 26 fe 12 \tvgetmantpd $0x12,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0x4d, 0x0f, 0x27, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 0f 27 fd 12 \tvgetmantss $0x12,%xmm5,%xmm6,%xmm7{%k7}",},
 +{{0x62, 0xf3, 0xcd, 0x0f, 0x27, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 0f 27 fd 12 \tvgetmantsd $0x12,%xmm5,%xmm6,%xmm7{%k7}",},
 +{{0xc4, 0xe3, 0x5d, 0x38, 0xf4, 0x05, }, 6, 0, "", "",
 +"c4 e3 5d 38 f4 05    \tvinserti128 $0x5,%xmm4,%ymm4,%ymm6",},
 +{{0x62, 0xf3, 0x55, 0x4f, 0x38, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 f3 55 4f 38 f4 12 \tvinserti32x4 $0x12,%xmm4,%zmm5,%zmm6{%k7}",},
 +{{0x62, 0xf3, 0xd5, 0x4f, 0x38, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 f3 d5 4f 38 f4 12 \tvinserti64x2 $0x12,%xmm4,%zmm5,%zmm6{%k7}",},
 +{{0xc4, 0xe3, 0x7d, 0x39, 0xe6, 0x05, }, 6, 0, "", "",
 +"c4 e3 7d 39 e6 05    \tvextracti128 $0x5,%ymm4,%xmm6",},
 +{{0x62, 0xf3, 0x7d, 0x4f, 0x39, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 4f 39 ee 12 \tvextracti32x4 $0x12,%zmm5,%xmm6{%k7}",},
 +{{0x62, 0xf3, 0xfd, 0x4f, 0x39, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 4f 39 ee 12 \tvextracti64x2 $0x12,%zmm5,%xmm6{%k7}",},
 +{{0x62, 0xf3, 0x4d, 0x4f, 0x3a, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 4f 3a fd 12 \tvinserti32x8 $0x12,%ymm5,%zmm6,%zmm7{%k7}",},
 +{{0x62, 0xf3, 0xcd, 0x4f, 0x3a, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 4f 3a fd 12 \tvinserti64x4 $0x12,%ymm5,%zmm6,%zmm7{%k7}",},
 +{{0x62, 0xf3, 0x7d, 0x4f, 0x3b, 0xf7, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 4f 3b f7 12 \tvextracti32x8 $0x12,%zmm6,%ymm7{%k7}",},
 +{{0x62, 0xf3, 0xfd, 0x4f, 0x3b, 0xf7, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 4f 3b f7 12 \tvextracti64x4 $0x12,%zmm6,%ymm7{%k7}",},
 +{{0x62, 0xf3, 0x45, 0x48, 0x3e, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 45 48 3e ee 12 \tvpcmpub $0x12,%zmm6,%zmm7,%k5",},
 +{{0x62, 0xf3, 0xc5, 0x48, 0x3e, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 c5 48 3e ee 12 \tvpcmpuw $0x12,%zmm6,%zmm7,%k5",},
 +{{0x62, 0xf3, 0x45, 0x48, 0x3f, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 45 48 3f ee 12 \tvpcmpb $0x12,%zmm6,%zmm7,%k5",},
 +{{0x62, 0xf3, 0xc5, 0x48, 0x3f, 0xee, 0x12, }, 7, 0, "", "",
 +"62 f3 c5 48 3f ee 12 \tvpcmpw $0x12,%zmm6,%zmm7,%k5",},
 +{{0xc4, 0xe3, 0x4d, 0x42, 0xd4, 0x05, }, 6, 0, "", "",
 +"c4 e3 4d 42 d4 05    \tvmpsadbw $0x5,%ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf3, 0x55, 0x48, 0x42, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 f3 55 48 42 f4 12 \tvdbpsadbw $0x12,%zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf3, 0x4d, 0x48, 0x43, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 48 43 fd 12 \tvshufi32x4 $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0xcd, 0x48, 0x43, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 48 43 fd 12 \tvshufi64x2 $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0x4d, 0x48, 0x50, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 48 50 fd 12 \tvrangeps $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0xcd, 0x48, 0x50, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 48 50 fd 12 \tvrangepd $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0x4d, 0x08, 0x51, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 08 51 fd 12 \tvrangess $0x12,%xmm5,%xmm6,%xmm7",},
 +{{0x62, 0xf3, 0xcd, 0x08, 0x51, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 08 51 fd 12 \tvrangesd $0x12,%xmm5,%xmm6,%xmm7",},
 +{{0x62, 0xf3, 0x4d, 0x48, 0x54, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 48 54 fd 12 \tvfixupimmps $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0xcd, 0x48, 0x54, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 48 54 fd 12 \tvfixupimmpd $0x12,%zmm5,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0x4d, 0x0f, 0x55, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 0f 55 fd 12 \tvfixupimmss $0x12,%xmm5,%xmm6,%xmm7{%k7}",},
 +{{0x62, 0xf3, 0xcd, 0x0f, 0x55, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 0f 55 fd 12 \tvfixupimmsd $0x12,%xmm5,%xmm6,%xmm7{%k7}",},
 +{{0x62, 0xf3, 0x7d, 0x48, 0x56, 0xfe, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 48 56 fe 12 \tvreduceps $0x12,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0xfd, 0x48, 0x56, 0xfe, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 48 56 fe 12 \tvreducepd $0x12,%zmm6,%zmm7",},
 +{{0x62, 0xf3, 0x4d, 0x08, 0x57, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 4d 08 57 fd 12 \tvreducess $0x12,%xmm5,%xmm6,%xmm7",},
 +{{0x62, 0xf3, 0xcd, 0x08, 0x57, 0xfd, 0x12, }, 7, 0, "", "",
 +"62 f3 cd 08 57 fd 12 \tvreducesd $0x12,%xmm5,%xmm6,%xmm7",},
 +{{0x62, 0xf3, 0x7d, 0x48, 0x66, 0xef, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 48 66 ef 12 \tvfpclassps $0x12,%zmm7,%k5",},
 +{{0x62, 0xf3, 0xfd, 0x48, 0x66, 0xef, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 48 66 ef 12 \tvfpclasspd $0x12,%zmm7,%k5",},
 +{{0x62, 0xf3, 0x7d, 0x08, 0x67, 0xef, 0x12, }, 7, 0, "", "",
 +"62 f3 7d 08 67 ef 12 \tvfpclassss $0x12,%xmm7,%k5",},
 +{{0x62, 0xf3, 0xfd, 0x08, 0x67, 0xef, 0x12, }, 7, 0, "", "",
 +"62 f3 fd 08 67 ef 12 \tvfpclasssd $0x12,%xmm7,%k5",},
 +{{0x62, 0xf1, 0x4d, 0x48, 0x72, 0xc5, 0x12, }, 7, 0, "", "",
 +"62 f1 4d 48 72 c5 12 \tvprord $0x12,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xcd, 0x48, 0x72, 0xc5, 0x12, }, 7, 0, "", "",
 +"62 f1 cd 48 72 c5 12 \tvprorq $0x12,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0x4d, 0x48, 0x72, 0xcd, 0x12, }, 7, 0, "", "",
 +"62 f1 4d 48 72 cd 12 \tvprold $0x12,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xcd, 0x48, 0x72, 0xcd, 0x12, }, 7, 0, "", "",
 +"62 f1 cd 48 72 cd 12 \tvprolq $0x12,%zmm5,%zmm6",},
 +{{0x0f, 0x72, 0xe6, 0x02, }, 4, 0, "", "",
 +"0f 72 e6 02          \tpsrad  $0x2,%mm6",},
 +{{0xc5, 0xed, 0x72, 0xe6, 0x05, }, 5, 0, "", "",
 +"c5 ed 72 e6 05       \tvpsrad $0x5,%ymm6,%ymm2",},
 +{{0x62, 0xf1, 0x6d, 0x48, 0x72, 0xe6, 0x05, }, 7, 0, "", "",
 +"62 f1 6d 48 72 e6 05 \tvpsrad $0x5,%zmm6,%zmm2",},
 +{{0x62, 0xf1, 0xed, 0x48, 0x72, 0xe6, 0x05, }, 7, 0, "", "",
 +"62 f1 ed 48 72 e6 05 \tvpsraq $0x5,%zmm6,%zmm2",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xc6, 0x8c, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 c6 8c fd 7b 00 00 00 \tvgatherpf0dps 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xc6, 0x8c, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 c6 8c fd 7b 00 00 00 \tvgatherpf0dpd 0x7b(%ebp,%ymm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xc6, 0x94, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 c6 94 fd 7b 00 00 00 \tvgatherpf1dps 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xc6, 0x94, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 c6 94 fd 7b 00 00 00 \tvgatherpf1dpd 0x7b(%ebp,%ymm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xc6, 0xac, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 c6 ac fd 7b 00 00 00 \tvscatterpf0dps 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xc6, 0xac, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 c6 ac fd 7b 00 00 00 \tvscatterpf0dpd 0x7b(%ebp,%ymm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xc6, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 c6 b4 fd 7b 00 00 00 \tvscatterpf1dps 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xc6, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 c6 b4 fd 7b 00 00 00 \tvscatterpf1dpd 0x7b(%ebp,%ymm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xc7, 0x8c, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 c7 8c fd 7b 00 00 00 \tvgatherpf0qps 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xc7, 0x8c, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 c7 8c fd 7b 00 00 00 \tvgatherpf0qpd 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xc7, 0x94, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 c7 94 fd 7b 00 00 00 \tvgatherpf1qps 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xc7, 0x94, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 c7 94 fd 7b 00 00 00 \tvgatherpf1qpd 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xc7, 0xac, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 c7 ac fd 7b 00 00 00 \tvscatterpf0qps 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xc7, 0xac, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 c7 ac fd 7b 00 00 00 \tvscatterpf0qpd 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0x7d, 0x49, 0xc7, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 7d 49 c7 b4 fd 7b 00 00 00 \tvscatterpf1qps 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf2, 0xfd, 0x49, 0xc7, 0xb4, 0xfd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f2 fd 49 c7 b4 fd 7b 00 00 00 \tvscatterpf1qpd 0x7b(%ebp,%zmm7,8){%k1}",},
 +{{0x62, 0xf1, 0xd5, 0x48, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 48 58 f4    \tvaddpd %zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x4f, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 4f 58 f4    \tvaddpd %zmm4,%zmm5,%zmm6{%k7}",},
 +{{0x62, 0xf1, 0xd5, 0xcf, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 cf 58 f4    \tvaddpd %zmm4,%zmm5,%zmm6{%k7}{z}",},
 +{{0x62, 0xf1, 0xd5, 0x18, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 18 58 f4    \tvaddpd {rn-sae},%zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x58, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 58 58 f4    \tvaddpd {ru-sae},%zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x38, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 38 58 f4    \tvaddpd {rd-sae},%zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x78, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 f1 d5 78 58 f4    \tvaddpd {rz-sae},%zmm4,%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x48, 0x58, 0x31, }, 6, 0, "", "",
 +"62 f1 d5 48 58 31    \tvaddpd (%ecx),%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x48, 0x58, 0xb4, 0xc8, 0x23, 0x01, 0x00, 0x00, }, 11, 0, "", "",
 +"62 f1 d5 48 58 b4 c8 23 01 00 00 \tvaddpd 0x123(%eax,%ecx,8),%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x58, 0x58, 0x31, }, 6, 0, "", "",
 +"62 f1 d5 58 58 31    \tvaddpd (%ecx){1to8},%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x48, 0x58, 0x72, 0x7f, }, 7, 0, "", "",
 +"62 f1 d5 48 58 72 7f \tvaddpd 0x1fc0(%edx),%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0xd5, 0x58, 0x58, 0x72, 0x7f, }, 7, 0, "", "",
 +"62 f1 d5 58 58 72 7f \tvaddpd 0x3f8(%edx){1to8},%zmm5,%zmm6",},
 +{{0x62, 0xf1, 0x4c, 0x58, 0xc2, 0x6a, 0x7f, 0x08, }, 8, 0, "", "",
 +"62 f1 4c 58 c2 6a 7f 08 \tvcmpeq_uqps 0x1fc(%edx){1to16},%zmm6,%k5",},
 +{{0x62, 0xf1, 0xe7, 0x0f, 0xc2, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, 0x01, }, 12, 0, "", "",
 +"62 f1 e7 0f c2 ac c8 23 01 00 00 01 \tvcmpltsd 0x123(%eax,%ecx,8),%xmm3,%k5{%k7}",},
 +{{0x62, 0xf1, 0xd7, 0x1f, 0xc2, 0xec, 0x02, }, 7, 0, "", "",
 +"62 f1 d7 1f c2 ec 02 \tvcmplesd {sae},%xmm4,%xmm5,%k5{%k7}",},
 +{{0x62, 0xf3, 0x5d, 0x0f, 0x27, 0xac, 0xc8, 0x23, 0x01, 0x00, 0x00, 0x5b, }, 12, 0, "", "",
 +"62 f3 5d 0f 27 ac c8 23 01 00 00 5b \tvgetmantss $0x5b,0x123(%eax,%ecx,8),%xmm4,%xmm5{%k7}",},
  {{0xf3, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
  "f3 0f 1b 00          \tbndmk  (%eax),%bnd0",},
  {{0xf3, 0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
  {{0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
  "0f 1b 84 08 78 56 34 12 \tbndstx %bnd0,0x12345678(%eax,%ecx,1)",},
  {{0xf2, 0xe8, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "call", "unconditional",
 -"f2 e8 fc ff ff ff    \tbnd call 3c3 <main+0x3c3>",},
 +"f2 e8 fc ff ff ff    \tbnd call fce <main+0xfce>",},
  {{0xf2, 0xff, 0x10, }, 3, 0, "call", "indirect",
  "f2 ff 10             \tbnd call *(%eax)",},
  {{0xf2, 0xc3, }, 2, 0, "ret", "indirect",
  "f2 c3                \tbnd ret ",},
  {{0xf2, 0xe9, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "jmp", "unconditional",
 -"f2 e9 fc ff ff ff    \tbnd jmp 3ce <main+0x3ce>",},
 +"f2 e9 fc ff ff ff    \tbnd jmp fd9 <main+0xfd9>",},
  {{0xf2, 0xe9, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "jmp", "unconditional",
 -"f2 e9 fc ff ff ff    \tbnd jmp 3d4 <main+0x3d4>",},
 +"f2 e9 fc ff ff ff    \tbnd jmp fdf <main+0xfdf>",},
  {{0xf2, 0xff, 0x21, }, 3, 0, "jmp", "indirect",
  "f2 ff 21             \tbnd jmp *(%ecx)",},
  {{0xf2, 0x0f, 0x85, 0xfc, 0xff, 0xff, 0xff, }, 7, 0xfffffffc, "jcc", "conditional",
 -"f2 0f 85 fc ff ff ff \tbnd jne 3de <main+0x3de>",},
 +"f2 0f 85 fc ff ff ff \tbnd jne fe9 <main+0xfe9>",},
  {{0x0f, 0x3a, 0xcc, 0xc1, 0x00, }, 5, 0, "", "",
  "0f 3a cc c1 00       \tsha1rnds4 $0x0,%xmm1,%xmm0",},
  {{0x0f, 0x3a, 0xcc, 0xd7, 0x91, }, 5, 0, "", "",
  "0f c7 1d 78 56 34 12 \txrstors 0x12345678",},
  {{0x0f, 0xc7, 0x9c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
  "0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%eax,%ecx,8)",},
- {{0x66, 0x0f, 0xae, 0xf8, }, 4, 0, "", "",
- "66 0f ae f8          \tpcommit ",},
index 9c8c61e06d5a49b8e075e02971395579544f0919,1f11ea85b60fcd93d71c5aba135015b2ad09f711..af25bc8240d0de5dab4fc34fb86f8339cf7aa9e4
  
  {{0x0f, 0x31, }, 2, 0, "", "",
  "0f 31                \trdtsc  ",},
 +{{0xc4, 0xe2, 0x7d, 0x13, 0xeb, }, 5, 0, "", "",
 +"c4 e2 7d 13 eb       \tvcvtph2ps %xmm3,%ymm5",},
 +{{0x48, 0x0f, 0x41, 0xd8, }, 4, 0, "", "",
 +"48 0f 41 d8          \tcmovno %rax,%rbx",},
 +{{0x48, 0x0f, 0x41, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"48 0f 41 88 78 56 34 12 \tcmovno 0x12345678(%rax),%rcx",},
 +{{0x66, 0x0f, 0x41, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 0f 41 88 78 56 34 12 \tcmovno 0x12345678(%rax),%cx",},
 +{{0x48, 0x0f, 0x44, 0xd8, }, 4, 0, "", "",
 +"48 0f 44 d8          \tcmove  %rax,%rbx",},
 +{{0x48, 0x0f, 0x44, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"48 0f 44 88 78 56 34 12 \tcmove  0x12345678(%rax),%rcx",},
 +{{0x66, 0x0f, 0x44, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
 +"66 0f 44 88 78 56 34 12 \tcmove  0x12345678(%rax),%cx",},
 +{{0x0f, 0x90, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 90 80 78 56 34 12 \tseto   0x12345678(%rax)",},
 +{{0x0f, 0x91, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 91 80 78 56 34 12 \tsetno  0x12345678(%rax)",},
 +{{0x0f, 0x92, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 92 80 78 56 34 12 \tsetb   0x12345678(%rax)",},
 +{{0x0f, 0x92, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 92 80 78 56 34 12 \tsetb   0x12345678(%rax)",},
 +{{0x0f, 0x92, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 92 80 78 56 34 12 \tsetb   0x12345678(%rax)",},
 +{{0x0f, 0x93, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 93 80 78 56 34 12 \tsetae  0x12345678(%rax)",},
 +{{0x0f, 0x93, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 93 80 78 56 34 12 \tsetae  0x12345678(%rax)",},
 +{{0x0f, 0x93, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 93 80 78 56 34 12 \tsetae  0x12345678(%rax)",},
 +{{0x0f, 0x98, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 98 80 78 56 34 12 \tsets   0x12345678(%rax)",},
 +{{0x0f, 0x99, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
 +"0f 99 80 78 56 34 12 \tsetns  0x12345678(%rax)",},
 +{{0xc5, 0xcc, 0x41, 0xef, }, 4, 0, "", "",
 +"c5 cc 41 ef          \tkandw  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x41, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 41 ef       \tkandq  %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x41, 0xef, }, 4, 0, "", "",
 +"c5 cd 41 ef          \tkandb  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x41, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 41 ef       \tkandd  %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x42, 0xef, }, 4, 0, "", "",
 +"c5 cc 42 ef          \tkandnw %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x42, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 42 ef       \tkandnq %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x42, 0xef, }, 4, 0, "", "",
 +"c5 cd 42 ef          \tkandnb %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x42, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 42 ef       \tkandnd %k7,%k6,%k5",},
 +{{0xc5, 0xf8, 0x44, 0xf7, }, 4, 0, "", "",
 +"c5 f8 44 f7          \tknotw  %k7,%k6",},
 +{{0xc4, 0xe1, 0xf8, 0x44, 0xf7, }, 5, 0, "", "",
 +"c4 e1 f8 44 f7       \tknotq  %k7,%k6",},
 +{{0xc5, 0xf9, 0x44, 0xf7, }, 4, 0, "", "",
 +"c5 f9 44 f7          \tknotb  %k7,%k6",},
 +{{0xc4, 0xe1, 0xf9, 0x44, 0xf7, }, 5, 0, "", "",
 +"c4 e1 f9 44 f7       \tknotd  %k7,%k6",},
 +{{0xc5, 0xcc, 0x45, 0xef, }, 4, 0, "", "",
 +"c5 cc 45 ef          \tkorw   %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x45, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 45 ef       \tkorq   %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x45, 0xef, }, 4, 0, "", "",
 +"c5 cd 45 ef          \tkorb   %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x45, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 45 ef       \tkord   %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x46, 0xef, }, 4, 0, "", "",
 +"c5 cc 46 ef          \tkxnorw %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x46, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 46 ef       \tkxnorq %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x46, 0xef, }, 4, 0, "", "",
 +"c5 cd 46 ef          \tkxnorb %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x46, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 46 ef       \tkxnord %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x47, 0xef, }, 4, 0, "", "",
 +"c5 cc 47 ef          \tkxorw  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x47, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 47 ef       \tkxorq  %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x47, 0xef, }, 4, 0, "", "",
 +"c5 cd 47 ef          \tkxorb  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x47, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 47 ef       \tkxord  %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x4a, 0xef, }, 4, 0, "", "",
 +"c5 cc 4a ef          \tkaddw  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x4a, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 4a ef       \tkaddq  %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x4a, 0xef, }, 4, 0, "", "",
 +"c5 cd 4a ef          \tkaddb  %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcd, 0x4a, 0xef, }, 5, 0, "", "",
 +"c4 e1 cd 4a ef       \tkaddd  %k7,%k6,%k5",},
 +{{0xc5, 0xcd, 0x4b, 0xef, }, 4, 0, "", "",
 +"c5 cd 4b ef          \tkunpckbw %k7,%k6,%k5",},
 +{{0xc5, 0xcc, 0x4b, 0xef, }, 4, 0, "", "",
 +"c5 cc 4b ef          \tkunpckwd %k7,%k6,%k5",},
 +{{0xc4, 0xe1, 0xcc, 0x4b, 0xef, }, 5, 0, "", "",
 +"c4 e1 cc 4b ef       \tkunpckdq %k7,%k6,%k5",},
 +{{0xc5, 0xf8, 0x90, 0xee, }, 4, 0, "", "",
 +"c5 f8 90 ee          \tkmovw  %k6,%k5",},
 +{{0xc5, 0xf8, 0x90, 0x29, }, 4, 0, "", "",
 +"c5 f8 90 29          \tkmovw  (%rcx),%k5",},
 +{{0xc4, 0xa1, 0x78, 0x90, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 a1 78 90 ac f0 23 01 00 00 \tkmovw  0x123(%rax,%r14,8),%k5",},
 +{{0xc5, 0xf8, 0x91, 0x29, }, 4, 0, "", "",
 +"c5 f8 91 29          \tkmovw  %k5,(%rcx)",},
 +{{0xc4, 0xa1, 0x78, 0x91, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 a1 78 91 ac f0 23 01 00 00 \tkmovw  %k5,0x123(%rax,%r14,8)",},
 +{{0xc5, 0xf8, 0x92, 0xe8, }, 4, 0, "", "",
 +"c5 f8 92 e8          \tkmovw  %eax,%k5",},
 +{{0xc5, 0xf8, 0x92, 0xed, }, 4, 0, "", "",
 +"c5 f8 92 ed          \tkmovw  %ebp,%k5",},
 +{{0xc4, 0xc1, 0x78, 0x92, 0xed, }, 5, 0, "", "",
 +"c4 c1 78 92 ed       \tkmovw  %r13d,%k5",},
 +{{0xc5, 0xf8, 0x93, 0xc5, }, 4, 0, "", "",
 +"c5 f8 93 c5          \tkmovw  %k5,%eax",},
 +{{0xc5, 0xf8, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 f8 93 ed          \tkmovw  %k5,%ebp",},
 +{{0xc5, 0x78, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 78 93 ed          \tkmovw  %k5,%r13d",},
 +{{0xc4, 0xe1, 0xf8, 0x90, 0xee, }, 5, 0, "", "",
 +"c4 e1 f8 90 ee       \tkmovq  %k6,%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x90, 0x29, }, 5, 0, "", "",
 +"c4 e1 f8 90 29       \tkmovq  (%rcx),%k5",},
 +{{0xc4, 0xa1, 0xf8, 0x90, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 a1 f8 90 ac f0 23 01 00 00 \tkmovq  0x123(%rax,%r14,8),%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x91, 0x29, }, 5, 0, "", "",
 +"c4 e1 f8 91 29       \tkmovq  %k5,(%rcx)",},
 +{{0xc4, 0xa1, 0xf8, 0x91, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 a1 f8 91 ac f0 23 01 00 00 \tkmovq  %k5,0x123(%rax,%r14,8)",},
 +{{0xc4, 0xe1, 0xfb, 0x92, 0xe8, }, 5, 0, "", "",
 +"c4 e1 fb 92 e8       \tkmovq  %rax,%k5",},
 +{{0xc4, 0xe1, 0xfb, 0x92, 0xed, }, 5, 0, "", "",
 +"c4 e1 fb 92 ed       \tkmovq  %rbp,%k5",},
 +{{0xc4, 0xc1, 0xfb, 0x92, 0xed, }, 5, 0, "", "",
 +"c4 c1 fb 92 ed       \tkmovq  %r13,%k5",},
 +{{0xc4, 0xe1, 0xfb, 0x93, 0xc5, }, 5, 0, "", "",
 +"c4 e1 fb 93 c5       \tkmovq  %k5,%rax",},
 +{{0xc4, 0xe1, 0xfb, 0x93, 0xed, }, 5, 0, "", "",
 +"c4 e1 fb 93 ed       \tkmovq  %k5,%rbp",},
 +{{0xc4, 0x61, 0xfb, 0x93, 0xed, }, 5, 0, "", "",
 +"c4 61 fb 93 ed       \tkmovq  %k5,%r13",},
 +{{0xc5, 0xf9, 0x90, 0xee, }, 4, 0, "", "",
 +"c5 f9 90 ee          \tkmovb  %k6,%k5",},
 +{{0xc5, 0xf9, 0x90, 0x29, }, 4, 0, "", "",
 +"c5 f9 90 29          \tkmovb  (%rcx),%k5",},
 +{{0xc4, 0xa1, 0x79, 0x90, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 a1 79 90 ac f0 23 01 00 00 \tkmovb  0x123(%rax,%r14,8),%k5",},
 +{{0xc5, 0xf9, 0x91, 0x29, }, 4, 0, "", "",
 +"c5 f9 91 29          \tkmovb  %k5,(%rcx)",},
 +{{0xc4, 0xa1, 0x79, 0x91, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 a1 79 91 ac f0 23 01 00 00 \tkmovb  %k5,0x123(%rax,%r14,8)",},
 +{{0xc5, 0xf9, 0x92, 0xe8, }, 4, 0, "", "",
 +"c5 f9 92 e8          \tkmovb  %eax,%k5",},
 +{{0xc5, 0xf9, 0x92, 0xed, }, 4, 0, "", "",
 +"c5 f9 92 ed          \tkmovb  %ebp,%k5",},
 +{{0xc4, 0xc1, 0x79, 0x92, 0xed, }, 5, 0, "", "",
 +"c4 c1 79 92 ed       \tkmovb  %r13d,%k5",},
 +{{0xc5, 0xf9, 0x93, 0xc5, }, 4, 0, "", "",
 +"c5 f9 93 c5          \tkmovb  %k5,%eax",},
 +{{0xc5, 0xf9, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 f9 93 ed          \tkmovb  %k5,%ebp",},
 +{{0xc5, 0x79, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 79 93 ed          \tkmovb  %k5,%r13d",},
 +{{0xc4, 0xe1, 0xf9, 0x90, 0xee, }, 5, 0, "", "",
 +"c4 e1 f9 90 ee       \tkmovd  %k6,%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x90, 0x29, }, 5, 0, "", "",
 +"c4 e1 f9 90 29       \tkmovd  (%rcx),%k5",},
 +{{0xc4, 0xa1, 0xf9, 0x90, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 a1 f9 90 ac f0 23 01 00 00 \tkmovd  0x123(%rax,%r14,8),%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x91, 0x29, }, 5, 0, "", "",
 +"c4 e1 f9 91 29       \tkmovd  %k5,(%rcx)",},
 +{{0xc4, 0xa1, 0xf9, 0x91, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 10, 0, "", "",
 +"c4 a1 f9 91 ac f0 23 01 00 00 \tkmovd  %k5,0x123(%rax,%r14,8)",},
 +{{0xc5, 0xfb, 0x92, 0xe8, }, 4, 0, "", "",
 +"c5 fb 92 e8          \tkmovd  %eax,%k5",},
 +{{0xc5, 0xfb, 0x92, 0xed, }, 4, 0, "", "",
 +"c5 fb 92 ed          \tkmovd  %ebp,%k5",},
 +{{0xc4, 0xc1, 0x7b, 0x92, 0xed, }, 5, 0, "", "",
 +"c4 c1 7b 92 ed       \tkmovd  %r13d,%k5",},
 +{{0xc5, 0xfb, 0x93, 0xc5, }, 4, 0, "", "",
 +"c5 fb 93 c5          \tkmovd  %k5,%eax",},
 +{{0xc5, 0xfb, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 fb 93 ed          \tkmovd  %k5,%ebp",},
 +{{0xc5, 0x7b, 0x93, 0xed, }, 4, 0, "", "",
 +"c5 7b 93 ed          \tkmovd  %k5,%r13d",},
 +{{0xc5, 0xf8, 0x98, 0xee, }, 4, 0, "", "",
 +"c5 f8 98 ee          \tkortestw %k6,%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x98, 0xee, }, 5, 0, "", "",
 +"c4 e1 f8 98 ee       \tkortestq %k6,%k5",},
 +{{0xc5, 0xf9, 0x98, 0xee, }, 4, 0, "", "",
 +"c5 f9 98 ee          \tkortestb %k6,%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x98, 0xee, }, 5, 0, "", "",
 +"c4 e1 f9 98 ee       \tkortestd %k6,%k5",},
 +{{0xc5, 0xf8, 0x99, 0xee, }, 4, 0, "", "",
 +"c5 f8 99 ee          \tktestw %k6,%k5",},
 +{{0xc4, 0xe1, 0xf8, 0x99, 0xee, }, 5, 0, "", "",
 +"c4 e1 f8 99 ee       \tktestq %k6,%k5",},
 +{{0xc5, 0xf9, 0x99, 0xee, }, 4, 0, "", "",
 +"c5 f9 99 ee          \tktestb %k6,%k5",},
 +{{0xc4, 0xe1, 0xf9, 0x99, 0xee, }, 5, 0, "", "",
 +"c4 e1 f9 99 ee       \tktestd %k6,%k5",},
 +{{0xc4, 0xe3, 0xf9, 0x30, 0xee, 0x12, }, 6, 0, "", "",
 +"c4 e3 f9 30 ee 12    \tkshiftrw $0x12,%k6,%k5",},
 +{{0xc4, 0xe3, 0xf9, 0x31, 0xee, 0x5b, }, 6, 0, "", "",
 +"c4 e3 f9 31 ee 5b    \tkshiftrq $0x5b,%k6,%k5",},
 +{{0xc4, 0xe3, 0xf9, 0x32, 0xee, 0x12, }, 6, 0, "", "",
 +"c4 e3 f9 32 ee 12    \tkshiftlw $0x12,%k6,%k5",},
 +{{0xc4, 0xe3, 0xf9, 0x33, 0xee, 0x5b, }, 6, 0, "", "",
 +"c4 e3 f9 33 ee 5b    \tkshiftlq $0x5b,%k6,%k5",},
 +{{0xc5, 0xf8, 0x5b, 0xf5, }, 4, 0, "", "",
 +"c5 f8 5b f5          \tvcvtdq2ps %xmm5,%xmm6",},
 +{{0x62, 0x91, 0xfc, 0x4f, 0x5b, 0xf5, }, 6, 0, "", "",
 +"62 91 fc 4f 5b f5    \tvcvtqq2ps %zmm29,%ymm6{%k7}",},
 +{{0xc5, 0xf9, 0x5b, 0xf5, }, 4, 0, "", "",
 +"c5 f9 5b f5          \tvcvtps2dq %xmm5,%xmm6",},
 +{{0xc5, 0xfa, 0x5b, 0xf5, }, 4, 0, "", "",
 +"c5 fa 5b f5          \tvcvttps2dq %xmm5,%xmm6",},
 +{{0x0f, 0x6f, 0xe0, }, 3, 0, "", "",
 +"0f 6f e0             \tmovq   %mm0,%mm4",},
 +{{0xc5, 0xfd, 0x6f, 0xf4, }, 4, 0, "", "",
 +"c5 fd 6f f4          \tvmovdqa %ymm4,%ymm6",},
 +{{0x62, 0x01, 0x7d, 0x48, 0x6f, 0xd1, }, 6, 0, "", "",
 +"62 01 7d 48 6f d1    \tvmovdqa32 %zmm25,%zmm26",},
 +{{0x62, 0x01, 0xfd, 0x48, 0x6f, 0xd1, }, 6, 0, "", "",
 +"62 01 fd 48 6f d1    \tvmovdqa64 %zmm25,%zmm26",},
 +{{0xc5, 0xfe, 0x6f, 0xf4, }, 4, 0, "", "",
 +"c5 fe 6f f4          \tvmovdqu %ymm4,%ymm6",},
 +{{0x62, 0x01, 0x7e, 0x48, 0x6f, 0xf5, }, 6, 0, "", "",
 +"62 01 7e 48 6f f5    \tvmovdqu32 %zmm29,%zmm30",},
 +{{0x62, 0x01, 0xfe, 0x48, 0x6f, 0xd1, }, 6, 0, "", "",
 +"62 01 fe 48 6f d1    \tvmovdqu64 %zmm25,%zmm26",},
 +{{0x62, 0x01, 0x7f, 0x48, 0x6f, 0xf5, }, 6, 0, "", "",
 +"62 01 7f 48 6f f5    \tvmovdqu8 %zmm29,%zmm30",},
 +{{0x62, 0x01, 0xff, 0x48, 0x6f, 0xd1, }, 6, 0, "", "",
 +"62 01 ff 48 6f d1    \tvmovdqu16 %zmm25,%zmm26",},
 +{{0x0f, 0x78, 0xc3, }, 3, 0, "", "",
 +"0f 78 c3             \tvmread %rax,%rbx",},
 +{{0x62, 0x01, 0x7c, 0x48, 0x78, 0xd1, }, 6, 0, "", "",
 +"62 01 7c 48 78 d1    \tvcvttps2udq %zmm25,%zmm26",},
 +{{0x62, 0x91, 0xfc, 0x4f, 0x78, 0xf5, }, 6, 0, "", "",
 +"62 91 fc 4f 78 f5    \tvcvttpd2udq %zmm29,%ymm6{%k7}",},
 +{{0x62, 0xf1, 0xff, 0x08, 0x78, 0xc6, }, 6, 0, "", "",
 +"62 f1 ff 08 78 c6    \tvcvttsd2usi %xmm6,%rax",},
 +{{0x62, 0xf1, 0xfe, 0x08, 0x78, 0xc6, }, 6, 0, "", "",
 +"62 f1 fe 08 78 c6    \tvcvttss2usi %xmm6,%rax",},
 +{{0x62, 0x61, 0x7d, 0x4f, 0x78, 0xd5, }, 6, 0, "", "",
 +"62 61 7d 4f 78 d5    \tvcvttps2uqq %ymm5,%zmm26{%k7}",},
 +{{0x62, 0x01, 0xfd, 0x48, 0x78, 0xf5, }, 6, 0, "", "",
 +"62 01 fd 48 78 f5    \tvcvttpd2uqq %zmm29,%zmm30",},
 +{{0x0f, 0x79, 0xd8, }, 3, 0, "", "",
 +"0f 79 d8             \tvmwrite %rax,%rbx",},
 +{{0x62, 0x01, 0x7c, 0x48, 0x79, 0xd1, }, 6, 0, "", "",
 +"62 01 7c 48 79 d1    \tvcvtps2udq %zmm25,%zmm26",},
 +{{0x62, 0x91, 0xfc, 0x4f, 0x79, 0xf5, }, 6, 0, "", "",
 +"62 91 fc 4f 79 f5    \tvcvtpd2udq %zmm29,%ymm6{%k7}",},
 +{{0x62, 0xf1, 0xff, 0x08, 0x79, 0xc6, }, 6, 0, "", "",
 +"62 f1 ff 08 79 c6    \tvcvtsd2usi %xmm6,%rax",},
 +{{0x62, 0xf1, 0xfe, 0x08, 0x79, 0xc6, }, 6, 0, "", "",
 +"62 f1 fe 08 79 c6    \tvcvtss2usi %xmm6,%rax",},
 +{{0x62, 0x61, 0x7d, 0x4f, 0x79, 0xd5, }, 6, 0, "", "",
 +"62 61 7d 4f 79 d5    \tvcvtps2uqq %ymm5,%zmm26{%k7}",},
 +{{0x62, 0x01, 0xfd, 0x48, 0x79, 0xf5, }, 6, 0, "", "",
 +"62 01 fd 48 79 f5    \tvcvtpd2uqq %zmm29,%zmm30",},
 +{{0x62, 0x61, 0x7e, 0x4f, 0x7a, 0xed, }, 6, 0, "", "",
 +"62 61 7e 4f 7a ed    \tvcvtudq2pd %ymm5,%zmm29{%k7}",},
 +{{0x62, 0x01, 0xfe, 0x48, 0x7a, 0xd1, }, 6, 0, "", "",
 +"62 01 fe 48 7a d1    \tvcvtuqq2pd %zmm25,%zmm26",},
 +{{0x62, 0x01, 0x7f, 0x48, 0x7a, 0xf5, }, 6, 0, "", "",
 +"62 01 7f 48 7a f5    \tvcvtudq2ps %zmm29,%zmm30",},
 +{{0x62, 0x01, 0xff, 0x4f, 0x7a, 0xd1, }, 6, 0, "", "",
 +"62 01 ff 4f 7a d1    \tvcvtuqq2ps %zmm25,%ymm26{%k7}",},
 +{{0x62, 0x01, 0x7d, 0x4f, 0x7a, 0xd1, }, 6, 0, "", "",
 +"62 01 7d 4f 7a d1    \tvcvttps2qq %ymm25,%zmm26{%k7}",},
 +{{0x62, 0x01, 0xfd, 0x48, 0x7a, 0xf5, }, 6, 0, "", "",
 +"62 01 fd 48 7a f5    \tvcvttpd2qq %zmm29,%zmm30",},
 +{{0x62, 0xf1, 0x57, 0x08, 0x7b, 0xf0, }, 6, 0, "", "",
 +"62 f1 57 08 7b f0    \tvcvtusi2sd %eax,%xmm5,%xmm6",},
 +{{0x62, 0xf1, 0x56, 0x08, 0x7b, 0xf0, }, 6, 0, "", "",
 +"62 f1 56 08 7b f0    \tvcvtusi2ss %eax,%xmm5,%xmm6",},
 +{{0x62, 0x61, 0x7d, 0x4f, 0x7b, 0xd5, }, 6, 0, "", "",
 +"62 61 7d 4f 7b d5    \tvcvtps2qq %ymm5,%zmm26{%k7}",},
 +{{0x62, 0x01, 0xfd, 0x48, 0x7b, 0xf5, }, 6, 0, "", "",
 +"62 01 fd 48 7b f5    \tvcvtpd2qq %zmm29,%zmm30",},
 +{{0x0f, 0x7f, 0xc4, }, 3, 0, "", "",
 +"0f 7f c4             \tmovq   %mm0,%mm4",},
 +{{0xc5, 0x7d, 0x7f, 0xc6, }, 4, 0, "", "",
 +"c5 7d 7f c6          \tvmovdqa %ymm8,%ymm6",},
 +{{0x62, 0x01, 0x7d, 0x48, 0x7f, 0xca, }, 6, 0, "", "",
 +"62 01 7d 48 7f ca    \tvmovdqa32 %zmm25,%zmm26",},
 +{{0x62, 0x01, 0xfd, 0x48, 0x7f, 0xca, }, 6, 0, "", "",
 +"62 01 fd 48 7f ca    \tvmovdqa64 %zmm25,%zmm26",},
 +{{0xc5, 0x7e, 0x7f, 0xc6, }, 4, 0, "", "",
 +"c5 7e 7f c6          \tvmovdqu %ymm8,%ymm6",},
 +{{0x62, 0x01, 0x7e, 0x48, 0x7f, 0xca, }, 6, 0, "", "",
 +"62 01 7e 48 7f ca    \tvmovdqu32 %zmm25,%zmm26",},
 +{{0x62, 0x01, 0xfe, 0x48, 0x7f, 0xca, }, 6, 0, "", "",
 +"62 01 fe 48 7f ca    \tvmovdqu64 %zmm25,%zmm26",},
 +{{0x62, 0x61, 0x7f, 0x48, 0x7f, 0x31, }, 6, 0, "", "",
 +"62 61 7f 48 7f 31    \tvmovdqu8 %zmm30,(%rcx)",},
 +{{0x62, 0x01, 0xff, 0x48, 0x7f, 0xca, }, 6, 0, "", "",
 +"62 01 ff 48 7f ca    \tvmovdqu16 %zmm25,%zmm26",},
 +{{0x0f, 0xdb, 0xd1, }, 3, 0, "", "",
 +"0f db d1             \tpand   %mm1,%mm2",},
 +{{0x66, 0x0f, 0xdb, 0xd1, }, 4, 0, "", "",
 +"66 0f db d1          \tpand   %xmm1,%xmm2",},
 +{{0xc5, 0xcd, 0xdb, 0xd4, }, 4, 0, "", "",
 +"c5 cd db d4          \tvpand  %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x01, 0x35, 0x40, 0xdb, 0xd0, }, 6, 0, "", "",
 +"62 01 35 40 db d0    \tvpandd %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x01, 0xb5, 0x40, 0xdb, 0xd0, }, 6, 0, "", "",
 +"62 01 b5 40 db d0    \tvpandq %zmm24,%zmm25,%zmm26",},
 +{{0x0f, 0xdf, 0xd1, }, 3, 0, "", "",
 +"0f df d1             \tpandn  %mm1,%mm2",},
 +{{0x66, 0x0f, 0xdf, 0xd1, }, 4, 0, "", "",
 +"66 0f df d1          \tpandn  %xmm1,%xmm2",},
 +{{0xc5, 0xcd, 0xdf, 0xd4, }, 4, 0, "", "",
 +"c5 cd df d4          \tvpandn %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x01, 0x35, 0x40, 0xdf, 0xd0, }, 6, 0, "", "",
 +"62 01 35 40 df d0    \tvpandnd %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x01, 0xb5, 0x40, 0xdf, 0xd0, }, 6, 0, "", "",
 +"62 01 b5 40 df d0    \tvpandnq %zmm24,%zmm25,%zmm26",},
 +{{0xc5, 0xf9, 0xe6, 0xd1, }, 4, 0, "", "",
 +"c5 f9 e6 d1          \tvcvttpd2dq %xmm1,%xmm2",},
 +{{0xc5, 0xfa, 0xe6, 0xf5, }, 4, 0, "", "",
 +"c5 fa e6 f5          \tvcvtdq2pd %xmm5,%xmm6",},
 +{{0x62, 0x61, 0x7e, 0x4f, 0xe6, 0xd5, }, 6, 0, "", "",
 +"62 61 7e 4f e6 d5    \tvcvtdq2pd %ymm5,%zmm26{%k7}",},
 +{{0x62, 0x01, 0xfe, 0x48, 0xe6, 0xd1, }, 6, 0, "", "",
 +"62 01 fe 48 e6 d1    \tvcvtqq2pd %zmm25,%zmm26",},
 +{{0xc5, 0xfb, 0xe6, 0xd1, }, 4, 0, "", "",
 +"c5 fb e6 d1          \tvcvtpd2dq %xmm1,%xmm2",},
 +{{0x0f, 0xeb, 0xf4, }, 3, 0, "", "",
 +"0f eb f4             \tpor    %mm4,%mm6",},
 +{{0xc5, 0xcd, 0xeb, 0xd4, }, 4, 0, "", "",
 +"c5 cd eb d4          \tvpor   %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x01, 0x35, 0x40, 0xeb, 0xd0, }, 6, 0, "", "",
 +"62 01 35 40 eb d0    \tvpord  %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x01, 0xb5, 0x40, 0xeb, 0xd0, }, 6, 0, "", "",
 +"62 01 b5 40 eb d0    \tvporq  %zmm24,%zmm25,%zmm26",},
 +{{0x0f, 0xef, 0xf4, }, 3, 0, "", "",
 +"0f ef f4             \tpxor   %mm4,%mm6",},
 +{{0xc5, 0xcd, 0xef, 0xd4, }, 4, 0, "", "",
 +"c5 cd ef d4          \tvpxor  %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x01, 0x35, 0x40, 0xef, 0xd0, }, 6, 0, "", "",
 +"62 01 35 40 ef d0    \tvpxord %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x01, 0xb5, 0x40, 0xef, 0xd0, }, 6, 0, "", "",
 +"62 01 b5 40 ef d0    \tvpxorq %zmm24,%zmm25,%zmm26",},
 +{{0x66, 0x0f, 0x38, 0x10, 0xc1, }, 5, 0, "", "",
 +"66 0f 38 10 c1       \tpblendvb %xmm0,%xmm1,%xmm0",},
 +{{0x62, 0x02, 0x9d, 0x40, 0x10, 0xeb, }, 6, 0, "", "",
 +"62 02 9d 40 10 eb    \tvpsrlvw %zmm27,%zmm28,%zmm29",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x10, 0xe6, }, 6, 0, "", "",
 +"62 62 7e 4f 10 e6    \tvpmovuswb %zmm28,%ymm6{%k7}",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x11, 0xe6, }, 6, 0, "", "",
 +"62 62 7e 4f 11 e6    \tvpmovusdb %zmm28,%xmm6{%k7}",},
 +{{0x62, 0x02, 0x9d, 0x40, 0x11, 0xeb, }, 6, 0, "", "",
 +"62 02 9d 40 11 eb    \tvpsravw %zmm27,%zmm28,%zmm29",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x12, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 12 de    \tvpmovusqb %zmm27,%xmm6{%k7}",},
 +{{0x62, 0x02, 0x9d, 0x40, 0x12, 0xeb, }, 6, 0, "", "",
 +"62 02 9d 40 12 eb    \tvpsllvw %zmm27,%zmm28,%zmm29",},
 +{{0xc4, 0xe2, 0x7d, 0x13, 0xeb, }, 5, 0, "", "",
 +"c4 e2 7d 13 eb       \tvcvtph2ps %xmm3,%ymm5",},
 +{{0x62, 0x62, 0x7d, 0x4f, 0x13, 0xdd, }, 6, 0, "", "",
 +"62 62 7d 4f 13 dd    \tvcvtph2ps %ymm5,%zmm27{%k7}",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x13, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 13 de    \tvpmovusdw %zmm27,%ymm6{%k7}",},
 +{{0x66, 0x0f, 0x38, 0x14, 0xc1, }, 5, 0, "", "",
 +"66 0f 38 14 c1       \tblendvps %xmm0,%xmm1,%xmm0",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x14, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 14 de    \tvpmovusqw %zmm27,%xmm6{%k7}",},
 +{{0x62, 0x02, 0x1d, 0x40, 0x14, 0xeb, }, 6, 0, "", "",
 +"62 02 1d 40 14 eb    \tvprorvd %zmm27,%zmm28,%zmm29",},
 +{{0x62, 0x02, 0x9d, 0x40, 0x14, 0xeb, }, 6, 0, "", "",
 +"62 02 9d 40 14 eb    \tvprorvq %zmm27,%zmm28,%zmm29",},
 +{{0x66, 0x0f, 0x38, 0x15, 0xc1, }, 5, 0, "", "",
 +"66 0f 38 15 c1       \tblendvpd %xmm0,%xmm1,%xmm0",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x15, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 15 de    \tvpmovusqd %zmm27,%ymm6{%k7}",},
 +{{0x62, 0x02, 0x1d, 0x40, 0x15, 0xeb, }, 6, 0, "", "",
 +"62 02 1d 40 15 eb    \tvprolvd %zmm27,%zmm28,%zmm29",},
 +{{0x62, 0x02, 0x9d, 0x40, 0x15, 0xeb, }, 6, 0, "", "",
 +"62 02 9d 40 15 eb    \tvprolvq %zmm27,%zmm28,%zmm29",},
 +{{0xc4, 0xe2, 0x4d, 0x16, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 16 d4       \tvpermps %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x82, 0x2d, 0x27, 0x16, 0xf0, }, 6, 0, "", "",
 +"62 82 2d 27 16 f0    \tvpermps %ymm24,%ymm26,%ymm22{%k7}",},
 +{{0x62, 0x82, 0xad, 0x27, 0x16, 0xf0, }, 6, 0, "", "",
 +"62 82 ad 27 16 f0    \tvpermpd %ymm24,%ymm26,%ymm22{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x19, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 19 f4       \tvbroadcastsd %xmm4,%ymm6",},
 +{{0x62, 0x02, 0x7d, 0x48, 0x19, 0xd3, }, 6, 0, "", "",
 +"62 02 7d 48 19 d3    \tvbroadcastf32x2 %xmm27,%zmm26",},
 +{{0xc4, 0xe2, 0x7d, 0x1a, 0x21, }, 5, 0, "", "",
 +"c4 e2 7d 1a 21       \tvbroadcastf128 (%rcx),%ymm4",},
 +{{0x62, 0x62, 0x7d, 0x48, 0x1a, 0x11, }, 6, 0, "", "",
 +"62 62 7d 48 1a 11    \tvbroadcastf32x4 (%rcx),%zmm26",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x1a, 0x11, }, 6, 0, "", "",
 +"62 62 fd 48 1a 11    \tvbroadcastf64x2 (%rcx),%zmm26",},
 +{{0x62, 0x62, 0x7d, 0x48, 0x1b, 0x19, }, 6, 0, "", "",
 +"62 62 7d 48 1b 19    \tvbroadcastf32x8 (%rcx),%zmm27",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x1b, 0x11, }, 6, 0, "", "",
 +"62 62 fd 48 1b 11    \tvbroadcastf64x4 (%rcx),%zmm26",},
 +{{0x62, 0x02, 0xfd, 0x48, 0x1f, 0xe3, }, 6, 0, "", "",
 +"62 02 fd 48 1f e3    \tvpabsq %zmm27,%zmm28",},
 +{{0xc4, 0xe2, 0x79, 0x20, 0xec, }, 5, 0, "", "",
 +"c4 e2 79 20 ec       \tvpmovsxbw %xmm4,%xmm5",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x20, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 20 de    \tvpmovswb %zmm27,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x21, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 21 f4       \tvpmovsxbd %xmm4,%ymm6",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x21, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 21 de    \tvpmovsdb %zmm27,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x22, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 22 e4       \tvpmovsxbq %xmm4,%ymm4",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x22, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 22 de    \tvpmovsqb %zmm27,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x23, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 23 e4       \tvpmovsxwd %xmm4,%ymm4",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x23, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 23 de    \tvpmovsdw %zmm27,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x24, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 24 f4       \tvpmovsxwq %xmm4,%ymm6",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x24, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 24 de    \tvpmovsqw %zmm27,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x25, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 25 e4       \tvpmovsxdq %xmm4,%ymm4",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x25, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 25 de    \tvpmovsqd %zmm27,%ymm6{%k7}",},
 +{{0x62, 0x92, 0x1d, 0x40, 0x26, 0xeb, }, 6, 0, "", "",
 +"62 92 1d 40 26 eb    \tvptestmb %zmm27,%zmm28,%k5",},
 +{{0x62, 0x92, 0x9d, 0x40, 0x26, 0xeb, }, 6, 0, "", "",
 +"62 92 9d 40 26 eb    \tvptestmw %zmm27,%zmm28,%k5",},
 +{{0x62, 0x92, 0x26, 0x40, 0x26, 0xea, }, 6, 0, "", "",
 +"62 92 26 40 26 ea    \tvptestnmb %zmm26,%zmm27,%k5",},
 +{{0x62, 0x92, 0xa6, 0x40, 0x26, 0xea, }, 6, 0, "", "",
 +"62 92 a6 40 26 ea    \tvptestnmw %zmm26,%zmm27,%k5",},
 +{{0x62, 0x92, 0x1d, 0x40, 0x27, 0xeb, }, 6, 0, "", "",
 +"62 92 1d 40 27 eb    \tvptestmd %zmm27,%zmm28,%k5",},
 +{{0x62, 0x92, 0x9d, 0x40, 0x27, 0xeb, }, 6, 0, "", "",
 +"62 92 9d 40 27 eb    \tvptestmq %zmm27,%zmm28,%k5",},
 +{{0x62, 0x92, 0x26, 0x40, 0x27, 0xea, }, 6, 0, "", "",
 +"62 92 26 40 27 ea    \tvptestnmd %zmm26,%zmm27,%k5",},
 +{{0x62, 0x92, 0xa6, 0x40, 0x27, 0xea, }, 6, 0, "", "",
 +"62 92 a6 40 27 ea    \tvptestnmq %zmm26,%zmm27,%k5",},
 +{{0xc4, 0xe2, 0x4d, 0x28, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 28 d4       \tvpmuldq %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x62, 0x7e, 0x48, 0x28, 0xe5, }, 6, 0, "", "",
 +"62 62 7e 48 28 e5    \tvpmovm2b %k5,%zmm28",},
 +{{0x62, 0x62, 0xfe, 0x48, 0x28, 0xe5, }, 6, 0, "", "",
 +"62 62 fe 48 28 e5    \tvpmovm2w %k5,%zmm28",},
 +{{0xc4, 0xe2, 0x4d, 0x29, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 29 d4       \tvpcmpeqq %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x92, 0x7e, 0x48, 0x29, 0xec, }, 6, 0, "", "",
 +"62 92 7e 48 29 ec    \tvpmovb2m %zmm28,%k5",},
 +{{0x62, 0x92, 0xfe, 0x48, 0x29, 0xec, }, 6, 0, "", "",
 +"62 92 fe 48 29 ec    \tvpmovw2m %zmm28,%k5",},
 +{{0xc4, 0xe2, 0x7d, 0x2a, 0x21, }, 5, 0, "", "",
 +"c4 e2 7d 2a 21       \tvmovntdqa (%rcx),%ymm4",},
 +{{0x62, 0x62, 0xfe, 0x48, 0x2a, 0xf6, }, 6, 0, "", "",
 +"62 62 fe 48 2a f6    \tvpbroadcastmb2q %k6,%zmm30",},
 +{{0xc4, 0xe2, 0x5d, 0x2c, 0x31, }, 5, 0, "", "",
 +"c4 e2 5d 2c 31       \tvmaskmovps (%rcx),%ymm4,%ymm6",},
 +{{0x62, 0x02, 0x35, 0x40, 0x2c, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 2c d0    \tvscalefps %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xb5, 0x40, 0x2c, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 40 2c d0    \tvscalefpd %zmm24,%zmm25,%zmm26",},
 +{{0xc4, 0xe2, 0x5d, 0x2d, 0x31, }, 5, 0, "", "",
 +"c4 e2 5d 2d 31       \tvmaskmovpd (%rcx),%ymm4,%ymm6",},
 +{{0x62, 0x02, 0x35, 0x07, 0x2d, 0xd0, }, 6, 0, "", "",
 +"62 02 35 07 2d d0    \tvscalefss %xmm24,%xmm25,%xmm26{%k7}",},
 +{{0x62, 0x02, 0xb5, 0x07, 0x2d, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 07 2d d0    \tvscalefsd %xmm24,%xmm25,%xmm26{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x30, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 30 e4       \tvpmovzxbw %xmm4,%ymm4",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x30, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 30 de    \tvpmovwb %zmm27,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x31, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 31 f4       \tvpmovzxbd %xmm4,%ymm6",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x31, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 31 de    \tvpmovdb %zmm27,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x32, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 32 e4       \tvpmovzxbq %xmm4,%ymm4",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x32, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 32 de    \tvpmovqb %zmm27,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x33, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 33 e4       \tvpmovzxwd %xmm4,%ymm4",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x33, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 33 de    \tvpmovdw %zmm27,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x34, 0xf4, }, 5, 0, "", "",
 +"c4 e2 7d 34 f4       \tvpmovzxwq %xmm4,%ymm6",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x34, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 34 de    \tvpmovqw %zmm27,%xmm6{%k7}",},
 +{{0xc4, 0xe2, 0x7d, 0x35, 0xe4, }, 5, 0, "", "",
 +"c4 e2 7d 35 e4       \tvpmovzxdq %xmm4,%ymm4",},
 +{{0x62, 0x62, 0x7e, 0x4f, 0x35, 0xde, }, 6, 0, "", "",
 +"62 62 7e 4f 35 de    \tvpmovqd %zmm27,%ymm6{%k7}",},
 +{{0xc4, 0xe2, 0x4d, 0x36, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 36 d4       \tvpermd %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x82, 0x2d, 0x27, 0x36, 0xf0, }, 6, 0, "", "",
 +"62 82 2d 27 36 f0    \tvpermd %ymm24,%ymm26,%ymm22{%k7}",},
 +{{0x62, 0x82, 0xad, 0x27, 0x36, 0xf0, }, 6, 0, "", "",
 +"62 82 ad 27 36 f0    \tvpermq %ymm24,%ymm26,%ymm22{%k7}",},
 +{{0xc4, 0xe2, 0x4d, 0x38, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 38 d4       \tvpminsb %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x62, 0x7e, 0x48, 0x38, 0xe5, }, 6, 0, "", "",
 +"62 62 7e 48 38 e5    \tvpmovm2d %k5,%zmm28",},
 +{{0x62, 0x62, 0xfe, 0x48, 0x38, 0xe5, }, 6, 0, "", "",
 +"62 62 fe 48 38 e5    \tvpmovm2q %k5,%zmm28",},
 +{{0xc4, 0xe2, 0x69, 0x39, 0xd9, }, 5, 0, "", "",
 +"c4 e2 69 39 d9       \tvpminsd %xmm1,%xmm2,%xmm3",},
 +{{0x62, 0x02, 0x35, 0x40, 0x39, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 39 d0    \tvpminsd %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xb5, 0x40, 0x39, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 40 39 d0    \tvpminsq %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x92, 0x7e, 0x48, 0x39, 0xec, }, 6, 0, "", "",
 +"62 92 7e 48 39 ec    \tvpmovd2m %zmm28,%k5",},
 +{{0x62, 0x92, 0xfe, 0x48, 0x39, 0xec, }, 6, 0, "", "",
 +"62 92 fe 48 39 ec    \tvpmovq2m %zmm28,%k5",},
 +{{0xc4, 0xe2, 0x4d, 0x3a, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 3a d4       \tvpminuw %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x62, 0x7e, 0x48, 0x3a, 0xe6, }, 6, 0, "", "",
 +"62 62 7e 48 3a e6    \tvpbroadcastmw2d %k6,%zmm28",},
 +{{0xc4, 0xe2, 0x4d, 0x3b, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 3b d4       \tvpminud %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x02, 0x35, 0x40, 0x3b, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 3b d0    \tvpminud %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xb5, 0x40, 0x3b, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 40 3b d0    \tvpminuq %zmm24,%zmm25,%zmm26",},
 +{{0xc4, 0xe2, 0x4d, 0x3d, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 3d d4       \tvpmaxsd %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x02, 0x35, 0x40, 0x3d, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 3d d0    \tvpmaxsd %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xb5, 0x40, 0x3d, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 40 3d d0    \tvpmaxsq %zmm24,%zmm25,%zmm26",},
 +{{0xc4, 0xe2, 0x4d, 0x3f, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 3f d4       \tvpmaxud %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x02, 0x35, 0x40, 0x3f, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 3f d0    \tvpmaxud %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xb5, 0x40, 0x3f, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 40 3f d0    \tvpmaxuq %zmm24,%zmm25,%zmm26",},
 +{{0xc4, 0xe2, 0x4d, 0x40, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 40 d4       \tvpmulld %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x02, 0x35, 0x40, 0x40, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 40 d0    \tvpmulld %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xb5, 0x40, 0x40, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 40 40 d0    \tvpmullq %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0x7d, 0x48, 0x42, 0xd1, }, 6, 0, "", "",
 +"62 02 7d 48 42 d1    \tvgetexpps %zmm25,%zmm26",},
 +{{0x62, 0x02, 0xfd, 0x48, 0x42, 0xe3, }, 6, 0, "", "",
 +"62 02 fd 48 42 e3    \tvgetexppd %zmm27,%zmm28",},
 +{{0x62, 0x02, 0x35, 0x07, 0x43, 0xd0, }, 6, 0, "", "",
 +"62 02 35 07 43 d0    \tvgetexpss %xmm24,%xmm25,%xmm26{%k7}",},
 +{{0x62, 0x02, 0x95, 0x07, 0x43, 0xf4, }, 6, 0, "", "",
 +"62 02 95 07 43 f4    \tvgetexpsd %xmm28,%xmm29,%xmm30{%k7}",},
 +{{0x62, 0x02, 0x7d, 0x48, 0x44, 0xe3, }, 6, 0, "", "",
 +"62 02 7d 48 44 e3    \tvplzcntd %zmm27,%zmm28",},
 +{{0x62, 0x02, 0xfd, 0x48, 0x44, 0xe3, }, 6, 0, "", "",
 +"62 02 fd 48 44 e3    \tvplzcntq %zmm27,%zmm28",},
 +{{0xc4, 0xe2, 0x4d, 0x46, 0xd4, }, 5, 0, "", "",
 +"c4 e2 4d 46 d4       \tvpsravd %ymm4,%ymm6,%ymm2",},
 +{{0x62, 0x02, 0x35, 0x40, 0x46, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 46 d0    \tvpsravd %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xb5, 0x40, 0x46, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 40 46 d0    \tvpsravq %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0x7d, 0x48, 0x4c, 0xd1, }, 6, 0, "", "",
 +"62 02 7d 48 4c d1    \tvrcp14ps %zmm25,%zmm26",},
 +{{0x62, 0x02, 0xfd, 0x48, 0x4c, 0xe3, }, 6, 0, "", "",
 +"62 02 fd 48 4c e3    \tvrcp14pd %zmm27,%zmm28",},
 +{{0x62, 0x02, 0x35, 0x07, 0x4d, 0xd0, }, 6, 0, "", "",
 +"62 02 35 07 4d d0    \tvrcp14ss %xmm24,%xmm25,%xmm26{%k7}",},
 +{{0x62, 0x02, 0xb5, 0x07, 0x4d, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 07 4d d0    \tvrcp14sd %xmm24,%xmm25,%xmm26{%k7}",},
 +{{0x62, 0x02, 0x7d, 0x48, 0x4e, 0xd1, }, 6, 0, "", "",
 +"62 02 7d 48 4e d1    \tvrsqrt14ps %zmm25,%zmm26",},
 +{{0x62, 0x02, 0xfd, 0x48, 0x4e, 0xe3, }, 6, 0, "", "",
 +"62 02 fd 48 4e e3    \tvrsqrt14pd %zmm27,%zmm28",},
 +{{0x62, 0x02, 0x35, 0x07, 0x4f, 0xd0, }, 6, 0, "", "",
 +"62 02 35 07 4f d0    \tvrsqrt14ss %xmm24,%xmm25,%xmm26{%k7}",},
 +{{0x62, 0x02, 0xb5, 0x07, 0x4f, 0xd0, }, 6, 0, "", "",
 +"62 02 b5 07 4f d0    \tvrsqrt14sd %xmm24,%xmm25,%xmm26{%k7}",},
 +{{0xc4, 0xe2, 0x79, 0x59, 0xf4, }, 5, 0, "", "",
 +"c4 e2 79 59 f4       \tvpbroadcastq %xmm4,%xmm6",},
 +{{0x62, 0x02, 0x7d, 0x48, 0x59, 0xd3, }, 6, 0, "", "",
 +"62 02 7d 48 59 d3    \tvbroadcasti32x2 %xmm27,%zmm26",},
 +{{0xc4, 0xe2, 0x7d, 0x5a, 0x21, }, 5, 0, "", "",
 +"c4 e2 7d 5a 21       \tvbroadcasti128 (%rcx),%ymm4",},
 +{{0x62, 0x62, 0x7d, 0x48, 0x5a, 0x11, }, 6, 0, "", "",
 +"62 62 7d 48 5a 11    \tvbroadcasti32x4 (%rcx),%zmm26",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x5a, 0x11, }, 6, 0, "", "",
 +"62 62 fd 48 5a 11    \tvbroadcasti64x2 (%rcx),%zmm26",},
 +{{0x62, 0x62, 0x7d, 0x48, 0x5b, 0x21, }, 6, 0, "", "",
 +"62 62 7d 48 5b 21    \tvbroadcasti32x8 (%rcx),%zmm28",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x5b, 0x11, }, 6, 0, "", "",
 +"62 62 fd 48 5b 11    \tvbroadcasti64x4 (%rcx),%zmm26",},
 +{{0x62, 0x02, 0x25, 0x40, 0x64, 0xe2, }, 6, 0, "", "",
 +"62 02 25 40 64 e2    \tvpblendmd %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x64, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 64 e2    \tvpblendmq %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0x35, 0x40, 0x65, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 65 d0    \tvblendmps %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x65, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 65 e2    \tvblendmpd %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0x25, 0x40, 0x66, 0xe2, }, 6, 0, "", "",
 +"62 02 25 40 66 e2    \tvpblendmb %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x66, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 66 e2    \tvpblendmw %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0x35, 0x40, 0x75, 0xd0, }, 6, 0, "", "",
 +"62 02 35 40 75 d0    \tvpermi2b %zmm24,%zmm25,%zmm26",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x75, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 75 e2    \tvpermi2w %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0x25, 0x40, 0x76, 0xe2, }, 6, 0, "", "",
 +"62 02 25 40 76 e2    \tvpermi2d %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x76, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 76 e2    \tvpermi2q %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0x25, 0x40, 0x77, 0xe2, }, 6, 0, "", "",
 +"62 02 25 40 77 e2    \tvpermi2ps %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x77, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 77 e2    \tvpermi2pd %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x62, 0x7d, 0x08, 0x7a, 0xf0, }, 6, 0, "", "",
 +"62 62 7d 08 7a f0    \tvpbroadcastb %eax,%xmm30",},
 +{{0x62, 0x62, 0x7d, 0x08, 0x7b, 0xf0, }, 6, 0, "", "",
 +"62 62 7d 08 7b f0    \tvpbroadcastw %eax,%xmm30",},
 +{{0x62, 0x62, 0x7d, 0x08, 0x7c, 0xf0, }, 6, 0, "", "",
 +"62 62 7d 08 7c f0    \tvpbroadcastd %eax,%xmm30",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x7c, 0xf0, }, 6, 0, "", "",
 +"62 62 fd 48 7c f0    \tvpbroadcastq %rax,%zmm30",},
 +{{0x62, 0x02, 0x25, 0x40, 0x7d, 0xe2, }, 6, 0, "", "",
 +"62 02 25 40 7d e2    \tvpermt2b %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x7d, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 7d e2    \tvpermt2w %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0x25, 0x40, 0x7e, 0xe2, }, 6, 0, "", "",
 +"62 02 25 40 7e e2    \tvpermt2d %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x7e, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 7e e2    \tvpermt2q %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0x25, 0x40, 0x7f, 0xe2, }, 6, 0, "", "",
 +"62 02 25 40 7f e2    \tvpermt2ps %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x7f, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 7f e2    \tvpermt2pd %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x83, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 83 e2    \tvpmultishiftqb %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x62, 0x7d, 0x48, 0x88, 0x11, }, 6, 0, "", "",
 +"62 62 7d 48 88 11    \tvexpandps (%rcx),%zmm26",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x88, 0x21, }, 6, 0, "", "",
 +"62 62 fd 48 88 21    \tvexpandpd (%rcx),%zmm28",},
 +{{0x62, 0x62, 0x7d, 0x48, 0x89, 0x21, }, 6, 0, "", "",
 +"62 62 7d 48 89 21    \tvpexpandd (%rcx),%zmm28",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x89, 0x11, }, 6, 0, "", "",
 +"62 62 fd 48 89 11    \tvpexpandq (%rcx),%zmm26",},
 +{{0x62, 0x62, 0x7d, 0x48, 0x8a, 0x21, }, 6, 0, "", "",
 +"62 62 7d 48 8a 21    \tvcompressps %zmm28,(%rcx)",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x8a, 0x21, }, 6, 0, "", "",
 +"62 62 fd 48 8a 21    \tvcompresspd %zmm28,(%rcx)",},
 +{{0x62, 0x62, 0x7d, 0x48, 0x8b, 0x21, }, 6, 0, "", "",
 +"62 62 7d 48 8b 21    \tvpcompressd %zmm28,(%rcx)",},
 +{{0x62, 0x62, 0xfd, 0x48, 0x8b, 0x11, }, 6, 0, "", "",
 +"62 62 fd 48 8b 11    \tvpcompressq %zmm26,(%rcx)",},
 +{{0x62, 0x02, 0x25, 0x40, 0x8d, 0xe2, }, 6, 0, "", "",
 +"62 02 25 40 8d e2    \tvpermb %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0x8d, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 8d e2    \tvpermw %zmm26,%zmm27,%zmm28",},
 +{{0xc4, 0xe2, 0x69, 0x90, 0x4c, 0x7d, 0x02, }, 7, 0, "", "",
 +"c4 e2 69 90 4c 7d 02 \tvpgatherdd %xmm2,0x2(%rbp,%xmm7,2),%xmm1",},
 +{{0xc4, 0xe2, 0xe9, 0x90, 0x4c, 0x7d, 0x04, }, 7, 0, "", "",
 +"c4 e2 e9 90 4c 7d 04 \tvpgatherdq %xmm2,0x4(%rbp,%xmm7,2),%xmm1",},
 +{{0x62, 0x22, 0x7d, 0x41, 0x90, 0x94, 0xdd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 7d 41 90 94 dd 7b 00 00 00 \tvpgatherdd 0x7b(%rbp,%zmm27,8),%zmm26{%k1}",},
 +{{0x62, 0x22, 0xfd, 0x41, 0x90, 0x94, 0xdd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 fd 41 90 94 dd 7b 00 00 00 \tvpgatherdq 0x7b(%rbp,%ymm27,8),%zmm26{%k1}",},
 +{{0xc4, 0xe2, 0x69, 0x91, 0x4c, 0x7d, 0x02, }, 7, 0, "", "",
 +"c4 e2 69 91 4c 7d 02 \tvpgatherqd %xmm2,0x2(%rbp,%xmm7,2),%xmm1",},
 +{{0xc4, 0xe2, 0xe9, 0x91, 0x4c, 0x7d, 0x02, }, 7, 0, "", "",
 +"c4 e2 e9 91 4c 7d 02 \tvpgatherqq %xmm2,0x2(%rbp,%xmm7,2),%xmm1",},
 +{{0x62, 0x22, 0x7d, 0x41, 0x91, 0x94, 0xdd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 7d 41 91 94 dd 7b 00 00 00 \tvpgatherqd 0x7b(%rbp,%zmm27,8),%ymm26{%k1}",},
 +{{0x62, 0x22, 0xfd, 0x41, 0x91, 0x94, 0xdd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 fd 41 91 94 dd 7b 00 00 00 \tvpgatherqq 0x7b(%rbp,%zmm27,8),%zmm26{%k1}",},
 +{{0x62, 0x22, 0x7d, 0x41, 0xa0, 0xa4, 0xed, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 7d 41 a0 a4 ed 7b 00 00 00 \tvpscatterdd %zmm28,0x7b(%rbp,%zmm29,8){%k1}",},
 +{{0x62, 0x22, 0xfd, 0x41, 0xa0, 0x94, 0xdd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 fd 41 a0 94 dd 7b 00 00 00 \tvpscatterdq %zmm26,0x7b(%rbp,%ymm27,8){%k1}",},
 +{{0x62, 0xb2, 0x7d, 0x41, 0xa1, 0xb4, 0xed, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 b2 7d 41 a1 b4 ed 7b 00 00 00 \tvpscatterqd %ymm6,0x7b(%rbp,%zmm29,8){%k1}",},
 +{{0x62, 0xb2, 0xfd, 0x21, 0xa1, 0xb4, 0xdd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 b2 fd 21 a1 b4 dd 7b 00 00 00 \tvpscatterqq %ymm6,0x7b(%rbp,%ymm27,8){%k1}",},
 +{{0x62, 0x22, 0x7d, 0x41, 0xa2, 0xa4, 0xed, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 7d 41 a2 a4 ed 7b 00 00 00 \tvscatterdps %zmm28,0x7b(%rbp,%zmm29,8){%k1}",},
 +{{0x62, 0x22, 0xfd, 0x41, 0xa2, 0xa4, 0xdd, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 fd 41 a2 a4 dd 7b 00 00 00 \tvscatterdpd %zmm28,0x7b(%rbp,%ymm27,8){%k1}",},
 +{{0x62, 0xb2, 0x7d, 0x41, 0xa3, 0xb4, 0xed, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 b2 7d 41 a3 b4 ed 7b 00 00 00 \tvscatterqps %ymm6,0x7b(%rbp,%zmm29,8){%k1}",},
 +{{0x62, 0x22, 0xfd, 0x41, 0xa3, 0xa4, 0xed, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 22 fd 41 a3 a4 ed 7b 00 00 00 \tvscatterqpd %zmm28,0x7b(%rbp,%zmm29,8){%k1}",},
 +{{0x62, 0x02, 0xa5, 0x40, 0xb4, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 b4 e2    \tvpmadd52luq %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0xa5, 0x40, 0xb5, 0xe2, }, 6, 0, "", "",
 +"62 02 a5 40 b5 e2    \tvpmadd52huq %zmm26,%zmm27,%zmm28",},
 +{{0x62, 0x02, 0x7d, 0x48, 0xc4, 0xda, }, 6, 0, "", "",
 +"62 02 7d 48 c4 da    \tvpconflictd %zmm26,%zmm27",},
 +{{0x62, 0x02, 0xfd, 0x48, 0xc4, 0xda, }, 6, 0, "", "",
 +"62 02 fd 48 c4 da    \tvpconflictq %zmm26,%zmm27",},
 +{{0x62, 0x02, 0x7d, 0x48, 0xc8, 0xf5, }, 6, 0, "", "",
 +"62 02 7d 48 c8 f5    \tvexp2ps %zmm29,%zmm30",},
 +{{0x62, 0x02, 0xfd, 0x48, 0xc8, 0xda, }, 6, 0, "", "",
 +"62 02 fd 48 c8 da    \tvexp2pd %zmm26,%zmm27",},
 +{{0x62, 0x02, 0x7d, 0x48, 0xca, 0xf5, }, 6, 0, "", "",
 +"62 02 7d 48 ca f5    \tvrcp28ps %zmm29,%zmm30",},
 +{{0x62, 0x02, 0xfd, 0x48, 0xca, 0xda, }, 6, 0, "", "",
 +"62 02 fd 48 ca da    \tvrcp28pd %zmm26,%zmm27",},
 +{{0x62, 0x02, 0x15, 0x07, 0xcb, 0xf4, }, 6, 0, "", "",
 +"62 02 15 07 cb f4    \tvrcp28ss %xmm28,%xmm29,%xmm30{%k7}",},
 +{{0x62, 0x02, 0xad, 0x07, 0xcb, 0xd9, }, 6, 0, "", "",
 +"62 02 ad 07 cb d9    \tvrcp28sd %xmm25,%xmm26,%xmm27{%k7}",},
 +{{0x62, 0x02, 0x7d, 0x48, 0xcc, 0xf5, }, 6, 0, "", "",
 +"62 02 7d 48 cc f5    \tvrsqrt28ps %zmm29,%zmm30",},
 +{{0x62, 0x02, 0xfd, 0x48, 0xcc, 0xda, }, 6, 0, "", "",
 +"62 02 fd 48 cc da    \tvrsqrt28pd %zmm26,%zmm27",},
 +{{0x62, 0x02, 0x15, 0x07, 0xcd, 0xf4, }, 6, 0, "", "",
 +"62 02 15 07 cd f4    \tvrsqrt28ss %xmm28,%xmm29,%xmm30{%k7}",},
 +{{0x62, 0x02, 0xad, 0x07, 0xcd, 0xd9, }, 6, 0, "", "",
 +"62 02 ad 07 cd d9    \tvrsqrt28sd %xmm25,%xmm26,%xmm27{%k7}",},
 +{{0x62, 0x03, 0x15, 0x40, 0x03, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 15 40 03 f4 12 \tvalignd $0x12,%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0xad, 0x40, 0x03, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 ad 40 03 d9 12 \tvalignq $0x12,%zmm25,%zmm26,%zmm27",},
 +{{0xc4, 0xe3, 0x7d, 0x08, 0xd6, 0x05, }, 6, 0, "", "",
 +"c4 e3 7d 08 d6 05    \tvroundps $0x5,%ymm6,%ymm2",},
 +{{0x62, 0x03, 0x7d, 0x48, 0x08, 0xd1, 0x12, }, 7, 0, "", "",
 +"62 03 7d 48 08 d1 12 \tvrndscaleps $0x12,%zmm25,%zmm26",},
 +{{0xc4, 0xe3, 0x7d, 0x09, 0xd6, 0x05, }, 6, 0, "", "",
 +"c4 e3 7d 09 d6 05    \tvroundpd $0x5,%ymm6,%ymm2",},
 +{{0x62, 0x03, 0xfd, 0x48, 0x09, 0xd1, 0x12, }, 7, 0, "", "",
 +"62 03 fd 48 09 d1 12 \tvrndscalepd $0x12,%zmm25,%zmm26",},
 +{{0xc4, 0xe3, 0x49, 0x0a, 0xd4, 0x05, }, 6, 0, "", "",
 +"c4 e3 49 0a d4 05    \tvroundss $0x5,%xmm4,%xmm6,%xmm2",},
 +{{0x62, 0x03, 0x35, 0x07, 0x0a, 0xd0, 0x12, }, 7, 0, "", "",
 +"62 03 35 07 0a d0 12 \tvrndscaless $0x12,%xmm24,%xmm25,%xmm26{%k7}",},
 +{{0xc4, 0xe3, 0x49, 0x0b, 0xd4, 0x05, }, 6, 0, "", "",
 +"c4 e3 49 0b d4 05    \tvroundsd $0x5,%xmm4,%xmm6,%xmm2",},
 +{{0x62, 0x03, 0xb5, 0x07, 0x0b, 0xd0, 0x12, }, 7, 0, "", "",
 +"62 03 b5 07 0b d0 12 \tvrndscalesd $0x12,%xmm24,%xmm25,%xmm26{%k7}",},
 +{{0xc4, 0xe3, 0x5d, 0x18, 0xf4, 0x05, }, 6, 0, "", "",
 +"c4 e3 5d 18 f4 05    \tvinsertf128 $0x5,%xmm4,%ymm4,%ymm6",},
 +{{0x62, 0x03, 0x35, 0x47, 0x18, 0xd0, 0x12, }, 7, 0, "", "",
 +"62 03 35 47 18 d0 12 \tvinsertf32x4 $0x12,%xmm24,%zmm25,%zmm26{%k7}",},
 +{{0x62, 0x03, 0xb5, 0x47, 0x18, 0xd0, 0x12, }, 7, 0, "", "",
 +"62 03 b5 47 18 d0 12 \tvinsertf64x2 $0x12,%xmm24,%zmm25,%zmm26{%k7}",},
 +{{0xc4, 0xe3, 0x7d, 0x19, 0xe4, 0x05, }, 6, 0, "", "",
 +"c4 e3 7d 19 e4 05    \tvextractf128 $0x5,%ymm4,%xmm4",},
 +{{0x62, 0x03, 0x7d, 0x4f, 0x19, 0xca, 0x12, }, 7, 0, "", "",
 +"62 03 7d 4f 19 ca 12 \tvextractf32x4 $0x12,%zmm25,%xmm26{%k7}",},
 +{{0x62, 0x03, 0xfd, 0x4f, 0x19, 0xca, 0x12, }, 7, 0, "", "",
 +"62 03 fd 4f 19 ca 12 \tvextractf64x2 $0x12,%zmm25,%xmm26{%k7}",},
 +{{0x62, 0x03, 0x2d, 0x47, 0x1a, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 2d 47 1a d9 12 \tvinsertf32x8 $0x12,%ymm25,%zmm26,%zmm27{%k7}",},
 +{{0x62, 0x03, 0x95, 0x47, 0x1a, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 95 47 1a f4 12 \tvinsertf64x4 $0x12,%ymm28,%zmm29,%zmm30{%k7}",},
 +{{0x62, 0x03, 0x7d, 0x4f, 0x1b, 0xee, 0x12, }, 7, 0, "", "",
 +"62 03 7d 4f 1b ee 12 \tvextractf32x8 $0x12,%zmm29,%ymm30{%k7}",},
 +{{0x62, 0x03, 0xfd, 0x4f, 0x1b, 0xd3, 0x12, }, 7, 0, "", "",
 +"62 03 fd 4f 1b d3 12 \tvextractf64x4 $0x12,%zmm26,%ymm27{%k7}",},
 +{{0x62, 0x93, 0x0d, 0x40, 0x1e, 0xed, 0x12, }, 7, 0, "", "",
 +"62 93 0d 40 1e ed 12 \tvpcmpud $0x12,%zmm29,%zmm30,%k5",},
 +{{0x62, 0x93, 0xa5, 0x40, 0x1e, 0xea, 0x12, }, 7, 0, "", "",
 +"62 93 a5 40 1e ea 12 \tvpcmpuq $0x12,%zmm26,%zmm27,%k5",},
 +{{0x62, 0x93, 0x0d, 0x40, 0x1f, 0xed, 0x12, }, 7, 0, "", "",
 +"62 93 0d 40 1f ed 12 \tvpcmpd $0x12,%zmm29,%zmm30,%k5",},
 +{{0x62, 0x93, 0xa5, 0x40, 0x1f, 0xea, 0x12, }, 7, 0, "", "",
 +"62 93 a5 40 1f ea 12 \tvpcmpq $0x12,%zmm26,%zmm27,%k5",},
 +{{0x62, 0x03, 0x15, 0x40, 0x23, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 15 40 23 f4 12 \tvshuff32x4 $0x12,%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0xad, 0x40, 0x23, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 ad 40 23 d9 12 \tvshuff64x2 $0x12,%zmm25,%zmm26,%zmm27",},
 +{{0x62, 0x03, 0x15, 0x40, 0x25, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 15 40 25 f4 12 \tvpternlogd $0x12,%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0x95, 0x40, 0x25, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 95 40 25 f4 12 \tvpternlogq $0x12,%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0x7d, 0x48, 0x26, 0xda, 0x12, }, 7, 0, "", "",
 +"62 03 7d 48 26 da 12 \tvgetmantps $0x12,%zmm26,%zmm27",},
 +{{0x62, 0x03, 0xfd, 0x48, 0x26, 0xf5, 0x12, }, 7, 0, "", "",
 +"62 03 fd 48 26 f5 12 \tvgetmantpd $0x12,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0x2d, 0x07, 0x27, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 2d 07 27 d9 12 \tvgetmantss $0x12,%xmm25,%xmm26,%xmm27{%k7}",},
 +{{0x62, 0x03, 0x95, 0x07, 0x27, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 95 07 27 f4 12 \tvgetmantsd $0x12,%xmm28,%xmm29,%xmm30{%k7}",},
 +{{0xc4, 0xe3, 0x5d, 0x38, 0xf4, 0x05, }, 6, 0, "", "",
 +"c4 e3 5d 38 f4 05    \tvinserti128 $0x5,%xmm4,%ymm4,%ymm6",},
 +{{0x62, 0x03, 0x35, 0x47, 0x38, 0xd0, 0x12, }, 7, 0, "", "",
 +"62 03 35 47 38 d0 12 \tvinserti32x4 $0x12,%xmm24,%zmm25,%zmm26{%k7}",},
 +{{0x62, 0x03, 0xb5, 0x47, 0x38, 0xd0, 0x12, }, 7, 0, "", "",
 +"62 03 b5 47 38 d0 12 \tvinserti64x2 $0x12,%xmm24,%zmm25,%zmm26{%k7}",},
 +{{0xc4, 0xe3, 0x7d, 0x39, 0xe6, 0x05, }, 6, 0, "", "",
 +"c4 e3 7d 39 e6 05    \tvextracti128 $0x5,%ymm4,%xmm6",},
 +{{0x62, 0x03, 0x7d, 0x4f, 0x39, 0xca, 0x12, }, 7, 0, "", "",
 +"62 03 7d 4f 39 ca 12 \tvextracti32x4 $0x12,%zmm25,%xmm26{%k7}",},
 +{{0x62, 0x03, 0xfd, 0x4f, 0x39, 0xca, 0x12, }, 7, 0, "", "",
 +"62 03 fd 4f 39 ca 12 \tvextracti64x2 $0x12,%zmm25,%xmm26{%k7}",},
 +{{0x62, 0x03, 0x15, 0x47, 0x3a, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 15 47 3a f4 12 \tvinserti32x8 $0x12,%ymm28,%zmm29,%zmm30{%k7}",},
 +{{0x62, 0x03, 0xad, 0x47, 0x3a, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 ad 47 3a d9 12 \tvinserti64x4 $0x12,%ymm25,%zmm26,%zmm27{%k7}",},
 +{{0x62, 0x03, 0x7d, 0x4f, 0x3b, 0xee, 0x12, }, 7, 0, "", "",
 +"62 03 7d 4f 3b ee 12 \tvextracti32x8 $0x12,%zmm29,%ymm30{%k7}",},
 +{{0x62, 0x03, 0xfd, 0x4f, 0x3b, 0xd3, 0x12, }, 7, 0, "", "",
 +"62 03 fd 4f 3b d3 12 \tvextracti64x4 $0x12,%zmm26,%ymm27{%k7}",},
 +{{0x62, 0x93, 0x0d, 0x40, 0x3e, 0xed, 0x12, }, 7, 0, "", "",
 +"62 93 0d 40 3e ed 12 \tvpcmpub $0x12,%zmm29,%zmm30,%k5",},
 +{{0x62, 0x93, 0xa5, 0x40, 0x3e, 0xea, 0x12, }, 7, 0, "", "",
 +"62 93 a5 40 3e ea 12 \tvpcmpuw $0x12,%zmm26,%zmm27,%k5",},
 +{{0x62, 0x93, 0x0d, 0x40, 0x3f, 0xed, 0x12, }, 7, 0, "", "",
 +"62 93 0d 40 3f ed 12 \tvpcmpb $0x12,%zmm29,%zmm30,%k5",},
 +{{0x62, 0x93, 0xa5, 0x40, 0x3f, 0xea, 0x12, }, 7, 0, "", "",
 +"62 93 a5 40 3f ea 12 \tvpcmpw $0x12,%zmm26,%zmm27,%k5",},
 +{{0xc4, 0xe3, 0x4d, 0x42, 0xd4, 0x05, }, 6, 0, "", "",
 +"c4 e3 4d 42 d4 05    \tvmpsadbw $0x5,%ymm4,%ymm6,%ymm2",},
 +{{0x62, 0xf3, 0x55, 0x48, 0x42, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 f3 55 48 42 f4 12 \tvdbpsadbw $0x12,%zmm4,%zmm5,%zmm6",},
 +{{0x62, 0x03, 0x2d, 0x40, 0x43, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 2d 40 43 d9 12 \tvshufi32x4 $0x12,%zmm25,%zmm26,%zmm27",},
 +{{0x62, 0x03, 0x95, 0x40, 0x43, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 95 40 43 f4 12 \tvshufi64x2 $0x12,%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0x2d, 0x40, 0x50, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 2d 40 50 d9 12 \tvrangeps $0x12,%zmm25,%zmm26,%zmm27",},
 +{{0x62, 0x03, 0x95, 0x40, 0x50, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 95 40 50 f4 12 \tvrangepd $0x12,%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0x2d, 0x00, 0x51, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 2d 00 51 d9 12 \tvrangess $0x12,%xmm25,%xmm26,%xmm27",},
 +{{0x62, 0x03, 0x95, 0x00, 0x51, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 95 00 51 f4 12 \tvrangesd $0x12,%xmm28,%xmm29,%xmm30",},
 +{{0x62, 0x03, 0x15, 0x40, 0x54, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 15 40 54 f4 12 \tvfixupimmps $0x12,%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0xad, 0x40, 0x54, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 ad 40 54 d9 12 \tvfixupimmpd $0x12,%zmm25,%zmm26,%zmm27",},
 +{{0x62, 0x03, 0x15, 0x07, 0x55, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 15 07 55 f4 12 \tvfixupimmss $0x12,%xmm28,%xmm29,%xmm30{%k7}",},
 +{{0x62, 0x03, 0xad, 0x07, 0x55, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 ad 07 55 d9 12 \tvfixupimmsd $0x12,%xmm25,%xmm26,%xmm27{%k7}",},
 +{{0x62, 0x03, 0x7d, 0x48, 0x56, 0xda, 0x12, }, 7, 0, "", "",
 +"62 03 7d 48 56 da 12 \tvreduceps $0x12,%zmm26,%zmm27",},
 +{{0x62, 0x03, 0xfd, 0x48, 0x56, 0xf5, 0x12, }, 7, 0, "", "",
 +"62 03 fd 48 56 f5 12 \tvreducepd $0x12,%zmm29,%zmm30",},
 +{{0x62, 0x03, 0x2d, 0x00, 0x57, 0xd9, 0x12, }, 7, 0, "", "",
 +"62 03 2d 00 57 d9 12 \tvreducess $0x12,%xmm25,%xmm26,%xmm27",},
 +{{0x62, 0x03, 0x95, 0x00, 0x57, 0xf4, 0x12, }, 7, 0, "", "",
 +"62 03 95 00 57 f4 12 \tvreducesd $0x12,%xmm28,%xmm29,%xmm30",},
 +{{0x62, 0x93, 0x7d, 0x48, 0x66, 0xeb, 0x12, }, 7, 0, "", "",
 +"62 93 7d 48 66 eb 12 \tvfpclassps $0x12,%zmm27,%k5",},
 +{{0x62, 0x93, 0xfd, 0x48, 0x66, 0xee, 0x12, }, 7, 0, "", "",
 +"62 93 fd 48 66 ee 12 \tvfpclasspd $0x12,%zmm30,%k5",},
 +{{0x62, 0x93, 0x7d, 0x08, 0x67, 0xeb, 0x12, }, 7, 0, "", "",
 +"62 93 7d 08 67 eb 12 \tvfpclassss $0x12,%xmm27,%k5",},
 +{{0x62, 0x93, 0xfd, 0x08, 0x67, 0xee, 0x12, }, 7, 0, "", "",
 +"62 93 fd 08 67 ee 12 \tvfpclasssd $0x12,%xmm30,%k5",},
 +{{0x62, 0x91, 0x2d, 0x40, 0x72, 0xc1, 0x12, }, 7, 0, "", "",
 +"62 91 2d 40 72 c1 12 \tvprord $0x12,%zmm25,%zmm26",},
 +{{0x62, 0x91, 0xad, 0x40, 0x72, 0xc1, 0x12, }, 7, 0, "", "",
 +"62 91 ad 40 72 c1 12 \tvprorq $0x12,%zmm25,%zmm26",},
 +{{0x62, 0x91, 0x0d, 0x40, 0x72, 0xcd, 0x12, }, 7, 0, "", "",
 +"62 91 0d 40 72 cd 12 \tvprold $0x12,%zmm29,%zmm30",},
 +{{0x62, 0x91, 0x8d, 0x40, 0x72, 0xcd, 0x12, }, 7, 0, "", "",
 +"62 91 8d 40 72 cd 12 \tvprolq $0x12,%zmm29,%zmm30",},
 +{{0x0f, 0x72, 0xe6, 0x02, }, 4, 0, "", "",
 +"0f 72 e6 02          \tpsrad  $0x2,%mm6",},
 +{{0xc5, 0xed, 0x72, 0xe6, 0x05, }, 5, 0, "", "",
 +"c5 ed 72 e6 05       \tvpsrad $0x5,%ymm6,%ymm2",},
 +{{0x62, 0x91, 0x4d, 0x40, 0x72, 0xe2, 0x05, }, 7, 0, "", "",
 +"62 91 4d 40 72 e2 05 \tvpsrad $0x5,%zmm26,%zmm22",},
 +{{0x62, 0x91, 0xcd, 0x40, 0x72, 0xe2, 0x05, }, 7, 0, "", "",
 +"62 91 cd 40 72 e2 05 \tvpsraq $0x5,%zmm26,%zmm22",},
 +{{0x62, 0x92, 0x7d, 0x41, 0xc6, 0x8c, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 7d 41 c6 8c fe 7b 00 00 00 \tvgatherpf0dps 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0xfd, 0x41, 0xc6, 0x8c, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 fd 41 c6 8c fe 7b 00 00 00 \tvgatherpf0dpd 0x7b(%r14,%ymm31,8){%k1}",},
 +{{0x62, 0x92, 0x7d, 0x41, 0xc6, 0x94, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 7d 41 c6 94 fe 7b 00 00 00 \tvgatherpf1dps 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0xfd, 0x41, 0xc6, 0x94, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 fd 41 c6 94 fe 7b 00 00 00 \tvgatherpf1dpd 0x7b(%r14,%ymm31,8){%k1}",},
 +{{0x62, 0x92, 0x7d, 0x41, 0xc6, 0xac, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 7d 41 c6 ac fe 7b 00 00 00 \tvscatterpf0dps 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0xfd, 0x41, 0xc6, 0xac, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 fd 41 c6 ac fe 7b 00 00 00 \tvscatterpf0dpd 0x7b(%r14,%ymm31,8){%k1}",},
 +{{0x62, 0x92, 0x7d, 0x41, 0xc6, 0xb4, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 7d 41 c6 b4 fe 7b 00 00 00 \tvscatterpf1dps 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0xfd, 0x41, 0xc6, 0xb4, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 fd 41 c6 b4 fe 7b 00 00 00 \tvscatterpf1dpd 0x7b(%r14,%ymm31,8){%k1}",},
 +{{0x62, 0x92, 0x7d, 0x41, 0xc7, 0x8c, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 7d 41 c7 8c fe 7b 00 00 00 \tvgatherpf0qps 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0xfd, 0x41, 0xc7, 0x8c, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 fd 41 c7 8c fe 7b 00 00 00 \tvgatherpf0qpd 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0x7d, 0x41, 0xc7, 0x94, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 7d 41 c7 94 fe 7b 00 00 00 \tvgatherpf1qps 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0xfd, 0x41, 0xc7, 0x94, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 fd 41 c7 94 fe 7b 00 00 00 \tvgatherpf1qpd 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0x7d, 0x41, 0xc7, 0xac, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 7d 41 c7 ac fe 7b 00 00 00 \tvscatterpf0qps 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0xfd, 0x41, 0xc7, 0xac, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 fd 41 c7 ac fe 7b 00 00 00 \tvscatterpf0qpd 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0x7d, 0x41, 0xc7, 0xb4, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 7d 41 c7 b4 fe 7b 00 00 00 \tvscatterpf1qps 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x92, 0xfd, 0x41, 0xc7, 0xb4, 0xfe, 0x7b, 0x00, 0x00, 0x00, }, 11, 0, "", "",
 +"62 92 fd 41 c7 b4 fe 7b 00 00 00 \tvscatterpf1qpd 0x7b(%r14,%zmm31,8){%k1}",},
 +{{0x62, 0x01, 0x95, 0x40, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 01 95 40 58 f4    \tvaddpd %zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x01, 0x95, 0x47, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 01 95 47 58 f4    \tvaddpd %zmm28,%zmm29,%zmm30{%k7}",},
 +{{0x62, 0x01, 0x95, 0xc7, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 01 95 c7 58 f4    \tvaddpd %zmm28,%zmm29,%zmm30{%k7}{z}",},
 +{{0x62, 0x01, 0x95, 0x10, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 01 95 10 58 f4    \tvaddpd {rn-sae},%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x01, 0x95, 0x50, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 01 95 50 58 f4    \tvaddpd {ru-sae},%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x01, 0x95, 0x30, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 01 95 30 58 f4    \tvaddpd {rd-sae},%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x01, 0x95, 0x70, 0x58, 0xf4, }, 6, 0, "", "",
 +"62 01 95 70 58 f4    \tvaddpd {rz-sae},%zmm28,%zmm29,%zmm30",},
 +{{0x62, 0x61, 0x95, 0x40, 0x58, 0x31, }, 6, 0, "", "",
 +"62 61 95 40 58 31    \tvaddpd (%rcx),%zmm29,%zmm30",},
 +{{0x62, 0x21, 0x95, 0x40, 0x58, 0xb4, 0xf0, 0x23, 0x01, 0x00, 0x00, }, 11, 0, "", "",
 +"62 21 95 40 58 b4 f0 23 01 00 00 \tvaddpd 0x123(%rax,%r14,8),%zmm29,%zmm30",},
 +{{0x62, 0x61, 0x95, 0x50, 0x58, 0x31, }, 6, 0, "", "",
 +"62 61 95 50 58 31    \tvaddpd (%rcx){1to8},%zmm29,%zmm30",},
 +{{0x62, 0x61, 0x95, 0x40, 0x58, 0x72, 0x7f, }, 7, 0, "", "",
 +"62 61 95 40 58 72 7f \tvaddpd 0x1fc0(%rdx),%zmm29,%zmm30",},
 +{{0x62, 0x61, 0x95, 0x50, 0x58, 0x72, 0x7f, }, 7, 0, "", "",
 +"62 61 95 50 58 72 7f \tvaddpd 0x3f8(%rdx){1to8},%zmm29,%zmm30",},
 +{{0x62, 0xf1, 0x0c, 0x50, 0xc2, 0x6a, 0x7f, 0x08, }, 8, 0, "", "",
 +"62 f1 0c 50 c2 6a 7f 08 \tvcmpeq_uqps 0x1fc(%rdx){1to16},%zmm30,%k5",},
 +{{0x62, 0xb1, 0x97, 0x07, 0xc2, 0xac, 0xf0, 0x23, 0x01, 0x00, 0x00, 0x01, }, 12, 0, "", "",
 +"62 b1 97 07 c2 ac f0 23 01 00 00 01 \tvcmpltsd 0x123(%rax,%r14,8),%xmm29,%k5{%k7}",},
 +{{0x62, 0x91, 0x97, 0x17, 0xc2, 0xec, 0x02, }, 7, 0, "", "",
 +"62 91 97 17 c2 ec 02 \tvcmplesd {sae},%xmm28,%xmm29,%k5{%k7}",},
 +{{0x62, 0x23, 0x15, 0x07, 0x27, 0xb4, 0xf0, 0x23, 0x01, 0x00, 0x00, 0x5b, }, 12, 0, "", "",
 +"62 23 15 07 27 b4 f0 23 01 00 00 5b \tvgetmantss $0x5b,0x123(%rax,%r14,8),%xmm29,%xmm30{%k7}",},
  {{0xf3, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
  "f3 0f 1b 00          \tbndmk  (%rax),%bnd0",},
  {{0xf3, 0x41, 0x0f, 0x1b, 0x00, }, 5, 0, "", "",
  {{0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
  "0f 1b 84 08 78 56 34 12 \tbndstx %bnd0,0x12345678(%rax,%rcx,1)",},
  {{0xf2, 0xe8, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "call", "unconditional",
 -"f2 e8 00 00 00 00    \tbnd callq 3f6 <main+0x3f6>",},
 +"f2 e8 00 00 00 00    \tbnd callq f22 <main+0xf22>",},
  {{0x67, 0xf2, 0xff, 0x10, }, 4, 0, "call", "indirect",
  "67 f2 ff 10          \tbnd callq *(%eax)",},
  {{0xf2, 0xc3, }, 2, 0, "ret", "indirect",
  "f2 c3                \tbnd retq ",},
  {{0xf2, 0xe9, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "jmp", "unconditional",
 -"f2 e9 00 00 00 00    \tbnd jmpq 402 <main+0x402>",},
 +"f2 e9 00 00 00 00    \tbnd jmpq f2e <main+0xf2e>",},
  {{0xf2, 0xe9, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "jmp", "unconditional",
 -"f2 e9 00 00 00 00    \tbnd jmpq 408 <main+0x408>",},
 +"f2 e9 00 00 00 00    \tbnd jmpq f34 <main+0xf34>",},
  {{0x67, 0xf2, 0xff, 0x21, }, 4, 0, "jmp", "indirect",
  "67 f2 ff 21          \tbnd jmpq *(%ecx)",},
  {{0xf2, 0x0f, 0x85, 0x00, 0x00, 0x00, 0x00, }, 7, 0, "jcc", "conditional",
 -"f2 0f 85 00 00 00 00 \tbnd jne 413 <main+0x413>",},
 +"f2 0f 85 00 00 00 00 \tbnd jne f3f <main+0xf3f>",},
  {{0x0f, 0x3a, 0xcc, 0xc1, 0x00, }, 5, 0, "", "",
  "0f 3a cc c1 00       \tsha1rnds4 $0x0,%xmm1,%xmm0",},
  {{0x0f, 0x3a, 0xcc, 0xd7, 0x91, }, 5, 0, "", "",
  "0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%rax,%rcx,8)",},
  {{0x41, 0x0f, 0xc7, 0x9c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
  "41 0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%r8,%rcx,8)",},
- {{0x66, 0x0f, 0xae, 0xf8, }, 4, 0, "", "",
- "66 0f ae f8          \tpcommit ",},
index 76e0ec379c8bb357ea886242ae33e244e8bed0bb,033b8a6fdab951261ef5c2eb904c32371e373b2f..979487dae8d4e0a28120561820c567735133035d
@@@ -19,2246 -19,457 +19,2246 @@@ int main(void
        /* Following line is a marker for the awk script - do not change */
        asm volatile("rdtsc"); /* Start here */
  
 +      /* Test fix for vcvtph2ps in x86-opcode-map.txt */
 +
 +      asm volatile("vcvtph2ps %xmm3,%ymm5");
 +
  #ifdef __x86_64__
  
 -      /* bndmk m64, bnd */
 +      /* AVX-512: Instructions with the same op codes as Mask Instructions  */
  
 -      asm volatile("bndmk (%rax), %bnd0");
 -      asm volatile("bndmk (%r8), %bnd0");
 -      asm volatile("bndmk (0x12345678), %bnd0");
 -      asm volatile("bndmk (%rax), %bnd3");
 -      asm volatile("bndmk (%rcx,%rax,1), %bnd0");
 -      asm volatile("bndmk 0x12345678(,%rax,1), %bnd0");
 -      asm volatile("bndmk (%rax,%rcx,1), %bnd0");
 -      asm volatile("bndmk (%rax,%rcx,8), %bnd0");
 -      asm volatile("bndmk 0x12(%rax), %bnd0");
 -      asm volatile("bndmk 0x12(%rbp), %bnd0");
 -      asm volatile("bndmk 0x12(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndmk 0x12(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndmk 0x12(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndmk 0x12(%rax,%rcx,8), %bnd0");
 -      asm volatile("bndmk 0x12345678(%rax), %bnd0");
 -      asm volatile("bndmk 0x12345678(%rbp), %bnd0");
 -      asm volatile("bndmk 0x12345678(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndmk 0x12345678(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndmk 0x12345678(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndmk 0x12345678(%rax,%rcx,8), %bnd0");
 +      asm volatile("cmovno %rax,%rbx");
 +      asm volatile("cmovno 0x12345678(%rax),%rcx");
 +      asm volatile("cmovno 0x12345678(%rax),%cx");
  
 -      /* bndcl r/m64, bnd */
 +      asm volatile("cmove  %rax,%rbx");
 +      asm volatile("cmove 0x12345678(%rax),%rcx");
 +      asm volatile("cmove 0x12345678(%rax),%cx");
  
 -      asm volatile("bndcl (%rax), %bnd0");
 -      asm volatile("bndcl (%r8), %bnd0");
 -      asm volatile("bndcl (0x12345678), %bnd0");
 -      asm volatile("bndcl (%rax), %bnd3");
 -      asm volatile("bndcl (%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcl 0x12345678(,%rax,1), %bnd0");
 -      asm volatile("bndcl (%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcl (%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcl 0x12(%rax), %bnd0");
 -      asm volatile("bndcl 0x12(%rbp), %bnd0");
 -      asm volatile("bndcl 0x12(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcl 0x12(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndcl 0x12(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcl 0x12(%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcl 0x12345678(%rax), %bnd0");
 -      asm volatile("bndcl 0x12345678(%rbp), %bnd0");
 -      asm volatile("bndcl 0x12345678(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcl 0x12345678(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndcl 0x12345678(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcl 0x12345678(%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcl %rax, %bnd0");
 +      asm volatile("seto    0x12345678(%rax)");
 +      asm volatile("setno   0x12345678(%rax)");
 +      asm volatile("setb    0x12345678(%rax)");
 +      asm volatile("setc    0x12345678(%rax)");
 +      asm volatile("setnae  0x12345678(%rax)");
 +      asm volatile("setae   0x12345678(%rax)");
 +      asm volatile("setnb   0x12345678(%rax)");
 +      asm volatile("setnc   0x12345678(%rax)");
 +      asm volatile("sets    0x12345678(%rax)");
 +      asm volatile("setns   0x12345678(%rax)");
  
 -      /* bndcu r/m64, bnd */
 +      /* AVX-512: Mask Instructions */
  
 -      asm volatile("bndcu (%rax), %bnd0");
 -      asm volatile("bndcu (%r8), %bnd0");
 -      asm volatile("bndcu (0x12345678), %bnd0");
 -      asm volatile("bndcu (%rax), %bnd3");
 -      asm volatile("bndcu (%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcu 0x12345678(,%rax,1), %bnd0");
 -      asm volatile("bndcu (%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcu (%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcu 0x12(%rax), %bnd0");
 -      asm volatile("bndcu 0x12(%rbp), %bnd0");
 -      asm volatile("bndcu 0x12(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcu 0x12(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndcu 0x12(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcu 0x12(%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcu 0x12345678(%rax), %bnd0");
 -      asm volatile("bndcu 0x12345678(%rbp), %bnd0");
 -      asm volatile("bndcu 0x12345678(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcu 0x12345678(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndcu 0x12345678(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcu 0x12345678(%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcu %rax, %bnd0");
 +      asm volatile("kandw  %k7,%k6,%k5");
 +      asm volatile("kandq  %k7,%k6,%k5");
 +      asm volatile("kandb  %k7,%k6,%k5");
 +      asm volatile("kandd  %k7,%k6,%k5");
  
 -      /* bndcn r/m64, bnd */
 +      asm volatile("kandnw  %k7,%k6,%k5");
 +      asm volatile("kandnq  %k7,%k6,%k5");
 +      asm volatile("kandnb  %k7,%k6,%k5");
 +      asm volatile("kandnd  %k7,%k6,%k5");
  
 -      asm volatile("bndcn (%rax), %bnd0");
 -      asm volatile("bndcn (%r8), %bnd0");
 -      asm volatile("bndcn (0x12345678), %bnd0");
 -      asm volatile("bndcn (%rax), %bnd3");
 -      asm volatile("bndcn (%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcn 0x12345678(,%rax,1), %bnd0");
 -      asm volatile("bndcn (%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcn (%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcn 0x12(%rax), %bnd0");
 -      asm volatile("bndcn 0x12(%rbp), %bnd0");
 -      asm volatile("bndcn 0x12(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcn 0x12(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndcn 0x12(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcn 0x12(%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcn 0x12345678(%rax), %bnd0");
 -      asm volatile("bndcn 0x12345678(%rbp), %bnd0");
 -      asm volatile("bndcn 0x12345678(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndcn 0x12345678(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndcn 0x12345678(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndcn 0x12345678(%rax,%rcx,8), %bnd0");
 -      asm volatile("bndcn %rax, %bnd0");
 +      asm volatile("knotw  %k7,%k6");
 +      asm volatile("knotq  %k7,%k6");
 +      asm volatile("knotb  %k7,%k6");
 +      asm volatile("knotd  %k7,%k6");
  
 -      /* bndmov m128, bnd */
 +      asm volatile("korw  %k7,%k6,%k5");
 +      asm volatile("korq  %k7,%k6,%k5");
 +      asm volatile("korb  %k7,%k6,%k5");
 +      asm volatile("kord  %k7,%k6,%k5");
  
 -      asm volatile("bndmov (%rax), %bnd0");
 -      asm volatile("bndmov (%r8), %bnd0");
 -      asm volatile("bndmov (0x12345678), %bnd0");
 -      asm volatile("bndmov (%rax), %bnd3");
 -      asm volatile("bndmov (%rcx,%rax,1), %bnd0");
 -      asm volatile("bndmov 0x12345678(,%rax,1), %bnd0");
 -      asm volatile("bndmov (%rax,%rcx,1), %bnd0");
 -      asm volatile("bndmov (%rax,%rcx,8), %bnd0");
 -      asm volatile("bndmov 0x12(%rax), %bnd0");
 -      asm volatile("bndmov 0x12(%rbp), %bnd0");
 -      asm volatile("bndmov 0x12(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndmov 0x12(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndmov 0x12(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndmov 0x12(%rax,%rcx,8), %bnd0");
 -      asm volatile("bndmov 0x12345678(%rax), %bnd0");
 -      asm volatile("bndmov 0x12345678(%rbp), %bnd0");
 -      asm volatile("bndmov 0x12345678(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndmov 0x12345678(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndmov 0x12345678(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndmov 0x12345678(%rax,%rcx,8), %bnd0");
 +      asm volatile("kxnorw  %k7,%k6,%k5");
 +      asm volatile("kxnorq  %k7,%k6,%k5");
 +      asm volatile("kxnorb  %k7,%k6,%k5");
 +      asm volatile("kxnord  %k7,%k6,%k5");
  
 -      /* bndmov bnd, m128 */
 +      asm volatile("kxorw  %k7,%k6,%k5");
 +      asm volatile("kxorq  %k7,%k6,%k5");
 +      asm volatile("kxorb  %k7,%k6,%k5");
 +      asm volatile("kxord  %k7,%k6,%k5");
  
 -      asm volatile("bndmov %bnd0, (%rax)");
 -      asm volatile("bndmov %bnd0, (%r8)");
 -      asm volatile("bndmov %bnd0, (0x12345678)");
 -      asm volatile("bndmov %bnd3, (%rax)");
 -      asm volatile("bndmov %bnd0, (%rcx,%rax,1)");
 -      asm volatile("bndmov %bnd0, 0x12345678(,%rax,1)");
 -      asm volatile("bndmov %bnd0, (%rax,%rcx,1)");
 -      asm volatile("bndmov %bnd0, (%rax,%rcx,8)");
 -      asm volatile("bndmov %bnd0, 0x12(%rax)");
 -      asm volatile("bndmov %bnd0, 0x12(%rbp)");
 -      asm volatile("bndmov %bnd0, 0x12(%rcx,%rax,1)");
 -      asm volatile("bndmov %bnd0, 0x12(%rbp,%rax,1)");
 -      asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,1)");
 -      asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,8)");
 -      asm volatile("bndmov %bnd0, 0x12345678(%rax)");
 -      asm volatile("bndmov %bnd0, 0x12345678(%rbp)");
 -      asm volatile("bndmov %bnd0, 0x12345678(%rcx,%rax,1)");
 -      asm volatile("bndmov %bnd0, 0x12345678(%rbp,%rax,1)");
 -      asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,1)");
 -      asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,8)");
 +      asm volatile("kaddw  %k7,%k6,%k5");
 +      asm volatile("kaddq  %k7,%k6,%k5");
 +      asm volatile("kaddb  %k7,%k6,%k5");
 +      asm volatile("kaddd  %k7,%k6,%k5");
  
 -      /* bndmov bnd2, bnd1 */
 +      asm volatile("kunpckbw %k7,%k6,%k5");
 +      asm volatile("kunpckwd %k7,%k6,%k5");
 +      asm volatile("kunpckdq %k7,%k6,%k5");
  
 -      asm volatile("bndmov %bnd0, %bnd1");
 -      asm volatile("bndmov %bnd1, %bnd0");
 +      asm volatile("kmovw  %k6,%k5");
 +      asm volatile("kmovw  (%rcx),%k5");
 +      asm volatile("kmovw  0x123(%rax,%r14,8),%k5");
 +      asm volatile("kmovw  %k5,(%rcx)");
 +      asm volatile("kmovw  %k5,0x123(%rax,%r14,8)");
 +      asm volatile("kmovw  %eax,%k5");
 +      asm volatile("kmovw  %ebp,%k5");
 +      asm volatile("kmovw  %r13d,%k5");
 +      asm volatile("kmovw  %k5,%eax");
 +      asm volatile("kmovw  %k5,%ebp");
 +      asm volatile("kmovw  %k5,%r13d");
  
 -      /* bndldx mib, bnd */
 +      asm volatile("kmovq  %k6,%k5");
 +      asm volatile("kmovq  (%rcx),%k5");
 +      asm volatile("kmovq  0x123(%rax,%r14,8),%k5");
 +      asm volatile("kmovq  %k5,(%rcx)");
 +      asm volatile("kmovq  %k5,0x123(%rax,%r14,8)");
 +      asm volatile("kmovq  %rax,%k5");
 +      asm volatile("kmovq  %rbp,%k5");
 +      asm volatile("kmovq  %r13,%k5");
 +      asm volatile("kmovq  %k5,%rax");
 +      asm volatile("kmovq  %k5,%rbp");
 +      asm volatile("kmovq  %k5,%r13");
  
 -      asm volatile("bndldx (%rax), %bnd0");
 -      asm volatile("bndldx (%r8), %bnd0");
 -      asm volatile("bndldx (0x12345678), %bnd0");
 -      asm volatile("bndldx (%rax), %bnd3");
 -      asm volatile("bndldx (%rcx,%rax,1), %bnd0");
 -      asm volatile("bndldx 0x12345678(,%rax,1), %bnd0");
 -      asm volatile("bndldx (%rax,%rcx,1), %bnd0");
 -      asm volatile("bndldx 0x12(%rax), %bnd0");
 -      asm volatile("bndldx 0x12(%rbp), %bnd0");
 -      asm volatile("bndldx 0x12(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndldx 0x12(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndldx 0x12(%rax,%rcx,1), %bnd0");
 -      asm volatile("bndldx 0x12345678(%rax), %bnd0");
 -      asm volatile("bndldx 0x12345678(%rbp), %bnd0");
 -      asm volatile("bndldx 0x12345678(%rcx,%rax,1), %bnd0");
 -      asm volatile("bndldx 0x12345678(%rbp,%rax,1), %bnd0");
 -      asm volatile("bndldx 0x12345678(%rax,%rcx,1), %bnd0");
 +      asm volatile("kmovb  %k6,%k5");
 +      asm volatile("kmovb  (%rcx),%k5");
 +      asm volatile("kmovb  0x123(%rax,%r14,8),%k5");
 +      asm volatile("kmovb  %k5,(%rcx)");
 +      asm volatile("kmovb  %k5,0x123(%rax,%r14,8)");
 +      asm volatile("kmovb  %eax,%k5");
 +      asm volatile("kmovb  %ebp,%k5");
 +      asm volatile("kmovb  %r13d,%k5");
 +      asm volatile("kmovb  %k5,%eax");
 +      asm volatile("kmovb  %k5,%ebp");
 +      asm volatile("kmovb  %k5,%r13d");
 +
 +      asm volatile("kmovd  %k6,%k5");
 +      asm volatile("kmovd  (%rcx),%k5");
 +      asm volatile("kmovd  0x123(%rax,%r14,8),%k5");
 +      asm volatile("kmovd  %k5,(%rcx)");
 +      asm volatile("kmovd  %k5,0x123(%rax,%r14,8)");
 +      asm volatile("kmovd  %eax,%k5");
 +      asm volatile("kmovd  %ebp,%k5");
 +      asm volatile("kmovd  %r13d,%k5");
 +      asm volatile("kmovd  %k5,%eax");
 +      asm volatile("kmovd  %k5,%ebp");
 +      asm volatile("kmovd %k5,%r13d");
 +
 +      asm volatile("kortestw %k6,%k5");
 +      asm volatile("kortestq %k6,%k5");
 +      asm volatile("kortestb %k6,%k5");
 +      asm volatile("kortestd %k6,%k5");
 +
 +      asm volatile("ktestw %k6,%k5");
 +      asm volatile("ktestq %k6,%k5");
 +      asm volatile("ktestb %k6,%k5");
 +      asm volatile("ktestd %k6,%k5");
 +
 +      asm volatile("kshiftrw $0x12,%k6,%k5");
 +      asm volatile("kshiftrq $0x5b,%k6,%k5");
 +      asm volatile("kshiftlw $0x12,%k6,%k5");
 +      asm volatile("kshiftlq $0x5b,%k6,%k5");
 +
 +      /* AVX-512: Op code 0f 5b */
 +      asm volatile("vcvtdq2ps %xmm5,%xmm6");
 +      asm volatile("vcvtqq2ps %zmm29,%ymm6{%k7}");
 +      asm volatile("vcvtps2dq %xmm5,%xmm6");
 +      asm volatile("vcvttps2dq %xmm5,%xmm6");
 +
 +      /* AVX-512: Op code 0f 6f */
 +
 +      asm volatile("movq   %mm0,%mm4");
 +      asm volatile("vmovdqa %ymm4,%ymm6");
 +      asm volatile("vmovdqa32 %zmm25,%zmm26");
 +      asm volatile("vmovdqa64 %zmm25,%zmm26");
 +      asm volatile("vmovdqu %ymm4,%ymm6");
 +      asm volatile("vmovdqu32 %zmm29,%zmm30");
 +      asm volatile("vmovdqu64 %zmm25,%zmm26");
 +      asm volatile("vmovdqu8 %zmm29,%zmm30");
 +      asm volatile("vmovdqu16 %zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 78 */
 +
 +      asm volatile("vmread %rax,%rbx");
 +      asm volatile("vcvttps2udq %zmm25,%zmm26");
 +      asm volatile("vcvttpd2udq %zmm29,%ymm6{%k7}");
 +      asm volatile("vcvttsd2usi %xmm6,%rax");
 +      asm volatile("vcvttss2usi %xmm6,%rax");
 +      asm volatile("vcvttps2uqq %ymm5,%zmm26{%k7}");
 +      asm volatile("vcvttpd2uqq %zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 79 */
 +
 +      asm volatile("vmwrite %rax,%rbx");
 +      asm volatile("vcvtps2udq %zmm25,%zmm26");
 +      asm volatile("vcvtpd2udq %zmm29,%ymm6{%k7}");
 +      asm volatile("vcvtsd2usi %xmm6,%rax");
 +      asm volatile("vcvtss2usi %xmm6,%rax");
 +      asm volatile("vcvtps2uqq %ymm5,%zmm26{%k7}");
 +      asm volatile("vcvtpd2uqq %zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 7a */
 +
 +      asm volatile("vcvtudq2pd %ymm5,%zmm29{%k7}");
 +      asm volatile("vcvtuqq2pd %zmm25,%zmm26");
 +      asm volatile("vcvtudq2ps %zmm29,%zmm30");
 +      asm volatile("vcvtuqq2ps %zmm25,%ymm26{%k7}");
 +      asm volatile("vcvttps2qq %ymm25,%zmm26{%k7}");
 +      asm volatile("vcvttpd2qq %zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 7b */
 +
 +      asm volatile("vcvtusi2sd %eax,%xmm5,%xmm6");
 +      asm volatile("vcvtusi2ss %eax,%xmm5,%xmm6");
 +      asm volatile("vcvtps2qq %ymm5,%zmm26{%k7}");
 +      asm volatile("vcvtpd2qq %zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 7f */
 +
 +      asm volatile("movq.s  %mm0,%mm4");
 +      asm volatile("vmovdqa %ymm8,%ymm6");
 +      asm volatile("vmovdqa32.s %zmm25,%zmm26");
 +      asm volatile("vmovdqa64.s %zmm25,%zmm26");
 +      asm volatile("vmovdqu %ymm8,%ymm6");
 +      asm volatile("vmovdqu32.s %zmm25,%zmm26");
 +      asm volatile("vmovdqu64.s %zmm25,%zmm26");
 +      asm volatile("vmovdqu8.s %zmm30,(%rcx)");
 +      asm volatile("vmovdqu16.s %zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f db */
 +
 +      asm volatile("pand  %mm1,%mm2");
 +      asm volatile("pand  %xmm1,%xmm2");
 +      asm volatile("vpand  %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpandd %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpandq %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f df */
 +
 +      asm volatile("pandn  %mm1,%mm2");
 +      asm volatile("pandn  %xmm1,%xmm2");
 +      asm volatile("vpandn %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpandnd %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpandnq %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f e6 */
 +
 +      asm volatile("vcvttpd2dq %xmm1,%xmm2");
 +      asm volatile("vcvtdq2pd %xmm5,%xmm6");
 +      asm volatile("vcvtdq2pd %ymm5,%zmm26{%k7}");
 +      asm volatile("vcvtqq2pd %zmm25,%zmm26");
 +      asm volatile("vcvtpd2dq %xmm1,%xmm2");
 +
 +      /* AVX-512: Op code 0f eb */
 +
 +      asm volatile("por   %mm4,%mm6");
 +      asm volatile("vpor   %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpord  %zmm24,%zmm25,%zmm26");
 +      asm volatile("vporq  %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f ef */
 +
 +      asm volatile("pxor   %mm4,%mm6");
 +      asm volatile("vpxor  %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpxord %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpxorq %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 10 */
 +
 +      asm volatile("pblendvb %xmm1,%xmm0");
 +      asm volatile("vpsrlvw %zmm27,%zmm28,%zmm29");
 +      asm volatile("vpmovuswb %zmm28,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 11 */
 +
 +      asm volatile("vpmovusdb %zmm28,%xmm6{%k7}");
 +      asm volatile("vpsravw %zmm27,%zmm28,%zmm29");
 +
 +      /* AVX-512: Op code 0f 38 12 */
 +
 +      asm volatile("vpmovusqb %zmm27,%xmm6{%k7}");
 +      asm volatile("vpsllvw %zmm27,%zmm28,%zmm29");
 +
 +      /* AVX-512: Op code 0f 38 13 */
 +
 +      asm volatile("vcvtph2ps %xmm3,%ymm5");
 +      asm volatile("vcvtph2ps %ymm5,%zmm27{%k7}");
 +      asm volatile("vpmovusdw %zmm27,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 14 */
 +
 +      asm volatile("blendvps %xmm1,%xmm0");
 +      asm volatile("vpmovusqw %zmm27,%xmm6{%k7}");
 +      asm volatile("vprorvd %zmm27,%zmm28,%zmm29");
 +      asm volatile("vprorvq %zmm27,%zmm28,%zmm29");
 +
 +      /* AVX-512: Op code 0f 38 15 */
 +
 +      asm volatile("blendvpd %xmm1,%xmm0");
 +      asm volatile("vpmovusqd %zmm27,%ymm6{%k7}");
 +      asm volatile("vprolvd %zmm27,%zmm28,%zmm29");
 +      asm volatile("vprolvq %zmm27,%zmm28,%zmm29");
 +
 +      /* AVX-512: Op code 0f 38 16 */
 +
 +      asm volatile("vpermps %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpermps %ymm24,%ymm26,%ymm22{%k7}");
 +      asm volatile("vpermpd %ymm24,%ymm26,%ymm22{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 19 */
 +
 +      asm volatile("vbroadcastsd %xmm4,%ymm6");
 +      asm volatile("vbroadcastf32x2 %xmm27,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 1a */
 +
 +      asm volatile("vbroadcastf128 (%rcx),%ymm4");
 +      asm volatile("vbroadcastf32x4 (%rcx),%zmm26");
 +      asm volatile("vbroadcastf64x2 (%rcx),%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 1b */
 +
 +      asm volatile("vbroadcastf32x8 (%rcx),%zmm27");
 +      asm volatile("vbroadcastf64x4 (%rcx),%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 1f */
 +
 +      asm volatile("vpabsq %zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 20 */
 +
 +      asm volatile("vpmovsxbw %xmm4,%xmm5");
 +      asm volatile("vpmovswb %zmm27,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 21 */
 +
 +      asm volatile("vpmovsxbd %xmm4,%ymm6");
 +      asm volatile("vpmovsdb %zmm27,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 22 */
 +
 +      asm volatile("vpmovsxbq %xmm4,%ymm4");
 +      asm volatile("vpmovsqb %zmm27,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 23 */
 +
 +      asm volatile("vpmovsxwd %xmm4,%ymm4");
 +      asm volatile("vpmovsdw %zmm27,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 24 */
 +
 +      asm volatile("vpmovsxwq %xmm4,%ymm6");
 +      asm volatile("vpmovsqw %zmm27,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 25 */
 +
 +      asm volatile("vpmovsxdq %xmm4,%ymm4");
 +      asm volatile("vpmovsqd %zmm27,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 26 */
 +
 +      asm volatile("vptestmb %zmm27,%zmm28,%k5");
 +      asm volatile("vptestmw %zmm27,%zmm28,%k5");
 +      asm volatile("vptestnmb %zmm26,%zmm27,%k5");
 +      asm volatile("vptestnmw %zmm26,%zmm27,%k5");
 +
 +      /* AVX-512: Op code 0f 38 27 */
 +
 +      asm volatile("vptestmd %zmm27,%zmm28,%k5");
 +      asm volatile("vptestmq %zmm27,%zmm28,%k5");
 +      asm volatile("vptestnmd %zmm26,%zmm27,%k5");
 +      asm volatile("vptestnmq %zmm26,%zmm27,%k5");
 +
 +      /* AVX-512: Op code 0f 38 28 */
 +
 +      asm volatile("vpmuldq %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmovm2b %k5,%zmm28");
 +      asm volatile("vpmovm2w %k5,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 29 */
 +
 +      asm volatile("vpcmpeqq %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmovb2m %zmm28,%k5");
 +      asm volatile("vpmovw2m %zmm28,%k5");
 +
 +      /* AVX-512: Op code 0f 38 2a */
 +
 +      asm volatile("vmovntdqa (%rcx),%ymm4");
 +      asm volatile("vpbroadcastmb2q %k6,%zmm30");
 +
 +      /* AVX-512: Op code 0f 38 2c */
 +
 +      asm volatile("vmaskmovps (%rcx),%ymm4,%ymm6");
 +      asm volatile("vscalefps %zmm24,%zmm25,%zmm26");
 +      asm volatile("vscalefpd %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 2d */
 +
 +      asm volatile("vmaskmovpd (%rcx),%ymm4,%ymm6");
 +      asm volatile("vscalefss %xmm24,%xmm25,%xmm26{%k7}");
 +      asm volatile("vscalefsd %xmm24,%xmm25,%xmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 30 */
 +
 +      asm volatile("vpmovzxbw %xmm4,%ymm4");
 +      asm volatile("vpmovwb %zmm27,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 31 */
 +
 +      asm volatile("vpmovzxbd %xmm4,%ymm6");
 +      asm volatile("vpmovdb %zmm27,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 32 */
 +
 +      asm volatile("vpmovzxbq %xmm4,%ymm4");
 +      asm volatile("vpmovqb %zmm27,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 33 */
 +
 +      asm volatile("vpmovzxwd %xmm4,%ymm4");
 +      asm volatile("vpmovdw %zmm27,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 34 */
 +
 +      asm volatile("vpmovzxwq %xmm4,%ymm6");
 +      asm volatile("vpmovqw %zmm27,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 35 */
 +
 +      asm volatile("vpmovzxdq %xmm4,%ymm4");
 +      asm volatile("vpmovqd %zmm27,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 38 */
 +
 +      asm volatile("vpermd %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpermd %ymm24,%ymm26,%ymm22{%k7}");
 +      asm volatile("vpermq %ymm24,%ymm26,%ymm22{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 38 */
 +
 +      asm volatile("vpminsb %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmovm2d %k5,%zmm28");
 +      asm volatile("vpmovm2q %k5,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 39 */
 +
 +      asm volatile("vpminsd %xmm1,%xmm2,%xmm3");
 +      asm volatile("vpminsd %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpminsq %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpmovd2m %zmm28,%k5");
 +      asm volatile("vpmovq2m %zmm28,%k5");
 +
 +      /* AVX-512: Op code 0f 38 3a */
 +
 +      asm volatile("vpminuw %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpbroadcastmw2d %k6,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 3b */
 +
 +      asm volatile("vpminud %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpminud %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpminuq %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 3d */
 +
 +      asm volatile("vpmaxsd %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmaxsd %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpmaxsq %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 3f */
 +
 +      asm volatile("vpmaxud %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmaxud %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpmaxuq %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 42 */
 +
 +      asm volatile("vpmulld %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmulld %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpmullq %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 42 */
 +
 +      asm volatile("vgetexpps %zmm25,%zmm26");
 +      asm volatile("vgetexppd %zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 43 */
 +
 +      asm volatile("vgetexpss %xmm24,%xmm25,%xmm26{%k7}");
 +      asm volatile("vgetexpsd %xmm28,%xmm29,%xmm30{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 44 */
 +
 +      asm volatile("vplzcntd %zmm27,%zmm28");
 +      asm volatile("vplzcntq %zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 46 */
 +
 +      asm volatile("vpsravd %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpsravd %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpsravq %zmm24,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 4c */
 +
 +      asm volatile("vrcp14ps %zmm25,%zmm26");
 +      asm volatile("vrcp14pd %zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 4d */
 +
 +      asm volatile("vrcp14ss %xmm24,%xmm25,%xmm26{%k7}");
 +      asm volatile("vrcp14sd %xmm24,%xmm25,%xmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 4e */
 +
 +      asm volatile("vrsqrt14ps %zmm25,%zmm26");
 +      asm volatile("vrsqrt14pd %zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 4f */
 +
 +      asm volatile("vrsqrt14ss %xmm24,%xmm25,%xmm26{%k7}");
 +      asm volatile("vrsqrt14sd %xmm24,%xmm25,%xmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 59 */
 +
 +      asm volatile("vpbroadcastq %xmm4,%xmm6");
 +      asm volatile("vbroadcasti32x2 %xmm27,%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 5a */
 +
 +      asm volatile("vbroadcasti128 (%rcx),%ymm4");
 +      asm volatile("vbroadcasti32x4 (%rcx),%zmm26");
 +      asm volatile("vbroadcasti64x2 (%rcx),%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 5b */
 +
 +      asm volatile("vbroadcasti32x8 (%rcx),%zmm28");
 +      asm volatile("vbroadcasti64x4 (%rcx),%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 64 */
 +
 +      asm volatile("vpblendmd %zmm26,%zmm27,%zmm28");
 +      asm volatile("vpblendmq %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 65 */
 +
 +      asm volatile("vblendmps %zmm24,%zmm25,%zmm26");
 +      asm volatile("vblendmpd %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 66 */
 +
 +      asm volatile("vpblendmb %zmm26,%zmm27,%zmm28");
 +      asm volatile("vpblendmw %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 75 */
 +
 +      asm volatile("vpermi2b %zmm24,%zmm25,%zmm26");
 +      asm volatile("vpermi2w %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 76 */
 +
 +      asm volatile("vpermi2d %zmm26,%zmm27,%zmm28");
 +      asm volatile("vpermi2q %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 77 */
 +
 +      asm volatile("vpermi2ps %zmm26,%zmm27,%zmm28");
 +      asm volatile("vpermi2pd %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 7a */
 +
 +      asm volatile("vpbroadcastb %eax,%xmm30");
 +
 +      /* AVX-512: Op code 0f 38 7b */
 +
 +      asm volatile("vpbroadcastw %eax,%xmm30");
 +
 +      /* AVX-512: Op code 0f 38 7c */
 +
 +      asm volatile("vpbroadcastd %eax,%xmm30");
 +      asm volatile("vpbroadcastq %rax,%zmm30");
 +
 +      /* AVX-512: Op code 0f 38 7d */
 +
 +      asm volatile("vpermt2b %zmm26,%zmm27,%zmm28");
 +      asm volatile("vpermt2w %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 7e */
 +
 +      asm volatile("vpermt2d %zmm26,%zmm27,%zmm28");
 +      asm volatile("vpermt2q %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 7f */
 +
 +      asm volatile("vpermt2ps %zmm26,%zmm27,%zmm28");
 +      asm volatile("vpermt2pd %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 83 */
 +
 +      asm volatile("vpmultishiftqb %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 88 */
 +
 +      asm volatile("vexpandps (%rcx),%zmm26");
 +      asm volatile("vexpandpd (%rcx),%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 89 */
 +
 +      asm volatile("vpexpandd (%rcx),%zmm28");
 +      asm volatile("vpexpandq (%rcx),%zmm26");
 +
 +      /* AVX-512: Op code 0f 38 8a */
 +
 +      asm volatile("vcompressps %zmm28,(%rcx)");
 +      asm volatile("vcompresspd %zmm28,(%rcx)");
 +
 +      /* AVX-512: Op code 0f 38 8b */
 +
 +      asm volatile("vpcompressd %zmm28,(%rcx)");
 +      asm volatile("vpcompressq %zmm26,(%rcx)");
 +
 +      /* AVX-512: Op code 0f 38 8d */
 +
 +      asm volatile("vpermb %zmm26,%zmm27,%zmm28");
 +      asm volatile("vpermw %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 90 */
 +
 +      asm volatile("vpgatherdd %xmm2,0x02(%rbp,%xmm7,2),%xmm1");
 +      asm volatile("vpgatherdq %xmm2,0x04(%rbp,%xmm7,2),%xmm1");
 +      asm volatile("vpgatherdd 0x7b(%rbp,%zmm27,8),%zmm26{%k1}");
 +      asm volatile("vpgatherdq 0x7b(%rbp,%ymm27,8),%zmm26{%k1}");
 +
 +      /* AVX-512: Op code 0f 38 91 */
 +
 +      asm volatile("vpgatherqd %xmm2,0x02(%rbp,%xmm7,2),%xmm1");
 +      asm volatile("vpgatherqq %xmm2,0x02(%rbp,%xmm7,2),%xmm1");
 +      asm volatile("vpgatherqd 0x7b(%rbp,%zmm27,8),%ymm26{%k1}");
 +      asm volatile("vpgatherqq 0x7b(%rbp,%zmm27,8),%zmm26{%k1}");
 +
 +      /* AVX-512: Op code 0f 38 a0 */
 +
 +      asm volatile("vpscatterdd %zmm28,0x7b(%rbp,%zmm29,8){%k1}");
 +      asm volatile("vpscatterdq %zmm26,0x7b(%rbp,%ymm27,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 a1 */
 +
 +      asm volatile("vpscatterqd %ymm6,0x7b(%rbp,%zmm29,8){%k1}");
 +      asm volatile("vpscatterqq %ymm6,0x7b(%rbp,%ymm27,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 a2 */
 +
 +      asm volatile("vscatterdps %zmm28,0x7b(%rbp,%zmm29,8){%k1}");
 +      asm volatile("vscatterdpd %zmm28,0x7b(%rbp,%ymm27,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 a3 */
 +
 +      asm volatile("vscatterqps %ymm6,0x7b(%rbp,%zmm29,8){%k1}");
 +      asm volatile("vscatterqpd %zmm28,0x7b(%rbp,%zmm29,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 b4 */
 +
 +      asm volatile("vpmadd52luq %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 b5 */
 +
 +      asm volatile("vpmadd52huq %zmm26,%zmm27,%zmm28");
 +
 +      /* AVX-512: Op code 0f 38 c4 */
 +
 +      asm volatile("vpconflictd %zmm26,%zmm27");
 +      asm volatile("vpconflictq %zmm26,%zmm27");
 +
 +      /* AVX-512: Op code 0f 38 c8 */
 +
 +      asm volatile("vexp2ps %zmm29,%zmm30");
 +      asm volatile("vexp2pd %zmm26,%zmm27");
 +
 +      /* AVX-512: Op code 0f 38 ca */
 +
 +      asm volatile("vrcp28ps %zmm29,%zmm30");
 +      asm volatile("vrcp28pd %zmm26,%zmm27");
 +
 +      /* AVX-512: Op code 0f 38 cb */
 +
 +      asm volatile("vrcp28ss %xmm28,%xmm29,%xmm30{%k7}");
 +      asm volatile("vrcp28sd %xmm25,%xmm26,%xmm27{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 cc */
 +
 +      asm volatile("vrsqrt28ps %zmm29,%zmm30");
 +      asm volatile("vrsqrt28pd %zmm26,%zmm27");
 +
 +      /* AVX-512: Op code 0f 38 cd */
 +
 +      asm volatile("vrsqrt28ss %xmm28,%xmm29,%xmm30{%k7}");
 +      asm volatile("vrsqrt28sd %xmm25,%xmm26,%xmm27{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 03 */
 +
 +      asm volatile("valignd $0x12,%zmm28,%zmm29,%zmm30");
 +      asm volatile("valignq $0x12,%zmm25,%zmm26,%zmm27");
 +
 +      /* AVX-512: Op code 0f 3a 08 */
 +
 +      asm volatile("vroundps $0x5,%ymm6,%ymm2");
 +      asm volatile("vrndscaleps $0x12,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 3a 09 */
 +
 +      asm volatile("vroundpd $0x5,%ymm6,%ymm2");
 +      asm volatile("vrndscalepd $0x12,%zmm25,%zmm26");
 +
 +      /* AVX-512: Op code 0f 3a 1a */
 +
 +      asm volatile("vroundss $0x5,%xmm4,%xmm6,%xmm2");
 +      asm volatile("vrndscaless $0x12,%xmm24,%xmm25,%xmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 0b */
 +
 +      asm volatile("vroundsd $0x5,%xmm4,%xmm6,%xmm2");
 +      asm volatile("vrndscalesd $0x12,%xmm24,%xmm25,%xmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 18 */
 +
 +      asm volatile("vinsertf128 $0x5,%xmm4,%ymm4,%ymm6");
 +      asm volatile("vinsertf32x4 $0x12,%xmm24,%zmm25,%zmm26{%k7}");
 +      asm volatile("vinsertf64x2 $0x12,%xmm24,%zmm25,%zmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 19 */
 +
 +      asm volatile("vextractf128 $0x5,%ymm4,%xmm4");
 +      asm volatile("vextractf32x4 $0x12,%zmm25,%xmm26{%k7}");
 +      asm volatile("vextractf64x2 $0x12,%zmm25,%xmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 1a */
 +
 +      asm volatile("vinsertf32x8 $0x12,%ymm25,%zmm26,%zmm27{%k7}");
 +      asm volatile("vinsertf64x4 $0x12,%ymm28,%zmm29,%zmm30{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 1b */
 +
 +      asm volatile("vextractf32x8 $0x12,%zmm29,%ymm30{%k7}");
 +      asm volatile("vextractf64x4 $0x12,%zmm26,%ymm27{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 1e */
 +
 +      asm volatile("vpcmpud $0x12,%zmm29,%zmm30,%k5");
 +      asm volatile("vpcmpuq $0x12,%zmm26,%zmm27,%k5");
 +
 +      /* AVX-512: Op code 0f 3a 1f */
 +
 +      asm volatile("vpcmpd $0x12,%zmm29,%zmm30,%k5");
 +      asm volatile("vpcmpq $0x12,%zmm26,%zmm27,%k5");
 +
 +      /* AVX-512: Op code 0f 3a 23 */
 +
 +      asm volatile("vshuff32x4 $0x12,%zmm28,%zmm29,%zmm30");
 +      asm volatile("vshuff64x2 $0x12,%zmm25,%zmm26,%zmm27");
 +
 +      /* AVX-512: Op code 0f 3a 25 */
 +
 +      asm volatile("vpternlogd $0x12,%zmm28,%zmm29,%zmm30");
 +      asm volatile("vpternlogq $0x12,%zmm28,%zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 3a 26 */
 +
 +      asm volatile("vgetmantps $0x12,%zmm26,%zmm27");
 +      asm volatile("vgetmantpd $0x12,%zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 3a 27 */
 +
 +      asm volatile("vgetmantss $0x12,%xmm25,%xmm26,%xmm27{%k7}");
 +      asm volatile("vgetmantsd $0x12,%xmm28,%xmm29,%xmm30{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 38 */
 +
 +      asm volatile("vinserti128 $0x5,%xmm4,%ymm4,%ymm6");
 +      asm volatile("vinserti32x4 $0x12,%xmm24,%zmm25,%zmm26{%k7}");
 +      asm volatile("vinserti64x2 $0x12,%xmm24,%zmm25,%zmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 39 */
 +
 +      asm volatile("vextracti128 $0x5,%ymm4,%xmm6");
 +      asm volatile("vextracti32x4 $0x12,%zmm25,%xmm26{%k7}");
 +      asm volatile("vextracti64x2 $0x12,%zmm25,%xmm26{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 3a */
 +
 +      asm volatile("vinserti32x8 $0x12,%ymm28,%zmm29,%zmm30{%k7}");
 +      asm volatile("vinserti64x4 $0x12,%ymm25,%zmm26,%zmm27{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 3b */
 +
 +      asm volatile("vextracti32x8 $0x12,%zmm29,%ymm30{%k7}");
 +      asm volatile("vextracti64x4 $0x12,%zmm26,%ymm27{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 3e */
 +
 +      asm volatile("vpcmpub $0x12,%zmm29,%zmm30,%k5");
 +      asm volatile("vpcmpuw $0x12,%zmm26,%zmm27,%k5");
 +
 +      /* AVX-512: Op code 0f 3a 3f */
 +
 +      asm volatile("vpcmpb $0x12,%zmm29,%zmm30,%k5");
 +      asm volatile("vpcmpw $0x12,%zmm26,%zmm27,%k5");
 +
 +      /* AVX-512: Op code 0f 3a 43 */
 +
 +      asm volatile("vmpsadbw $0x5,%ymm4,%ymm6,%ymm2");
 +      asm volatile("vdbpsadbw $0x12,%zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 3a 43 */
 +
 +      asm volatile("vshufi32x4 $0x12,%zmm25,%zmm26,%zmm27");
 +      asm volatile("vshufi64x2 $0x12,%zmm28,%zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 3a 50 */
 +
 +      asm volatile("vrangeps $0x12,%zmm25,%zmm26,%zmm27");
 +      asm volatile("vrangepd $0x12,%zmm28,%zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 3a 51 */
 +
 +      asm volatile("vrangess $0x12,%xmm25,%xmm26,%xmm27");
 +      asm volatile("vrangesd $0x12,%xmm28,%xmm29,%xmm30");
 +
 +      /* AVX-512: Op code 0f 3a 54 */
 +
 +      asm volatile("vfixupimmps $0x12,%zmm28,%zmm29,%zmm30");
 +      asm volatile("vfixupimmpd $0x12,%zmm25,%zmm26,%zmm27");
 +
 +      /* AVX-512: Op code 0f 3a 55 */
 +
 +      asm volatile("vfixupimmss $0x12,%xmm28,%xmm29,%xmm30{%k7}");
 +      asm volatile("vfixupimmsd $0x12,%xmm25,%xmm26,%xmm27{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 56 */
 +
 +      asm volatile("vreduceps $0x12,%zmm26,%zmm27");
 +      asm volatile("vreducepd $0x12,%zmm29,%zmm30");
 +
 +      /* AVX-512: Op code 0f 3a 57 */
 +
 +      asm volatile("vreducess $0x12,%xmm25,%xmm26,%xmm27");
 +      asm volatile("vreducesd $0x12,%xmm28,%xmm29,%xmm30");
 +
 +      /* AVX-512: Op code 0f 3a 66 */
 +
 +      asm volatile("vfpclassps $0x12,%zmm27,%k5");
 +      asm volatile("vfpclasspd $0x12,%zmm30,%k5");
 +
 +      /* AVX-512: Op code 0f 3a 67 */
 +
 +      asm volatile("vfpclassss $0x12,%xmm27,%k5");
 +      asm volatile("vfpclasssd $0x12,%xmm30,%k5");
 +
 +      /* AVX-512: Op code 0f 72 (Grp13) */
 +
 +      asm volatile("vprord $0x12,%zmm25,%zmm26");
 +      asm volatile("vprorq $0x12,%zmm25,%zmm26");
 +      asm volatile("vprold $0x12,%zmm29,%zmm30");
 +      asm volatile("vprolq $0x12,%zmm29,%zmm30");
 +      asm volatile("psrad  $0x2,%mm6");
 +      asm volatile("vpsrad $0x5,%ymm6,%ymm2");
 +      asm volatile("vpsrad $0x5,%zmm26,%zmm22");
 +      asm volatile("vpsraq $0x5,%zmm26,%zmm22");
 +
 +      /* AVX-512: Op code 0f 38 c6 (Grp18) */
 +
 +      asm volatile("vgatherpf0dps 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vgatherpf0dpd 0x7b(%r14,%ymm31,8){%k1}");
 +      asm volatile("vgatherpf1dps 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vgatherpf1dpd 0x7b(%r14,%ymm31,8){%k1}");
 +      asm volatile("vscatterpf0dps 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vscatterpf0dpd 0x7b(%r14,%ymm31,8){%k1}");
 +      asm volatile("vscatterpf1dps 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vscatterpf1dpd 0x7b(%r14,%ymm31,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 c7 (Grp19) */
 +
 +      asm volatile("vgatherpf0qps 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vgatherpf0qpd 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vgatherpf1qps 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vgatherpf1qpd 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vscatterpf0qps 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vscatterpf0qpd 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vscatterpf1qps 0x7b(%r14,%zmm31,8){%k1}");
 +      asm volatile("vscatterpf1qpd 0x7b(%r14,%zmm31,8){%k1}");
 +
 +      /* AVX-512: Examples */
 +
 +      asm volatile("vaddpd %zmm28,%zmm29,%zmm30");
 +      asm volatile("vaddpd %zmm28,%zmm29,%zmm30{%k7}");
 +      asm volatile("vaddpd %zmm28,%zmm29,%zmm30{%k7}{z}");
 +      asm volatile("vaddpd {rn-sae},%zmm28,%zmm29,%zmm30");
 +      asm volatile("vaddpd {ru-sae},%zmm28,%zmm29,%zmm30");
 +      asm volatile("vaddpd {rd-sae},%zmm28,%zmm29,%zmm30");
 +      asm volatile("vaddpd {rz-sae},%zmm28,%zmm29,%zmm30");
 +      asm volatile("vaddpd (%rcx),%zmm29,%zmm30");
 +      asm volatile("vaddpd 0x123(%rax,%r14,8),%zmm29,%zmm30");
 +      asm volatile("vaddpd (%rcx){1to8},%zmm29,%zmm30");
 +      asm volatile("vaddpd 0x1fc0(%rdx),%zmm29,%zmm30");
 +      asm volatile("vaddpd 0x3f8(%rdx){1to8},%zmm29,%zmm30");
 +      asm volatile("vcmpeq_uqps 0x1fc(%rdx){1to16},%zmm30,%k5");
 +      asm volatile("vcmpltsd 0x123(%rax,%r14,8),%xmm29,%k5{%k7}");
 +      asm volatile("vcmplesd {sae},%xmm28,%xmm29,%k5{%k7}");
 +      asm volatile("vgetmantss $0x5b,0x123(%rax,%r14,8),%xmm29,%xmm30{%k7}");
 +
 +      /* bndmk m64, bnd */
 +
 +      asm volatile("bndmk (%rax), %bnd0");
 +      asm volatile("bndmk (%r8), %bnd0");
 +      asm volatile("bndmk (0x12345678), %bnd0");
 +      asm volatile("bndmk (%rax), %bnd3");
 +      asm volatile("bndmk (%rcx,%rax,1), %bnd0");
 +      asm volatile("bndmk 0x12345678(,%rax,1), %bnd0");
 +      asm volatile("bndmk (%rax,%rcx,1), %bnd0");
 +      asm volatile("bndmk (%rax,%rcx,8), %bnd0");
 +      asm volatile("bndmk 0x12(%rax), %bnd0");
 +      asm volatile("bndmk 0x12(%rbp), %bnd0");
 +      asm volatile("bndmk 0x12(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndmk 0x12(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndmk 0x12(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndmk 0x12(%rax,%rcx,8), %bnd0");
 +      asm volatile("bndmk 0x12345678(%rax), %bnd0");
 +      asm volatile("bndmk 0x12345678(%rbp), %bnd0");
 +      asm volatile("bndmk 0x12345678(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndmk 0x12345678(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndmk 0x12345678(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndmk 0x12345678(%rax,%rcx,8), %bnd0");
 +
 +      /* bndcl r/m64, bnd */
 +
 +      asm volatile("bndcl (%rax), %bnd0");
 +      asm volatile("bndcl (%r8), %bnd0");
 +      asm volatile("bndcl (0x12345678), %bnd0");
 +      asm volatile("bndcl (%rax), %bnd3");
 +      asm volatile("bndcl (%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcl 0x12345678(,%rax,1), %bnd0");
 +      asm volatile("bndcl (%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcl (%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcl 0x12(%rax), %bnd0");
 +      asm volatile("bndcl 0x12(%rbp), %bnd0");
 +      asm volatile("bndcl 0x12(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcl 0x12(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndcl 0x12(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcl 0x12(%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcl 0x12345678(%rax), %bnd0");
 +      asm volatile("bndcl 0x12345678(%rbp), %bnd0");
 +      asm volatile("bndcl 0x12345678(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcl 0x12345678(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndcl 0x12345678(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcl 0x12345678(%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcl %rax, %bnd0");
 +
 +      /* bndcu r/m64, bnd */
 +
 +      asm volatile("bndcu (%rax), %bnd0");
 +      asm volatile("bndcu (%r8), %bnd0");
 +      asm volatile("bndcu (0x12345678), %bnd0");
 +      asm volatile("bndcu (%rax), %bnd3");
 +      asm volatile("bndcu (%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcu 0x12345678(,%rax,1), %bnd0");
 +      asm volatile("bndcu (%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcu (%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcu 0x12(%rax), %bnd0");
 +      asm volatile("bndcu 0x12(%rbp), %bnd0");
 +      asm volatile("bndcu 0x12(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcu 0x12(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndcu 0x12(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcu 0x12(%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcu 0x12345678(%rax), %bnd0");
 +      asm volatile("bndcu 0x12345678(%rbp), %bnd0");
 +      asm volatile("bndcu 0x12345678(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcu 0x12345678(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndcu 0x12345678(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcu 0x12345678(%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcu %rax, %bnd0");
 +
 +      /* bndcn r/m64, bnd */
 +
 +      asm volatile("bndcn (%rax), %bnd0");
 +      asm volatile("bndcn (%r8), %bnd0");
 +      asm volatile("bndcn (0x12345678), %bnd0");
 +      asm volatile("bndcn (%rax), %bnd3");
 +      asm volatile("bndcn (%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcn 0x12345678(,%rax,1), %bnd0");
 +      asm volatile("bndcn (%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcn (%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcn 0x12(%rax), %bnd0");
 +      asm volatile("bndcn 0x12(%rbp), %bnd0");
 +      asm volatile("bndcn 0x12(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcn 0x12(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndcn 0x12(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcn 0x12(%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcn 0x12345678(%rax), %bnd0");
 +      asm volatile("bndcn 0x12345678(%rbp), %bnd0");
 +      asm volatile("bndcn 0x12345678(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndcn 0x12345678(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndcn 0x12345678(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndcn 0x12345678(%rax,%rcx,8), %bnd0");
 +      asm volatile("bndcn %rax, %bnd0");
 +
 +      /* bndmov m128, bnd */
 +
 +      asm volatile("bndmov (%rax), %bnd0");
 +      asm volatile("bndmov (%r8), %bnd0");
 +      asm volatile("bndmov (0x12345678), %bnd0");
 +      asm volatile("bndmov (%rax), %bnd3");
 +      asm volatile("bndmov (%rcx,%rax,1), %bnd0");
 +      asm volatile("bndmov 0x12345678(,%rax,1), %bnd0");
 +      asm volatile("bndmov (%rax,%rcx,1), %bnd0");
 +      asm volatile("bndmov (%rax,%rcx,8), %bnd0");
 +      asm volatile("bndmov 0x12(%rax), %bnd0");
 +      asm volatile("bndmov 0x12(%rbp), %bnd0");
 +      asm volatile("bndmov 0x12(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndmov 0x12(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndmov 0x12(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndmov 0x12(%rax,%rcx,8), %bnd0");
 +      asm volatile("bndmov 0x12345678(%rax), %bnd0");
 +      asm volatile("bndmov 0x12345678(%rbp), %bnd0");
 +      asm volatile("bndmov 0x12345678(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndmov 0x12345678(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndmov 0x12345678(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndmov 0x12345678(%rax,%rcx,8), %bnd0");
 +
 +      /* bndmov bnd, m128 */
 +
 +      asm volatile("bndmov %bnd0, (%rax)");
 +      asm volatile("bndmov %bnd0, (%r8)");
 +      asm volatile("bndmov %bnd0, (0x12345678)");
 +      asm volatile("bndmov %bnd3, (%rax)");
 +      asm volatile("bndmov %bnd0, (%rcx,%rax,1)");
 +      asm volatile("bndmov %bnd0, 0x12345678(,%rax,1)");
 +      asm volatile("bndmov %bnd0, (%rax,%rcx,1)");
 +      asm volatile("bndmov %bnd0, (%rax,%rcx,8)");
 +      asm volatile("bndmov %bnd0, 0x12(%rax)");
 +      asm volatile("bndmov %bnd0, 0x12(%rbp)");
 +      asm volatile("bndmov %bnd0, 0x12(%rcx,%rax,1)");
 +      asm volatile("bndmov %bnd0, 0x12(%rbp,%rax,1)");
 +      asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,1)");
 +      asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,8)");
 +      asm volatile("bndmov %bnd0, 0x12345678(%rax)");
 +      asm volatile("bndmov %bnd0, 0x12345678(%rbp)");
 +      asm volatile("bndmov %bnd0, 0x12345678(%rcx,%rax,1)");
 +      asm volatile("bndmov %bnd0, 0x12345678(%rbp,%rax,1)");
 +      asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,1)");
 +      asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,8)");
 +
 +      /* bndmov bnd2, bnd1 */
 +
 +      asm volatile("bndmov %bnd0, %bnd1");
 +      asm volatile("bndmov %bnd1, %bnd0");
 +
 +      /* bndldx mib, bnd */
 +
 +      asm volatile("bndldx (%rax), %bnd0");
 +      asm volatile("bndldx (%r8), %bnd0");
 +      asm volatile("bndldx (0x12345678), %bnd0");
 +      asm volatile("bndldx (%rax), %bnd3");
 +      asm volatile("bndldx (%rcx,%rax,1), %bnd0");
 +      asm volatile("bndldx 0x12345678(,%rax,1), %bnd0");
 +      asm volatile("bndldx (%rax,%rcx,1), %bnd0");
 +      asm volatile("bndldx 0x12(%rax), %bnd0");
 +      asm volatile("bndldx 0x12(%rbp), %bnd0");
 +      asm volatile("bndldx 0x12(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndldx 0x12(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndldx 0x12(%rax,%rcx,1), %bnd0");
 +      asm volatile("bndldx 0x12345678(%rax), %bnd0");
 +      asm volatile("bndldx 0x12345678(%rbp), %bnd0");
 +      asm volatile("bndldx 0x12345678(%rcx,%rax,1), %bnd0");
 +      asm volatile("bndldx 0x12345678(%rbp,%rax,1), %bnd0");
 +      asm volatile("bndldx 0x12345678(%rax,%rcx,1), %bnd0");
 +
 +      /* bndstx bnd, mib */
 +
 +      asm volatile("bndstx %bnd0, (%rax)");
 +      asm volatile("bndstx %bnd0, (%r8)");
 +      asm volatile("bndstx %bnd0, (0x12345678)");
 +      asm volatile("bndstx %bnd3, (%rax)");
 +      asm volatile("bndstx %bnd0, (%rcx,%rax,1)");
 +      asm volatile("bndstx %bnd0, 0x12345678(,%rax,1)");
 +      asm volatile("bndstx %bnd0, (%rax,%rcx,1)");
 +      asm volatile("bndstx %bnd0, 0x12(%rax)");
 +      asm volatile("bndstx %bnd0, 0x12(%rbp)");
 +      asm volatile("bndstx %bnd0, 0x12(%rcx,%rax,1)");
 +      asm volatile("bndstx %bnd0, 0x12(%rbp,%rax,1)");
 +      asm volatile("bndstx %bnd0, 0x12(%rax,%rcx,1)");
 +      asm volatile("bndstx %bnd0, 0x12345678(%rax)");
 +      asm volatile("bndstx %bnd0, 0x12345678(%rbp)");
 +      asm volatile("bndstx %bnd0, 0x12345678(%rcx,%rax,1)");
 +      asm volatile("bndstx %bnd0, 0x12345678(%rbp,%rax,1)");
 +      asm volatile("bndstx %bnd0, 0x12345678(%rax,%rcx,1)");
 +
 +      /* bnd prefix on call, ret, jmp and all jcc */
 +
 +      asm volatile("bnd call label1");  /* Expecting: call unconditional 0 */
 +      asm volatile("bnd call *(%eax)"); /* Expecting: call indirect      0 */
 +      asm volatile("bnd ret");          /* Expecting: ret  indirect      0 */
 +      asm volatile("bnd jmp label1");   /* Expecting: jmp  unconditional 0 */
 +      asm volatile("bnd jmp label1");   /* Expecting: jmp  unconditional 0 */
 +      asm volatile("bnd jmp *(%ecx)");  /* Expecting: jmp  indirect      0 */
 +      asm volatile("bnd jne label1");   /* Expecting: jcc  conditional   0 */
 +
 +      /* sha1rnds4 imm8, xmm2/m128, xmm1 */
 +
 +      asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0");
 +      asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2");
 +      asm volatile("sha1rnds4 $0x91, %xmm8, %xmm0");
 +      asm volatile("sha1rnds4 $0x91, %xmm7, %xmm8");
 +      asm volatile("sha1rnds4 $0x91, %xmm15, %xmm8");
 +      asm volatile("sha1rnds4 $0x91, (%rax), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, (%r8), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, (%rax), %xmm3");
 +      asm volatile("sha1rnds4 $0x91, (%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12345678(,%rax,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, (%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, (%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12(%rax), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12(%rbp), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12345678(%rax), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12345678(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm15");
 +
 +      /* sha1nexte xmm2/m128, xmm1 */
 +
 +      asm volatile("sha1nexte %xmm1, %xmm0");
 +      asm volatile("sha1nexte %xmm7, %xmm2");
 +      asm volatile("sha1nexte %xmm8, %xmm0");
 +      asm volatile("sha1nexte %xmm7, %xmm8");
 +      asm volatile("sha1nexte %xmm15, %xmm8");
 +      asm volatile("sha1nexte (%rax), %xmm0");
 +      asm volatile("sha1nexte (%r8), %xmm0");
 +      asm volatile("sha1nexte (0x12345678), %xmm0");
 +      asm volatile("sha1nexte (%rax), %xmm3");
 +      asm volatile("sha1nexte (%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1nexte 0x12345678(,%rax,1), %xmm0");
 +      asm volatile("sha1nexte (%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1nexte (%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1nexte 0x12(%rax), %xmm0");
 +      asm volatile("sha1nexte 0x12(%rbp), %xmm0");
 +      asm volatile("sha1nexte 0x12(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1nexte 0x12(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha1nexte 0x12(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1nexte 0x12(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1nexte 0x12345678(%rax), %xmm0");
 +      asm volatile("sha1nexte 0x12345678(%rbp), %xmm0");
 +      asm volatile("sha1nexte 0x12345678(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1nexte 0x12345678(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha1nexte 0x12345678(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm15");
 +
 +      /* sha1msg1 xmm2/m128, xmm1 */
 +
 +      asm volatile("sha1msg1 %xmm1, %xmm0");
 +      asm volatile("sha1msg1 %xmm7, %xmm2");
 +      asm volatile("sha1msg1 %xmm8, %xmm0");
 +      asm volatile("sha1msg1 %xmm7, %xmm8");
 +      asm volatile("sha1msg1 %xmm15, %xmm8");
 +      asm volatile("sha1msg1 (%rax), %xmm0");
 +      asm volatile("sha1msg1 (%r8), %xmm0");
 +      asm volatile("sha1msg1 (0x12345678), %xmm0");
 +      asm volatile("sha1msg1 (%rax), %xmm3");
 +      asm volatile("sha1msg1 (%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1msg1 0x12345678(,%rax,1), %xmm0");
 +      asm volatile("sha1msg1 (%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1msg1 (%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1msg1 0x12(%rax), %xmm0");
 +      asm volatile("sha1msg1 0x12(%rbp), %xmm0");
 +      asm volatile("sha1msg1 0x12(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1msg1 0x12(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha1msg1 0x12(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1msg1 0x12(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1msg1 0x12345678(%rax), %xmm0");
 +      asm volatile("sha1msg1 0x12345678(%rbp), %xmm0");
 +      asm volatile("sha1msg1 0x12345678(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1msg1 0x12345678(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha1msg1 0x12345678(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm15");
 +
 +      /* sha1msg2 xmm2/m128, xmm1 */
 +
 +      asm volatile("sha1msg2 %xmm1, %xmm0");
 +      asm volatile("sha1msg2 %xmm7, %xmm2");
 +      asm volatile("sha1msg2 %xmm8, %xmm0");
 +      asm volatile("sha1msg2 %xmm7, %xmm8");
 +      asm volatile("sha1msg2 %xmm15, %xmm8");
 +      asm volatile("sha1msg2 (%rax), %xmm0");
 +      asm volatile("sha1msg2 (%r8), %xmm0");
 +      asm volatile("sha1msg2 (0x12345678), %xmm0");
 +      asm volatile("sha1msg2 (%rax), %xmm3");
 +      asm volatile("sha1msg2 (%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1msg2 0x12345678(,%rax,1), %xmm0");
 +      asm volatile("sha1msg2 (%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1msg2 (%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1msg2 0x12(%rax), %xmm0");
 +      asm volatile("sha1msg2 0x12(%rbp), %xmm0");
 +      asm volatile("sha1msg2 0x12(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1msg2 0x12(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha1msg2 0x12(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1msg2 0x12(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1msg2 0x12345678(%rax), %xmm0");
 +      asm volatile("sha1msg2 0x12345678(%rbp), %xmm0");
 +      asm volatile("sha1msg2 0x12345678(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha1msg2 0x12345678(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha1msg2 0x12345678(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm15");
 +
 +      /* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */
 +      /* Note sha256rnds2 has an implicit operand 'xmm0' */
 +
 +      asm volatile("sha256rnds2 %xmm4, %xmm1");
 +      asm volatile("sha256rnds2 %xmm7, %xmm2");
 +      asm volatile("sha256rnds2 %xmm8, %xmm1");
 +      asm volatile("sha256rnds2 %xmm7, %xmm8");
 +      asm volatile("sha256rnds2 %xmm15, %xmm8");
 +      asm volatile("sha256rnds2 (%rax), %xmm1");
 +      asm volatile("sha256rnds2 (%r8), %xmm1");
 +      asm volatile("sha256rnds2 (0x12345678), %xmm1");
 +      asm volatile("sha256rnds2 (%rax), %xmm3");
 +      asm volatile("sha256rnds2 (%rcx,%rax,1), %xmm1");
 +      asm volatile("sha256rnds2 0x12345678(,%rax,1), %xmm1");
 +      asm volatile("sha256rnds2 (%rax,%rcx,1), %xmm1");
 +      asm volatile("sha256rnds2 (%rax,%rcx,8), %xmm1");
 +      asm volatile("sha256rnds2 0x12(%rax), %xmm1");
 +      asm volatile("sha256rnds2 0x12(%rbp), %xmm1");
 +      asm volatile("sha256rnds2 0x12(%rcx,%rax,1), %xmm1");
 +      asm volatile("sha256rnds2 0x12(%rbp,%rax,1), %xmm1");
 +      asm volatile("sha256rnds2 0x12(%rax,%rcx,1), %xmm1");
 +      asm volatile("sha256rnds2 0x12(%rax,%rcx,8), %xmm1");
 +      asm volatile("sha256rnds2 0x12345678(%rax), %xmm1");
 +      asm volatile("sha256rnds2 0x12345678(%rbp), %xmm1");
 +      asm volatile("sha256rnds2 0x12345678(%rcx,%rax,1), %xmm1");
 +      asm volatile("sha256rnds2 0x12345678(%rbp,%rax,1), %xmm1");
 +      asm volatile("sha256rnds2 0x12345678(%rax,%rcx,1), %xmm1");
 +      asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm1");
 +      asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm15");
 +
 +      /* sha256msg1 xmm2/m128, xmm1 */
 +
 +      asm volatile("sha256msg1 %xmm1, %xmm0");
 +      asm volatile("sha256msg1 %xmm7, %xmm2");
 +      asm volatile("sha256msg1 %xmm8, %xmm0");
 +      asm volatile("sha256msg1 %xmm7, %xmm8");
 +      asm volatile("sha256msg1 %xmm15, %xmm8");
 +      asm volatile("sha256msg1 (%rax), %xmm0");
 +      asm volatile("sha256msg1 (%r8), %xmm0");
 +      asm volatile("sha256msg1 (0x12345678), %xmm0");
 +      asm volatile("sha256msg1 (%rax), %xmm3");
 +      asm volatile("sha256msg1 (%rcx,%rax,1), %xmm0");
 +      asm volatile("sha256msg1 0x12345678(,%rax,1), %xmm0");
 +      asm volatile("sha256msg1 (%rax,%rcx,1), %xmm0");
 +      asm volatile("sha256msg1 (%rax,%rcx,8), %xmm0");
 +      asm volatile("sha256msg1 0x12(%rax), %xmm0");
 +      asm volatile("sha256msg1 0x12(%rbp), %xmm0");
 +      asm volatile("sha256msg1 0x12(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha256msg1 0x12(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha256msg1 0x12(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha256msg1 0x12(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha256msg1 0x12345678(%rax), %xmm0");
 +      asm volatile("sha256msg1 0x12345678(%rbp), %xmm0");
 +      asm volatile("sha256msg1 0x12345678(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha256msg1 0x12345678(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha256msg1 0x12345678(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm15");
 +
 +      /* sha256msg2 xmm2/m128, xmm1 */
 +
 +      asm volatile("sha256msg2 %xmm1, %xmm0");
 +      asm volatile("sha256msg2 %xmm7, %xmm2");
 +      asm volatile("sha256msg2 %xmm8, %xmm0");
 +      asm volatile("sha256msg2 %xmm7, %xmm8");
 +      asm volatile("sha256msg2 %xmm15, %xmm8");
 +      asm volatile("sha256msg2 (%rax), %xmm0");
 +      asm volatile("sha256msg2 (%r8), %xmm0");
 +      asm volatile("sha256msg2 (0x12345678), %xmm0");
 +      asm volatile("sha256msg2 (%rax), %xmm3");
 +      asm volatile("sha256msg2 (%rcx,%rax,1), %xmm0");
 +      asm volatile("sha256msg2 0x12345678(,%rax,1), %xmm0");
 +      asm volatile("sha256msg2 (%rax,%rcx,1), %xmm0");
 +      asm volatile("sha256msg2 (%rax,%rcx,8), %xmm0");
 +      asm volatile("sha256msg2 0x12(%rax), %xmm0");
 +      asm volatile("sha256msg2 0x12(%rbp), %xmm0");
 +      asm volatile("sha256msg2 0x12(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha256msg2 0x12(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha256msg2 0x12(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha256msg2 0x12(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha256msg2 0x12345678(%rax), %xmm0");
 +      asm volatile("sha256msg2 0x12345678(%rbp), %xmm0");
 +      asm volatile("sha256msg2 0x12345678(%rcx,%rax,1), %xmm0");
 +      asm volatile("sha256msg2 0x12345678(%rbp,%rax,1), %xmm0");
 +      asm volatile("sha256msg2 0x12345678(%rax,%rcx,1), %xmm0");
 +      asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm0");
 +      asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm15");
 +
 +      /* clflushopt m8 */
 +
 +      asm volatile("clflushopt (%rax)");
 +      asm volatile("clflushopt (%r8)");
 +      asm volatile("clflushopt (0x12345678)");
 +      asm volatile("clflushopt 0x12345678(%rax,%rcx,8)");
 +      asm volatile("clflushopt 0x12345678(%r8,%rcx,8)");
 +      /* Also check instructions in the same group encoding as clflushopt */
 +      asm volatile("clflush (%rax)");
 +      asm volatile("clflush (%r8)");
 +      asm volatile("sfence");
 +
 +      /* clwb m8 */
 +
 +      asm volatile("clwb (%rax)");
 +      asm volatile("clwb (%r8)");
 +      asm volatile("clwb (0x12345678)");
 +      asm volatile("clwb 0x12345678(%rax,%rcx,8)");
 +      asm volatile("clwb 0x12345678(%r8,%rcx,8)");
 +      /* Also check instructions in the same group encoding as clwb */
 +      asm volatile("xsaveopt (%rax)");
 +      asm volatile("xsaveopt (%r8)");
 +      asm volatile("mfence");
 +
 +      /* xsavec mem */
 +
 +      asm volatile("xsavec (%rax)");
 +      asm volatile("xsavec (%r8)");
 +      asm volatile("xsavec (0x12345678)");
 +      asm volatile("xsavec 0x12345678(%rax,%rcx,8)");
 +      asm volatile("xsavec 0x12345678(%r8,%rcx,8)");
 +
 +      /* xsaves mem */
 +
 +      asm volatile("xsaves (%rax)");
 +      asm volatile("xsaves (%r8)");
 +      asm volatile("xsaves (0x12345678)");
 +      asm volatile("xsaves 0x12345678(%rax,%rcx,8)");
 +      asm volatile("xsaves 0x12345678(%r8,%rcx,8)");
 +
 +      /* xrstors mem */
 +
 +      asm volatile("xrstors (%rax)");
 +      asm volatile("xrstors (%r8)");
 +      asm volatile("xrstors (0x12345678)");
 +      asm volatile("xrstors 0x12345678(%rax,%rcx,8)");
 +      asm volatile("xrstors 0x12345678(%r8,%rcx,8)");
 +
 +#else  /* #ifdef __x86_64__ */
 +
 +      /* bound r32, mem (same op code as EVEX prefix) */
 +
 +      asm volatile("bound %eax, 0x12345678(%ecx)");
 +      asm volatile("bound %ecx, 0x12345678(%eax)");
 +      asm volatile("bound %edx, 0x12345678(%eax)");
 +      asm volatile("bound %ebx, 0x12345678(%eax)");
 +      asm volatile("bound %esp, 0x12345678(%eax)");
 +      asm volatile("bound %ebp, 0x12345678(%eax)");
 +      asm volatile("bound %esi, 0x12345678(%eax)");
 +      asm volatile("bound %edi, 0x12345678(%eax)");
 +      asm volatile("bound %ecx, (%eax)");
 +      asm volatile("bound %eax, (0x12345678)");
 +      asm volatile("bound %edx, (%ecx,%eax,1)");
 +      asm volatile("bound %edx, 0x12345678(,%eax,1)");
 +      asm volatile("bound %edx, (%eax,%ecx,1)");
 +      asm volatile("bound %edx, (%eax,%ecx,8)");
 +      asm volatile("bound %edx, 0x12(%eax)");
 +      asm volatile("bound %edx, 0x12(%ebp)");
 +      asm volatile("bound %edx, 0x12(%ecx,%eax,1)");
 +      asm volatile("bound %edx, 0x12(%ebp,%eax,1)");
 +      asm volatile("bound %edx, 0x12(%eax,%ecx,1)");
 +      asm volatile("bound %edx, 0x12(%eax,%ecx,8)");
 +      asm volatile("bound %edx, 0x12345678(%eax)");
 +      asm volatile("bound %edx, 0x12345678(%ebp)");
 +      asm volatile("bound %edx, 0x12345678(%ecx,%eax,1)");
 +      asm volatile("bound %edx, 0x12345678(%ebp,%eax,1)");
 +      asm volatile("bound %edx, 0x12345678(%eax,%ecx,1)");
 +      asm volatile("bound %edx, 0x12345678(%eax,%ecx,8)");
 +
 +      /* bound r16, mem (same op code as EVEX prefix) */
 +
 +      asm volatile("bound %ax, 0x12345678(%ecx)");
 +      asm volatile("bound %cx, 0x12345678(%eax)");
 +      asm volatile("bound %dx, 0x12345678(%eax)");
 +      asm volatile("bound %bx, 0x12345678(%eax)");
 +      asm volatile("bound %sp, 0x12345678(%eax)");
 +      asm volatile("bound %bp, 0x12345678(%eax)");
 +      asm volatile("bound %si, 0x12345678(%eax)");
 +      asm volatile("bound %di, 0x12345678(%eax)");
 +      asm volatile("bound %cx, (%eax)");
 +      asm volatile("bound %ax, (0x12345678)");
 +      asm volatile("bound %dx, (%ecx,%eax,1)");
 +      asm volatile("bound %dx, 0x12345678(,%eax,1)");
 +      asm volatile("bound %dx, (%eax,%ecx,1)");
 +      asm volatile("bound %dx, (%eax,%ecx,8)");
 +      asm volatile("bound %dx, 0x12(%eax)");
 +      asm volatile("bound %dx, 0x12(%ebp)");
 +      asm volatile("bound %dx, 0x12(%ecx,%eax,1)");
 +      asm volatile("bound %dx, 0x12(%ebp,%eax,1)");
 +      asm volatile("bound %dx, 0x12(%eax,%ecx,1)");
 +      asm volatile("bound %dx, 0x12(%eax,%ecx,8)");
 +      asm volatile("bound %dx, 0x12345678(%eax)");
 +      asm volatile("bound %dx, 0x12345678(%ebp)");
 +      asm volatile("bound %dx, 0x12345678(%ecx,%eax,1)");
 +      asm volatile("bound %dx, 0x12345678(%ebp,%eax,1)");
 +      asm volatile("bound %dx, 0x12345678(%eax,%ecx,1)");
 +      asm volatile("bound %dx, 0x12345678(%eax,%ecx,8)");
 +
 +      /* AVX-512: Instructions with the same op codes as Mask Instructions  */
 +
 +      asm volatile("cmovno %eax,%ebx");
 +      asm volatile("cmovno 0x12345678(%eax),%ecx");
 +      asm volatile("cmovno 0x12345678(%eax),%cx");
 +
 +      asm volatile("cmove  %eax,%ebx");
 +      asm volatile("cmove 0x12345678(%eax),%ecx");
 +      asm volatile("cmove 0x12345678(%eax),%cx");
 +
 +      asm volatile("seto    0x12345678(%eax)");
 +      asm volatile("setno   0x12345678(%eax)");
 +      asm volatile("setb    0x12345678(%eax)");
 +      asm volatile("setc    0x12345678(%eax)");
 +      asm volatile("setnae  0x12345678(%eax)");
 +      asm volatile("setae   0x12345678(%eax)");
 +      asm volatile("setnb   0x12345678(%eax)");
 +      asm volatile("setnc   0x12345678(%eax)");
 +      asm volatile("sets    0x12345678(%eax)");
 +      asm volatile("setns   0x12345678(%eax)");
 +
 +      /* AVX-512: Mask Instructions */
 +
 +      asm volatile("kandw  %k7,%k6,%k5");
 +      asm volatile("kandq  %k7,%k6,%k5");
 +      asm volatile("kandb  %k7,%k6,%k5");
 +      asm volatile("kandd  %k7,%k6,%k5");
 +
 +      asm volatile("kandnw  %k7,%k6,%k5");
 +      asm volatile("kandnq  %k7,%k6,%k5");
 +      asm volatile("kandnb  %k7,%k6,%k5");
 +      asm volatile("kandnd  %k7,%k6,%k5");
 +
 +      asm volatile("knotw  %k7,%k6");
 +      asm volatile("knotq  %k7,%k6");
 +      asm volatile("knotb  %k7,%k6");
 +      asm volatile("knotd  %k7,%k6");
 +
 +      asm volatile("korw  %k7,%k6,%k5");
 +      asm volatile("korq  %k7,%k6,%k5");
 +      asm volatile("korb  %k7,%k6,%k5");
 +      asm volatile("kord  %k7,%k6,%k5");
 +
 +      asm volatile("kxnorw  %k7,%k6,%k5");
 +      asm volatile("kxnorq  %k7,%k6,%k5");
 +      asm volatile("kxnorb  %k7,%k6,%k5");
 +      asm volatile("kxnord  %k7,%k6,%k5");
 +
 +      asm volatile("kxorw  %k7,%k6,%k5");
 +      asm volatile("kxorq  %k7,%k6,%k5");
 +      asm volatile("kxorb  %k7,%k6,%k5");
 +      asm volatile("kxord  %k7,%k6,%k5");
 +
 +      asm volatile("kaddw  %k7,%k6,%k5");
 +      asm volatile("kaddq  %k7,%k6,%k5");
 +      asm volatile("kaddb  %k7,%k6,%k5");
 +      asm volatile("kaddd  %k7,%k6,%k5");
 +
 +      asm volatile("kunpckbw %k7,%k6,%k5");
 +      asm volatile("kunpckwd %k7,%k6,%k5");
 +      asm volatile("kunpckdq %k7,%k6,%k5");
 +
 +      asm volatile("kmovw  %k6,%k5");
 +      asm volatile("kmovw  (%ecx),%k5");
 +      asm volatile("kmovw  0x123(%eax,%ecx,8),%k5");
 +      asm volatile("kmovw  %k5,(%ecx)");
 +      asm volatile("kmovw  %k5,0x123(%eax,%ecx,8)");
 +      asm volatile("kmovw  %eax,%k5");
 +      asm volatile("kmovw  %ebp,%k5");
 +      asm volatile("kmovw  %k5,%eax");
 +      asm volatile("kmovw  %k5,%ebp");
 +
 +      asm volatile("kmovq  %k6,%k5");
 +      asm volatile("kmovq  (%ecx),%k5");
 +      asm volatile("kmovq  0x123(%eax,%ecx,8),%k5");
 +      asm volatile("kmovq  %k5,(%ecx)");
 +      asm volatile("kmovq  %k5,0x123(%eax,%ecx,8)");
 +
 +      asm volatile("kmovb  %k6,%k5");
 +      asm volatile("kmovb  (%ecx),%k5");
 +      asm volatile("kmovb  0x123(%eax,%ecx,8),%k5");
 +      asm volatile("kmovb  %k5,(%ecx)");
 +      asm volatile("kmovb  %k5,0x123(%eax,%ecx,8)");
 +      asm volatile("kmovb  %eax,%k5");
 +      asm volatile("kmovb  %ebp,%k5");
 +      asm volatile("kmovb  %k5,%eax");
 +      asm volatile("kmovb  %k5,%ebp");
 +
 +      asm volatile("kmovd  %k6,%k5");
 +      asm volatile("kmovd  (%ecx),%k5");
 +      asm volatile("kmovd  0x123(%eax,%ecx,8),%k5");
 +      asm volatile("kmovd  %k5,(%ecx)");
 +      asm volatile("kmovd  %k5,0x123(%eax,%ecx,8)");
 +      asm volatile("kmovd  %eax,%k5");
 +      asm volatile("kmovd  %ebp,%k5");
 +      asm volatile("kmovd  %k5,%eax");
 +      asm volatile("kmovd  %k5,%ebp");
 +
 +      asm volatile("kortestw %k6,%k5");
 +      asm volatile("kortestq %k6,%k5");
 +      asm volatile("kortestb %k6,%k5");
 +      asm volatile("kortestd %k6,%k5");
 +
 +      asm volatile("ktestw %k6,%k5");
 +      asm volatile("ktestq %k6,%k5");
 +      asm volatile("ktestb %k6,%k5");
 +      asm volatile("ktestd %k6,%k5");
 +
 +      asm volatile("kshiftrw $0x12,%k6,%k5");
 +      asm volatile("kshiftrq $0x5b,%k6,%k5");
 +      asm volatile("kshiftlw $0x12,%k6,%k5");
 +      asm volatile("kshiftlq $0x5b,%k6,%k5");
 +
 +      /* AVX-512: Op code 0f 5b */
 +      asm volatile("vcvtdq2ps %xmm5,%xmm6");
 +      asm volatile("vcvtqq2ps %zmm5,%ymm6{%k7}");
 +      asm volatile("vcvtps2dq %xmm5,%xmm6");
 +      asm volatile("vcvttps2dq %xmm5,%xmm6");
 +
 +      /* AVX-512: Op code 0f 6f */
 +
 +      asm volatile("movq   %mm0,%mm4");
 +      asm volatile("vmovdqa %ymm4,%ymm6");
 +      asm volatile("vmovdqa32 %zmm5,%zmm6");
 +      asm volatile("vmovdqa64 %zmm5,%zmm6");
 +      asm volatile("vmovdqu %ymm4,%ymm6");
 +      asm volatile("vmovdqu32 %zmm5,%zmm6");
 +      asm volatile("vmovdqu64 %zmm5,%zmm6");
 +      asm volatile("vmovdqu8 %zmm5,%zmm6");
 +      asm volatile("vmovdqu16 %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 78 */
 +
 +      asm volatile("vmread %eax,%ebx");
 +      asm volatile("vcvttps2udq %zmm5,%zmm6");
 +      asm volatile("vcvttpd2udq %zmm5,%ymm6{%k7}");
 +      asm volatile("vcvttsd2usi %xmm6,%eax");
 +      asm volatile("vcvttss2usi %xmm6,%eax");
 +      asm volatile("vcvttps2uqq %ymm5,%zmm6{%k7}");
 +      asm volatile("vcvttpd2uqq %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 79 */
 +
 +      asm volatile("vmwrite %eax,%ebx");
 +      asm volatile("vcvtps2udq %zmm5,%zmm6");
 +      asm volatile("vcvtpd2udq %zmm5,%ymm6{%k7}");
 +      asm volatile("vcvtsd2usi %xmm6,%eax");
 +      asm volatile("vcvtss2usi %xmm6,%eax");
 +      asm volatile("vcvtps2uqq %ymm5,%zmm6{%k7}");
 +      asm volatile("vcvtpd2uqq %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 7a */
 +
 +      asm volatile("vcvtudq2pd %ymm5,%zmm6{%k7}");
 +      asm volatile("vcvtuqq2pd %zmm5,%zmm6");
 +      asm volatile("vcvtudq2ps %zmm5,%zmm6");
 +      asm volatile("vcvtuqq2ps %zmm5,%ymm6{%k7}");
 +      asm volatile("vcvttps2qq %ymm5,%zmm6{%k7}");
 +      asm volatile("vcvttpd2qq %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 7b */
 +
 +      asm volatile("vcvtusi2sd %eax,%xmm5,%xmm6");
 +      asm volatile("vcvtusi2ss %eax,%xmm5,%xmm6");
 +      asm volatile("vcvtps2qq %ymm5,%zmm6{%k7}");
 +      asm volatile("vcvtpd2qq %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 7f */
 +
 +      asm volatile("movq.s  %mm0,%mm4");
 +      asm volatile("vmovdqa.s %ymm5,%ymm6");
 +      asm volatile("vmovdqa32.s %zmm5,%zmm6");
 +      asm volatile("vmovdqa64.s %zmm5,%zmm6");
 +      asm volatile("vmovdqu.s %ymm5,%ymm6");
 +      asm volatile("vmovdqu32.s %zmm5,%zmm6");
 +      asm volatile("vmovdqu64.s %zmm5,%zmm6");
 +      asm volatile("vmovdqu8.s %zmm5,%zmm6");
 +      asm volatile("vmovdqu16.s %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f db */
 +
 +      asm volatile("pand  %mm1,%mm2");
 +      asm volatile("pand  %xmm1,%xmm2");
 +      asm volatile("vpand  %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpandd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpandq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f df */
 +
 +      asm volatile("pandn  %mm1,%mm2");
 +      asm volatile("pandn  %xmm1,%xmm2");
 +      asm volatile("vpandn %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpandnd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpandnq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f e6 */
 +
 +      asm volatile("vcvttpd2dq %xmm1,%xmm2");
 +      asm volatile("vcvtdq2pd %xmm5,%xmm6");
 +      asm volatile("vcvtdq2pd %ymm5,%zmm6{%k7}");
 +      asm volatile("vcvtqq2pd %zmm5,%zmm6");
 +      asm volatile("vcvtpd2dq %xmm1,%xmm2");
 +
 +      /* AVX-512: Op code 0f eb */
 +
 +      asm volatile("por   %mm4,%mm6");
 +      asm volatile("vpor   %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpord  %zmm4,%zmm5,%zmm6");
 +      asm volatile("vporq  %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f ef */
 +
 +      asm volatile("pxor   %mm4,%mm6");
 +      asm volatile("vpxor  %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpxord %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpxorq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 10 */
 +
 +      asm volatile("pblendvb %xmm1,%xmm0");
 +      asm volatile("vpsrlvw %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpmovuswb %zmm5,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 11 */
 +
 +      asm volatile("vpmovusdb %zmm5,%xmm6{%k7}");
 +      asm volatile("vpsravw %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 12 */
 +
 +      asm volatile("vpmovusqb %zmm5,%xmm6{%k7}");
 +      asm volatile("vpsllvw %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 13 */
 +
 +      asm volatile("vcvtph2ps %xmm3,%ymm5");
 +      asm volatile("vcvtph2ps %ymm5,%zmm6{%k7}");
 +      asm volatile("vpmovusdw %zmm5,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 14 */
 +
 +      asm volatile("blendvps %xmm1,%xmm0");
 +      asm volatile("vpmovusqw %zmm5,%xmm6{%k7}");
 +      asm volatile("vprorvd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vprorvq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 15 */
 +
 +      asm volatile("blendvpd %xmm1,%xmm0");
 +      asm volatile("vpmovusqd %zmm5,%ymm6{%k7}");
 +      asm volatile("vprolvd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vprolvq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 16 */
 +
 +      asm volatile("vpermps %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpermps %ymm4,%ymm6,%ymm2{%k7}");
 +      asm volatile("vpermpd %ymm4,%ymm6,%ymm2{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 19 */
 +
 +      asm volatile("vbroadcastsd %xmm4,%ymm6");
 +      asm volatile("vbroadcastf32x2 %xmm7,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 1a */
 +
 +      asm volatile("vbroadcastf128 (%ecx),%ymm4");
 +      asm volatile("vbroadcastf32x4 (%ecx),%zmm6");
 +      asm volatile("vbroadcastf64x2 (%ecx),%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 1b */
 +
 +      asm volatile("vbroadcastf32x8 (%ecx),%zmm6");
 +      asm volatile("vbroadcastf64x4 (%ecx),%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 1f */
 +
 +      asm volatile("vpabsq %zmm4,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 20 */
 +
 +      asm volatile("vpmovsxbw %xmm4,%xmm5");
 +      asm volatile("vpmovswb %zmm5,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 21 */
 +
 +      asm volatile("vpmovsxbd %xmm4,%ymm6");
 +      asm volatile("vpmovsdb %zmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 22 */
 +
 +      asm volatile("vpmovsxbq %xmm4,%ymm4");
 +      asm volatile("vpmovsqb %zmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 23 */
 +
 +      asm volatile("vpmovsxwd %xmm4,%ymm4");
 +      asm volatile("vpmovsdw %zmm5,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 24 */
 +
 +      asm volatile("vpmovsxwq %xmm4,%ymm6");
 +      asm volatile("vpmovsqw %zmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 25 */
 +
 +      asm volatile("vpmovsxdq %xmm4,%ymm4");
 +      asm volatile("vpmovsqd %zmm5,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 26 */
 +
 +      asm volatile("vptestmb %zmm5,%zmm6,%k5");
 +      asm volatile("vptestmw %zmm5,%zmm6,%k5");
 +      asm volatile("vptestnmb %zmm4,%zmm5,%k5");
 +      asm volatile("vptestnmw %zmm4,%zmm5,%k5");
 +
 +      /* AVX-512: Op code 0f 38 27 */
 +
 +      asm volatile("vptestmd %zmm5,%zmm6,%k5");
 +      asm volatile("vptestmq %zmm5,%zmm6,%k5");
 +      asm volatile("vptestnmd %zmm4,%zmm5,%k5");
 +      asm volatile("vptestnmq %zmm4,%zmm5,%k5");
 +
 +      /* AVX-512: Op code 0f 38 28 */
 +
 +      asm volatile("vpmuldq %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmovm2b %k5,%zmm6");
 +      asm volatile("vpmovm2w %k5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 29 */
 +
 +      asm volatile("vpcmpeqq %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmovb2m %zmm6,%k5");
 +      asm volatile("vpmovw2m %zmm6,%k5");
 +
 +      /* AVX-512: Op code 0f 38 2a */
 +
 +      asm volatile("vmovntdqa (%ecx),%ymm4");
 +      asm volatile("vpbroadcastmb2q %k6,%zmm1");
 +
 +      /* AVX-512: Op code 0f 38 2c */
 +
 +      asm volatile("vmaskmovps (%ecx),%ymm4,%ymm6");
 +      asm volatile("vscalefps %zmm4,%zmm5,%zmm6");
 +      asm volatile("vscalefpd %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 2d */
 +
 +      asm volatile("vmaskmovpd (%ecx),%ymm4,%ymm6");
 +      asm volatile("vscalefss %xmm4,%xmm5,%xmm6{%k7}");
 +      asm volatile("vscalefsd %xmm4,%xmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 30 */
 +
 +      asm volatile("vpmovzxbw %xmm4,%ymm4");
 +      asm volatile("vpmovwb %zmm5,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 31 */
 +
 +      asm volatile("vpmovzxbd %xmm4,%ymm6");
 +      asm volatile("vpmovdb %zmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 32 */
 +
 +      asm volatile("vpmovzxbq %xmm4,%ymm4");
 +      asm volatile("vpmovqb %zmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 33 */
 +
 +      asm volatile("vpmovzxwd %xmm4,%ymm4");
 +      asm volatile("vpmovdw %zmm5,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 34 */
 +
 +      asm volatile("vpmovzxwq %xmm4,%ymm6");
 +      asm volatile("vpmovqw %zmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 35 */
 +
 +      asm volatile("vpmovzxdq %xmm4,%ymm4");
 +      asm volatile("vpmovqd %zmm5,%ymm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 36 */
 +
 +      asm volatile("vpermd %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpermd %ymm4,%ymm6,%ymm2{%k7}");
 +      asm volatile("vpermq %ymm4,%ymm6,%ymm2{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 38 */
 +
 +      asm volatile("vpminsb %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmovm2d %k5,%zmm6");
 +      asm volatile("vpmovm2q %k5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 39 */
 +
 +      asm volatile("vpminsd %xmm1,%xmm2,%xmm3");
 +      asm volatile("vpminsd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpminsq %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpmovd2m %zmm6,%k5");
 +      asm volatile("vpmovq2m %zmm6,%k5");
 +
 +      /* AVX-512: Op code 0f 38 3a */
 +
 +      asm volatile("vpminuw %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpbroadcastmw2d %k6,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 3b */
 +
 +      asm volatile("vpminud %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpminud %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpminuq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 3d */
 +
 +      asm volatile("vpmaxsd %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmaxsd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpmaxsq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 3f */
 +
 +      asm volatile("vpmaxud %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmaxud %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpmaxuq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 40 */
 +
 +      asm volatile("vpmulld %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpmulld %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpmullq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 42 */
 +
 +      asm volatile("vgetexpps %zmm5,%zmm6");
 +      asm volatile("vgetexppd %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 43 */
 +
 +      asm volatile("vgetexpss %xmm4,%xmm5,%xmm6{%k7}");
 +      asm volatile("vgetexpsd %xmm2,%xmm3,%xmm4{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 44 */
 +
 +      asm volatile("vplzcntd %zmm5,%zmm6");
 +      asm volatile("vplzcntq %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 46 */
 +
 +      asm volatile("vpsravd %ymm4,%ymm6,%ymm2");
 +      asm volatile("vpsravd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpsravq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 4c */
 +
 +      asm volatile("vrcp14ps %zmm5,%zmm6");
 +      asm volatile("vrcp14pd %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 4d */
 +
 +      asm volatile("vrcp14ss %xmm4,%xmm5,%xmm6{%k7}");
 +      asm volatile("vrcp14sd %xmm4,%xmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 4e */
 +
 +      asm volatile("vrsqrt14ps %zmm5,%zmm6");
 +      asm volatile("vrsqrt14pd %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 4f */
 +
 +      asm volatile("vrsqrt14ss %xmm4,%xmm5,%xmm6{%k7}");
 +      asm volatile("vrsqrt14sd %xmm4,%xmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 59 */
 +
 +      asm volatile("vpbroadcastq %xmm4,%xmm6");
 +      asm volatile("vbroadcasti32x2 %xmm7,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 5a */
 +
 +      asm volatile("vbroadcasti128 (%ecx),%ymm4");
 +      asm volatile("vbroadcasti32x4 (%ecx),%zmm6");
 +      asm volatile("vbroadcasti64x2 (%ecx),%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 5b */
 +
 +      asm volatile("vbroadcasti32x8 (%ecx),%zmm6");
 +      asm volatile("vbroadcasti64x4 (%ecx),%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 64 */
 +
 +      asm volatile("vpblendmd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpblendmq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 65 */
 +
 +      asm volatile("vblendmps %zmm4,%zmm5,%zmm6");
 +      asm volatile("vblendmpd %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 66 */
 +
 +      asm volatile("vpblendmb %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpblendmw %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 75 */
 +
 +      asm volatile("vpermi2b %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpermi2w %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 76 */
 +
 +      asm volatile("vpermi2d %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpermi2q %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 77 */
 +
 +      asm volatile("vpermi2ps %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpermi2pd %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 7a */
 +
 +      asm volatile("vpbroadcastb %eax,%xmm3");
 +
 +      /* AVX-512: Op code 0f 38 7b */
 +
 +      asm volatile("vpbroadcastw %eax,%xmm3");
 +
 +      /* AVX-512: Op code 0f 38 7c */
 +
 +      asm volatile("vpbroadcastd %eax,%xmm3");
 +
 +      /* AVX-512: Op code 0f 38 7d */
 +
 +      asm volatile("vpermt2b %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpermt2w %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 7e */
 +
 +      asm volatile("vpermt2d %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpermt2q %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 7f */
 +
 +      asm volatile("vpermt2ps %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpermt2pd %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 83 */
 +
 +      asm volatile("vpmultishiftqb %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 88 */
 +
 +      asm volatile("vexpandps (%ecx),%zmm6");
 +      asm volatile("vexpandpd (%ecx),%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 89 */
 +
 +      asm volatile("vpexpandd (%ecx),%zmm6");
 +      asm volatile("vpexpandq (%ecx),%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 8a */
 +
 +      asm volatile("vcompressps %zmm6,(%ecx)");
 +      asm volatile("vcompresspd %zmm6,(%ecx)");
 +
 +      /* AVX-512: Op code 0f 38 8b */
 +
 +      asm volatile("vpcompressd %zmm6,(%ecx)");
 +      asm volatile("vpcompressq %zmm6,(%ecx)");
 +
 +      /* AVX-512: Op code 0f 38 8d */
 +
 +      asm volatile("vpermb %zmm4,%zmm5,%zmm6");
 +      asm volatile("vpermw %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 90 */
 +
 +      asm volatile("vpgatherdd %xmm2,0x02(%ebp,%xmm7,2),%xmm1");
 +      asm volatile("vpgatherdq %xmm2,0x04(%ebp,%xmm7,2),%xmm1");
 +      asm volatile("vpgatherdd 0x7b(%ebp,%zmm7,8),%zmm6{%k1}");
 +      asm volatile("vpgatherdq 0x7b(%ebp,%ymm7,8),%zmm6{%k1}");
 +
 +      /* AVX-512: Op code 0f 38 91 */
 +
 +      asm volatile("vpgatherqd %xmm2,0x02(%ebp,%xmm7,2),%xmm1");
 +      asm volatile("vpgatherqq %xmm2,0x02(%ebp,%xmm7,2),%xmm1");
 +      asm volatile("vpgatherqd 0x7b(%ebp,%zmm7,8),%ymm6{%k1}");
 +      asm volatile("vpgatherqq 0x7b(%ebp,%zmm7,8),%zmm6{%k1}");
 +
 +      /* AVX-512: Op code 0f 38 a0 */
 +
 +      asm volatile("vpscatterdd %zmm6,0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vpscatterdq %zmm6,0x7b(%ebp,%ymm7,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 a1 */
 +
 +      asm volatile("vpscatterqd %ymm6,0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vpscatterqq %ymm6,0x7b(%ebp,%ymm7,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 a2 */
 +
 +      asm volatile("vscatterdps %zmm6,0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vscatterdpd %zmm6,0x7b(%ebp,%ymm7,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 a3 */
 +
 +      asm volatile("vscatterqps %ymm6,0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vscatterqpd %zmm6,0x7b(%ebp,%zmm7,8){%k1}");
 +
 +      /* AVX-512: Op code 0f 38 b4 */
 +
 +      asm volatile("vpmadd52luq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 b5 */
 +
 +      asm volatile("vpmadd52huq %zmm4,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 c4 */
 +
 +      asm volatile("vpconflictd %zmm5,%zmm6");
 +      asm volatile("vpconflictq %zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 38 c8 */
 +
 +      asm volatile("vexp2ps %zmm6,%zmm7");
 +      asm volatile("vexp2pd %zmm6,%zmm7");
 +
 +      /* AVX-512: Op code 0f 38 ca */
 +
 +      asm volatile("vrcp28ps %zmm6,%zmm7");
 +      asm volatile("vrcp28pd %zmm6,%zmm7");
 +
 +      /* AVX-512: Op code 0f 38 cb */
 +
 +      asm volatile("vrcp28ss %xmm5,%xmm6,%xmm7{%k7}");
 +      asm volatile("vrcp28sd %xmm5,%xmm6,%xmm7{%k7}");
 +
 +      /* AVX-512: Op code 0f 38 cc */
 +
 +      asm volatile("vrsqrt28ps %zmm6,%zmm7");
 +      asm volatile("vrsqrt28pd %zmm6,%zmm7");
 +
 +      /* AVX-512: Op code 0f 38 cd */
 +
 +      asm volatile("vrsqrt28ss %xmm5,%xmm6,%xmm7{%k7}");
 +      asm volatile("vrsqrt28sd %xmm5,%xmm6,%xmm7{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 03 */
 +
 +      asm volatile("valignd $0x12,%zmm5,%zmm6,%zmm7");
 +      asm volatile("valignq $0x12,%zmm5,%zmm6,%zmm7");
 +
 +      /* AVX-512: Op code 0f 3a 08 */
 +
 +      asm volatile("vroundps $0x5,%ymm6,%ymm2");
 +      asm volatile("vrndscaleps $0x12,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 3a 09 */
 +
 +      asm volatile("vroundpd $0x5,%ymm6,%ymm2");
 +      asm volatile("vrndscalepd $0x12,%zmm5,%zmm6");
 +
 +      /* AVX-512: Op code 0f 3a 0a */
 +
 +      asm volatile("vroundss $0x5,%xmm4,%xmm6,%xmm2");
 +      asm volatile("vrndscaless $0x12,%xmm4,%xmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 0b */
 +
 +      asm volatile("vroundsd $0x5,%xmm4,%xmm6,%xmm2");
 +      asm volatile("vrndscalesd $0x12,%xmm4,%xmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 18 */
 +
 +      asm volatile("vinsertf128 $0x5,%xmm4,%ymm4,%ymm6");
 +      asm volatile("vinsertf32x4 $0x12,%xmm4,%zmm5,%zmm6{%k7}");
 +      asm volatile("vinsertf64x2 $0x12,%xmm4,%zmm5,%zmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 19 */
 +
 +      asm volatile("vextractf128 $0x5,%ymm4,%xmm4");
 +      asm volatile("vextractf32x4 $0x12,%zmm5,%xmm6{%k7}");
 +      asm volatile("vextractf64x2 $0x12,%zmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 1a */
 +
 +      asm volatile("vinsertf32x8 $0x12,%ymm5,%zmm6,%zmm7{%k7}");
 +      asm volatile("vinsertf64x4 $0x12,%ymm5,%zmm6,%zmm7{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 1b */
 +
 +      asm volatile("vextractf32x8 $0x12,%zmm6,%ymm7{%k7}");
 +      asm volatile("vextractf64x4 $0x12,%zmm6,%ymm7{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 1e */
 +
 +      asm volatile("vpcmpud $0x12,%zmm6,%zmm7,%k5");
 +      asm volatile("vpcmpuq $0x12,%zmm6,%zmm7,%k5");
 +
 +      /* AVX-512: Op code 0f 3a 1f */
 +
 +      asm volatile("vpcmpd $0x12,%zmm6,%zmm7,%k5");
 +      asm volatile("vpcmpq $0x12,%zmm6,%zmm7,%k5");
 +
 +      /* AVX-512: Op code 0f 3a 23 */
 +
 +      asm volatile("vshuff32x4 $0x12,%zmm5,%zmm6,%zmm7");
 +      asm volatile("vshuff64x2 $0x12,%zmm5,%zmm6,%zmm7");
 +
 +      /* AVX-512: Op code 0f 3a 25 */
 +
 +      asm volatile("vpternlogd $0x12,%zmm5,%zmm6,%zmm7");
 +      asm volatile("vpternlogq $0x12,%zmm5,%zmm6,%zmm7");
 +
 +      /* AVX-512: Op code 0f 3a 26 */
 +
 +      asm volatile("vgetmantps $0x12,%zmm6,%zmm7");
 +      asm volatile("vgetmantpd $0x12,%zmm6,%zmm7");
 +
 +      /* AVX-512: Op code 0f 3a 27 */
 +
 +      asm volatile("vgetmantss $0x12,%xmm5,%xmm6,%xmm7{%k7}");
 +      asm volatile("vgetmantsd $0x12,%xmm5,%xmm6,%xmm7{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 38 */
 +
 +      asm volatile("vinserti128 $0x5,%xmm4,%ymm4,%ymm6");
 +      asm volatile("vinserti32x4 $0x12,%xmm4,%zmm5,%zmm6{%k7}");
 +      asm volatile("vinserti64x2 $0x12,%xmm4,%zmm5,%zmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 39 */
 +
 +      asm volatile("vextracti128 $0x5,%ymm4,%xmm6");
 +      asm volatile("vextracti32x4 $0x12,%zmm5,%xmm6{%k7}");
 +      asm volatile("vextracti64x2 $0x12,%zmm5,%xmm6{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 3a */
 +
 +      asm volatile("vinserti32x8 $0x12,%ymm5,%zmm6,%zmm7{%k7}");
 +      asm volatile("vinserti64x4 $0x12,%ymm5,%zmm6,%zmm7{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 3b */
 +
 +      asm volatile("vextracti32x8 $0x12,%zmm6,%ymm7{%k7}");
 +      asm volatile("vextracti64x4 $0x12,%zmm6,%ymm7{%k7}");
 +
 +      /* AVX-512: Op code 0f 3a 3e */
 +
 +      asm volatile("vpcmpub $0x12,%zmm6,%zmm7,%k5");
 +      asm volatile("vpcmpuw $0x12,%zmm6,%zmm7,%k5");
  
 -      /* bndstx bnd, mib */
 +      /* AVX-512: Op code 0f 3a 3f */
  
 -      asm volatile("bndstx %bnd0, (%rax)");
 -      asm volatile("bndstx %bnd0, (%r8)");
 -      asm volatile("bndstx %bnd0, (0x12345678)");
 -      asm volatile("bndstx %bnd3, (%rax)");
 -      asm volatile("bndstx %bnd0, (%rcx,%rax,1)");
 -      asm volatile("bndstx %bnd0, 0x12345678(,%rax,1)");
 -      asm volatile("bndstx %bnd0, (%rax,%rcx,1)");
 -      asm volatile("bndstx %bnd0, 0x12(%rax)");
 -      asm volatile("bndstx %bnd0, 0x12(%rbp)");
 -      asm volatile("bndstx %bnd0, 0x12(%rcx,%rax,1)");
 -      asm volatile("bndstx %bnd0, 0x12(%rbp,%rax,1)");
 -      asm volatile("bndstx %bnd0, 0x12(%rax,%rcx,1)");
 -      asm volatile("bndstx %bnd0, 0x12345678(%rax)");
 -      asm volatile("bndstx %bnd0, 0x12345678(%rbp)");
 -      asm volatile("bndstx %bnd0, 0x12345678(%rcx,%rax,1)");
 -      asm volatile("bndstx %bnd0, 0x12345678(%rbp,%rax,1)");
 -      asm volatile("bndstx %bnd0, 0x12345678(%rax,%rcx,1)");
 +      asm volatile("vpcmpb $0x12,%zmm6,%zmm7,%k5");
 +      asm volatile("vpcmpw $0x12,%zmm6,%zmm7,%k5");
  
 -      /* bnd prefix on call, ret, jmp and all jcc */
 +      /* AVX-512: Op code 0f 3a 42 */
  
 -      asm volatile("bnd call label1");  /* Expecting: call unconditional 0 */
 -      asm volatile("bnd call *(%eax)"); /* Expecting: call indirect      0 */
 -      asm volatile("bnd ret");          /* Expecting: ret  indirect      0 */
 -      asm volatile("bnd jmp label1");   /* Expecting: jmp  unconditional 0 */
 -      asm volatile("bnd jmp label1");   /* Expecting: jmp  unconditional 0 */
 -      asm volatile("bnd jmp *(%ecx)");  /* Expecting: jmp  indirect      0 */
 -      asm volatile("bnd jne label1");   /* Expecting: jcc  conditional   0 */
 +      asm volatile("vmpsadbw $0x5,%ymm4,%ymm6,%ymm2");
 +      asm volatile("vdbpsadbw $0x12,%zmm4,%zmm5,%zmm6");
  
 -      /* sha1rnds4 imm8, xmm2/m128, xmm1 */
 +      /* AVX-512: Op code 0f 3a 43 */
  
 -      asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0");
 -      asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2");
 -      asm volatile("sha1rnds4 $0x91, %xmm8, %xmm0");
 -      asm volatile("sha1rnds4 $0x91, %xmm7, %xmm8");
 -      asm volatile("sha1rnds4 $0x91, %xmm15, %xmm8");
 -      asm volatile("sha1rnds4 $0x91, (%rax), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, (%r8), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, (%rax), %xmm3");
 -      asm volatile("sha1rnds4 $0x91, (%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12345678(,%rax,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, (%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, (%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12(%rax), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12(%rbp), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12345678(%rax), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12345678(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm15");
 +      asm volatile("vshufi32x4 $0x12,%zmm5,%zmm6,%zmm7");
 +      asm volatile("vshufi64x2 $0x12,%zmm5,%zmm6,%zmm7");
  
 -      /* sha1nexte xmm2/m128, xmm1 */
 +      /* AVX-512: Op code 0f 3a 50 */
  
 -      asm volatile("sha1nexte %xmm1, %xmm0");
 -      asm volatile("sha1nexte %xmm7, %xmm2");
 -      asm volatile("sha1nexte %xmm8, %xmm0");
 -      asm volatile("sha1nexte %xmm7, %xmm8");
 -      asm volatile("sha1nexte %xmm15, %xmm8");
 -      asm volatile("sha1nexte (%rax), %xmm0");
 -      asm volatile("sha1nexte (%r8), %xmm0");
 -      asm volatile("sha1nexte (0x12345678), %xmm0");
 -      asm volatile("sha1nexte (%rax), %xmm3");
 -      asm volatile("sha1nexte (%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1nexte 0x12345678(,%rax,1), %xmm0");
 -      asm volatile("sha1nexte (%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1nexte (%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1nexte 0x12(%rax), %xmm0");
 -      asm volatile("sha1nexte 0x12(%rbp), %xmm0");
 -      asm volatile("sha1nexte 0x12(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1nexte 0x12(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha1nexte 0x12(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1nexte 0x12(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1nexte 0x12345678(%rax), %xmm0");
 -      asm volatile("sha1nexte 0x12345678(%rbp), %xmm0");
 -      asm volatile("sha1nexte 0x12345678(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1nexte 0x12345678(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha1nexte 0x12345678(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm15");
 +      asm volatile("vrangeps $0x12,%zmm5,%zmm6,%zmm7");
 +      asm volatile("vrangepd $0x12,%zmm5,%zmm6,%zmm7");
  
 -      /* sha1msg1 xmm2/m128, xmm1 */
 +      /* AVX-512: Op code 0f 3a 51 */
  
 -      asm volatile("sha1msg1 %xmm1, %xmm0");
 -      asm volatile("sha1msg1 %xmm7, %xmm2");
 -      asm volatile("sha1msg1 %xmm8, %xmm0");
 -      asm volatile("sha1msg1 %xmm7, %xmm8");
 -      asm volatile("sha1msg1 %xmm15, %xmm8");
 -      asm volatile("sha1msg1 (%rax), %xmm0");
 -      asm volatile("sha1msg1 (%r8), %xmm0");
 -      asm volatile("sha1msg1 (0x12345678), %xmm0");
 -      asm volatile("sha1msg1 (%rax), %xmm3");
 -      asm volatile("sha1msg1 (%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1msg1 0x12345678(,%rax,1), %xmm0");
 -      asm volatile("sha1msg1 (%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1msg1 (%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1msg1 0x12(%rax), %xmm0");
 -      asm volatile("sha1msg1 0x12(%rbp), %xmm0");
 -      asm volatile("sha1msg1 0x12(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1msg1 0x12(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha1msg1 0x12(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1msg1 0x12(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1msg1 0x12345678(%rax), %xmm0");
 -      asm volatile("sha1msg1 0x12345678(%rbp), %xmm0");
 -      asm volatile("sha1msg1 0x12345678(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1msg1 0x12345678(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha1msg1 0x12345678(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm15");
 +      asm volatile("vrangess $0x12,%xmm5,%xmm6,%xmm7");
 +      asm volatile("vrangesd $0x12,%xmm5,%xmm6,%xmm7");
  
 -      /* sha1msg2 xmm2/m128, xmm1 */
 +      /* AVX-512: Op code 0f 3a 54 */
  
 -      asm volatile("sha1msg2 %xmm1, %xmm0");
 -      asm volatile("sha1msg2 %xmm7, %xmm2");
 -      asm volatile("sha1msg2 %xmm8, %xmm0");
 -      asm volatile("sha1msg2 %xmm7, %xmm8");
 -      asm volatile("sha1msg2 %xmm15, %xmm8");
 -      asm volatile("sha1msg2 (%rax), %xmm0");
 -      asm volatile("sha1msg2 (%r8), %xmm0");
 -      asm volatile("sha1msg2 (0x12345678), %xmm0");
 -      asm volatile("sha1msg2 (%rax), %xmm3");
 -      asm volatile("sha1msg2 (%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1msg2 0x12345678(,%rax,1), %xmm0");
 -      asm volatile("sha1msg2 (%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1msg2 (%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1msg2 0x12(%rax), %xmm0");
 -      asm volatile("sha1msg2 0x12(%rbp), %xmm0");
 -      asm volatile("sha1msg2 0x12(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1msg2 0x12(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha1msg2 0x12(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1msg2 0x12(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1msg2 0x12345678(%rax), %xmm0");
 -      asm volatile("sha1msg2 0x12345678(%rbp), %xmm0");
 -      asm volatile("sha1msg2 0x12345678(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha1msg2 0x12345678(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha1msg2 0x12345678(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm15");
 +      asm volatile("vfixupimmps $0x12,%zmm5,%zmm6,%zmm7");
 +      asm volatile("vfixupimmpd $0x12,%zmm5,%zmm6,%zmm7");
  
 -      /* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */
 -      /* Note sha256rnds2 has an implicit operand 'xmm0' */
 +      /* AVX-512: Op code 0f 3a 55 */
  
 -      asm volatile("sha256rnds2 %xmm4, %xmm1");
 -      asm volatile("sha256rnds2 %xmm7, %xmm2");
 -      asm volatile("sha256rnds2 %xmm8, %xmm1");
 -      asm volatile("sha256rnds2 %xmm7, %xmm8");
 -      asm volatile("sha256rnds2 %xmm15, %xmm8");
 -      asm volatile("sha256rnds2 (%rax), %xmm1");
 -      asm volatile("sha256rnds2 (%r8), %xmm1");
 -      asm volatile("sha256rnds2 (0x12345678), %xmm1");
 -      asm volatile("sha256rnds2 (%rax), %xmm3");
 -      asm volatile("sha256rnds2 (%rcx,%rax,1), %xmm1");
 -      asm volatile("sha256rnds2 0x12345678(,%rax,1), %xmm1");
 -      asm volatile("sha256rnds2 (%rax,%rcx,1), %xmm1");
 -      asm volatile("sha256rnds2 (%rax,%rcx,8), %xmm1");
 -      asm volatile("sha256rnds2 0x12(%rax), %xmm1");
 -      asm volatile("sha256rnds2 0x12(%rbp), %xmm1");
 -      asm volatile("sha256rnds2 0x12(%rcx,%rax,1), %xmm1");
 -      asm volatile("sha256rnds2 0x12(%rbp,%rax,1), %xmm1");
 -      asm volatile("sha256rnds2 0x12(%rax,%rcx,1), %xmm1");
 -      asm volatile("sha256rnds2 0x12(%rax,%rcx,8), %xmm1");
 -      asm volatile("sha256rnds2 0x12345678(%rax), %xmm1");
 -      asm volatile("sha256rnds2 0x12345678(%rbp), %xmm1");
 -      asm volatile("sha256rnds2 0x12345678(%rcx,%rax,1), %xmm1");
 -      asm volatile("sha256rnds2 0x12345678(%rbp,%rax,1), %xmm1");
 -      asm volatile("sha256rnds2 0x12345678(%rax,%rcx,1), %xmm1");
 -      asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm1");
 -      asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm15");
 +      asm volatile("vfixupimmss $0x12,%xmm5,%xmm6,%xmm7{%k7}");
 +      asm volatile("vfixupimmsd $0x12,%xmm5,%xmm6,%xmm7{%k7}");
  
 -      /* sha256msg1 xmm2/m128, xmm1 */
 +      /* AVX-512: Op code 0f 3a 56 */
  
 -      asm volatile("sha256msg1 %xmm1, %xmm0");
 -      asm volatile("sha256msg1 %xmm7, %xmm2");
 -      asm volatile("sha256msg1 %xmm8, %xmm0");
 -      asm volatile("sha256msg1 %xmm7, %xmm8");
 -      asm volatile("sha256msg1 %xmm15, %xmm8");
 -      asm volatile("sha256msg1 (%rax), %xmm0");
 -      asm volatile("sha256msg1 (%r8), %xmm0");
 -      asm volatile("sha256msg1 (0x12345678), %xmm0");
 -      asm volatile("sha256msg1 (%rax), %xmm3");
 -      asm volatile("sha256msg1 (%rcx,%rax,1), %xmm0");
 -      asm volatile("sha256msg1 0x12345678(,%rax,1), %xmm0");
 -      asm volatile("sha256msg1 (%rax,%rcx,1), %xmm0");
 -      asm volatile("sha256msg1 (%rax,%rcx,8), %xmm0");
 -      asm volatile("sha256msg1 0x12(%rax), %xmm0");
 -      asm volatile("sha256msg1 0x12(%rbp), %xmm0");
 -      asm volatile("sha256msg1 0x12(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha256msg1 0x12(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha256msg1 0x12(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha256msg1 0x12(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha256msg1 0x12345678(%rax), %xmm0");
 -      asm volatile("sha256msg1 0x12345678(%rbp), %xmm0");
 -      asm volatile("sha256msg1 0x12345678(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha256msg1 0x12345678(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha256msg1 0x12345678(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm15");
 +      asm volatile("vreduceps $0x12,%zmm6,%zmm7");
 +      asm volatile("vreducepd $0x12,%zmm6,%zmm7");
  
 -      /* sha256msg2 xmm2/m128, xmm1 */
 +      /* AVX-512: Op code 0f 3a 57 */
  
 -      asm volatile("sha256msg2 %xmm1, %xmm0");
 -      asm volatile("sha256msg2 %xmm7, %xmm2");
 -      asm volatile("sha256msg2 %xmm8, %xmm0");
 -      asm volatile("sha256msg2 %xmm7, %xmm8");
 -      asm volatile("sha256msg2 %xmm15, %xmm8");
 -      asm volatile("sha256msg2 (%rax), %xmm0");
 -      asm volatile("sha256msg2 (%r8), %xmm0");
 -      asm volatile("sha256msg2 (0x12345678), %xmm0");
 -      asm volatile("sha256msg2 (%rax), %xmm3");
 -      asm volatile("sha256msg2 (%rcx,%rax,1), %xmm0");
 -      asm volatile("sha256msg2 0x12345678(,%rax,1), %xmm0");
 -      asm volatile("sha256msg2 (%rax,%rcx,1), %xmm0");
 -      asm volatile("sha256msg2 (%rax,%rcx,8), %xmm0");
 -      asm volatile("sha256msg2 0x12(%rax), %xmm0");
 -      asm volatile("sha256msg2 0x12(%rbp), %xmm0");
 -      asm volatile("sha256msg2 0x12(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha256msg2 0x12(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha256msg2 0x12(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha256msg2 0x12(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha256msg2 0x12345678(%rax), %xmm0");
 -      asm volatile("sha256msg2 0x12345678(%rbp), %xmm0");
 -      asm volatile("sha256msg2 0x12345678(%rcx,%rax,1), %xmm0");
 -      asm volatile("sha256msg2 0x12345678(%rbp,%rax,1), %xmm0");
 -      asm volatile("sha256msg2 0x12345678(%rax,%rcx,1), %xmm0");
 -      asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm0");
 -      asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm15");
 +      asm volatile("vreducess $0x12,%xmm5,%xmm6,%xmm7");
 +      asm volatile("vreducesd $0x12,%xmm5,%xmm6,%xmm7");
  
 -      /* clflushopt m8 */
 +      /* AVX-512: Op code 0f 3a 66 */
  
 -      asm volatile("clflushopt (%rax)");
 -      asm volatile("clflushopt (%r8)");
 -      asm volatile("clflushopt (0x12345678)");
 -      asm volatile("clflushopt 0x12345678(%rax,%rcx,8)");
 -      asm volatile("clflushopt 0x12345678(%r8,%rcx,8)");
 -      /* Also check instructions in the same group encoding as clflushopt */
 -      asm volatile("clflush (%rax)");
 -      asm volatile("clflush (%r8)");
 -      asm volatile("sfence");
 +      asm volatile("vfpclassps $0x12,%zmm7,%k5");
 +      asm volatile("vfpclasspd $0x12,%zmm7,%k5");
  
 -      /* clwb m8 */
 +      /* AVX-512: Op code 0f 3a 67 */
  
 -      asm volatile("clwb (%rax)");
 -      asm volatile("clwb (%r8)");
 -      asm volatile("clwb (0x12345678)");
 -      asm volatile("clwb 0x12345678(%rax,%rcx,8)");
 -      asm volatile("clwb 0x12345678(%r8,%rcx,8)");
 -      /* Also check instructions in the same group encoding as clwb */
 -      asm volatile("xsaveopt (%rax)");
 -      asm volatile("xsaveopt (%r8)");
 -      asm volatile("mfence");
 +      asm volatile("vfpclassss $0x12,%xmm7,%k5");
 +      asm volatile("vfpclasssd $0x12,%xmm7,%k5");
  
 -      /* xsavec mem */
 +      /* AVX-512: Op code 0f 72 (Grp13) */
  
 -      asm volatile("xsavec (%rax)");
 -      asm volatile("xsavec (%r8)");
 -      asm volatile("xsavec (0x12345678)");
 -      asm volatile("xsavec 0x12345678(%rax,%rcx,8)");
 -      asm volatile("xsavec 0x12345678(%r8,%rcx,8)");
 +      asm volatile("vprord $0x12,%zmm5,%zmm6");
 +      asm volatile("vprorq $0x12,%zmm5,%zmm6");
 +      asm volatile("vprold $0x12,%zmm5,%zmm6");
 +      asm volatile("vprolq $0x12,%zmm5,%zmm6");
 +      asm volatile("psrad  $0x2,%mm6");
 +      asm volatile("vpsrad $0x5,%ymm6,%ymm2");
 +      asm volatile("vpsrad $0x5,%zmm6,%zmm2");
 +      asm volatile("vpsraq $0x5,%zmm6,%zmm2");
  
 -      /* xsaves mem */
 +      /* AVX-512: Op code 0f 38 c6 (Grp18) */
  
 -      asm volatile("xsaves (%rax)");
 -      asm volatile("xsaves (%r8)");
 -      asm volatile("xsaves (0x12345678)");
 -      asm volatile("xsaves 0x12345678(%rax,%rcx,8)");
 -      asm volatile("xsaves 0x12345678(%r8,%rcx,8)");
 +      asm volatile("vgatherpf0dps 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vgatherpf0dpd 0x7b(%ebp,%ymm7,8){%k1}");
 +      asm volatile("vgatherpf1dps 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vgatherpf1dpd 0x7b(%ebp,%ymm7,8){%k1}");
 +      asm volatile("vscatterpf0dps 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vscatterpf0dpd 0x7b(%ebp,%ymm7,8){%k1}");
 +      asm volatile("vscatterpf1dps 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vscatterpf1dpd 0x7b(%ebp,%ymm7,8){%k1}");
  
 -      /* xrstors mem */
 +      /* AVX-512: Op code 0f 38 c7 (Grp19) */
  
 -      asm volatile("xrstors (%rax)");
 -      asm volatile("xrstors (%r8)");
 -      asm volatile("xrstors (0x12345678)");
 -      asm volatile("xrstors 0x12345678(%rax,%rcx,8)");
 -      asm volatile("xrstors 0x12345678(%r8,%rcx,8)");
 +      asm volatile("vgatherpf0qps 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vgatherpf0qpd 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vgatherpf1qps 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vgatherpf1qpd 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vscatterpf0qps 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vscatterpf0qpd 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vscatterpf1qps 0x7b(%ebp,%zmm7,8){%k1}");
 +      asm volatile("vscatterpf1qpd 0x7b(%ebp,%zmm7,8){%k1}");
  
 -#else  /* #ifdef __x86_64__ */
 +      /* AVX-512: Examples */
 +
 +      asm volatile("vaddpd %zmm4,%zmm5,%zmm6");
 +      asm volatile("vaddpd %zmm4,%zmm5,%zmm6{%k7}");
 +      asm volatile("vaddpd %zmm4,%zmm5,%zmm6{%k7}{z}");
 +      asm volatile("vaddpd {rn-sae},%zmm4,%zmm5,%zmm6");
 +      asm volatile("vaddpd {ru-sae},%zmm4,%zmm5,%zmm6");
 +      asm volatile("vaddpd {rd-sae},%zmm4,%zmm5,%zmm6");
 +      asm volatile("vaddpd {rz-sae},%zmm4,%zmm5,%zmm6");
 +      asm volatile("vaddpd (%ecx),%zmm5,%zmm6");
 +      asm volatile("vaddpd 0x123(%eax,%ecx,8),%zmm5,%zmm6");
 +      asm volatile("vaddpd (%ecx){1to8},%zmm5,%zmm6");
 +      asm volatile("vaddpd 0x1fc0(%edx),%zmm5,%zmm6");
 +      asm volatile("vaddpd 0x3f8(%edx){1to8},%zmm5,%zmm6");
 +      asm volatile("vcmpeq_uqps 0x1fc(%edx){1to16},%zmm6,%k5");
 +      asm volatile("vcmpltsd 0x123(%eax,%ecx,8),%xmm3,%k5{%k7}");
 +      asm volatile("vcmplesd {sae},%xmm4,%xmm5,%k5{%k7}");
 +      asm volatile("vgetmantss $0x5b,0x123(%eax,%ecx,8),%xmm4,%xmm5{%k7}");
  
        /* bndmk m32, bnd */
  
  
  #endif /* #ifndef __x86_64__ */
  
-       /* pcommit */
-       asm volatile("pcommit");
        /* Following line is a marker for the awk script - do not change */
        asm volatile("rdtsc"); /* Stop here */
  
index ec378cd7b71ee4e067d0a4a9beb59413def3296c,28632ee683772bf26e9c7a5a740340b507a9e5d9..767be7c760340bd33b7e4a18b9a8f3a71d9db33e
  # opcode: escape # escaped-name
  # EndTable
  #
 +# mnemonics that begin with lowercase 'v' accept a VEX or EVEX prefix
 +# mnemonics that begin with lowercase 'k' accept a VEX prefix
 +#
  #<group maps>
  # GrpTable: GrpXXX
  # reg:  mnemonic [operand1[,operand2...]] [(extra1)[,(extra2)...] [| 2nd-mnemonic ...]
  # EndTable
  #
  # AVX Superscripts
 +#  (ev): this opcode requires EVEX prefix.
 +#  (evo): this opcode is changed by EVEX prefix (EVEX opcode)
  #  (v): this opcode requires VEX prefix.
  #  (v1): this opcode only supports 128bit VEX.
  #
@@@ -142,7 -137,7 +142,7 @@@ AVXcode
  # 0x60 - 0x6f
  60: PUSHA/PUSHAD (i64)
  61: POPA/POPAD (i64)
 -62: BOUND Gv,Ma (i64)
 +62: BOUND Gv,Ma (i64) | EVEX (Prefix)
  63: ARPL Ew,Gw (i64) | MOVSXD Gv,Ev (o64)
  64: SEG=FS (Prefix)
  65: SEG=GS (Prefix)
@@@ -404,17 -399,17 +404,17 @@@ AVXcode: 
  3f:
  # 0x0f 0x40-0x4f
  40: CMOVO Gv,Ev
 -41: CMOVNO Gv,Ev
 -42: CMOVB/C/NAE Gv,Ev
 +41: CMOVNO Gv,Ev | kandw/q Vk,Hk,Uk | kandb/d Vk,Hk,Uk (66)
 +42: CMOVB/C/NAE Gv,Ev | kandnw/q Vk,Hk,Uk | kandnb/d Vk,Hk,Uk (66)
  43: CMOVAE/NB/NC Gv,Ev
 -44: CMOVE/Z Gv,Ev
 -45: CMOVNE/NZ Gv,Ev
 -46: CMOVBE/NA Gv,Ev
 -47: CMOVA/NBE Gv,Ev
 +44: CMOVE/Z Gv,Ev | knotw/q Vk,Uk | knotb/d Vk,Uk (66)
 +45: CMOVNE/NZ Gv,Ev | korw/q Vk,Hk,Uk | korb/d Vk,Hk,Uk (66)
 +46: CMOVBE/NA Gv,Ev | kxnorw/q Vk,Hk,Uk | kxnorb/d Vk,Hk,Uk (66)
 +47: CMOVA/NBE Gv,Ev | kxorw/q Vk,Hk,Uk | kxorb/d Vk,Hk,Uk (66)
  48: CMOVS Gv,Ev
  49: CMOVNS Gv,Ev
 -4a: CMOVP/PE Gv,Ev
 -4b: CMOVNP/PO Gv,Ev
 +4a: CMOVP/PE Gv,Ev | kaddw/q Vk,Hk,Uk | kaddb/d Vk,Hk,Uk (66)
 +4b: CMOVNP/PO Gv,Ev | kunpckbw Vk,Hk,Uk (66) | kunpckwd/dq Vk,Hk,Uk
  4c: CMOVL/NGE Gv,Ev
  4d: CMOVNL/GE Gv,Ev
  4e: CMOVLE/NG Gv,Ev
  58: vaddps Vps,Hps,Wps | vaddpd Vpd,Hpd,Wpd (66) | vaddss Vss,Hss,Wss (F3),(v1) | vaddsd Vsd,Hsd,Wsd (F2),(v1)
  59: vmulps Vps,Hps,Wps | vmulpd Vpd,Hpd,Wpd (66) | vmulss Vss,Hss,Wss (F3),(v1) | vmulsd Vsd,Hsd,Wsd (F2),(v1)
  5a: vcvtps2pd Vpd,Wps | vcvtpd2ps Vps,Wpd (66) | vcvtss2sd Vsd,Hx,Wss (F3),(v1) | vcvtsd2ss Vss,Hx,Wsd (F2),(v1)
 -5b: vcvtdq2ps Vps,Wdq | vcvtps2dq Vdq,Wps (66) | vcvttps2dq Vdq,Wps (F3)
 +5b: vcvtdq2ps Vps,Wdq | vcvtqq2ps Vps,Wqq (evo) | vcvtps2dq Vdq,Wps (66) | vcvttps2dq Vdq,Wps (F3)
  5c: vsubps Vps,Hps,Wps | vsubpd Vpd,Hpd,Wpd (66) | vsubss Vss,Hss,Wss (F3),(v1) | vsubsd Vsd,Hsd,Wsd (F2),(v1)
  5d: vminps Vps,Hps,Wps | vminpd Vpd,Hpd,Wpd (66) | vminss Vss,Hss,Wss (F3),(v1) | vminsd Vsd,Hsd,Wsd (F2),(v1)
  5e: vdivps Vps,Hps,Wps | vdivpd Vpd,Hpd,Wpd (66) | vdivss Vss,Hss,Wss (F3),(v1) | vdivsd Vsd,Hsd,Wsd (F2),(v1)
  6c: vpunpcklqdq Vx,Hx,Wx (66),(v1)
  6d: vpunpckhqdq Vx,Hx,Wx (66),(v1)
  6e: movd/q Pd,Ey | vmovd/q Vy,Ey (66),(v1)
 -6f: movq Pq,Qq | vmovdqa Vx,Wx (66) | vmovdqu Vx,Wx (F3)
 +6f: movq Pq,Qq | vmovdqa Vx,Wx (66) | vmovdqa32/64 Vx,Wx (66),(evo) | vmovdqu Vx,Wx (F3) | vmovdqu32/64 Vx,Wx (F3),(evo) | vmovdqu8/16 Vx,Wx (F2),(ev)
  # 0x0f 0x70-0x7f
  70: pshufw Pq,Qq,Ib | vpshufd Vx,Wx,Ib (66),(v1) | vpshufhw Vx,Wx,Ib (F3),(v1) | vpshuflw Vx,Wx,Ib (F2),(v1)
  71: Grp12 (1A)
  76: pcmpeqd Pq,Qq | vpcmpeqd Vx,Hx,Wx (66),(v1)
  # Note: Remove (v), because vzeroall and vzeroupper becomes emms without VEX.
  77: emms | vzeroupper | vzeroall
 -78: VMREAD Ey,Gy
 -79: VMWRITE Gy,Ey
 -7a:
 -7b:
 +78: VMREAD Ey,Gy | vcvttps2udq/pd2udq Vx,Wpd (evo) | vcvttsd2usi Gv,Wx (F2),(ev) | vcvttss2usi Gv,Wx (F3),(ev) | vcvttps2uqq/pd2uqq Vx,Wx (66),(ev)
 +79: VMWRITE Gy,Ey | vcvtps2udq/pd2udq Vx,Wpd (evo) | vcvtsd2usi Gv,Wx (F2),(ev) | vcvtss2usi Gv,Wx (F3),(ev) | vcvtps2uqq/pd2uqq Vx,Wx (66),(ev)
 +7a: vcvtudq2pd/uqq2pd Vpd,Wx (F3),(ev) | vcvtudq2ps/uqq2ps Vpd,Wx (F2),(ev) | vcvttps2qq/pd2qq Vx,Wx (66),(ev)
 +7b: vcvtusi2sd Vpd,Hpd,Ev (F2),(ev) | vcvtusi2ss Vps,Hps,Ev (F3),(ev) | vcvtps2qq/pd2qq Vx,Wx (66),(ev)
  7c: vhaddpd Vpd,Hpd,Wpd (66) | vhaddps Vps,Hps,Wps (F2)
  7d: vhsubpd Vpd,Hpd,Wpd (66) | vhsubps Vps,Hps,Wps (F2)
  7e: movd/q Ey,Pd | vmovd/q Ey,Vy (66),(v1) | vmovq Vq,Wq (F3),(v1)
 -7f: movq Qq,Pq | vmovdqa Wx,Vx (66) | vmovdqu Wx,Vx (F3)
 +7f: movq Qq,Pq | vmovdqa Wx,Vx (66) | vmovdqa32/64 Wx,Vx (66),(evo) | vmovdqu Wx,Vx (F3) | vmovdqu32/64 Wx,Vx (F3),(evo) | vmovdqu8/16 Wx,Vx (F2),(ev)
  # 0x0f 0x80-0x8f
  # Note: "forced64" is Intel CPU behavior (see comment about CALL insn).
  80: JO Jz (f64)
  8e: JLE/JNG Jz (f64)
  8f: JNLE/JG Jz (f64)
  # 0x0f 0x90-0x9f
 -90: SETO Eb
 -91: SETNO Eb
 -92: SETB/C/NAE Eb
 -93: SETAE/NB/NC Eb
 +90: SETO Eb | kmovw/q Vk,Wk | kmovb/d Vk,Wk (66)
 +91: SETNO Eb | kmovw/q Mv,Vk | kmovb/d Mv,Vk (66)
 +92: SETB/C/NAE Eb | kmovw Vk,Rv | kmovb Vk,Rv (66) | kmovq/d Vk,Rv (F2)
 +93: SETAE/NB/NC Eb | kmovw Gv,Uk | kmovb Gv,Uk (66) | kmovq/d Gv,Uk (F2)
  94: SETE/Z Eb
  95: SETNE/NZ Eb
  96: SETBE/NA Eb
  97: SETA/NBE Eb
 -98: SETS Eb
 -99: SETNS Eb
 +98: SETS Eb | kortestw/q Vk,Uk | kortestb/d Vk,Uk (66)
 +99: SETNS Eb | ktestw/q Vk,Uk | ktestb/d Vk,Uk (66)
  9a: SETP/PE Eb
  9b: SETNP/PO Eb
  9c: SETL/NGE Eb
@@@ -569,11 -564,11 +569,11 @@@ d7: pmovmskb Gd,Nq | vpmovmskb Gd,Ux (6
  d8: psubusb Pq,Qq | vpsubusb Vx,Hx,Wx (66),(v1)
  d9: psubusw Pq,Qq | vpsubusw Vx,Hx,Wx (66),(v1)
  da: pminub Pq,Qq | vpminub Vx,Hx,Wx (66),(v1)
 -db: pand Pq,Qq | vpand Vx,Hx,Wx (66),(v1)
 +db: pand Pq,Qq | vpand Vx,Hx,Wx (66),(v1) | vpandd/q Vx,Hx,Wx (66),(evo)
  dc: paddusb Pq,Qq | vpaddusb Vx,Hx,Wx (66),(v1)
  dd: paddusw Pq,Qq | vpaddusw Vx,Hx,Wx (66),(v1)
  de: pmaxub Pq,Qq | vpmaxub Vx,Hx,Wx (66),(v1)
 -df: pandn Pq,Qq | vpandn Vx,Hx,Wx (66),(v1)
 +df: pandn Pq,Qq | vpandn Vx,Hx,Wx (66),(v1) | vpandnd/q Vx,Hx,Wx (66),(evo)
  # 0x0f 0xe0-0xef
  e0: pavgb Pq,Qq | vpavgb Vx,Hx,Wx (66),(v1)
  e1: psraw Pq,Qq | vpsraw Vx,Hx,Wx (66),(v1)
@@@ -581,16 -576,16 +581,16 @@@ e2: psrad Pq,Qq | vpsrad Vx,Hx,Wx (66),
  e3: pavgw Pq,Qq | vpavgw Vx,Hx,Wx (66),(v1)
  e4: pmulhuw Pq,Qq | vpmulhuw Vx,Hx,Wx (66),(v1)
  e5: pmulhw Pq,Qq | vpmulhw Vx,Hx,Wx (66),(v1)
 -e6: vcvttpd2dq Vx,Wpd (66) | vcvtdq2pd Vx,Wdq (F3) | vcvtpd2dq Vx,Wpd (F2)
 +e6: vcvttpd2dq Vx,Wpd (66) | vcvtdq2pd Vx,Wdq (F3) | vcvtdq2pd/qq2pd Vx,Wdq (F3),(evo) | vcvtpd2dq Vx,Wpd (F2)
  e7: movntq Mq,Pq | vmovntdq Mx,Vx (66)
  e8: psubsb Pq,Qq | vpsubsb Vx,Hx,Wx (66),(v1)
  e9: psubsw Pq,Qq | vpsubsw Vx,Hx,Wx (66),(v1)
  ea: pminsw Pq,Qq | vpminsw Vx,Hx,Wx (66),(v1)
 -eb: por Pq,Qq | vpor Vx,Hx,Wx (66),(v1)
 +eb: por Pq,Qq | vpor Vx,Hx,Wx (66),(v1) | vpord/q Vx,Hx,Wx (66),(evo)
  ec: paddsb Pq,Qq | vpaddsb Vx,Hx,Wx (66),(v1)
  ed: paddsw Pq,Qq | vpaddsw Vx,Hx,Wx (66),(v1)
  ee: pmaxsw Pq,Qq | vpmaxsw Vx,Hx,Wx (66),(v1)
 -ef: pxor Pq,Qq | vpxor Vx,Hx,Wx (66),(v1)
 +ef: pxor Pq,Qq | vpxor Vx,Hx,Wx (66),(v1) | vpxord/q Vx,Hx,Wx (66),(evo)
  # 0x0f 0xf0-0xff
  f0: vlddqu Vx,Mx (F2)
  f1: psllw Pq,Qq | vpsllw Vx,Hx,Wx (66),(v1)
@@@ -631,105 -626,81 +631,105 @@@ AVXcode: 
  0e: vtestps Vx,Wx (66),(v)
  0f: vtestpd Vx,Wx (66),(v)
  # 0x0f 0x38 0x10-0x1f
 -10: pblendvb Vdq,Wdq (66)
 -11:
 -12:
 -13: vcvtph2ps Vx,Wx,Ib (66),(v)
 -14: blendvps Vdq,Wdq (66)
 -15: blendvpd Vdq,Wdq (66)
 -16: vpermps Vqq,Hqq,Wqq (66),(v)
 +10: pblendvb Vdq,Wdq (66) | vpsrlvw Vx,Hx,Wx (66),(evo) | vpmovuswb Wx,Vx (F3),(ev)
 +11: vpmovusdb Wx,Vd (F3),(ev) | vpsravw Vx,Hx,Wx (66),(ev)
 +12: vpmovusqb Wx,Vq (F3),(ev) | vpsllvw Vx,Hx,Wx (66),(ev)
 +13: vcvtph2ps Vx,Wx (66),(v) | vpmovusdw Wx,Vd (F3),(ev)
 +14: blendvps Vdq,Wdq (66) | vpmovusqw Wx,Vq (F3),(ev) | vprorvd/q Vx,Hx,Wx (66),(evo)
 +15: blendvpd Vdq,Wdq (66) | vpmovusqd Wx,Vq (F3),(ev) | vprolvd/q Vx,Hx,Wx (66),(evo)
 +16: vpermps Vqq,Hqq,Wqq (66),(v) | vpermps/d Vqq,Hqq,Wqq (66),(evo)
  17: vptest Vx,Wx (66)
  18: vbroadcastss Vx,Wd (66),(v)
 -19: vbroadcastsd Vqq,Wq (66),(v)
 -1a: vbroadcastf128 Vqq,Mdq (66),(v)
 -1b:
 +19: vbroadcastsd Vqq,Wq (66),(v) | vbroadcastf32x2 Vqq,Wq (66),(evo)
 +1a: vbroadcastf128 Vqq,Mdq (66),(v) | vbroadcastf32x4/64x2 Vqq,Wq (66),(evo)
 +1b: vbroadcastf32x8/64x4 Vqq,Mdq (66),(ev)
  1c: pabsb Pq,Qq | vpabsb Vx,Wx (66),(v1)
  1d: pabsw Pq,Qq | vpabsw Vx,Wx (66),(v1)
  1e: pabsd Pq,Qq | vpabsd Vx,Wx (66),(v1)
 -1f:
 +1f: vpabsq Vx,Wx (66),(ev)
  # 0x0f 0x38 0x20-0x2f
 -20: vpmovsxbw Vx,Ux/Mq (66),(v1)
 -21: vpmovsxbd Vx,Ux/Md (66),(v1)
 -22: vpmovsxbq Vx,Ux/Mw (66),(v1)
 -23: vpmovsxwd Vx,Ux/Mq (66),(v1)
 -24: vpmovsxwq Vx,Ux/Md (66),(v1)
 -25: vpmovsxdq Vx,Ux/Mq (66),(v1)
 -26:
 -27:
 -28: vpmuldq Vx,Hx,Wx (66),(v1)
 -29: vpcmpeqq Vx,Hx,Wx (66),(v1)
 -2a: vmovntdqa Vx,Mx (66),(v1)
 +20: vpmovsxbw Vx,Ux/Mq (66),(v1) | vpmovswb Wx,Vx (F3),(ev)
 +21: vpmovsxbd Vx,Ux/Md (66),(v1) | vpmovsdb Wx,Vd (F3),(ev)
 +22: vpmovsxbq Vx,Ux/Mw (66),(v1) | vpmovsqb Wx,Vq (F3),(ev)
 +23: vpmovsxwd Vx,Ux/Mq (66),(v1) | vpmovsdw Wx,Vd (F3),(ev)
 +24: vpmovsxwq Vx,Ux/Md (66),(v1) | vpmovsqw Wx,Vq (F3),(ev)
 +25: vpmovsxdq Vx,Ux/Mq (66),(v1) | vpmovsqd Wx,Vq (F3),(ev)
 +26: vptestmb/w Vk,Hx,Wx (66),(ev) | vptestnmb/w Vk,Hx,Wx (F3),(ev)
 +27: vptestmd/q Vk,Hx,Wx (66),(ev) | vptestnmd/q Vk,Hx,Wx (F3),(ev)
 +28: vpmuldq Vx,Hx,Wx (66),(v1) | vpmovm2b/w Vx,Uk (F3),(ev)
 +29: vpcmpeqq Vx,Hx,Wx (66),(v1) | vpmovb2m/w2m Vk,Ux (F3),(ev)
 +2a: vmovntdqa Vx,Mx (66),(v1) | vpbroadcastmb2q Vx,Uk (F3),(ev)
  2b: vpackusdw Vx,Hx,Wx (66),(v1)
 -2c: vmaskmovps Vx,Hx,Mx (66),(v)
 -2d: vmaskmovpd Vx,Hx,Mx (66),(v)
 +2c: vmaskmovps Vx,Hx,Mx (66),(v) | vscalefps/d Vx,Hx,Wx (66),(evo)
 +2d: vmaskmovpd Vx,Hx,Mx (66),(v) | vscalefss/d Vx,Hx,Wx (66),(evo)
  2e: vmaskmovps Mx,Hx,Vx (66),(v)
  2f: vmaskmovpd Mx,Hx,Vx (66),(v)
  # 0x0f 0x38 0x30-0x3f
 -30: vpmovzxbw Vx,Ux/Mq (66),(v1)
 -31: vpmovzxbd Vx,Ux/Md (66),(v1)
 -32: vpmovzxbq Vx,Ux/Mw (66),(v1)
 -33: vpmovzxwd Vx,Ux/Mq (66),(v1)
 -34: vpmovzxwq Vx,Ux/Md (66),(v1)
 -35: vpmovzxdq Vx,Ux/Mq (66),(v1)
 -36: vpermd Vqq,Hqq,Wqq (66),(v)
 +30: vpmovzxbw Vx,Ux/Mq (66),(v1) | vpmovwb Wx,Vx (F3),(ev)
 +31: vpmovzxbd Vx,Ux/Md (66),(v1) | vpmovdb Wx,Vd (F3),(ev)
 +32: vpmovzxbq Vx,Ux/Mw (66),(v1) | vpmovqb Wx,Vq (F3),(ev)
 +33: vpmovzxwd Vx,Ux/Mq (66),(v1) | vpmovdw Wx,Vd (F3),(ev)
 +34: vpmovzxwq Vx,Ux/Md (66),(v1) | vpmovqw Wx,Vq (F3),(ev)
 +35: vpmovzxdq Vx,Ux/Mq (66),(v1) | vpmovqd Wx,Vq (F3),(ev)
 +36: vpermd Vqq,Hqq,Wqq (66),(v) | vpermd/q Vqq,Hqq,Wqq (66),(evo)
  37: vpcmpgtq Vx,Hx,Wx (66),(v1)
 -38: vpminsb Vx,Hx,Wx (66),(v1)
 -39: vpminsd Vx,Hx,Wx (66),(v1)
 -3a: vpminuw Vx,Hx,Wx (66),(v1)
 -3b: vpminud Vx,Hx,Wx (66),(v1)
 +38: vpminsb Vx,Hx,Wx (66),(v1) | vpmovm2d/q Vx,Uk (F3),(ev)
 +39: vpminsd Vx,Hx,Wx (66),(v1) | vpminsd/q Vx,Hx,Wx (66),(evo) | vpmovd2m/q2m Vk,Ux (F3),(ev)
 +3a: vpminuw Vx,Hx,Wx (66),(v1) | vpbroadcastmw2d Vx,Uk (F3),(ev)
 +3b: vpminud Vx,Hx,Wx (66),(v1) | vpminud/q Vx,Hx,Wx (66),(evo)
  3c: vpmaxsb Vx,Hx,Wx (66),(v1)
 -3d: vpmaxsd Vx,Hx,Wx (66),(v1)
 +3d: vpmaxsd Vx,Hx,Wx (66),(v1) | vpmaxsd/q Vx,Hx,Wx (66),(evo)
  3e: vpmaxuw Vx,Hx,Wx (66),(v1)
 -3f: vpmaxud Vx,Hx,Wx (66),(v1)
 +3f: vpmaxud Vx,Hx,Wx (66),(v1) | vpmaxud/q Vx,Hx,Wx (66),(evo)
  # 0x0f 0x38 0x40-0x8f
 -40: vpmulld Vx,Hx,Wx (66),(v1)
 +40: vpmulld Vx,Hx,Wx (66),(v1) | vpmulld/q Vx,Hx,Wx (66),(evo)
  41: vphminposuw Vdq,Wdq (66),(v1)
 -42:
 -43:
 -44:
 +42: vgetexpps/d Vx,Wx (66),(ev)
 +43: vgetexpss/d Vx,Hx,Wx (66),(ev)
 +44: vplzcntd/q Vx,Wx (66),(ev)
  45: vpsrlvd/q Vx,Hx,Wx (66),(v)
 -46: vpsravd Vx,Hx,Wx (66),(v)
 +46: vpsravd Vx,Hx,Wx (66),(v) | vpsravd/q Vx,Hx,Wx (66),(evo)
  47: vpsllvd/q Vx,Hx,Wx (66),(v)
 -# Skip 0x48-0x57
 +# Skip 0x48-0x4b
 +4c: vrcp14ps/d Vpd,Wpd (66),(ev)
 +4d: vrcp14ss/d Vsd,Hpd,Wsd (66),(ev)
 +4e: vrsqrt14ps/d Vpd,Wpd (66),(ev)
 +4f: vrsqrt14ss/d Vsd,Hsd,Wsd (66),(ev)
 +# Skip 0x50-0x57
  58: vpbroadcastd Vx,Wx (66),(v)
 -59: vpbroadcastq Vx,Wx (66),(v)
 -5a: vbroadcasti128 Vqq,Mdq (66),(v)
 -# Skip 0x5b-0x77
 +59: vpbroadcastq Vx,Wx (66),(v) | vbroadcasti32x2 Vx,Wx (66),(evo)
 +5a: vbroadcasti128 Vqq,Mdq (66),(v) | vbroadcasti32x4/64x2 Vx,Wx (66),(evo)
 +5b: vbroadcasti32x8/64x4 Vqq,Mdq (66),(ev)
 +# Skip 0x5c-0x63
 +64: vpblendmd/q Vx,Hx,Wx (66),(ev)
 +65: vblendmps/d Vx,Hx,Wx (66),(ev)
 +66: vpblendmb/w Vx,Hx,Wx (66),(ev)
 +# Skip 0x67-0x74
 +75: vpermi2b/w Vx,Hx,Wx (66),(ev)
 +76: vpermi2d/q Vx,Hx,Wx (66),(ev)
 +77: vpermi2ps/d Vx,Hx,Wx (66),(ev)
  78: vpbroadcastb Vx,Wx (66),(v)
  79: vpbroadcastw Vx,Wx (66),(v)
 -# Skip 0x7a-0x7f
 +7a: vpbroadcastb Vx,Rv (66),(ev)
 +7b: vpbroadcastw Vx,Rv (66),(ev)
 +7c: vpbroadcastd/q Vx,Rv (66),(ev)
 +7d: vpermt2b/w Vx,Hx,Wx (66),(ev)
 +7e: vpermt2d/q Vx,Hx,Wx (66),(ev)
 +7f: vpermt2ps/d Vx,Hx,Wx (66),(ev)
  80: INVEPT Gy,Mdq (66)
  81: INVPID Gy,Mdq (66)
  82: INVPCID Gy,Mdq (66)
 +83: vpmultishiftqb Vx,Hx,Wx (66),(ev)
 +88: vexpandps/d Vpd,Wpd (66),(ev)
 +89: vpexpandd/q Vx,Wx (66),(ev)
 +8a: vcompressps/d Wx,Vx (66),(ev)
 +8b: vpcompressd/q Wx,Vx (66),(ev)
  8c: vpmaskmovd/q Vx,Hx,Mx (66),(v)
 +8d: vpermb/w Vx,Hx,Wx (66),(ev)
  8e: vpmaskmovd/q Mx,Vx,Hx (66),(v)
  # 0x0f 0x38 0x90-0xbf (FMA)
 -90: vgatherdd/q Vx,Hx,Wx (66),(v)
 -91: vgatherqd/q Vx,Hx,Wx (66),(v)
 +90: vgatherdd/q Vx,Hx,Wx (66),(v) | vpgatherdd/q Vx,Wx (66),(evo)
 +91: vgatherqd/q Vx,Hx,Wx (66),(v) | vpgatherqd/q Vx,Wx (66),(evo)
  92: vgatherdps/d Vx,Hx,Wx (66),(v)
  93: vgatherqps/d Vx,Hx,Wx (66),(v)
  94:
  9d: vfnmadd132ss/d Vx,Hx,Wx (66),(v),(v1)
  9e: vfnmsub132ps/d Vx,Hx,Wx (66),(v)
  9f: vfnmsub132ss/d Vx,Hx,Wx (66),(v),(v1)
 +a0: vpscatterdd/q Wx,Vx (66),(ev)
 +a1: vpscatterqd/q Wx,Vx (66),(ev)
 +a2: vscatterdps/d Wx,Vx (66),(ev)
 +a3: vscatterqps/d Wx,Vx (66),(ev)
  a6: vfmaddsub213ps/d Vx,Hx,Wx (66),(v)
  a7: vfmsubadd213ps/d Vx,Hx,Wx (66),(v)
  a8: vfmadd213ps/d Vx,Hx,Wx (66),(v)
@@@ -758,8 -725,6 +758,8 @@@ ac: vfnmadd213ps/d Vx,Hx,Wx (66),(v
  ad: vfnmadd213ss/d Vx,Hx,Wx (66),(v),(v1)
  ae: vfnmsub213ps/d Vx,Hx,Wx (66),(v)
  af: vfnmsub213ss/d Vx,Hx,Wx (66),(v),(v1)
 +b4: vpmadd52luq Vx,Hx,Wx (66),(ev)
 +b5: vpmadd52huq Vx,Hx,Wx (66),(ev)
  b6: vfmaddsub231ps/d Vx,Hx,Wx (66),(v)
  b7: vfmsubadd231ps/d Vx,Hx,Wx (66),(v)
  b8: vfmadd231ps/d Vx,Hx,Wx (66),(v)
@@@ -771,15 -736,12 +771,15 @@@ bd: vfnmadd231ss/d Vx,Hx,Wx (66),(v),(v
  be: vfnmsub231ps/d Vx,Hx,Wx (66),(v)
  bf: vfnmsub231ss/d Vx,Hx,Wx (66),(v),(v1)
  # 0x0f 0x38 0xc0-0xff
 -c8: sha1nexte Vdq,Wdq
 +c4: vpconflictd/q Vx,Wx (66),(ev)
 +c6: Grp18 (1A)
 +c7: Grp19 (1A)
 +c8: sha1nexte Vdq,Wdq | vexp2ps/d Vx,Wx (66),(ev)
  c9: sha1msg1 Vdq,Wdq
 -ca: sha1msg2 Vdq,Wdq
 -cb: sha256rnds2 Vdq,Wdq
 -cc: sha256msg1 Vdq,Wdq
 -cd: sha256msg2 Vdq,Wdq
 +ca: sha1msg2 Vdq,Wdq | vrcp28ps/d Vx,Wx (66),(ev)
 +cb: sha256rnds2 Vdq,Wdq | vrcp28ss/d Vx,Hx,Wx (66),(ev)
 +cc: sha256msg1 Vdq,Wdq | vrsqrt28ps/d Vx,Wx (66),(ev)
 +cd: sha256msg2 Vdq,Wdq | vrsqrt28ss/d Vx,Hx,Wx (66),(ev)
  db: VAESIMC Vdq,Wdq (66),(v1)
  dc: VAESENC Vdq,Hdq,Wdq (66),(v1)
  dd: VAESENCLAST Vdq,Hdq,Wdq (66),(v1)
@@@ -801,15 -763,15 +801,15 @@@ AVXcode: 
  00: vpermq Vqq,Wqq,Ib (66),(v)
  01: vpermpd Vqq,Wqq,Ib (66),(v)
  02: vpblendd Vx,Hx,Wx,Ib (66),(v)
 -03:
 +03: valignd/q Vx,Hx,Wx,Ib (66),(ev)
  04: vpermilps Vx,Wx,Ib (66),(v)
  05: vpermilpd Vx,Wx,Ib (66),(v)
  06: vperm2f128 Vqq,Hqq,Wqq,Ib (66),(v)
  07:
 -08: vroundps Vx,Wx,Ib (66)
 -09: vroundpd Vx,Wx,Ib (66)
 -0a: vroundss Vss,Wss,Ib (66),(v1)
 -0b: vroundsd Vsd,Wsd,Ib (66),(v1)
 +08: vroundps Vx,Wx,Ib (66) | vrndscaleps Vx,Wx,Ib (66),(evo)
 +09: vroundpd Vx,Wx,Ib (66) | vrndscalepd Vx,Wx,Ib (66),(evo)
 +0a: vroundss Vss,Wss,Ib (66),(v1) | vrndscaless Vx,Hx,Wx,Ib (66),(evo)
 +0b: vroundsd Vsd,Wsd,Ib (66),(v1) | vrndscalesd Vx,Hx,Wx,Ib (66),(evo)
  0c: vblendps Vx,Hx,Wx,Ib (66)
  0d: vblendpd Vx,Hx,Wx,Ib (66)
  0e: vpblendw Vx,Hx,Wx,Ib (66),(v1)
  15: vpextrw Rd/Mw,Vdq,Ib (66),(v1)
  16: vpextrd/q Ey,Vdq,Ib (66),(v1)
  17: vextractps Ed,Vdq,Ib (66),(v1)
 -18: vinsertf128 Vqq,Hqq,Wqq,Ib (66),(v)
 -19: vextractf128 Wdq,Vqq,Ib (66),(v)
 +18: vinsertf128 Vqq,Hqq,Wqq,Ib (66),(v) | vinsertf32x4/64x2 Vqq,Hqq,Wqq,Ib (66),(evo)
 +19: vextractf128 Wdq,Vqq,Ib (66),(v) | vextractf32x4/64x2 Wdq,Vqq,Ib (66),(evo)
 +1a: vinsertf32x8/64x4 Vqq,Hqq,Wqq,Ib (66),(ev)
 +1b: vextractf32x8/64x4 Wdq,Vqq,Ib (66),(ev)
  1d: vcvtps2ph Wx,Vx,Ib (66),(v)
 +1e: vpcmpud/q Vk,Hd,Wd,Ib (66),(ev)
 +1f: vpcmpd/q Vk,Hd,Wd,Ib (66),(ev)
  20: vpinsrb Vdq,Hdq,Ry/Mb,Ib (66),(v1)
  21: vinsertps Vdq,Hdq,Udq/Md,Ib (66),(v1)
  22: vpinsrd/q Vdq,Hdq,Ey,Ib (66),(v1)
 -38: vinserti128 Vqq,Hqq,Wqq,Ib (66),(v)
 -39: vextracti128 Wdq,Vqq,Ib (66),(v)
 +23: vshuff32x4/64x2 Vx,Hx,Wx,Ib (66),(ev)
 +25: vpternlogd/q Vx,Hx,Wx,Ib (66),(ev)
 +26: vgetmantps/d Vx,Wx,Ib (66),(ev)
 +27: vgetmantss/d Vx,Hx,Wx,Ib (66),(ev)
 +30: kshiftrb/w Vk,Uk,Ib (66),(v)
 +31: kshiftrd/q Vk,Uk,Ib (66),(v)
 +32: kshiftlb/w Vk,Uk,Ib (66),(v)
 +33: kshiftld/q Vk,Uk,Ib (66),(v)
 +38: vinserti128 Vqq,Hqq,Wqq,Ib (66),(v) | vinserti32x4/64x2 Vqq,Hqq,Wqq,Ib (66),(evo)
 +39: vextracti128 Wdq,Vqq,Ib (66),(v) | vextracti32x4/64x2 Wdq,Vqq,Ib (66),(evo)
 +3a: vinserti32x8/64x4 Vqq,Hqq,Wqq,Ib (66),(ev)
 +3b: vextracti32x8/64x4 Wdq,Vqq,Ib (66),(ev)
 +3e: vpcmpub/w Vk,Hk,Wx,Ib (66),(ev)
 +3f: vpcmpb/w Vk,Hk,Wx,Ib (66),(ev)
  40: vdpps Vx,Hx,Wx,Ib (66)
  41: vdppd Vdq,Hdq,Wdq,Ib (66),(v1)
 -42: vmpsadbw Vx,Hx,Wx,Ib (66),(v1)
 +42: vmpsadbw Vx,Hx,Wx,Ib (66),(v1) | vdbpsadbw Vx,Hx,Wx,Ib (66),(evo)
 +43: vshufi32x4/64x2 Vx,Hx,Wx,Ib (66),(ev)
  44: vpclmulqdq Vdq,Hdq,Wdq,Ib (66),(v1)
  46: vperm2i128 Vqq,Hqq,Wqq,Ib (66),(v)
  4a: vblendvps Vx,Hx,Wx,Lx (66),(v)
  4b: vblendvpd Vx,Hx,Wx,Lx (66),(v)
  4c: vpblendvb Vx,Hx,Wx,Lx (66),(v1)
 +50: vrangeps/d Vx,Hx,Wx,Ib (66),(ev)
 +51: vrangess/d Vx,Hx,Wx,Ib (66),(ev)
 +54: vfixupimmps/d Vx,Hx,Wx,Ib (66),(ev)
 +55: vfixupimmss/d Vx,Hx,Wx,Ib (66),(ev)
 +56: vreduceps/d Vx,Wx,Ib (66),(ev)
 +57: vreducess/d Vx,Hx,Wx,Ib (66),(ev)
  60: vpcmpestrm Vdq,Wdq,Ib (66),(v1)
  61: vpcmpestri Vdq,Wdq,Ib (66),(v1)
  62: vpcmpistrm Vdq,Wdq,Ib (66),(v1)
  63: vpcmpistri Vdq,Wdq,Ib (66),(v1)
 +66: vfpclassps/d Vk,Wx,Ib (66),(ev)
 +67: vfpclassss/d Vk,Wx,Ib (66),(ev)
  cc: sha1rnds4 Vdq,Wdq,Ib
  df: VAESKEYGEN Vdq,Wdq,Ib (66),(v1)
  f0: RORX Gy,Ey,Ib (F2),(v)
@@@ -990,10 -927,8 +990,10 @@@ GrpTable: Grp1
  EndTable
  
  GrpTable: Grp13
 +0: vprord/q Hx,Wx,Ib (66),(ev)
 +1: vprold/q Hx,Wx,Ib (66),(ev)
  2: psrld Nq,Ib (11B) | vpsrld Hx,Ux,Ib (66),(11B),(v1)
 -4: psrad Nq,Ib (11B) | vpsrad Hx,Ux,Ib (66),(11B),(v1)
 +4: psrad Nq,Ib (11B) | vpsrad Hx,Ux,Ib (66),(11B),(v1) | vpsrad/q Hx,Ux,Ib (66),(evo)
  6: pslld Nq,Ib (11B) | vpslld Hx,Ux,Ib (66),(11B),(v1)
  EndTable
  
@@@ -1012,7 -947,7 +1012,7 @@@ GrpTable: Grp1
  4: XSAVE
  5: XRSTOR | lfence (11B)
  6: XSAVEOPT | clwb (66) | mfence (11B)
- 7: clflush | clflushopt (66) | sfence (11B) | pcommit (66),(11B)
+ 7: clflush | clflushopt (66) | sfence (11B)
  EndTable
  
  GrpTable: Grp16
@@@ -1028,20 -963,6 +1028,20 @@@ GrpTable: Grp1
  3: BLSI By,Ey (v)
  EndTable
  
 +GrpTable: Grp18
 +1: vgatherpf0dps/d Wx (66),(ev)
 +2: vgatherpf1dps/d Wx (66),(ev)
 +5: vscatterpf0dps/d Wx (66),(ev)
 +6: vscatterpf1dps/d Wx (66),(ev)
 +EndTable
 +
 +GrpTable: Grp19
 +1: vgatherpf0qps/d Wx (66),(ev)
 +2: vgatherpf1qps/d Wx (66),(ev)
 +5: vscatterpf0qps/d Wx (66),(ev)
 +6: vscatterpf1qps/d Wx (66),(ev)
 +EndTable
 +
  # AMD's Prefetch Group
  GrpTable: GrpP
  0: PREFETCH