1*5f757f3fSDimitry Andric//===- X86ReplaceableInstrs.def ----------------------------------*- C++ -*-==// 2*5f757f3fSDimitry Andric// 3*5f757f3fSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*5f757f3fSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*5f757f3fSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*5f757f3fSDimitry Andric// 7*5f757f3fSDimitry Andric//===----------------------------------------------------------------------===// 8*5f757f3fSDimitry Andric 9*5f757f3fSDimitry Andric// These are the replaceable SSE instructions. Some of these have Int variants 10*5f757f3fSDimitry Andric// that we don't include here. We don't want to replace instructions selected 11*5f757f3fSDimitry Andric// by intrinsics. 12*5f757f3fSDimitry Andric 13*5f757f3fSDimitry Andric#define ENTRY(A, B, C) {X86::A, X86::B, X86::C}, 14*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableInstrs[][3] = { 15*5f757f3fSDimitry Andric// PackedSingle, PackedDouble, PackedInt 16*5f757f3fSDimitry AndricENTRY(MOVAPSmr, MOVAPDmr, MOVDQAmr) 17*5f757f3fSDimitry AndricENTRY(MOVAPSrm, MOVAPDrm, MOVDQArm) 18*5f757f3fSDimitry AndricENTRY(MOVAPSrr, MOVAPDrr, MOVDQArr) 19*5f757f3fSDimitry AndricENTRY(MOVUPSmr, MOVUPDmr, MOVDQUmr) 20*5f757f3fSDimitry AndricENTRY(MOVUPSrm, MOVUPDrm, MOVDQUrm) 21*5f757f3fSDimitry AndricENTRY(MOVLPSmr, MOVLPDmr, MOVPQI2QImr) 22*5f757f3fSDimitry AndricENTRY(MOVSDmr, MOVSDmr, MOVPQI2QImr) 23*5f757f3fSDimitry AndricENTRY(MOVSSmr, MOVSSmr, MOVPDI2DImr) 24*5f757f3fSDimitry AndricENTRY(MOVSDrm, MOVSDrm, MOVQI2PQIrm) 25*5f757f3fSDimitry AndricENTRY(MOVSDrm_alt, MOVSDrm_alt, MOVQI2PQIrm) 26*5f757f3fSDimitry AndricENTRY(MOVSSrm, MOVSSrm, MOVDI2PDIrm) 27*5f757f3fSDimitry AndricENTRY(MOVSSrm_alt, MOVSSrm_alt, MOVDI2PDIrm) 28*5f757f3fSDimitry AndricENTRY(MOVNTPSmr, MOVNTPDmr, MOVNTDQmr) 29*5f757f3fSDimitry AndricENTRY(ANDNPSrm, ANDNPDrm, PANDNrm) 30*5f757f3fSDimitry AndricENTRY(ANDNPSrr, ANDNPDrr, PANDNrr) 31*5f757f3fSDimitry AndricENTRY(ANDPSrm, ANDPDrm, PANDrm) 32*5f757f3fSDimitry AndricENTRY(ANDPSrr, ANDPDrr, PANDrr) 33*5f757f3fSDimitry AndricENTRY(ORPSrm, ORPDrm, PORrm) 34*5f757f3fSDimitry AndricENTRY(ORPSrr, ORPDrr, PORrr) 35*5f757f3fSDimitry AndricENTRY(XORPSrm, XORPDrm, PXORrm) 36*5f757f3fSDimitry AndricENTRY(XORPSrr, XORPDrr, PXORrr) 37*5f757f3fSDimitry AndricENTRY(UNPCKLPDrm, UNPCKLPDrm, PUNPCKLQDQrm) 38*5f757f3fSDimitry AndricENTRY(MOVLHPSrr, UNPCKLPDrr, PUNPCKLQDQrr) 39*5f757f3fSDimitry AndricENTRY(UNPCKHPDrm, UNPCKHPDrm, PUNPCKHQDQrm) 40*5f757f3fSDimitry AndricENTRY(UNPCKHPDrr, UNPCKHPDrr, PUNPCKHQDQrr) 41*5f757f3fSDimitry AndricENTRY(UNPCKLPSrm, UNPCKLPSrm, PUNPCKLDQrm) 42*5f757f3fSDimitry AndricENTRY(UNPCKLPSrr, UNPCKLPSrr, PUNPCKLDQrr) 43*5f757f3fSDimitry AndricENTRY(UNPCKHPSrm, UNPCKHPSrm, PUNPCKHDQrm) 44*5f757f3fSDimitry AndricENTRY(UNPCKHPSrr, UNPCKHPSrr, PUNPCKHDQrr) 45*5f757f3fSDimitry AndricENTRY(EXTRACTPSmr, EXTRACTPSmr, PEXTRDmr) 46*5f757f3fSDimitry AndricENTRY(EXTRACTPSrr, EXTRACTPSrr, PEXTRDrr) 47*5f757f3fSDimitry Andric// AVX 128-bit support 48*5f757f3fSDimitry AndricENTRY(VMOVAPSmr, VMOVAPDmr, VMOVDQAmr) 49*5f757f3fSDimitry AndricENTRY(VMOVAPSrm, VMOVAPDrm, VMOVDQArm) 50*5f757f3fSDimitry AndricENTRY(VMOVAPSrr, VMOVAPDrr, VMOVDQArr) 51*5f757f3fSDimitry AndricENTRY(VMOVUPSmr, VMOVUPDmr, VMOVDQUmr) 52*5f757f3fSDimitry AndricENTRY(VMOVUPSrm, VMOVUPDrm, VMOVDQUrm) 53*5f757f3fSDimitry AndricENTRY(VMOVLPSmr, VMOVLPDmr, VMOVPQI2QImr) 54*5f757f3fSDimitry AndricENTRY(VMOVSDmr, VMOVSDmr, VMOVPQI2QImr) 55*5f757f3fSDimitry AndricENTRY(VMOVSSmr, VMOVSSmr, VMOVPDI2DImr) 56*5f757f3fSDimitry AndricENTRY(VMOVSDrm, VMOVSDrm, VMOVQI2PQIrm) 57*5f757f3fSDimitry AndricENTRY(VMOVSDrm_alt, VMOVSDrm_alt, VMOVQI2PQIrm) 58*5f757f3fSDimitry AndricENTRY(VMOVSSrm, VMOVSSrm, VMOVDI2PDIrm) 59*5f757f3fSDimitry AndricENTRY(VMOVSSrm_alt, VMOVSSrm_alt, VMOVDI2PDIrm) 60*5f757f3fSDimitry AndricENTRY(VMOVNTPSmr, VMOVNTPDmr, VMOVNTDQmr) 61*5f757f3fSDimitry AndricENTRY(VANDNPSrm, VANDNPDrm, VPANDNrm) 62*5f757f3fSDimitry AndricENTRY(VANDNPSrr, VANDNPDrr, VPANDNrr) 63*5f757f3fSDimitry AndricENTRY(VANDPSrm, VANDPDrm, VPANDrm) 64*5f757f3fSDimitry AndricENTRY(VANDPSrr, VANDPDrr, VPANDrr) 65*5f757f3fSDimitry AndricENTRY(VORPSrm, VORPDrm, VPORrm) 66*5f757f3fSDimitry AndricENTRY(VORPSrr, VORPDrr, VPORrr) 67*5f757f3fSDimitry AndricENTRY(VXORPSrm, VXORPDrm, VPXORrm) 68*5f757f3fSDimitry AndricENTRY(VXORPSrr, VXORPDrr, VPXORrr) 69*5f757f3fSDimitry AndricENTRY(VUNPCKLPDrm, VUNPCKLPDrm, VPUNPCKLQDQrm) 70*5f757f3fSDimitry AndricENTRY(VMOVLHPSrr, VUNPCKLPDrr, VPUNPCKLQDQrr) 71*5f757f3fSDimitry AndricENTRY(VUNPCKHPDrm, VUNPCKHPDrm, VPUNPCKHQDQrm) 72*5f757f3fSDimitry AndricENTRY(VUNPCKHPDrr, VUNPCKHPDrr, VPUNPCKHQDQrr) 73*5f757f3fSDimitry AndricENTRY(VUNPCKLPSrm, VUNPCKLPSrm, VPUNPCKLDQrm) 74*5f757f3fSDimitry AndricENTRY(VUNPCKLPSrr, VUNPCKLPSrr, VPUNPCKLDQrr) 75*5f757f3fSDimitry AndricENTRY(VUNPCKHPSrm, VUNPCKHPSrm, VPUNPCKHDQrm) 76*5f757f3fSDimitry AndricENTRY(VUNPCKHPSrr, VUNPCKHPSrr, VPUNPCKHDQrr) 77*5f757f3fSDimitry AndricENTRY(VEXTRACTPSmr, VEXTRACTPSmr, VPEXTRDmr) 78*5f757f3fSDimitry AndricENTRY(VEXTRACTPSrr, VEXTRACTPSrr, VPEXTRDrr) 79*5f757f3fSDimitry Andric// AVX 256-bit support 80*5f757f3fSDimitry AndricENTRY(VMOVAPSYmr, VMOVAPDYmr, VMOVDQAYmr) 81*5f757f3fSDimitry AndricENTRY(VMOVAPSYrm, VMOVAPDYrm, VMOVDQAYrm) 82*5f757f3fSDimitry AndricENTRY(VMOVAPSYrr, VMOVAPDYrr, VMOVDQAYrr) 83*5f757f3fSDimitry AndricENTRY(VMOVUPSYmr, VMOVUPDYmr, VMOVDQUYmr) 84*5f757f3fSDimitry AndricENTRY(VMOVUPSYrm, VMOVUPDYrm, VMOVDQUYrm) 85*5f757f3fSDimitry AndricENTRY(VMOVNTPSYmr, VMOVNTPDYmr, VMOVNTDQYmr) 86*5f757f3fSDimitry AndricENTRY(VPERMPSYrm, VPERMPSYrm, VPERMDYrm) 87*5f757f3fSDimitry AndricENTRY(VPERMPSYrr, VPERMPSYrr, VPERMDYrr) 88*5f757f3fSDimitry AndricENTRY(VPERMPDYmi, VPERMPDYmi, VPERMQYmi) 89*5f757f3fSDimitry AndricENTRY(VPERMPDYri, VPERMPDYri, VPERMQYri) 90*5f757f3fSDimitry Andric// AVX512 support 91*5f757f3fSDimitry AndricENTRY(VMOVLPSZ128mr, VMOVLPDZ128mr, VMOVPQI2QIZmr) 92*5f757f3fSDimitry AndricENTRY(VMOVNTPSZ128mr, VMOVNTPDZ128mr, VMOVNTDQZ128mr) 93*5f757f3fSDimitry AndricENTRY(VMOVNTPSZ256mr, VMOVNTPDZ256mr, VMOVNTDQZ256mr) 94*5f757f3fSDimitry AndricENTRY(VMOVNTPSZmr, VMOVNTPDZmr, VMOVNTDQZmr) 95*5f757f3fSDimitry AndricENTRY(VMOVSDZmr, VMOVSDZmr, VMOVPQI2QIZmr) 96*5f757f3fSDimitry AndricENTRY(VMOVSSZmr, VMOVSSZmr, VMOVPDI2DIZmr) 97*5f757f3fSDimitry AndricENTRY(VMOVSDZrm, VMOVSDZrm, VMOVQI2PQIZrm) 98*5f757f3fSDimitry AndricENTRY(VMOVSDZrm_alt, VMOVSDZrm_alt, VMOVQI2PQIZrm) 99*5f757f3fSDimitry AndricENTRY(VMOVSSZrm, VMOVSSZrm, VMOVDI2PDIZrm) 100*5f757f3fSDimitry AndricENTRY(VMOVSSZrm_alt, VMOVSSZrm_alt, VMOVDI2PDIZrm) 101*5f757f3fSDimitry AndricENTRY(VBROADCASTSSZ128rr, VBROADCASTSSZ128rr, VPBROADCASTDZ128rr) 102*5f757f3fSDimitry AndricENTRY(VBROADCASTSSZ128rm, VBROADCASTSSZ128rm, VPBROADCASTDZ128rm) 103*5f757f3fSDimitry AndricENTRY(VBROADCASTSSZ256rr, VBROADCASTSSZ256rr, VPBROADCASTDZ256rr) 104*5f757f3fSDimitry AndricENTRY(VBROADCASTSSZ256rm, VBROADCASTSSZ256rm, VPBROADCASTDZ256rm) 105*5f757f3fSDimitry AndricENTRY(VBROADCASTSSZrr, VBROADCASTSSZrr, VPBROADCASTDZrr) 106*5f757f3fSDimitry AndricENTRY(VBROADCASTSSZrm, VBROADCASTSSZrm, VPBROADCASTDZrm) 107*5f757f3fSDimitry AndricENTRY(VMOVDDUPZ128rr, VMOVDDUPZ128rr, VPBROADCASTQZ128rr) 108*5f757f3fSDimitry AndricENTRY(VMOVDDUPZ128rm, VMOVDDUPZ128rm, VPBROADCASTQZ128rm) 109*5f757f3fSDimitry AndricENTRY(VBROADCASTSDZ256rr, VBROADCASTSDZ256rr, VPBROADCASTQZ256rr) 110*5f757f3fSDimitry AndricENTRY(VBROADCASTSDZ256rm, VBROADCASTSDZ256rm, VPBROADCASTQZ256rm) 111*5f757f3fSDimitry AndricENTRY(VBROADCASTSDZrr, VBROADCASTSDZrr, VPBROADCASTQZrr) 112*5f757f3fSDimitry AndricENTRY(VBROADCASTSDZrm, VBROADCASTSDZrm, VPBROADCASTQZrm) 113*5f757f3fSDimitry AndricENTRY(VINSERTF32x4Zrr, VINSERTF32x4Zrr, VINSERTI32x4Zrr) 114*5f757f3fSDimitry AndricENTRY(VINSERTF32x4Zrm, VINSERTF32x4Zrm, VINSERTI32x4Zrm) 115*5f757f3fSDimitry AndricENTRY(VINSERTF32x8Zrr, VINSERTF32x8Zrr, VINSERTI32x8Zrr) 116*5f757f3fSDimitry AndricENTRY(VINSERTF32x8Zrm, VINSERTF32x8Zrm, VINSERTI32x8Zrm) 117*5f757f3fSDimitry AndricENTRY(VINSERTF64x2Zrr, VINSERTF64x2Zrr, VINSERTI64x2Zrr) 118*5f757f3fSDimitry AndricENTRY(VINSERTF64x2Zrm, VINSERTF64x2Zrm, VINSERTI64x2Zrm) 119*5f757f3fSDimitry AndricENTRY(VINSERTF64x4Zrr, VINSERTF64x4Zrr, VINSERTI64x4Zrr) 120*5f757f3fSDimitry AndricENTRY(VINSERTF64x4Zrm, VINSERTF64x4Zrm, VINSERTI64x4Zrm) 121*5f757f3fSDimitry AndricENTRY(VINSERTF32x4Z256rr, VINSERTF32x4Z256rr, VINSERTI32x4Z256rr) 122*5f757f3fSDimitry AndricENTRY(VINSERTF32x4Z256rm, VINSERTF32x4Z256rm, VINSERTI32x4Z256rm) 123*5f757f3fSDimitry AndricENTRY(VINSERTF64x2Z256rr, VINSERTF64x2Z256rr, VINSERTI64x2Z256rr) 124*5f757f3fSDimitry AndricENTRY(VINSERTF64x2Z256rm, VINSERTF64x2Z256rm, VINSERTI64x2Z256rm) 125*5f757f3fSDimitry AndricENTRY(VEXTRACTF32x4Zrr, VEXTRACTF32x4Zrr, VEXTRACTI32x4Zrr) 126*5f757f3fSDimitry AndricENTRY(VEXTRACTF32x4Zmr, VEXTRACTF32x4Zmr, VEXTRACTI32x4Zmr) 127*5f757f3fSDimitry AndricENTRY(VEXTRACTF32x8Zrr, VEXTRACTF32x8Zrr, VEXTRACTI32x8Zrr) 128*5f757f3fSDimitry AndricENTRY(VEXTRACTF32x8Zmr, VEXTRACTF32x8Zmr, VEXTRACTI32x8Zmr) 129*5f757f3fSDimitry AndricENTRY(VEXTRACTF64x2Zrr, VEXTRACTF64x2Zrr, VEXTRACTI64x2Zrr) 130*5f757f3fSDimitry AndricENTRY(VEXTRACTF64x2Zmr, VEXTRACTF64x2Zmr, VEXTRACTI64x2Zmr) 131*5f757f3fSDimitry AndricENTRY(VEXTRACTF64x4Zrr, VEXTRACTF64x4Zrr, VEXTRACTI64x4Zrr) 132*5f757f3fSDimitry AndricENTRY(VEXTRACTF64x4Zmr, VEXTRACTF64x4Zmr, VEXTRACTI64x4Zmr) 133*5f757f3fSDimitry AndricENTRY(VEXTRACTF32x4Z256rr, VEXTRACTF32x4Z256rr, VEXTRACTI32x4Z256rr) 134*5f757f3fSDimitry AndricENTRY(VEXTRACTF32x4Z256mr, VEXTRACTF32x4Z256mr, VEXTRACTI32x4Z256mr) 135*5f757f3fSDimitry AndricENTRY(VEXTRACTF64x2Z256rr, VEXTRACTF64x2Z256rr, VEXTRACTI64x2Z256rr) 136*5f757f3fSDimitry AndricENTRY(VEXTRACTF64x2Z256mr, VEXTRACTF64x2Z256mr, VEXTRACTI64x2Z256mr) 137*5f757f3fSDimitry AndricENTRY(VPERMILPSmi, VPERMILPSmi, VPSHUFDmi) 138*5f757f3fSDimitry AndricENTRY(VPERMILPSri, VPERMILPSri, VPSHUFDri) 139*5f757f3fSDimitry AndricENTRY(VPERMILPSZ128mi, VPERMILPSZ128mi, VPSHUFDZ128mi) 140*5f757f3fSDimitry AndricENTRY(VPERMILPSZ128ri, VPERMILPSZ128ri, VPSHUFDZ128ri) 141*5f757f3fSDimitry AndricENTRY(VPERMILPSZ256mi, VPERMILPSZ256mi, VPSHUFDZ256mi) 142*5f757f3fSDimitry AndricENTRY(VPERMILPSZ256ri, VPERMILPSZ256ri, VPSHUFDZ256ri) 143*5f757f3fSDimitry AndricENTRY(VPERMILPSZmi, VPERMILPSZmi, VPSHUFDZmi) 144*5f757f3fSDimitry AndricENTRY(VPERMILPSZri, VPERMILPSZri, VPSHUFDZri) 145*5f757f3fSDimitry AndricENTRY(VPERMPSZ256rm, VPERMPSZ256rm, VPERMDZ256rm) 146*5f757f3fSDimitry AndricENTRY(VPERMPSZ256rr, VPERMPSZ256rr, VPERMDZ256rr) 147*5f757f3fSDimitry AndricENTRY(VPERMPDZ256mi, VPERMPDZ256mi, VPERMQZ256mi) 148*5f757f3fSDimitry AndricENTRY(VPERMPDZ256ri, VPERMPDZ256ri, VPERMQZ256ri) 149*5f757f3fSDimitry AndricENTRY(VPERMPDZ256rm, VPERMPDZ256rm, VPERMQZ256rm) 150*5f757f3fSDimitry AndricENTRY(VPERMPDZ256rr, VPERMPDZ256rr, VPERMQZ256rr) 151*5f757f3fSDimitry AndricENTRY(VPERMPSZrm, VPERMPSZrm, VPERMDZrm) 152*5f757f3fSDimitry AndricENTRY(VPERMPSZrr, VPERMPSZrr, VPERMDZrr) 153*5f757f3fSDimitry AndricENTRY(VPERMPDZmi, VPERMPDZmi, VPERMQZmi) 154*5f757f3fSDimitry AndricENTRY(VPERMPDZri, VPERMPDZri, VPERMQZri) 155*5f757f3fSDimitry AndricENTRY(VPERMPDZrm, VPERMPDZrm, VPERMQZrm) 156*5f757f3fSDimitry AndricENTRY(VPERMPDZrr, VPERMPDZrr, VPERMQZrr) 157*5f757f3fSDimitry AndricENTRY(VUNPCKLPDZ256rm, VUNPCKLPDZ256rm, VPUNPCKLQDQZ256rm) 158*5f757f3fSDimitry AndricENTRY(VUNPCKLPDZ256rr, VUNPCKLPDZ256rr, VPUNPCKLQDQZ256rr) 159*5f757f3fSDimitry AndricENTRY(VUNPCKHPDZ256rm, VUNPCKHPDZ256rm, VPUNPCKHQDQZ256rm) 160*5f757f3fSDimitry AndricENTRY(VUNPCKHPDZ256rr, VUNPCKHPDZ256rr, VPUNPCKHQDQZ256rr) 161*5f757f3fSDimitry AndricENTRY(VUNPCKLPSZ256rm, VUNPCKLPSZ256rm, VPUNPCKLDQZ256rm) 162*5f757f3fSDimitry AndricENTRY(VUNPCKLPSZ256rr, VUNPCKLPSZ256rr, VPUNPCKLDQZ256rr) 163*5f757f3fSDimitry AndricENTRY(VUNPCKHPSZ256rm, VUNPCKHPSZ256rm, VPUNPCKHDQZ256rm) 164*5f757f3fSDimitry AndricENTRY(VUNPCKHPSZ256rr, VUNPCKHPSZ256rr, VPUNPCKHDQZ256rr) 165*5f757f3fSDimitry AndricENTRY(VUNPCKLPDZ128rm, VUNPCKLPDZ128rm, VPUNPCKLQDQZ128rm) 166*5f757f3fSDimitry AndricENTRY(VMOVLHPSZrr, VUNPCKLPDZ128rr, VPUNPCKLQDQZ128rr) 167*5f757f3fSDimitry AndricENTRY(VUNPCKHPDZ128rm, VUNPCKHPDZ128rm, VPUNPCKHQDQZ128rm) 168*5f757f3fSDimitry AndricENTRY(VUNPCKHPDZ128rr, VUNPCKHPDZ128rr, VPUNPCKHQDQZ128rr) 169*5f757f3fSDimitry AndricENTRY(VUNPCKLPSZ128rm, VUNPCKLPSZ128rm, VPUNPCKLDQZ128rm) 170*5f757f3fSDimitry AndricENTRY(VUNPCKLPSZ128rr, VUNPCKLPSZ128rr, VPUNPCKLDQZ128rr) 171*5f757f3fSDimitry AndricENTRY(VUNPCKHPSZ128rm, VUNPCKHPSZ128rm, VPUNPCKHDQZ128rm) 172*5f757f3fSDimitry AndricENTRY(VUNPCKHPSZ128rr, VUNPCKHPSZ128rr, VPUNPCKHDQZ128rr) 173*5f757f3fSDimitry AndricENTRY(VUNPCKLPDZrm, VUNPCKLPDZrm, VPUNPCKLQDQZrm) 174*5f757f3fSDimitry AndricENTRY(VUNPCKLPDZrr, VUNPCKLPDZrr, VPUNPCKLQDQZrr) 175*5f757f3fSDimitry AndricENTRY(VUNPCKHPDZrm, VUNPCKHPDZrm, VPUNPCKHQDQZrm) 176*5f757f3fSDimitry AndricENTRY(VUNPCKHPDZrr, VUNPCKHPDZrr, VPUNPCKHQDQZrr) 177*5f757f3fSDimitry AndricENTRY(VUNPCKLPSZrm, VUNPCKLPSZrm, VPUNPCKLDQZrm) 178*5f757f3fSDimitry AndricENTRY(VUNPCKLPSZrr, VUNPCKLPSZrr, VPUNPCKLDQZrr) 179*5f757f3fSDimitry AndricENTRY(VUNPCKHPSZrm, VUNPCKHPSZrm, VPUNPCKHDQZrm) 180*5f757f3fSDimitry AndricENTRY(VUNPCKHPSZrr, VUNPCKHPSZrr, VPUNPCKHDQZrr) 181*5f757f3fSDimitry AndricENTRY(VEXTRACTPSZmr, VEXTRACTPSZmr, VPEXTRDZmr) 182*5f757f3fSDimitry AndricENTRY(VEXTRACTPSZrr, VEXTRACTPSZrr, VPEXTRDZrr) 183*5f757f3fSDimitry Andric}; 184*5f757f3fSDimitry Andric 185*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableInstrsAVX2[][3] = { 186*5f757f3fSDimitry Andric// PackedSingle, PackedDouble, PackedInt 187*5f757f3fSDimitry AndricENTRY(VANDNPSYrm, VANDNPDYrm, VPANDNYrm) 188*5f757f3fSDimitry AndricENTRY(VANDNPSYrr, VANDNPDYrr, VPANDNYrr) 189*5f757f3fSDimitry AndricENTRY(VANDPSYrm, VANDPDYrm, VPANDYrm) 190*5f757f3fSDimitry AndricENTRY(VANDPSYrr, VANDPDYrr, VPANDYrr) 191*5f757f3fSDimitry AndricENTRY(VORPSYrm, VORPDYrm, VPORYrm) 192*5f757f3fSDimitry AndricENTRY(VORPSYrr, VORPDYrr, VPORYrr) 193*5f757f3fSDimitry AndricENTRY(VXORPSYrm, VXORPDYrm, VPXORYrm) 194*5f757f3fSDimitry AndricENTRY(VXORPSYrr, VXORPDYrr, VPXORYrr) 195*5f757f3fSDimitry AndricENTRY(VPERM2F128rm, VPERM2F128rm, VPERM2I128rm) 196*5f757f3fSDimitry AndricENTRY(VPERM2F128rr, VPERM2F128rr, VPERM2I128rr) 197*5f757f3fSDimitry AndricENTRY(VBROADCASTSSrm, VBROADCASTSSrm, VPBROADCASTDrm) 198*5f757f3fSDimitry AndricENTRY(VBROADCASTSSrr, VBROADCASTSSrr, VPBROADCASTDrr) 199*5f757f3fSDimitry AndricENTRY(VMOVDDUPrm, VMOVDDUPrm, VPBROADCASTQrm) 200*5f757f3fSDimitry AndricENTRY(VMOVDDUPrr, VMOVDDUPrr, VPBROADCASTQrr) 201*5f757f3fSDimitry AndricENTRY(VBROADCASTSSYrr, VBROADCASTSSYrr, VPBROADCASTDYrr) 202*5f757f3fSDimitry AndricENTRY(VBROADCASTSSYrm, VBROADCASTSSYrm, VPBROADCASTDYrm) 203*5f757f3fSDimitry AndricENTRY(VBROADCASTSDYrr, VBROADCASTSDYrr, VPBROADCASTQYrr) 204*5f757f3fSDimitry AndricENTRY(VBROADCASTSDYrm, VBROADCASTSDYrm, VPBROADCASTQYrm) 205*5f757f3fSDimitry AndricENTRY(VBROADCASTF128rm, VBROADCASTF128rm, VBROADCASTI128rm) 206*5f757f3fSDimitry AndricENTRY(VBLENDPSYrri, VBLENDPSYrri, VPBLENDDYrri) 207*5f757f3fSDimitry AndricENTRY(VBLENDPSYrmi, VBLENDPSYrmi, VPBLENDDYrmi) 208*5f757f3fSDimitry AndricENTRY(VPERMILPSYmi, VPERMILPSYmi, VPSHUFDYmi) 209*5f757f3fSDimitry AndricENTRY(VPERMILPSYri, VPERMILPSYri, VPSHUFDYri) 210*5f757f3fSDimitry AndricENTRY(VUNPCKLPDYrm, VUNPCKLPDYrm, VPUNPCKLQDQYrm) 211*5f757f3fSDimitry AndricENTRY(VUNPCKLPDYrr, VUNPCKLPDYrr, VPUNPCKLQDQYrr) 212*5f757f3fSDimitry AndricENTRY(VUNPCKHPDYrm, VUNPCKHPDYrm, VPUNPCKHQDQYrm) 213*5f757f3fSDimitry AndricENTRY(VUNPCKHPDYrr, VUNPCKHPDYrr, VPUNPCKHQDQYrr) 214*5f757f3fSDimitry AndricENTRY(VUNPCKLPSYrm, VUNPCKLPSYrm, VPUNPCKLDQYrm) 215*5f757f3fSDimitry AndricENTRY(VUNPCKLPSYrr, VUNPCKLPSYrr, VPUNPCKLDQYrr) 216*5f757f3fSDimitry AndricENTRY(VUNPCKHPSYrm, VUNPCKHPSYrm, VPUNPCKHDQYrm) 217*5f757f3fSDimitry AndricENTRY(VUNPCKHPSYrr, VUNPCKHPSYrr, VPUNPCKHDQYrr) 218*5f757f3fSDimitry Andric}; 219*5f757f3fSDimitry Andric 220*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableInstrsFP[][3] = { 221*5f757f3fSDimitry Andric// PackedSingle, PackedDouble 222*5f757f3fSDimitry AndricENTRY(MOVLPSrm, MOVLPDrm, INSTRUCTION_LIST_END) 223*5f757f3fSDimitry AndricENTRY(MOVHPSrm, MOVHPDrm, INSTRUCTION_LIST_END) 224*5f757f3fSDimitry AndricENTRY(MOVHPSmr, MOVHPDmr, INSTRUCTION_LIST_END) 225*5f757f3fSDimitry AndricENTRY(VMOVLPSrm, VMOVLPDrm, INSTRUCTION_LIST_END) 226*5f757f3fSDimitry AndricENTRY(VMOVHPSrm, VMOVHPDrm, INSTRUCTION_LIST_END) 227*5f757f3fSDimitry AndricENTRY(VMOVHPSmr, VMOVHPDmr, INSTRUCTION_LIST_END) 228*5f757f3fSDimitry AndricENTRY(VMOVLPSZ128rm, VMOVLPDZ128rm, INSTRUCTION_LIST_END) 229*5f757f3fSDimitry AndricENTRY(VMOVHPSZ128rm, VMOVHPDZ128rm, INSTRUCTION_LIST_END) 230*5f757f3fSDimitry AndricENTRY(VMOVHPSZ128mr, VMOVHPDZ128mr, INSTRUCTION_LIST_END) 231*5f757f3fSDimitry Andric}; 232*5f757f3fSDimitry Andric 233*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableInstrsAVX2InsertExtract[][3] = { 234*5f757f3fSDimitry Andric// PackedSingle, PackedDouble, PackedInt 235*5f757f3fSDimitry AndricENTRY(VEXTRACTF128mr, VEXTRACTF128mr, VEXTRACTI128mr) 236*5f757f3fSDimitry AndricENTRY(VEXTRACTF128rr, VEXTRACTF128rr, VEXTRACTI128rr) 237*5f757f3fSDimitry AndricENTRY(VINSERTF128rm, VINSERTF128rm, VINSERTI128rm) 238*5f757f3fSDimitry AndricENTRY(VINSERTF128rr, VINSERTF128rr, VINSERTI128rr) 239*5f757f3fSDimitry Andric}; 240*5f757f3fSDimitry Andric 241*5f757f3fSDimitry Andric// NOTE: These should only be used by the custom domain methods. 242*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableBlendInstrs[][3] = { 243*5f757f3fSDimitry Andric//PackedSingle, PackedDouble, PackedInt 244*5f757f3fSDimitry AndricENTRY(BLENDPSrmi, BLENDPDrmi, PBLENDWrmi) 245*5f757f3fSDimitry AndricENTRY(BLENDPSrri, BLENDPDrri, PBLENDWrri) 246*5f757f3fSDimitry AndricENTRY(VBLENDPSrmi, VBLENDPDrmi, VPBLENDWrmi) 247*5f757f3fSDimitry AndricENTRY(VBLENDPSrri, VBLENDPDrri, VPBLENDWrri) 248*5f757f3fSDimitry AndricENTRY(VBLENDPSYrmi, VBLENDPDYrmi, VPBLENDWYrmi) 249*5f757f3fSDimitry AndricENTRY(VBLENDPSYrri, VBLENDPDYrri, VPBLENDWYrri) 250*5f757f3fSDimitry Andric}; 251*5f757f3fSDimitry Andric 252*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableBlendAVX2Instrs[][3] = { 253*5f757f3fSDimitry Andric// PackedSingle, PackedDouble, PackedInt 254*5f757f3fSDimitry AndricENTRY(VBLENDPSrmi, VBLENDPDrmi, VPBLENDDrmi) 255*5f757f3fSDimitry AndricENTRY(VBLENDPSrri, VBLENDPDrri, VPBLENDDrri) 256*5f757f3fSDimitry AndricENTRY(VBLENDPSYrmi, VBLENDPDYrmi, VPBLENDDYrmi) 257*5f757f3fSDimitry AndricENTRY(VBLENDPSYrri, VBLENDPDYrri, VPBLENDDYrri) 258*5f757f3fSDimitry Andric}; 259*5f757f3fSDimitry Andric 260*5f757f3fSDimitry Andric#undef ENTRY 261*5f757f3fSDimitry Andric#define ENTRY(A, B, C, D) {X86::A, X86::B, X86::C, X86::D}, 262*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableInstrsAVX512[][4] = { 263*5f757f3fSDimitry Andric// Two integer columns for 64-bit and 32-bit elements. 264*5f757f3fSDimitry Andric//PackedSingle, PackedDouble, PackedInt, PackedInt 265*5f757f3fSDimitry AndricENTRY(VMOVAPSZ128mr, VMOVAPDZ128mr, VMOVDQA64Z128mr, VMOVDQA32Z128mr) 266*5f757f3fSDimitry AndricENTRY(VMOVAPSZ128rm, VMOVAPDZ128rm, VMOVDQA64Z128rm, VMOVDQA32Z128rm) 267*5f757f3fSDimitry AndricENTRY(VMOVAPSZ128rr, VMOVAPDZ128rr, VMOVDQA64Z128rr, VMOVDQA32Z128rr) 268*5f757f3fSDimitry AndricENTRY(VMOVUPSZ128mr, VMOVUPDZ128mr, VMOVDQU64Z128mr, VMOVDQU32Z128mr) 269*5f757f3fSDimitry AndricENTRY(VMOVUPSZ128rm, VMOVUPDZ128rm, VMOVDQU64Z128rm, VMOVDQU32Z128rm) 270*5f757f3fSDimitry AndricENTRY(VMOVAPSZ256mr, VMOVAPDZ256mr, VMOVDQA64Z256mr, VMOVDQA32Z256mr) 271*5f757f3fSDimitry AndricENTRY(VMOVAPSZ256rm, VMOVAPDZ256rm, VMOVDQA64Z256rm, VMOVDQA32Z256rm) 272*5f757f3fSDimitry AndricENTRY(VMOVAPSZ256rr, VMOVAPDZ256rr, VMOVDQA64Z256rr, VMOVDQA32Z256rr) 273*5f757f3fSDimitry AndricENTRY(VMOVUPSZ256mr, VMOVUPDZ256mr, VMOVDQU64Z256mr, VMOVDQU32Z256mr) 274*5f757f3fSDimitry AndricENTRY(VMOVUPSZ256rm, VMOVUPDZ256rm, VMOVDQU64Z256rm, VMOVDQU32Z256rm) 275*5f757f3fSDimitry AndricENTRY(VMOVAPSZmr, VMOVAPDZmr, VMOVDQA64Zmr, VMOVDQA32Zmr) 276*5f757f3fSDimitry AndricENTRY(VMOVAPSZrm, VMOVAPDZrm, VMOVDQA64Zrm, VMOVDQA32Zrm) 277*5f757f3fSDimitry AndricENTRY(VMOVAPSZrr, VMOVAPDZrr, VMOVDQA64Zrr, VMOVDQA32Zrr) 278*5f757f3fSDimitry AndricENTRY(VMOVUPSZmr, VMOVUPDZmr, VMOVDQU64Zmr, VMOVDQU32Zmr) 279*5f757f3fSDimitry AndricENTRY(VMOVUPSZrm, VMOVUPDZrm, VMOVDQU64Zrm, VMOVDQU32Zrm) 280*5f757f3fSDimitry Andric}; 281*5f757f3fSDimitry Andric 282*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableInstrsAVX512DQ[][4] = { 283*5f757f3fSDimitry Andric// Two integer columns for 64-bit and 32-bit elements. 284*5f757f3fSDimitry Andric// PackedSingle, PackedDouble, PackedInt, PackedInt 285*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rm, VANDNPDZ128rm, VPANDNQZ128rm, VPANDNDZ128rm) 286*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rr, VANDNPDZ128rr, VPANDNQZ128rr, VPANDNDZ128rr) 287*5f757f3fSDimitry AndricENTRY(VANDPSZ128rm, VANDPDZ128rm, VPANDQZ128rm, VPANDDZ128rm) 288*5f757f3fSDimitry AndricENTRY(VANDPSZ128rr, VANDPDZ128rr, VPANDQZ128rr, VPANDDZ128rr) 289*5f757f3fSDimitry AndricENTRY(VORPSZ128rm, VORPDZ128rm, VPORQZ128rm, VPORDZ128rm) 290*5f757f3fSDimitry AndricENTRY(VORPSZ128rr, VORPDZ128rr, VPORQZ128rr, VPORDZ128rr) 291*5f757f3fSDimitry AndricENTRY(VXORPSZ128rm, VXORPDZ128rm, VPXORQZ128rm, VPXORDZ128rm) 292*5f757f3fSDimitry AndricENTRY(VXORPSZ128rr, VXORPDZ128rr, VPXORQZ128rr, VPXORDZ128rr) 293*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rm, VANDNPDZ256rm, VPANDNQZ256rm, VPANDNDZ256rm) 294*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rr, VANDNPDZ256rr, VPANDNQZ256rr, VPANDNDZ256rr) 295*5f757f3fSDimitry AndricENTRY(VANDPSZ256rm, VANDPDZ256rm, VPANDQZ256rm, VPANDDZ256rm) 296*5f757f3fSDimitry AndricENTRY(VANDPSZ256rr, VANDPDZ256rr, VPANDQZ256rr, VPANDDZ256rr) 297*5f757f3fSDimitry AndricENTRY(VORPSZ256rm, VORPDZ256rm, VPORQZ256rm, VPORDZ256rm) 298*5f757f3fSDimitry AndricENTRY(VORPSZ256rr, VORPDZ256rr, VPORQZ256rr, VPORDZ256rr) 299*5f757f3fSDimitry AndricENTRY(VXORPSZ256rm, VXORPDZ256rm, VPXORQZ256rm, VPXORDZ256rm) 300*5f757f3fSDimitry AndricENTRY(VXORPSZ256rr, VXORPDZ256rr, VPXORQZ256rr, VPXORDZ256rr) 301*5f757f3fSDimitry AndricENTRY(VANDNPSZrm, VANDNPDZrm, VPANDNQZrm, VPANDNDZrm) 302*5f757f3fSDimitry AndricENTRY(VANDNPSZrr, VANDNPDZrr, VPANDNQZrr, VPANDNDZrr) 303*5f757f3fSDimitry AndricENTRY(VANDPSZrm, VANDPDZrm, VPANDQZrm, VPANDDZrm) 304*5f757f3fSDimitry AndricENTRY(VANDPSZrr, VANDPDZrr, VPANDQZrr, VPANDDZrr) 305*5f757f3fSDimitry AndricENTRY(VORPSZrm, VORPDZrm, VPORQZrm, VPORDZrm) 306*5f757f3fSDimitry AndricENTRY(VORPSZrr, VORPDZrr, VPORQZrr, VPORDZrr) 307*5f757f3fSDimitry AndricENTRY(VXORPSZrm, VXORPDZrm, VPXORQZrm, VPXORDZrm) 308*5f757f3fSDimitry AndricENTRY(VXORPSZrr, VXORPDZrr, VPXORQZrr, VPXORDZrr) 309*5f757f3fSDimitry Andric}; 310*5f757f3fSDimitry Andric 311*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableInstrsAVX512DQMasked[][4] = { 312*5f757f3fSDimitry Andric// Two integer columns for 64-bit and 32-bit elements. 313*5f757f3fSDimitry Andric// PackedSingle, PackedDouble, PackedInt, PackedInt 314*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rmk, VANDNPDZ128rmk, VPANDNQZ128rmk, VPANDNDZ128rmk) 315*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rmkz, VANDNPDZ128rmkz, VPANDNQZ128rmkz, VPANDNDZ128rmkz) 316*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rrk, VANDNPDZ128rrk, VPANDNQZ128rrk, VPANDNDZ128rrk) 317*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rrkz, VANDNPDZ128rrkz, VPANDNQZ128rrkz, VPANDNDZ128rrkz) 318*5f757f3fSDimitry AndricENTRY(VANDPSZ128rmk, VANDPDZ128rmk, VPANDQZ128rmk, VPANDDZ128rmk) 319*5f757f3fSDimitry AndricENTRY(VANDPSZ128rmkz, VANDPDZ128rmkz, VPANDQZ128rmkz, VPANDDZ128rmkz) 320*5f757f3fSDimitry AndricENTRY(VANDPSZ128rrk, VANDPDZ128rrk, VPANDQZ128rrk, VPANDDZ128rrk) 321*5f757f3fSDimitry AndricENTRY(VANDPSZ128rrkz, VANDPDZ128rrkz, VPANDQZ128rrkz, VPANDDZ128rrkz) 322*5f757f3fSDimitry AndricENTRY(VORPSZ128rmk, VORPDZ128rmk, VPORQZ128rmk, VPORDZ128rmk) 323*5f757f3fSDimitry AndricENTRY(VORPSZ128rmkz, VORPDZ128rmkz, VPORQZ128rmkz, VPORDZ128rmkz) 324*5f757f3fSDimitry AndricENTRY(VORPSZ128rrk, VORPDZ128rrk, VPORQZ128rrk, VPORDZ128rrk) 325*5f757f3fSDimitry AndricENTRY(VORPSZ128rrkz, VORPDZ128rrkz, VPORQZ128rrkz, VPORDZ128rrkz) 326*5f757f3fSDimitry AndricENTRY(VXORPSZ128rmk, VXORPDZ128rmk, VPXORQZ128rmk, VPXORDZ128rmk) 327*5f757f3fSDimitry AndricENTRY(VXORPSZ128rmkz, VXORPDZ128rmkz, VPXORQZ128rmkz, VPXORDZ128rmkz) 328*5f757f3fSDimitry AndricENTRY(VXORPSZ128rrk, VXORPDZ128rrk, VPXORQZ128rrk, VPXORDZ128rrk) 329*5f757f3fSDimitry AndricENTRY(VXORPSZ128rrkz, VXORPDZ128rrkz, VPXORQZ128rrkz, VPXORDZ128rrkz) 330*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rmk, VANDNPDZ256rmk, VPANDNQZ256rmk, VPANDNDZ256rmk) 331*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rmkz, VANDNPDZ256rmkz, VPANDNQZ256rmkz, VPANDNDZ256rmkz) 332*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rrk, VANDNPDZ256rrk, VPANDNQZ256rrk, VPANDNDZ256rrk) 333*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rrkz, VANDNPDZ256rrkz, VPANDNQZ256rrkz, VPANDNDZ256rrkz) 334*5f757f3fSDimitry AndricENTRY(VANDPSZ256rmk, VANDPDZ256rmk, VPANDQZ256rmk, VPANDDZ256rmk) 335*5f757f3fSDimitry AndricENTRY(VANDPSZ256rmkz, VANDPDZ256rmkz, VPANDQZ256rmkz, VPANDDZ256rmkz) 336*5f757f3fSDimitry AndricENTRY(VANDPSZ256rrk, VANDPDZ256rrk, VPANDQZ256rrk, VPANDDZ256rrk) 337*5f757f3fSDimitry AndricENTRY(VANDPSZ256rrkz, VANDPDZ256rrkz, VPANDQZ256rrkz, VPANDDZ256rrkz) 338*5f757f3fSDimitry AndricENTRY(VORPSZ256rmk, VORPDZ256rmk, VPORQZ256rmk, VPORDZ256rmk) 339*5f757f3fSDimitry AndricENTRY(VORPSZ256rmkz, VORPDZ256rmkz, VPORQZ256rmkz, VPORDZ256rmkz) 340*5f757f3fSDimitry AndricENTRY(VORPSZ256rrk, VORPDZ256rrk, VPORQZ256rrk, VPORDZ256rrk) 341*5f757f3fSDimitry AndricENTRY(VORPSZ256rrkz, VORPDZ256rrkz, VPORQZ256rrkz, VPORDZ256rrkz) 342*5f757f3fSDimitry AndricENTRY(VXORPSZ256rmk, VXORPDZ256rmk, VPXORQZ256rmk, VPXORDZ256rmk) 343*5f757f3fSDimitry AndricENTRY(VXORPSZ256rmkz, VXORPDZ256rmkz, VPXORQZ256rmkz, VPXORDZ256rmkz) 344*5f757f3fSDimitry AndricENTRY(VXORPSZ256rrk, VXORPDZ256rrk, VPXORQZ256rrk, VPXORDZ256rrk) 345*5f757f3fSDimitry AndricENTRY(VXORPSZ256rrkz, VXORPDZ256rrkz, VPXORQZ256rrkz, VPXORDZ256rrkz) 346*5f757f3fSDimitry AndricENTRY(VANDNPSZrmk, VANDNPDZrmk, VPANDNQZrmk, VPANDNDZrmk) 347*5f757f3fSDimitry AndricENTRY(VANDNPSZrmkz, VANDNPDZrmkz, VPANDNQZrmkz, VPANDNDZrmkz) 348*5f757f3fSDimitry AndricENTRY(VANDNPSZrrk, VANDNPDZrrk, VPANDNQZrrk, VPANDNDZrrk) 349*5f757f3fSDimitry AndricENTRY(VANDNPSZrrkz, VANDNPDZrrkz, VPANDNQZrrkz, VPANDNDZrrkz) 350*5f757f3fSDimitry AndricENTRY(VANDPSZrmk, VANDPDZrmk, VPANDQZrmk, VPANDDZrmk) 351*5f757f3fSDimitry AndricENTRY(VANDPSZrmkz, VANDPDZrmkz, VPANDQZrmkz, VPANDDZrmkz) 352*5f757f3fSDimitry AndricENTRY(VANDPSZrrk, VANDPDZrrk, VPANDQZrrk, VPANDDZrrk) 353*5f757f3fSDimitry AndricENTRY(VANDPSZrrkz, VANDPDZrrkz, VPANDQZrrkz, VPANDDZrrkz) 354*5f757f3fSDimitry AndricENTRY(VORPSZrmk, VORPDZrmk, VPORQZrmk, VPORDZrmk) 355*5f757f3fSDimitry AndricENTRY(VORPSZrmkz, VORPDZrmkz, VPORQZrmkz, VPORDZrmkz) 356*5f757f3fSDimitry AndricENTRY(VORPSZrrk, VORPDZrrk, VPORQZrrk, VPORDZrrk) 357*5f757f3fSDimitry AndricENTRY(VORPSZrrkz, VORPDZrrkz, VPORQZrrkz, VPORDZrrkz) 358*5f757f3fSDimitry AndricENTRY(VXORPSZrmk, VXORPDZrmk, VPXORQZrmk, VPXORDZrmk) 359*5f757f3fSDimitry AndricENTRY(VXORPSZrmkz, VXORPDZrmkz, VPXORQZrmkz, VPXORDZrmkz) 360*5f757f3fSDimitry AndricENTRY(VXORPSZrrk, VXORPDZrrk, VPXORQZrrk, VPXORDZrrk) 361*5f757f3fSDimitry AndricENTRY(VXORPSZrrkz, VXORPDZrrkz, VPXORQZrrkz, VPXORDZrrkz) 362*5f757f3fSDimitry Andric// Broadcast loads can be handled the same as masked operations to avoid 363*5f757f3fSDimitry Andric// changing element size. 364*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rmb, VANDNPDZ128rmb, VPANDNQZ128rmb, VPANDNDZ128rmb) 365*5f757f3fSDimitry AndricENTRY(VANDPSZ128rmb, VANDPDZ128rmb, VPANDQZ128rmb, VPANDDZ128rmb) 366*5f757f3fSDimitry AndricENTRY(VORPSZ128rmb, VORPDZ128rmb, VPORQZ128rmb, VPORDZ128rmb) 367*5f757f3fSDimitry AndricENTRY(VXORPSZ128rmb, VXORPDZ128rmb, VPXORQZ128rmb, VPXORDZ128rmb) 368*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rmb, VANDNPDZ256rmb, VPANDNQZ256rmb, VPANDNDZ256rmb) 369*5f757f3fSDimitry AndricENTRY(VANDPSZ256rmb, VANDPDZ256rmb, VPANDQZ256rmb, VPANDDZ256rmb) 370*5f757f3fSDimitry AndricENTRY(VORPSZ256rmb, VORPDZ256rmb, VPORQZ256rmb, VPORDZ256rmb) 371*5f757f3fSDimitry AndricENTRY(VXORPSZ256rmb, VXORPDZ256rmb, VPXORQZ256rmb, VPXORDZ256rmb) 372*5f757f3fSDimitry AndricENTRY(VANDNPSZrmb, VANDNPDZrmb, VPANDNQZrmb, VPANDNDZrmb) 373*5f757f3fSDimitry AndricENTRY(VANDPSZrmb, VANDPDZrmb, VPANDQZrmb, VPANDDZrmb) 374*5f757f3fSDimitry AndricENTRY(VANDPSZrmb, VANDPDZrmb, VPANDQZrmb, VPANDDZrmb) 375*5f757f3fSDimitry AndricENTRY(VORPSZrmb, VORPDZrmb, VPORQZrmb, VPORDZrmb) 376*5f757f3fSDimitry AndricENTRY(VXORPSZrmb, VXORPDZrmb, VPXORQZrmb, VPXORDZrmb) 377*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rmbk, VANDNPDZ128rmbk, VPANDNQZ128rmbk, VPANDNDZ128rmbk) 378*5f757f3fSDimitry AndricENTRY(VANDPSZ128rmbk, VANDPDZ128rmbk, VPANDQZ128rmbk, VPANDDZ128rmbk) 379*5f757f3fSDimitry AndricENTRY(VORPSZ128rmbk, VORPDZ128rmbk, VPORQZ128rmbk, VPORDZ128rmbk) 380*5f757f3fSDimitry AndricENTRY(VXORPSZ128rmbk, VXORPDZ128rmbk, VPXORQZ128rmbk, VPXORDZ128rmbk) 381*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rmbk, VANDNPDZ256rmbk, VPANDNQZ256rmbk, VPANDNDZ256rmbk) 382*5f757f3fSDimitry AndricENTRY(VANDPSZ256rmbk, VANDPDZ256rmbk, VPANDQZ256rmbk, VPANDDZ256rmbk) 383*5f757f3fSDimitry AndricENTRY(VORPSZ256rmbk, VORPDZ256rmbk, VPORQZ256rmbk, VPORDZ256rmbk) 384*5f757f3fSDimitry AndricENTRY(VXORPSZ256rmbk, VXORPDZ256rmbk, VPXORQZ256rmbk, VPXORDZ256rmbk) 385*5f757f3fSDimitry AndricENTRY(VANDNPSZrmbk, VANDNPDZrmbk, VPANDNQZrmbk, VPANDNDZrmbk) 386*5f757f3fSDimitry AndricENTRY(VANDPSZrmbk, VANDPDZrmbk, VPANDQZrmbk, VPANDDZrmbk) 387*5f757f3fSDimitry AndricENTRY(VANDPSZrmbk, VANDPDZrmbk, VPANDQZrmbk, VPANDDZrmbk) 388*5f757f3fSDimitry AndricENTRY(VORPSZrmbk, VORPDZrmbk, VPORQZrmbk, VPORDZrmbk) 389*5f757f3fSDimitry AndricENTRY(VXORPSZrmbk, VXORPDZrmbk, VPXORQZrmbk, VPXORDZrmbk) 390*5f757f3fSDimitry AndricENTRY(VANDNPSZ128rmbkz, VANDNPDZ128rmbkz, VPANDNQZ128rmbkz, VPANDNDZ128rmbkz) 391*5f757f3fSDimitry AndricENTRY(VANDPSZ128rmbkz, VANDPDZ128rmbkz, VPANDQZ128rmbkz, VPANDDZ128rmbkz) 392*5f757f3fSDimitry AndricENTRY(VORPSZ128rmbkz, VORPDZ128rmbkz, VPORQZ128rmbkz, VPORDZ128rmbkz) 393*5f757f3fSDimitry AndricENTRY(VXORPSZ128rmbkz, VXORPDZ128rmbkz, VPXORQZ128rmbkz, VPXORDZ128rmbkz) 394*5f757f3fSDimitry AndricENTRY(VANDNPSZ256rmbkz, VANDNPDZ256rmbkz, VPANDNQZ256rmbkz, VPANDNDZ256rmbkz) 395*5f757f3fSDimitry AndricENTRY(VANDPSZ256rmbkz, VANDPDZ256rmbkz, VPANDQZ256rmbkz, VPANDDZ256rmbkz) 396*5f757f3fSDimitry AndricENTRY(VORPSZ256rmbkz, VORPDZ256rmbkz, VPORQZ256rmbkz, VPORDZ256rmbkz) 397*5f757f3fSDimitry AndricENTRY(VXORPSZ256rmbkz, VXORPDZ256rmbkz, VPXORQZ256rmbkz, VPXORDZ256rmbkz) 398*5f757f3fSDimitry AndricENTRY(VANDNPSZrmbkz, VANDNPDZrmbkz, VPANDNQZrmbkz, VPANDNDZrmbkz) 399*5f757f3fSDimitry AndricENTRY(VANDPSZrmbkz, VANDPDZrmbkz, VPANDQZrmbkz, VPANDDZrmbkz) 400*5f757f3fSDimitry AndricENTRY(VANDPSZrmbkz, VANDPDZrmbkz, VPANDQZrmbkz, VPANDDZrmbkz) 401*5f757f3fSDimitry AndricENTRY(VORPSZrmbkz, VORPDZrmbkz, VPORQZrmbkz, VPORDZrmbkz) 402*5f757f3fSDimitry AndricENTRY(VXORPSZrmbkz, VXORPDZrmbkz, VPXORQZrmbkz, VPXORDZrmbkz) 403*5f757f3fSDimitry Andric}; 404*5f757f3fSDimitry Andric 405*5f757f3fSDimitry Andric// Special table for changing EVEX logic instructions to VEX. 406*5f757f3fSDimitry Andric// TODO: Should we run EVEX->VEX earlier? 407*5f757f3fSDimitry Andricstatic const uint16_t ReplaceableCustomAVX512LogicInstrs[][4] = { 408*5f757f3fSDimitry Andric// Two integer columns for 64-bit and 32-bit elements. 409*5f757f3fSDimitry Andric// PackedSingle, PackedDouble, PackedInt, PackedInt 410*5f757f3fSDimitry AndricENTRY(VANDNPSrm, VANDNPDrm, VPANDNQZ128rm, VPANDNDZ128rm) 411*5f757f3fSDimitry AndricENTRY(VANDNPSrr, VANDNPDrr, VPANDNQZ128rr, VPANDNDZ128rr) 412*5f757f3fSDimitry AndricENTRY(VANDPSrm, VANDPDrm, VPANDQZ128rm, VPANDDZ128rm) 413*5f757f3fSDimitry AndricENTRY(VANDPSrr, VANDPDrr, VPANDQZ128rr, VPANDDZ128rr) 414*5f757f3fSDimitry AndricENTRY(VORPSrm, VORPDrm, VPORQZ128rm, VPORDZ128rm) 415*5f757f3fSDimitry AndricENTRY(VORPSrr, VORPDrr, VPORQZ128rr, VPORDZ128rr) 416*5f757f3fSDimitry AndricENTRY(VXORPSrm, VXORPDrm, VPXORQZ128rm, VPXORDZ128rm) 417*5f757f3fSDimitry AndricENTRY(VXORPSrr, VXORPDrr, VPXORQZ128rr, VPXORDZ128rr) 418*5f757f3fSDimitry AndricENTRY(VANDNPSYrm, VANDNPDYrm, VPANDNQZ256rm, VPANDNDZ256rm) 419*5f757f3fSDimitry AndricENTRY(VANDNPSYrr, VANDNPDYrr, VPANDNQZ256rr, VPANDNDZ256rr) 420*5f757f3fSDimitry AndricENTRY(VANDPSYrm, VANDPDYrm, VPANDQZ256rm, VPANDDZ256rm) 421*5f757f3fSDimitry AndricENTRY(VANDPSYrr, VANDPDYrr, VPANDQZ256rr, VPANDDZ256rr) 422*5f757f3fSDimitry AndricENTRY(VORPSYrm, VORPDYrm, VPORQZ256rm, VPORDZ256rm) 423*5f757f3fSDimitry AndricENTRY(VORPSYrr, VORPDYrr, VPORQZ256rr, VPORDZ256rr) 424*5f757f3fSDimitry AndricENTRY(VXORPSYrm, VXORPDYrm, VPXORQZ256rm, VPXORDZ256rm) 425*5f757f3fSDimitry AndricENTRY(VXORPSYrr, VXORPDYrr, VPXORQZ256rr, VPXORDZ256rr) 426*5f757f3fSDimitry Andric}; 427