Files
TheRock/compiler/amd-llvm/llvm/lib/Target/X86/X86ReplaceableInstrs.def
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

427 lines
21 KiB
Modula-2

//===- X86ReplaceableInstrs.def ----------------------------------*- C++ -*-==//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// These are the replaceable SSE instructions. Some of these have Int variants
// that we don't include here. We don't want to replace instructions selected
// by intrinsics.
#define ENTRY(A, B, C) {X86::A, X86::B, X86::C},
static const uint16_t ReplaceableInstrs[][3] = {
// PackedSingle, PackedDouble, PackedInt
ENTRY(MOVAPSmr, MOVAPDmr, MOVDQAmr)
ENTRY(MOVAPSrm, MOVAPDrm, MOVDQArm)
ENTRY(MOVAPSrr, MOVAPDrr, MOVDQArr)
ENTRY(MOVUPSmr, MOVUPDmr, MOVDQUmr)
ENTRY(MOVUPSrm, MOVUPDrm, MOVDQUrm)
ENTRY(MOVLPSmr, MOVLPDmr, MOVPQI2QImr)
ENTRY(MOVSDmr, MOVSDmr, MOVPQI2QImr)
ENTRY(MOVSSmr, MOVSSmr, MOVPDI2DImr)
ENTRY(MOVSDrm, MOVSDrm, MOVQI2PQIrm)
ENTRY(MOVSDrm_alt, MOVSDrm_alt, MOVQI2PQIrm)
ENTRY(MOVSSrm, MOVSSrm, MOVDI2PDIrm)
ENTRY(MOVSSrm_alt, MOVSSrm_alt, MOVDI2PDIrm)
ENTRY(MOVNTPSmr, MOVNTPDmr, MOVNTDQmr)
ENTRY(ANDNPSrm, ANDNPDrm, PANDNrm)
ENTRY(ANDNPSrr, ANDNPDrr, PANDNrr)
ENTRY(ANDPSrm, ANDPDrm, PANDrm)
ENTRY(ANDPSrr, ANDPDrr, PANDrr)
ENTRY(ORPSrm, ORPDrm, PORrm)
ENTRY(ORPSrr, ORPDrr, PORrr)
ENTRY(XORPSrm, XORPDrm, PXORrm)
ENTRY(XORPSrr, XORPDrr, PXORrr)
ENTRY(UNPCKLPDrm, UNPCKLPDrm, PUNPCKLQDQrm)
ENTRY(MOVLHPSrr, UNPCKLPDrr, PUNPCKLQDQrr)
ENTRY(UNPCKHPDrm, UNPCKHPDrm, PUNPCKHQDQrm)
ENTRY(UNPCKHPDrr, UNPCKHPDrr, PUNPCKHQDQrr)
ENTRY(UNPCKLPSrm, UNPCKLPSrm, PUNPCKLDQrm)
ENTRY(UNPCKLPSrr, UNPCKLPSrr, PUNPCKLDQrr)
ENTRY(UNPCKHPSrm, UNPCKHPSrm, PUNPCKHDQrm)
ENTRY(UNPCKHPSrr, UNPCKHPSrr, PUNPCKHDQrr)
ENTRY(EXTRACTPSmri, EXTRACTPSmri, PEXTRDmri)
ENTRY(EXTRACTPSrri, EXTRACTPSrri, PEXTRDrri)
// AVX 128-bit support
ENTRY(VMOVAPSmr, VMOVAPDmr, VMOVDQAmr)
ENTRY(VMOVAPSrm, VMOVAPDrm, VMOVDQArm)
ENTRY(VMOVAPSrr, VMOVAPDrr, VMOVDQArr)
ENTRY(VMOVUPSmr, VMOVUPDmr, VMOVDQUmr)
ENTRY(VMOVUPSrm, VMOVUPDrm, VMOVDQUrm)
ENTRY(VMOVLPSmr, VMOVLPDmr, VMOVPQI2QImr)
ENTRY(VMOVSDmr, VMOVSDmr, VMOVPQI2QImr)
ENTRY(VMOVSSmr, VMOVSSmr, VMOVPDI2DImr)
ENTRY(VMOVSDrm, VMOVSDrm, VMOVQI2PQIrm)
ENTRY(VMOVSDrm_alt, VMOVSDrm_alt, VMOVQI2PQIrm)
ENTRY(VMOVSSrm, VMOVSSrm, VMOVDI2PDIrm)
ENTRY(VMOVSSrm_alt, VMOVSSrm_alt, VMOVDI2PDIrm)
ENTRY(VMOVNTPSmr, VMOVNTPDmr, VMOVNTDQmr)
ENTRY(VANDNPSrm, VANDNPDrm, VPANDNrm)
ENTRY(VANDNPSrr, VANDNPDrr, VPANDNrr)
ENTRY(VANDPSrm, VANDPDrm, VPANDrm)
ENTRY(VANDPSrr, VANDPDrr, VPANDrr)
ENTRY(VORPSrm, VORPDrm, VPORrm)
ENTRY(VORPSrr, VORPDrr, VPORrr)
ENTRY(VXORPSrm, VXORPDrm, VPXORrm)
ENTRY(VXORPSrr, VXORPDrr, VPXORrr)
ENTRY(VUNPCKLPDrm, VUNPCKLPDrm, VPUNPCKLQDQrm)
ENTRY(VMOVLHPSrr, VUNPCKLPDrr, VPUNPCKLQDQrr)
ENTRY(VUNPCKHPDrm, VUNPCKHPDrm, VPUNPCKHQDQrm)
ENTRY(VUNPCKHPDrr, VUNPCKHPDrr, VPUNPCKHQDQrr)
ENTRY(VUNPCKLPSrm, VUNPCKLPSrm, VPUNPCKLDQrm)
ENTRY(VUNPCKLPSrr, VUNPCKLPSrr, VPUNPCKLDQrr)
ENTRY(VUNPCKHPSrm, VUNPCKHPSrm, VPUNPCKHDQrm)
ENTRY(VUNPCKHPSrr, VUNPCKHPSrr, VPUNPCKHDQrr)
ENTRY(VEXTRACTPSmri, VEXTRACTPSmri, VPEXTRDmri)
ENTRY(VEXTRACTPSrri, VEXTRACTPSrri, VPEXTRDrri)
// AVX 256-bit support
ENTRY(VMOVAPSYmr, VMOVAPDYmr, VMOVDQAYmr)
ENTRY(VMOVAPSYrm, VMOVAPDYrm, VMOVDQAYrm)
ENTRY(VMOVAPSYrr, VMOVAPDYrr, VMOVDQAYrr)
ENTRY(VMOVUPSYmr, VMOVUPDYmr, VMOVDQUYmr)
ENTRY(VMOVUPSYrm, VMOVUPDYrm, VMOVDQUYrm)
ENTRY(VMOVNTPSYmr, VMOVNTPDYmr, VMOVNTDQYmr)
ENTRY(VPERMPSYrm, VPERMPSYrm, VPERMDYrm)
ENTRY(VPERMPSYrr, VPERMPSYrr, VPERMDYrr)
ENTRY(VPERMPDYmi, VPERMPDYmi, VPERMQYmi)
ENTRY(VPERMPDYri, VPERMPDYri, VPERMQYri)
// AVX512 support
ENTRY(VMOVLPSZ128mr, VMOVLPDZ128mr, VMOVPQI2QIZmr)
ENTRY(VMOVNTPSZ128mr, VMOVNTPDZ128mr, VMOVNTDQZ128mr)
ENTRY(VMOVNTPSZ256mr, VMOVNTPDZ256mr, VMOVNTDQZ256mr)
ENTRY(VMOVNTPSZmr, VMOVNTPDZmr, VMOVNTDQZmr)
ENTRY(VMOVSDZmr, VMOVSDZmr, VMOVPQI2QIZmr)
ENTRY(VMOVSSZmr, VMOVSSZmr, VMOVPDI2DIZmr)
ENTRY(VMOVSDZrm, VMOVSDZrm, VMOVQI2PQIZrm)
ENTRY(VMOVSDZrm_alt, VMOVSDZrm_alt, VMOVQI2PQIZrm)
ENTRY(VMOVSSZrm, VMOVSSZrm, VMOVDI2PDIZrm)
ENTRY(VMOVSSZrm_alt, VMOVSSZrm_alt, VMOVDI2PDIZrm)
ENTRY(VBROADCASTSSZ128rr, VBROADCASTSSZ128rr, VPBROADCASTDZ128rr)
ENTRY(VBROADCASTSSZ128rm, VBROADCASTSSZ128rm, VPBROADCASTDZ128rm)
ENTRY(VBROADCASTSSZ256rr, VBROADCASTSSZ256rr, VPBROADCASTDZ256rr)
ENTRY(VBROADCASTSSZ256rm, VBROADCASTSSZ256rm, VPBROADCASTDZ256rm)
ENTRY(VBROADCASTSSZrr, VBROADCASTSSZrr, VPBROADCASTDZrr)
ENTRY(VBROADCASTSSZrm, VBROADCASTSSZrm, VPBROADCASTDZrm)
ENTRY(VMOVDDUPZ128rr, VMOVDDUPZ128rr, VPBROADCASTQZ128rr)
ENTRY(VMOVDDUPZ128rm, VMOVDDUPZ128rm, VPBROADCASTQZ128rm)
ENTRY(VBROADCASTSDZ256rr, VBROADCASTSDZ256rr, VPBROADCASTQZ256rr)
ENTRY(VBROADCASTSDZ256rm, VBROADCASTSDZ256rm, VPBROADCASTQZ256rm)
ENTRY(VBROADCASTSDZrr, VBROADCASTSDZrr, VPBROADCASTQZrr)
ENTRY(VBROADCASTSDZrm, VBROADCASTSDZrm, VPBROADCASTQZrm)
ENTRY(VINSERTF32X4Zrri, VINSERTF32X4Zrri, VINSERTI32X4Zrri)
ENTRY(VINSERTF32X4Zrmi, VINSERTF32X4Zrmi, VINSERTI32X4Zrmi)
ENTRY(VINSERTF32X8Zrri, VINSERTF32X8Zrri, VINSERTI32X8Zrri)
ENTRY(VINSERTF32X8Zrmi, VINSERTF32X8Zrmi, VINSERTI32X8Zrmi)
ENTRY(VINSERTF64X2Zrri, VINSERTF64X2Zrri, VINSERTI64X2Zrri)
ENTRY(VINSERTF64X2Zrmi, VINSERTF64X2Zrmi, VINSERTI64X2Zrmi)
ENTRY(VINSERTF64X4Zrri, VINSERTF64X4Zrri, VINSERTI64X4Zrri)
ENTRY(VINSERTF64X4Zrmi, VINSERTF64X4Zrmi, VINSERTI64X4Zrmi)
ENTRY(VINSERTF32X4Z256rri, VINSERTF32X4Z256rri, VINSERTI32X4Z256rri)
ENTRY(VINSERTF32X4Z256rmi, VINSERTF32X4Z256rmi, VINSERTI32X4Z256rmi)
ENTRY(VINSERTF64X2Z256rri, VINSERTF64X2Z256rri, VINSERTI64X2Z256rri)
ENTRY(VINSERTF64X2Z256rmi, VINSERTF64X2Z256rmi, VINSERTI64X2Z256rmi)
ENTRY(VEXTRACTF32X4Zrri, VEXTRACTF32X4Zrri, VEXTRACTI32X4Zrri)
ENTRY(VEXTRACTF32X4Zmri, VEXTRACTF32X4Zmri, VEXTRACTI32X4Zmri)
ENTRY(VEXTRACTF32X8Zrri, VEXTRACTF32X8Zrri, VEXTRACTI32X8Zrri)
ENTRY(VEXTRACTF32X8Zmri, VEXTRACTF32X8Zmri, VEXTRACTI32X8Zmri)
ENTRY(VEXTRACTF64X2Zrri, VEXTRACTF64X2Zrri, VEXTRACTI64X2Zrri)
ENTRY(VEXTRACTF64X2Zmri, VEXTRACTF64X2Zmri, VEXTRACTI64X2Zmri)
ENTRY(VEXTRACTF64X4Zrri, VEXTRACTF64X4Zrri, VEXTRACTI64X4Zrri)
ENTRY(VEXTRACTF64X4Zmri, VEXTRACTF64X4Zmri, VEXTRACTI64X4Zmri)
ENTRY(VEXTRACTF32X4Z256rri, VEXTRACTF32X4Z256rri, VEXTRACTI32X4Z256rri)
ENTRY(VEXTRACTF32X4Z256mri, VEXTRACTF32X4Z256mri, VEXTRACTI32X4Z256mri)
ENTRY(VEXTRACTF64X2Z256rri, VEXTRACTF64X2Z256rri, VEXTRACTI64X2Z256rri)
ENTRY(VEXTRACTF64X2Z256mri, VEXTRACTF64X2Z256mri, VEXTRACTI64X2Z256mri)
ENTRY(VPERMILPSmi, VPERMILPSmi, VPSHUFDmi)
ENTRY(VPERMILPSri, VPERMILPSri, VPSHUFDri)
ENTRY(VPERMILPSZ128mi, VPERMILPSZ128mi, VPSHUFDZ128mi)
ENTRY(VPERMILPSZ128ri, VPERMILPSZ128ri, VPSHUFDZ128ri)
ENTRY(VPERMILPSZ256mi, VPERMILPSZ256mi, VPSHUFDZ256mi)
ENTRY(VPERMILPSZ256ri, VPERMILPSZ256ri, VPSHUFDZ256ri)
ENTRY(VPERMILPSZmi, VPERMILPSZmi, VPSHUFDZmi)
ENTRY(VPERMILPSZri, VPERMILPSZri, VPSHUFDZri)
ENTRY(VPERMPSZ256rm, VPERMPSZ256rm, VPERMDZ256rm)
ENTRY(VPERMPSZ256rr, VPERMPSZ256rr, VPERMDZ256rr)
ENTRY(VPERMPDZ256mi, VPERMPDZ256mi, VPERMQZ256mi)
ENTRY(VPERMPDZ256ri, VPERMPDZ256ri, VPERMQZ256ri)
ENTRY(VPERMPDZ256rm, VPERMPDZ256rm, VPERMQZ256rm)
ENTRY(VPERMPDZ256rr, VPERMPDZ256rr, VPERMQZ256rr)
ENTRY(VPERMPSZrm, VPERMPSZrm, VPERMDZrm)
ENTRY(VPERMPSZrr, VPERMPSZrr, VPERMDZrr)
ENTRY(VPERMPDZmi, VPERMPDZmi, VPERMQZmi)
ENTRY(VPERMPDZri, VPERMPDZri, VPERMQZri)
ENTRY(VPERMPDZrm, VPERMPDZrm, VPERMQZrm)
ENTRY(VPERMPDZrr, VPERMPDZrr, VPERMQZrr)
ENTRY(VUNPCKLPDZ256rm, VUNPCKLPDZ256rm, VPUNPCKLQDQZ256rm)
ENTRY(VUNPCKLPDZ256rr, VUNPCKLPDZ256rr, VPUNPCKLQDQZ256rr)
ENTRY(VUNPCKHPDZ256rm, VUNPCKHPDZ256rm, VPUNPCKHQDQZ256rm)
ENTRY(VUNPCKHPDZ256rr, VUNPCKHPDZ256rr, VPUNPCKHQDQZ256rr)
ENTRY(VUNPCKLPSZ256rm, VUNPCKLPSZ256rm, VPUNPCKLDQZ256rm)
ENTRY(VUNPCKLPSZ256rr, VUNPCKLPSZ256rr, VPUNPCKLDQZ256rr)
ENTRY(VUNPCKHPSZ256rm, VUNPCKHPSZ256rm, VPUNPCKHDQZ256rm)
ENTRY(VUNPCKHPSZ256rr, VUNPCKHPSZ256rr, VPUNPCKHDQZ256rr)
ENTRY(VUNPCKLPDZ128rm, VUNPCKLPDZ128rm, VPUNPCKLQDQZ128rm)
ENTRY(VMOVLHPSZrr, VUNPCKLPDZ128rr, VPUNPCKLQDQZ128rr)
ENTRY(VUNPCKHPDZ128rm, VUNPCKHPDZ128rm, VPUNPCKHQDQZ128rm)
ENTRY(VUNPCKHPDZ128rr, VUNPCKHPDZ128rr, VPUNPCKHQDQZ128rr)
ENTRY(VUNPCKLPSZ128rm, VUNPCKLPSZ128rm, VPUNPCKLDQZ128rm)
ENTRY(VUNPCKLPSZ128rr, VUNPCKLPSZ128rr, VPUNPCKLDQZ128rr)
ENTRY(VUNPCKHPSZ128rm, VUNPCKHPSZ128rm, VPUNPCKHDQZ128rm)
ENTRY(VUNPCKHPSZ128rr, VUNPCKHPSZ128rr, VPUNPCKHDQZ128rr)
ENTRY(VUNPCKLPDZrm, VUNPCKLPDZrm, VPUNPCKLQDQZrm)
ENTRY(VUNPCKLPDZrr, VUNPCKLPDZrr, VPUNPCKLQDQZrr)
ENTRY(VUNPCKHPDZrm, VUNPCKHPDZrm, VPUNPCKHQDQZrm)
ENTRY(VUNPCKHPDZrr, VUNPCKHPDZrr, VPUNPCKHQDQZrr)
ENTRY(VUNPCKLPSZrm, VUNPCKLPSZrm, VPUNPCKLDQZrm)
ENTRY(VUNPCKLPSZrr, VUNPCKLPSZrr, VPUNPCKLDQZrr)
ENTRY(VUNPCKHPSZrm, VUNPCKHPSZrm, VPUNPCKHDQZrm)
ENTRY(VUNPCKHPSZrr, VUNPCKHPSZrr, VPUNPCKHDQZrr)
ENTRY(VEXTRACTPSZmri, VEXTRACTPSZmri, VPEXTRDZmri)
ENTRY(VEXTRACTPSZrri, VEXTRACTPSZrri, VPEXTRDZrri)
};
static const uint16_t ReplaceableInstrsAVX2[][3] = {
// PackedSingle, PackedDouble, PackedInt
ENTRY(VANDNPSYrm, VANDNPDYrm, VPANDNYrm)
ENTRY(VANDNPSYrr, VANDNPDYrr, VPANDNYrr)
ENTRY(VANDPSYrm, VANDPDYrm, VPANDYrm)
ENTRY(VANDPSYrr, VANDPDYrr, VPANDYrr)
ENTRY(VORPSYrm, VORPDYrm, VPORYrm)
ENTRY(VORPSYrr, VORPDYrr, VPORYrr)
ENTRY(VXORPSYrm, VXORPDYrm, VPXORYrm)
ENTRY(VXORPSYrr, VXORPDYrr, VPXORYrr)
ENTRY(VPERM2F128rmi, VPERM2F128rmi, VPERM2I128rmi)
ENTRY(VPERM2F128rri, VPERM2F128rri, VPERM2I128rri)
ENTRY(VBROADCASTSSrm, VBROADCASTSSrm, VPBROADCASTDrm)
ENTRY(VBROADCASTSSrr, VBROADCASTSSrr, VPBROADCASTDrr)
ENTRY(VMOVDDUPrm, VMOVDDUPrm, VPBROADCASTQrm)
ENTRY(VMOVDDUPrr, VMOVDDUPrr, VPBROADCASTQrr)
ENTRY(VBROADCASTSSYrr, VBROADCASTSSYrr, VPBROADCASTDYrr)
ENTRY(VBROADCASTSSYrm, VBROADCASTSSYrm, VPBROADCASTDYrm)
ENTRY(VBROADCASTSDYrr, VBROADCASTSDYrr, VPBROADCASTQYrr)
ENTRY(VBROADCASTSDYrm, VBROADCASTSDYrm, VPBROADCASTQYrm)
ENTRY(VBROADCASTF128rm, VBROADCASTF128rm, VBROADCASTI128rm)
ENTRY(VBLENDPSYrri, VBLENDPSYrri, VPBLENDDYrri)
ENTRY(VBLENDPSYrmi, VBLENDPSYrmi, VPBLENDDYrmi)
ENTRY(VPERMILPSYmi, VPERMILPSYmi, VPSHUFDYmi)
ENTRY(VPERMILPSYri, VPERMILPSYri, VPSHUFDYri)
ENTRY(VUNPCKLPDYrm, VUNPCKLPDYrm, VPUNPCKLQDQYrm)
ENTRY(VUNPCKLPDYrr, VUNPCKLPDYrr, VPUNPCKLQDQYrr)
ENTRY(VUNPCKHPDYrm, VUNPCKHPDYrm, VPUNPCKHQDQYrm)
ENTRY(VUNPCKHPDYrr, VUNPCKHPDYrr, VPUNPCKHQDQYrr)
ENTRY(VUNPCKLPSYrm, VUNPCKLPSYrm, VPUNPCKLDQYrm)
ENTRY(VUNPCKLPSYrr, VUNPCKLPSYrr, VPUNPCKLDQYrr)
ENTRY(VUNPCKHPSYrm, VUNPCKHPSYrm, VPUNPCKHDQYrm)
ENTRY(VUNPCKHPSYrr, VUNPCKHPSYrr, VPUNPCKHDQYrr)
};
static const uint16_t ReplaceableInstrsFP[][3] = {
// PackedSingle, PackedDouble
ENTRY(MOVLPSrm, MOVLPDrm, INSTRUCTION_LIST_END)
ENTRY(MOVHPSrm, MOVHPDrm, INSTRUCTION_LIST_END)
ENTRY(MOVHPSmr, MOVHPDmr, INSTRUCTION_LIST_END)
ENTRY(VMOVLPSrm, VMOVLPDrm, INSTRUCTION_LIST_END)
ENTRY(VMOVHPSrm, VMOVHPDrm, INSTRUCTION_LIST_END)
ENTRY(VMOVHPSmr, VMOVHPDmr, INSTRUCTION_LIST_END)
ENTRY(VMOVLPSZ128rm, VMOVLPDZ128rm, INSTRUCTION_LIST_END)
ENTRY(VMOVHPSZ128rm, VMOVHPDZ128rm, INSTRUCTION_LIST_END)
ENTRY(VMOVHPSZ128mr, VMOVHPDZ128mr, INSTRUCTION_LIST_END)
};
static const uint16_t ReplaceableInstrsAVX2InsertExtract[][3] = {
// PackedSingle, PackedDouble, PackedInt
ENTRY(VEXTRACTF128mri, VEXTRACTF128mri, VEXTRACTI128mri)
ENTRY(VEXTRACTF128rri, VEXTRACTF128rri, VEXTRACTI128rri)
ENTRY(VINSERTF128rmi, VINSERTF128rmi, VINSERTI128rmi)
ENTRY(VINSERTF128rri, VINSERTF128rri, VINSERTI128rri)
};
// NOTE: These should only be used by the custom domain methods.
static const uint16_t ReplaceableBlendInstrs[][3] = {
//PackedSingle, PackedDouble, PackedInt
ENTRY(BLENDPSrmi, BLENDPDrmi, PBLENDWrmi)
ENTRY(BLENDPSrri, BLENDPDrri, PBLENDWrri)
ENTRY(VBLENDPSrmi, VBLENDPDrmi, VPBLENDWrmi)
ENTRY(VBLENDPSrri, VBLENDPDrri, VPBLENDWrri)
ENTRY(VBLENDPSYrmi, VBLENDPDYrmi, VPBLENDWYrmi)
ENTRY(VBLENDPSYrri, VBLENDPDYrri, VPBLENDWYrri)
};
static const uint16_t ReplaceableBlendAVX2Instrs[][3] = {
// PackedSingle, PackedDouble, PackedInt
ENTRY(VBLENDPSrmi, VBLENDPDrmi, VPBLENDDrmi)
ENTRY(VBLENDPSrri, VBLENDPDrri, VPBLENDDrri)
ENTRY(VBLENDPSYrmi, VBLENDPDYrmi, VPBLENDDYrmi)
ENTRY(VBLENDPSYrri, VBLENDPDYrri, VPBLENDDYrri)
};
#undef ENTRY
#define ENTRY(A, B, C, D) {X86::A, X86::B, X86::C, X86::D},
static const uint16_t ReplaceableInstrsAVX512[][4] = {
// Two integer columns for 64-bit and 32-bit elements.
//PackedSingle, PackedDouble, PackedInt, PackedInt
ENTRY(VMOVAPSZ128mr, VMOVAPDZ128mr, VMOVDQA64Z128mr, VMOVDQA32Z128mr)
ENTRY(VMOVAPSZ128rm, VMOVAPDZ128rm, VMOVDQA64Z128rm, VMOVDQA32Z128rm)
ENTRY(VMOVAPSZ128rr, VMOVAPDZ128rr, VMOVDQA64Z128rr, VMOVDQA32Z128rr)
ENTRY(VMOVUPSZ128mr, VMOVUPDZ128mr, VMOVDQU64Z128mr, VMOVDQU32Z128mr)
ENTRY(VMOVUPSZ128rm, VMOVUPDZ128rm, VMOVDQU64Z128rm, VMOVDQU32Z128rm)
ENTRY(VMOVAPSZ256mr, VMOVAPDZ256mr, VMOVDQA64Z256mr, VMOVDQA32Z256mr)
ENTRY(VMOVAPSZ256rm, VMOVAPDZ256rm, VMOVDQA64Z256rm, VMOVDQA32Z256rm)
ENTRY(VMOVAPSZ256rr, VMOVAPDZ256rr, VMOVDQA64Z256rr, VMOVDQA32Z256rr)
ENTRY(VMOVUPSZ256mr, VMOVUPDZ256mr, VMOVDQU64Z256mr, VMOVDQU32Z256mr)
ENTRY(VMOVUPSZ256rm, VMOVUPDZ256rm, VMOVDQU64Z256rm, VMOVDQU32Z256rm)
ENTRY(VMOVAPSZmr, VMOVAPDZmr, VMOVDQA64Zmr, VMOVDQA32Zmr)
ENTRY(VMOVAPSZrm, VMOVAPDZrm, VMOVDQA64Zrm, VMOVDQA32Zrm)
ENTRY(VMOVAPSZrr, VMOVAPDZrr, VMOVDQA64Zrr, VMOVDQA32Zrr)
ENTRY(VMOVUPSZmr, VMOVUPDZmr, VMOVDQU64Zmr, VMOVDQU32Zmr)
ENTRY(VMOVUPSZrm, VMOVUPDZrm, VMOVDQU64Zrm, VMOVDQU32Zrm)
};
static const uint16_t ReplaceableInstrsAVX512DQ[][4] = {
// Two integer columns for 64-bit and 32-bit elements.
// PackedSingle, PackedDouble, PackedInt, PackedInt
ENTRY(VANDNPSZ128rm, VANDNPDZ128rm, VPANDNQZ128rm, VPANDNDZ128rm)
ENTRY(VANDNPSZ128rr, VANDNPDZ128rr, VPANDNQZ128rr, VPANDNDZ128rr)
ENTRY(VANDPSZ128rm, VANDPDZ128rm, VPANDQZ128rm, VPANDDZ128rm)
ENTRY(VANDPSZ128rr, VANDPDZ128rr, VPANDQZ128rr, VPANDDZ128rr)
ENTRY(VORPSZ128rm, VORPDZ128rm, VPORQZ128rm, VPORDZ128rm)
ENTRY(VORPSZ128rr, VORPDZ128rr, VPORQZ128rr, VPORDZ128rr)
ENTRY(VXORPSZ128rm, VXORPDZ128rm, VPXORQZ128rm, VPXORDZ128rm)
ENTRY(VXORPSZ128rr, VXORPDZ128rr, VPXORQZ128rr, VPXORDZ128rr)
ENTRY(VANDNPSZ256rm, VANDNPDZ256rm, VPANDNQZ256rm, VPANDNDZ256rm)
ENTRY(VANDNPSZ256rr, VANDNPDZ256rr, VPANDNQZ256rr, VPANDNDZ256rr)
ENTRY(VANDPSZ256rm, VANDPDZ256rm, VPANDQZ256rm, VPANDDZ256rm)
ENTRY(VANDPSZ256rr, VANDPDZ256rr, VPANDQZ256rr, VPANDDZ256rr)
ENTRY(VORPSZ256rm, VORPDZ256rm, VPORQZ256rm, VPORDZ256rm)
ENTRY(VORPSZ256rr, VORPDZ256rr, VPORQZ256rr, VPORDZ256rr)
ENTRY(VXORPSZ256rm, VXORPDZ256rm, VPXORQZ256rm, VPXORDZ256rm)
ENTRY(VXORPSZ256rr, VXORPDZ256rr, VPXORQZ256rr, VPXORDZ256rr)
ENTRY(VANDNPSZrm, VANDNPDZrm, VPANDNQZrm, VPANDNDZrm)
ENTRY(VANDNPSZrr, VANDNPDZrr, VPANDNQZrr, VPANDNDZrr)
ENTRY(VANDPSZrm, VANDPDZrm, VPANDQZrm, VPANDDZrm)
ENTRY(VANDPSZrr, VANDPDZrr, VPANDQZrr, VPANDDZrr)
ENTRY(VORPSZrm, VORPDZrm, VPORQZrm, VPORDZrm)
ENTRY(VORPSZrr, VORPDZrr, VPORQZrr, VPORDZrr)
ENTRY(VXORPSZrm, VXORPDZrm, VPXORQZrm, VPXORDZrm)
ENTRY(VXORPSZrr, VXORPDZrr, VPXORQZrr, VPXORDZrr)
};
static const uint16_t ReplaceableInstrsAVX512DQMasked[][4] = {
// Two integer columns for 64-bit and 32-bit elements.
// PackedSingle, PackedDouble, PackedInt, PackedInt
ENTRY(VANDNPSZ128rmk, VANDNPDZ128rmk, VPANDNQZ128rmk, VPANDNDZ128rmk)
ENTRY(VANDNPSZ128rmkz, VANDNPDZ128rmkz, VPANDNQZ128rmkz, VPANDNDZ128rmkz)
ENTRY(VANDNPSZ128rrk, VANDNPDZ128rrk, VPANDNQZ128rrk, VPANDNDZ128rrk)
ENTRY(VANDNPSZ128rrkz, VANDNPDZ128rrkz, VPANDNQZ128rrkz, VPANDNDZ128rrkz)
ENTRY(VANDPSZ128rmk, VANDPDZ128rmk, VPANDQZ128rmk, VPANDDZ128rmk)
ENTRY(VANDPSZ128rmkz, VANDPDZ128rmkz, VPANDQZ128rmkz, VPANDDZ128rmkz)
ENTRY(VANDPSZ128rrk, VANDPDZ128rrk, VPANDQZ128rrk, VPANDDZ128rrk)
ENTRY(VANDPSZ128rrkz, VANDPDZ128rrkz, VPANDQZ128rrkz, VPANDDZ128rrkz)
ENTRY(VORPSZ128rmk, VORPDZ128rmk, VPORQZ128rmk, VPORDZ128rmk)
ENTRY(VORPSZ128rmkz, VORPDZ128rmkz, VPORQZ128rmkz, VPORDZ128rmkz)
ENTRY(VORPSZ128rrk, VORPDZ128rrk, VPORQZ128rrk, VPORDZ128rrk)
ENTRY(VORPSZ128rrkz, VORPDZ128rrkz, VPORQZ128rrkz, VPORDZ128rrkz)
ENTRY(VXORPSZ128rmk, VXORPDZ128rmk, VPXORQZ128rmk, VPXORDZ128rmk)
ENTRY(VXORPSZ128rmkz, VXORPDZ128rmkz, VPXORQZ128rmkz, VPXORDZ128rmkz)
ENTRY(VXORPSZ128rrk, VXORPDZ128rrk, VPXORQZ128rrk, VPXORDZ128rrk)
ENTRY(VXORPSZ128rrkz, VXORPDZ128rrkz, VPXORQZ128rrkz, VPXORDZ128rrkz)
ENTRY(VANDNPSZ256rmk, VANDNPDZ256rmk, VPANDNQZ256rmk, VPANDNDZ256rmk)
ENTRY(VANDNPSZ256rmkz, VANDNPDZ256rmkz, VPANDNQZ256rmkz, VPANDNDZ256rmkz)
ENTRY(VANDNPSZ256rrk, VANDNPDZ256rrk, VPANDNQZ256rrk, VPANDNDZ256rrk)
ENTRY(VANDNPSZ256rrkz, VANDNPDZ256rrkz, VPANDNQZ256rrkz, VPANDNDZ256rrkz)
ENTRY(VANDPSZ256rmk, VANDPDZ256rmk, VPANDQZ256rmk, VPANDDZ256rmk)
ENTRY(VANDPSZ256rmkz, VANDPDZ256rmkz, VPANDQZ256rmkz, VPANDDZ256rmkz)
ENTRY(VANDPSZ256rrk, VANDPDZ256rrk, VPANDQZ256rrk, VPANDDZ256rrk)
ENTRY(VANDPSZ256rrkz, VANDPDZ256rrkz, VPANDQZ256rrkz, VPANDDZ256rrkz)
ENTRY(VORPSZ256rmk, VORPDZ256rmk, VPORQZ256rmk, VPORDZ256rmk)
ENTRY(VORPSZ256rmkz, VORPDZ256rmkz, VPORQZ256rmkz, VPORDZ256rmkz)
ENTRY(VORPSZ256rrk, VORPDZ256rrk, VPORQZ256rrk, VPORDZ256rrk)
ENTRY(VORPSZ256rrkz, VORPDZ256rrkz, VPORQZ256rrkz, VPORDZ256rrkz)
ENTRY(VXORPSZ256rmk, VXORPDZ256rmk, VPXORQZ256rmk, VPXORDZ256rmk)
ENTRY(VXORPSZ256rmkz, VXORPDZ256rmkz, VPXORQZ256rmkz, VPXORDZ256rmkz)
ENTRY(VXORPSZ256rrk, VXORPDZ256rrk, VPXORQZ256rrk, VPXORDZ256rrk)
ENTRY(VXORPSZ256rrkz, VXORPDZ256rrkz, VPXORQZ256rrkz, VPXORDZ256rrkz)
ENTRY(VANDNPSZrmk, VANDNPDZrmk, VPANDNQZrmk, VPANDNDZrmk)
ENTRY(VANDNPSZrmkz, VANDNPDZrmkz, VPANDNQZrmkz, VPANDNDZrmkz)
ENTRY(VANDNPSZrrk, VANDNPDZrrk, VPANDNQZrrk, VPANDNDZrrk)
ENTRY(VANDNPSZrrkz, VANDNPDZrrkz, VPANDNQZrrkz, VPANDNDZrrkz)
ENTRY(VANDPSZrmk, VANDPDZrmk, VPANDQZrmk, VPANDDZrmk)
ENTRY(VANDPSZrmkz, VANDPDZrmkz, VPANDQZrmkz, VPANDDZrmkz)
ENTRY(VANDPSZrrk, VANDPDZrrk, VPANDQZrrk, VPANDDZrrk)
ENTRY(VANDPSZrrkz, VANDPDZrrkz, VPANDQZrrkz, VPANDDZrrkz)
ENTRY(VORPSZrmk, VORPDZrmk, VPORQZrmk, VPORDZrmk)
ENTRY(VORPSZrmkz, VORPDZrmkz, VPORQZrmkz, VPORDZrmkz)
ENTRY(VORPSZrrk, VORPDZrrk, VPORQZrrk, VPORDZrrk)
ENTRY(VORPSZrrkz, VORPDZrrkz, VPORQZrrkz, VPORDZrrkz)
ENTRY(VXORPSZrmk, VXORPDZrmk, VPXORQZrmk, VPXORDZrmk)
ENTRY(VXORPSZrmkz, VXORPDZrmkz, VPXORQZrmkz, VPXORDZrmkz)
ENTRY(VXORPSZrrk, VXORPDZrrk, VPXORQZrrk, VPXORDZrrk)
ENTRY(VXORPSZrrkz, VXORPDZrrkz, VPXORQZrrkz, VPXORDZrrkz)
// Broadcast loads can be handled the same as masked operations to avoid
// changing element size.
ENTRY(VANDNPSZ128rmb, VANDNPDZ128rmb, VPANDNQZ128rmb, VPANDNDZ128rmb)
ENTRY(VANDPSZ128rmb, VANDPDZ128rmb, VPANDQZ128rmb, VPANDDZ128rmb)
ENTRY(VORPSZ128rmb, VORPDZ128rmb, VPORQZ128rmb, VPORDZ128rmb)
ENTRY(VXORPSZ128rmb, VXORPDZ128rmb, VPXORQZ128rmb, VPXORDZ128rmb)
ENTRY(VANDNPSZ256rmb, VANDNPDZ256rmb, VPANDNQZ256rmb, VPANDNDZ256rmb)
ENTRY(VANDPSZ256rmb, VANDPDZ256rmb, VPANDQZ256rmb, VPANDDZ256rmb)
ENTRY(VORPSZ256rmb, VORPDZ256rmb, VPORQZ256rmb, VPORDZ256rmb)
ENTRY(VXORPSZ256rmb, VXORPDZ256rmb, VPXORQZ256rmb, VPXORDZ256rmb)
ENTRY(VANDNPSZrmb, VANDNPDZrmb, VPANDNQZrmb, VPANDNDZrmb)
ENTRY(VANDPSZrmb, VANDPDZrmb, VPANDQZrmb, VPANDDZrmb)
ENTRY(VANDPSZrmb, VANDPDZrmb, VPANDQZrmb, VPANDDZrmb)
ENTRY(VORPSZrmb, VORPDZrmb, VPORQZrmb, VPORDZrmb)
ENTRY(VXORPSZrmb, VXORPDZrmb, VPXORQZrmb, VPXORDZrmb)
ENTRY(VANDNPSZ128rmbk, VANDNPDZ128rmbk, VPANDNQZ128rmbk, VPANDNDZ128rmbk)
ENTRY(VANDPSZ128rmbk, VANDPDZ128rmbk, VPANDQZ128rmbk, VPANDDZ128rmbk)
ENTRY(VORPSZ128rmbk, VORPDZ128rmbk, VPORQZ128rmbk, VPORDZ128rmbk)
ENTRY(VXORPSZ128rmbk, VXORPDZ128rmbk, VPXORQZ128rmbk, VPXORDZ128rmbk)
ENTRY(VANDNPSZ256rmbk, VANDNPDZ256rmbk, VPANDNQZ256rmbk, VPANDNDZ256rmbk)
ENTRY(VANDPSZ256rmbk, VANDPDZ256rmbk, VPANDQZ256rmbk, VPANDDZ256rmbk)
ENTRY(VORPSZ256rmbk, VORPDZ256rmbk, VPORQZ256rmbk, VPORDZ256rmbk)
ENTRY(VXORPSZ256rmbk, VXORPDZ256rmbk, VPXORQZ256rmbk, VPXORDZ256rmbk)
ENTRY(VANDNPSZrmbk, VANDNPDZrmbk, VPANDNQZrmbk, VPANDNDZrmbk)
ENTRY(VANDPSZrmbk, VANDPDZrmbk, VPANDQZrmbk, VPANDDZrmbk)
ENTRY(VANDPSZrmbk, VANDPDZrmbk, VPANDQZrmbk, VPANDDZrmbk)
ENTRY(VORPSZrmbk, VORPDZrmbk, VPORQZrmbk, VPORDZrmbk)
ENTRY(VXORPSZrmbk, VXORPDZrmbk, VPXORQZrmbk, VPXORDZrmbk)
ENTRY(VANDNPSZ128rmbkz, VANDNPDZ128rmbkz, VPANDNQZ128rmbkz, VPANDNDZ128rmbkz)
ENTRY(VANDPSZ128rmbkz, VANDPDZ128rmbkz, VPANDQZ128rmbkz, VPANDDZ128rmbkz)
ENTRY(VORPSZ128rmbkz, VORPDZ128rmbkz, VPORQZ128rmbkz, VPORDZ128rmbkz)
ENTRY(VXORPSZ128rmbkz, VXORPDZ128rmbkz, VPXORQZ128rmbkz, VPXORDZ128rmbkz)
ENTRY(VANDNPSZ256rmbkz, VANDNPDZ256rmbkz, VPANDNQZ256rmbkz, VPANDNDZ256rmbkz)
ENTRY(VANDPSZ256rmbkz, VANDPDZ256rmbkz, VPANDQZ256rmbkz, VPANDDZ256rmbkz)
ENTRY(VORPSZ256rmbkz, VORPDZ256rmbkz, VPORQZ256rmbkz, VPORDZ256rmbkz)
ENTRY(VXORPSZ256rmbkz, VXORPDZ256rmbkz, VPXORQZ256rmbkz, VPXORDZ256rmbkz)
ENTRY(VANDNPSZrmbkz, VANDNPDZrmbkz, VPANDNQZrmbkz, VPANDNDZrmbkz)
ENTRY(VANDPSZrmbkz, VANDPDZrmbkz, VPANDQZrmbkz, VPANDDZrmbkz)
ENTRY(VANDPSZrmbkz, VANDPDZrmbkz, VPANDQZrmbkz, VPANDDZrmbkz)
ENTRY(VORPSZrmbkz, VORPDZrmbkz, VPORQZrmbkz, VPORDZrmbkz)
ENTRY(VXORPSZrmbkz, VXORPDZrmbkz, VPXORQZrmbkz, VPXORDZrmbkz)
};
// Special table for changing EVEX logic instructions to VEX.
// TODO: Should we run EVEX->VEX earlier?
static const uint16_t ReplaceableCustomAVX512LogicInstrs[][4] = {
// Two integer columns for 64-bit and 32-bit elements.
// PackedSingle, PackedDouble, PackedInt, PackedInt
ENTRY(VANDNPSrm, VANDNPDrm, VPANDNQZ128rm, VPANDNDZ128rm)
ENTRY(VANDNPSrr, VANDNPDrr, VPANDNQZ128rr, VPANDNDZ128rr)
ENTRY(VANDPSrm, VANDPDrm, VPANDQZ128rm, VPANDDZ128rm)
ENTRY(VANDPSrr, VANDPDrr, VPANDQZ128rr, VPANDDZ128rr)
ENTRY(VORPSrm, VORPDrm, VPORQZ128rm, VPORDZ128rm)
ENTRY(VORPSrr, VORPDrr, VPORQZ128rr, VPORDZ128rr)
ENTRY(VXORPSrm, VXORPDrm, VPXORQZ128rm, VPXORDZ128rm)
ENTRY(VXORPSrr, VXORPDrr, VPXORQZ128rr, VPXORDZ128rr)
ENTRY(VANDNPSYrm, VANDNPDYrm, VPANDNQZ256rm, VPANDNDZ256rm)
ENTRY(VANDNPSYrr, VANDNPDYrr, VPANDNQZ256rr, VPANDNDZ256rr)
ENTRY(VANDPSYrm, VANDPDYrm, VPANDQZ256rm, VPANDDZ256rm)
ENTRY(VANDPSYrr, VANDPDYrr, VPANDQZ256rr, VPANDDZ256rr)
ENTRY(VORPSYrm, VORPDYrm, VPORQZ256rm, VPORDZ256rm)
ENTRY(VORPSYrr, VORPDYrr, VPORQZ256rr, VPORDZ256rr)
ENTRY(VXORPSYrm, VXORPDYrm, VPXORQZ256rm, VPXORDZ256rm)
ENTRY(VXORPSYrr, VXORPDYrr, VPXORQZ256rr, VPXORDZ256rr)
};