[X86][NFC] Remove VEX_W1X after 80dbf60

This commit is contained in:
Shengchen Kan 2024-01-06 17:07:39 +08:00
parent 80dbf601d1
commit 04a7ec610e
6 changed files with 269 additions and 43 deletions

View File

@ -448,7 +448,7 @@ multiclass vinsert_for_type<ValueType EltVT32, int Opcode128,
X86VectorVTInfo< 2, EltVT64, VR128X>,
X86VectorVTInfo< 4, EltVT64, VR256X>,
null_frag, vinsert128_insert, sched>,
VEX_W1X, EVEX_V256;
EVEX_V256, REX_W;
// Even with DQI we'd like to only use these instructions for masking.
let Predicates = [HasDQI] in {
@ -750,7 +750,7 @@ multiclass vextract_for_type<ValueType EltVT32, int Opcode128,
X86VectorVTInfo< 4, EltVT64, VR256X>,
X86VectorVTInfo< 2, EltVT64, VR128X>,
null_frag, vextract128_extract, SchedRR, SchedMR>,
VEX_W1X, EVEX_V256, EVEX_CD8<64, CD8VT2>;
EVEX_V256, EVEX_CD8<64, CD8VT2>, REX_W;
// Even with DQI we'd like to only use these instructions for masking.
let Predicates = [HasDQI] in {
@ -1161,7 +1161,7 @@ multiclass avx512_fp_broadcast_ss<bits<8> opc, string OpcodeStr,
defm VBROADCASTSS : avx512_fp_broadcast_ss<0x18, "vbroadcastss",
avx512vl_f32_info>;
defm VBROADCASTSD : avx512_fp_broadcast_sd<0x19, "vbroadcastsd",
avx512vl_f64_info>, VEX_W1X;
avx512vl_f64_info>, REX_W;
multiclass avx512_int_broadcast_reg<bits<8> opc, SchedWrite SchedRR,
X86VectorVTInfo _, SDPatternOperator OpNode,
@ -1267,7 +1267,7 @@ defm VPBROADCASTW : avx512_int_broadcast_rm_vl<0x79, "vpbroadcastw",
defm VPBROADCASTD : avx512_int_broadcast_rm_vl<0x58, "vpbroadcastd",
avx512vl_i32_info, HasAVX512, 1>;
defm VPBROADCASTQ : avx512_int_broadcast_rm_vl<0x59, "vpbroadcastq",
avx512vl_i64_info, HasAVX512, 1>, VEX_W1X;
avx512vl_i64_info, HasAVX512, 1>, REX_W;
multiclass avx512_subvec_broadcast_rm<bits<8> opc, string OpcodeStr,
SDPatternOperator OpNode,
@ -1460,11 +1460,11 @@ let Predicates = [HasBF16, HasVLX] in
let Predicates = [HasVLX, HasDQI] in {
defm VBROADCASTI64X2Z128 : avx512_subvec_broadcast_rm_dq<0x5a, "vbroadcasti64x2",
X86SubVBroadcastld128, v4i64x_info, v2i64x_info>, VEX_W1X,
EVEX_V256, EVEX_CD8<64, CD8VT2>;
X86SubVBroadcastld128, v4i64x_info, v2i64x_info>,
EVEX_V256, EVEX_CD8<64, CD8VT2>, REX_W;
defm VBROADCASTF64X2Z128 : avx512_subvec_broadcast_rm_dq<0x1a, "vbroadcastf64x2",
X86SubVBroadcastld128, v4f64x_info, v2f64x_info>, VEX_W1X,
EVEX_V256, EVEX_CD8<64, CD8VT2>;
X86SubVBroadcastld128, v4f64x_info, v2f64x_info>,
EVEX_V256, EVEX_CD8<64, CD8VT2>, REX_W;
// Patterns for selects of bitcasted operations.
def : Pat<(vselect_mask VK4WM:$mask,
@ -6396,7 +6396,7 @@ defm VPERMILPS : avx512_permil<"vpermilps", 0x04, 0x0C, avx512vl_f32_info,
avx512vl_i32_info>;
let ExeDomain = SSEPackedDouble in
defm VPERMILPD : avx512_permil<"vpermilpd", 0x05, 0x0D, avx512vl_f64_info,
avx512vl_i64_info>, VEX_W1X;
avx512vl_i64_info>, REX_W;
//===----------------------------------------------------------------------===//
// AVX-512 - VPSHUFD, VPSHUFLW, VPSHUFHW

View File

@ -247,8 +247,6 @@ class X86Inst<bits<8> opcod, Format f, ImmType i, dag outs, dag ins,
bit hasREPPrefix = 0; // Does this inst have a REP prefix?
bits<2> OpEncBits = OpEnc.Value;
bit IgnoresW = 0; // Does this inst ignore REX_W field?
bit EVEX_W1_VEX_W0 = 0; // This EVEX inst with VEX.W==1 can become a VEX
// instruction with VEX.W == 0.
bit hasVEX_4V = 0; // Does this inst require the VEX.VVVV field?
bit hasVEX_L = 0; // Does this inst use large (256-bit) registers?
bit ignoresVEX_L = 0; // Does this instruction ignore the L-bit

View File

@ -43,8 +43,6 @@ class XOP { Encoding OpEnc = EncXOP; }
class VEX { Encoding OpEnc = EncVEX; }
class EVEX { Encoding OpEnc = EncEVEX; }
class WIG { bit IgnoresW = 1; }
// Special version of REX_W that can be changed to VEX.W==0 for EVEX2VEX.
class VEX_W1X { bit hasREX_W = 1; bit EVEX_W1_VEX_W0 = 1; }
class VEX_L { bit hasVEX_L = 1; }
class VEX_LIG { bit ignoresVEX_L = 1; }
class VVVV { bit hasVEX_4V = 1; }

View File

@ -95,34 +95,23 @@ static inline uint64_t getValueFromBitsInit(const BitsInit *B) {
return Value;
}
// Function object - Operator() returns true if the given VEX instruction
// matches the EVEX instruction of this object.
class IsMatch {
const CodeGenInstruction *EVEXInst;
const CodeGenInstruction *OldInst;
public:
IsMatch(const CodeGenInstruction *EVEXInst) : EVEXInst(EVEXInst) {}
IsMatch(const CodeGenInstruction *OldInst) : OldInst(OldInst) {}
bool operator()(const CodeGenInstruction *VEXInst) {
RecognizableInstrBase VEXRI(*VEXInst);
RecognizableInstrBase EVEXRI(*EVEXInst);
bool VEX_W = VEXRI.HasREX_W;
bool EVEX_W = EVEXRI.HasREX_W;
bool VEX_WIG = VEXRI.IgnoresW;
bool EVEX_WIG = EVEXRI.IgnoresW;
bool EVEX_W1_VEX_W0 = EVEXInst->TheDef->getValueAsBit("EVEX_W1_VEX_W0");
bool operator()(const CodeGenInstruction *NewInst) {
RecognizableInstrBase NewRI(*NewInst);
RecognizableInstrBase OldRI(*OldInst);
if (VEXRI.IsCodeGenOnly != EVEXRI.IsCodeGenOnly ||
// VEX/EVEX fields
VEXRI.OpPrefix != EVEXRI.OpPrefix || VEXRI.OpMap != EVEXRI.OpMap ||
VEXRI.HasVEX_4V != EVEXRI.HasVEX_4V ||
VEXRI.HasVEX_L != EVEXRI.HasVEX_L ||
// Match is allowed if either is VEX_WIG, or they match, or EVEX
// is VEX_W1X and VEX is VEX_W0.
(!(VEX_WIG || (!EVEX_WIG && EVEX_W == VEX_W) ||
(EVEX_W1_VEX_W0 && EVEX_W && !VEX_W))) ||
// Instruction's format
VEXRI.Form != EVEXRI.Form)
// Return false if any of the following fields of does not match.
if (std::make_tuple(OldRI.IsCodeGenOnly, OldRI.OpMap, NewRI.OpPrefix,
OldRI.HasVEX_4V, OldRI.HasVEX_L, OldRI.HasREX_W,
OldRI.Form) !=
std::make_tuple(NewRI.IsCodeGenOnly, NewRI.OpMap, OldRI.OpPrefix,
NewRI.HasVEX_4V, NewRI.HasVEX_L, NewRI.HasREX_W,
NewRI.Form))
return false;
// This is needed for instructions with intrinsic version (_Int).
@ -131,9 +120,9 @@ public:
// Also for instructions that their EVEX version was upgraded to work with
// k-registers. For example VPCMPEQBrm (xmm output register) and
// VPCMPEQBZ128rm (k register output register).
for (unsigned i = 0, e = EVEXInst->Operands.size(); i < e; i++) {
Record *OpRec1 = EVEXInst->Operands[i].Rec;
Record *OpRec2 = VEXInst->Operands[i].Rec;
for (unsigned i = 0, e = OldInst->Operands.size(); i < e; i++) {
Record *OpRec1 = OldInst->Operands[i].Rec;
Record *OpRec2 = NewInst->Operands[i].Rec;
if (OpRec1 == OpRec2)
continue;

View File

@ -374,8 +374,7 @@ public:
RegRI.HasEVEX_L2, RegRI.HasEVEX_NF,
RegRec->getValueAsBit("hasEVEX_RC"),
RegRec->getValueAsBit("hasLockPrefix"),
RegRec->getValueAsBit("hasNoTrackPrefix"),
RegRec->getValueAsBit("EVEX_W1_VEX_W0")) !=
RegRec->getValueAsBit("hasNoTrackPrefix")) !=
std::make_tuple(MemRI.Encoding, MemRI.Opcode, MemRI.OpPrefix,
MemRI.OpMap, MemRI.OpSize, MemRI.AdSize, MemRI.HasREX_W,
MemRI.HasVEX_4V, MemRI.HasVEX_L, MemRI.IgnoresVEX_L,
@ -383,8 +382,7 @@ public:
MemRI.HasEVEX_L2, MemRI.HasEVEX_NF,
MemRec->getValueAsBit("hasEVEX_RC"),
MemRec->getValueAsBit("hasLockPrefix"),
MemRec->getValueAsBit("hasNoTrackPrefix"),
MemRec->getValueAsBit("EVEX_W1_VEX_W0")))
MemRec->getValueAsBit("hasNoTrackPrefix")))
return false;
// Make sure the sizes of the operands of both instructions suit each other.

View File

@ -85,4 +85,247 @@ ENTRY(VSHUFI32X4Z256rmi, VPERM2I128rm)
ENTRY(VSHUFI32X4Z256rri, VPERM2I128rr)
ENTRY(VSHUFI64X2Z256rmi, VPERM2I128rm)
ENTRY(VSHUFI64X2Z256rri, VPERM2I128rr)
// W bit does not match
ENTRY(VADDPDZ128rm, VADDPDrm)
ENTRY(VADDPDZ128rr, VADDPDrr)
ENTRY(VADDSDZrm, VADDSDrm)
ENTRY(VADDSDZrm_Int, VADDSDrm_Int)
ENTRY(VADDSDZrr, VADDSDrr)
ENTRY(VADDSDZrr_Int, VADDSDrr_Int)
ENTRY(VANDNPDZ128rm, VANDNPDrm)
ENTRY(VANDNPDZ128rr, VANDNPDrr)
ENTRY(VANDPDZ128rm, VANDPDrm)
ENTRY(VANDPDZ128rr, VANDPDrr)
ENTRY(VCOMISDZrm, VCOMISDrm)
ENTRY(VCOMISDZrm_Int, VCOMISDrm_Int)
ENTRY(VCOMISDZrr, VCOMISDrr)
ENTRY(VCOMISDZrr_Int, VCOMISDrr_Int)
ENTRY(VCVTPD2DQZ128rm, VCVTPD2DQrm)
ENTRY(VCVTPD2DQZ128rr, VCVTPD2DQrr)
ENTRY(VCVTPD2PSZ128rm, VCVTPD2PSrm)
ENTRY(VCVTPD2PSZ128rr, VCVTPD2PSrr)
ENTRY(VCVTSD2SSZrm, VCVTSD2SSrm)
ENTRY(VCVTSD2SSZrm_Int, VCVTSD2SSrm_Int)
ENTRY(VCVTSD2SSZrr, VCVTSD2SSrr)
ENTRY(VCVTSD2SSZrr_Int, VCVTSD2SSrr_Int)
ENTRY(VCVTTPD2DQZ128rm, VCVTTPD2DQrm)
ENTRY(VCVTTPD2DQZ128rr, VCVTTPD2DQrr)
ENTRY(VDIVPDZ128rm, VDIVPDrm)
ENTRY(VDIVPDZ128rr, VDIVPDrr)
ENTRY(VDIVSDZrm, VDIVSDrm)
ENTRY(VDIVSDZrm_Int, VDIVSDrm_Int)
ENTRY(VDIVSDZrr, VDIVSDrr)
ENTRY(VDIVSDZrr_Int, VDIVSDrr_Int)
ENTRY(VMAXCPDZ128rm, VMAXCPDrm)
ENTRY(VMAXCPDZ128rr, VMAXCPDrr)
ENTRY(VMAXCSDZrm, VMAXCSDrm)
ENTRY(VMAXCSDZrr, VMAXCSDrr)
ENTRY(VMAXPDZ128rm, VMAXPDrm)
ENTRY(VMAXPDZ128rr, VMAXPDrr)
ENTRY(VMAXSDZrm_Int, VMAXSDrm_Int)
ENTRY(VMAXSDZrr_Int, VMAXSDrr_Int)
ENTRY(VMINCPDZ128rm, VMINCPDrm)
ENTRY(VMINCPDZ128rr, VMINCPDrr)
ENTRY(VMINCSDZrm, VMINCSDrm)
ENTRY(VMINCSDZrr, VMINCSDrr)
ENTRY(VMINPDZ128rm, VMINPDrm)
ENTRY(VMINPDZ128rr, VMINPDrr)
ENTRY(VMINSDZrm_Int, VMINSDrm_Int)
ENTRY(VMINSDZrr_Int, VMINSDrr_Int)
ENTRY(VMOVAPDZ128mr, VMOVAPDmr)
ENTRY(VMOVAPDZ128rm, VMOVAPDrm)
ENTRY(VMOVAPDZ128rr, VMOVAPDrr)
ENTRY(VMOVDDUPZ128rm, VMOVDDUPrm)
ENTRY(VMOVDDUPZ128rr, VMOVDDUPrr)
ENTRY(VMOVDQA64Z128mr, VMOVDQAmr)
ENTRY(VMOVDQA64Z128rm, VMOVDQArm)
ENTRY(VMOVDQA64Z128rr, VMOVDQArr)
ENTRY(VMOVDQU64Z128mr, VMOVDQUmr)
ENTRY(VMOVDQU64Z128rm, VMOVDQUrm)
ENTRY(VMOVDQU64Z128rr, VMOVDQUrr)
ENTRY(VMOVHPDZ128mr, VMOVHPDmr)
ENTRY(VMOVHPDZ128rm, VMOVHPDrm)
ENTRY(VMOVLPDZ128mr, VMOVLPDmr)
ENTRY(VMOVLPDZ128rm, VMOVLPDrm)
ENTRY(VMOVNTPDZ128mr, VMOVNTPDmr)
ENTRY(VMOVPQI2QIZmr, VMOVPQI2QImr)
ENTRY(VMOVPQI2QIZrr, VMOVPQI2QIrr)
ENTRY(VMOVQI2PQIZrm, VMOVQI2PQIrm)
ENTRY(VMOVSDZmr, VMOVSDmr)
ENTRY(VMOVSDZrm, VMOVSDrm)
ENTRY(VMOVSDZrm_alt, VMOVSDrm_alt)
ENTRY(VMOVSDZrr, VMOVSDrr)
ENTRY(VMOVUPDZ128mr, VMOVUPDmr)
ENTRY(VMOVUPDZ128rm, VMOVUPDrm)
ENTRY(VMOVUPDZ128rr, VMOVUPDrr)
ENTRY(VMOVZPQILo2PQIZrr, VMOVZPQILo2PQIrr)
ENTRY(VMULPDZ128rm, VMULPDrm)
ENTRY(VMULPDZ128rr, VMULPDrr)
ENTRY(VMULSDZrm, VMULSDrm)
ENTRY(VMULSDZrm_Int, VMULSDrm_Int)
ENTRY(VMULSDZrr, VMULSDrr)
ENTRY(VMULSDZrr_Int, VMULSDrr_Int)
ENTRY(VORPDZ128rm, VORPDrm)
ENTRY(VORPDZ128rr, VORPDrr)
ENTRY(VPADDQZ128rm, VPADDQrm)
ENTRY(VPADDQZ128rr, VPADDQrr)
ENTRY(VPANDNQZ128rm, VPANDNrm)
ENTRY(VPANDNQZ128rr, VPANDNrr)
ENTRY(VPANDQZ128rm, VPANDrm)
ENTRY(VPANDQZ128rr, VPANDrr)
ENTRY(VPERMILPDZ128mi, VPERMILPDmi)
ENTRY(VPERMILPDZ128ri, VPERMILPDri)
ENTRY(VPERMILPDZ128rm, VPERMILPDrm)
ENTRY(VPERMILPDZ128rr, VPERMILPDrr)
ENTRY(VPMULDQZ128rm, VPMULDQrm)
ENTRY(VPMULDQZ128rr, VPMULDQrr)
ENTRY(VPMULUDQZ128rm, VPMULUDQrm)
ENTRY(VPMULUDQZ128rr, VPMULUDQrr)
ENTRY(VPORQZ128rm, VPORrm)
ENTRY(VPORQZ128rr, VPORrr)
ENTRY(VPSLLQZ128ri, VPSLLQri)
ENTRY(VPSLLQZ128rm, VPSLLQrm)
ENTRY(VPSLLQZ128rr, VPSLLQrr)
ENTRY(VPSRLQZ128ri, VPSRLQri)
ENTRY(VPSRLQZ128rm, VPSRLQrm)
ENTRY(VPSRLQZ128rr, VPSRLQrr)
ENTRY(VPSUBQZ128rm, VPSUBQrm)
ENTRY(VPSUBQZ128rr, VPSUBQrr)
ENTRY(VPUNPCKHQDQZ128rm, VPUNPCKHQDQrm)
ENTRY(VPUNPCKHQDQZ128rr, VPUNPCKHQDQrr)
ENTRY(VPUNPCKLQDQZ128rm, VPUNPCKLQDQrm)
ENTRY(VPUNPCKLQDQZ128rr, VPUNPCKLQDQrr)
ENTRY(VPXORQZ128rm, VPXORrm)
ENTRY(VPXORQZ128rr, VPXORrr)
ENTRY(VRNDSCALEPDZ128rmi, VROUNDPDm)
ENTRY(VRNDSCALEPDZ128rri, VROUNDPDr)
ENTRY(VRNDSCALESDZm, VROUNDSDm)
ENTRY(VRNDSCALESDZm_Int, VROUNDSDm_Int)
ENTRY(VRNDSCALESDZr, VROUNDSDr)
ENTRY(VRNDSCALESDZr_Int, VROUNDSDr_Int)
ENTRY(VSHUFPDZ128rmi, VSHUFPDrmi)
ENTRY(VSHUFPDZ128rri, VSHUFPDrri)
ENTRY(VSQRTPDZ128m, VSQRTPDm)
ENTRY(VSQRTPDZ128r, VSQRTPDr)
ENTRY(VSQRTSDZm, VSQRTSDm)
ENTRY(VSQRTSDZm_Int, VSQRTSDm_Int)
ENTRY(VSQRTSDZr, VSQRTSDr)
ENTRY(VSQRTSDZr_Int, VSQRTSDr_Int)
ENTRY(VSUBPDZ128rm, VSUBPDrm)
ENTRY(VSUBPDZ128rr, VSUBPDrr)
ENTRY(VSUBSDZrm, VSUBSDrm)
ENTRY(VSUBSDZrm_Int, VSUBSDrm_Int)
ENTRY(VSUBSDZrr, VSUBSDrr)
ENTRY(VSUBSDZrr_Int, VSUBSDrr_Int)
ENTRY(VUCOMISDZrm, VUCOMISDrm)
ENTRY(VUCOMISDZrm_Int, VUCOMISDrm_Int)
ENTRY(VUCOMISDZrr, VUCOMISDrr)
ENTRY(VUCOMISDZrr_Int, VUCOMISDrr_Int)
ENTRY(VUNPCKHPDZ128rm, VUNPCKHPDrm)
ENTRY(VUNPCKHPDZ128rr, VUNPCKHPDrr)
ENTRY(VUNPCKLPDZ128rm, VUNPCKLPDrm)
ENTRY(VUNPCKLPDZ128rr, VUNPCKLPDrr)
ENTRY(VXORPDZ128rm, VXORPDrm)
ENTRY(VXORPDZ128rr, VXORPDrr)
ENTRY(VADDPDZ256rm, VADDPDYrm)
ENTRY(VADDPDZ256rr, VADDPDYrr)
ENTRY(VANDNPDZ256rm, VANDNPDYrm)
ENTRY(VANDNPDZ256rr, VANDNPDYrr)
ENTRY(VANDPDZ256rm, VANDPDYrm)
ENTRY(VANDPDZ256rr, VANDPDYrr)
ENTRY(VCVTPD2DQZ256rm, VCVTPD2DQYrm)
ENTRY(VCVTPD2DQZ256rr, VCVTPD2DQYrr)
ENTRY(VCVTPD2PSZ256rm, VCVTPD2PSYrm)
ENTRY(VCVTPD2PSZ256rr, VCVTPD2PSYrr)
ENTRY(VCVTTPD2DQZ256rm, VCVTTPD2DQYrm)
ENTRY(VCVTTPD2DQZ256rr, VCVTTPD2DQYrr)
ENTRY(VDIVPDZ256rm, VDIVPDYrm)
ENTRY(VDIVPDZ256rr, VDIVPDYrr)
ENTRY(VEXTRACTF64x2Z256mr, VEXTRACTF128mr)
ENTRY(VEXTRACTF64x2Z256rr, VEXTRACTF128rr)
ENTRY(VEXTRACTI64x2Z256mr, VEXTRACTI128mr)
ENTRY(VEXTRACTI64x2Z256rr, VEXTRACTI128rr)
ENTRY(VINSERTF64x2Z256rm, VINSERTF128rm)
ENTRY(VINSERTF64x2Z256rr, VINSERTF128rr)
ENTRY(VINSERTI64x2Z256rm, VINSERTI128rm)
ENTRY(VINSERTI64x2Z256rr, VINSERTI128rr)
ENTRY(VMAXCPDZ256rm, VMAXCPDYrm)
ENTRY(VMAXCPDZ256rr, VMAXCPDYrr)
ENTRY(VMAXPDZ256rm, VMAXPDYrm)
ENTRY(VMAXPDZ256rr, VMAXPDYrr)
ENTRY(VMINCPDZ256rm, VMINCPDYrm)
ENTRY(VMINCPDZ256rr, VMINCPDYrr)
ENTRY(VMINPDZ256rm, VMINPDYrm)
ENTRY(VMINPDZ256rr, VMINPDYrr)
ENTRY(VMOVAPDZ256mr, VMOVAPDYmr)
ENTRY(VMOVAPDZ256rm, VMOVAPDYrm)
ENTRY(VMOVAPDZ256rr, VMOVAPDYrr)
ENTRY(VMOVDDUPZ256rm, VMOVDDUPYrm)
ENTRY(VMOVDDUPZ256rr, VMOVDDUPYrr)
ENTRY(VMOVDQA64Z256mr, VMOVDQAYmr)
ENTRY(VMOVDQA64Z256rm, VMOVDQAYrm)
ENTRY(VMOVDQA64Z256rr, VMOVDQAYrr)
ENTRY(VMOVDQU64Z256mr, VMOVDQUYmr)
ENTRY(VMOVDQU64Z256rm, VMOVDQUYrm)
ENTRY(VMOVDQU64Z256rr, VMOVDQUYrr)
ENTRY(VMOVNTPDZ256mr, VMOVNTPDYmr)
ENTRY(VMOVUPDZ256mr, VMOVUPDYmr)
ENTRY(VMOVUPDZ256rm, VMOVUPDYrm)
ENTRY(VMOVUPDZ256rr, VMOVUPDYrr)
ENTRY(VMULPDZ256rm, VMULPDYrm)
ENTRY(VMULPDZ256rr, VMULPDYrr)
ENTRY(VORPDZ256rm, VORPDYrm)
ENTRY(VORPDZ256rr, VORPDYrr)
ENTRY(VPADDQZ256rm, VPADDQYrm)
ENTRY(VPADDQZ256rr, VPADDQYrr)
ENTRY(VPANDNQZ256rm, VPANDNYrm)
ENTRY(VPANDNQZ256rr, VPANDNYrr)
ENTRY(VPANDQZ256rm, VPANDYrm)
ENTRY(VPANDQZ256rr, VPANDYrr)
ENTRY(VPERMILPDZ256mi, VPERMILPDYmi)
ENTRY(VPERMILPDZ256ri, VPERMILPDYri)
ENTRY(VPERMILPDZ256rm, VPERMILPDYrm)
ENTRY(VPERMILPDZ256rr, VPERMILPDYrr)
ENTRY(VPMULDQZ256rm, VPMULDQYrm)
ENTRY(VPMULDQZ256rr, VPMULDQYrr)
ENTRY(VPMULUDQZ256rm, VPMULUDQYrm)
ENTRY(VPMULUDQZ256rr, VPMULUDQYrr)
ENTRY(VPORQZ256rm, VPORYrm)
ENTRY(VPORQZ256rr, VPORYrr)
ENTRY(VPSLLQZ256ri, VPSLLQYri)
ENTRY(VPSLLQZ256rm, VPSLLQYrm)
ENTRY(VPSLLQZ256rr, VPSLLQYrr)
ENTRY(VPSRLQZ256ri, VPSRLQYri)
ENTRY(VPSRLQZ256rm, VPSRLQYrm)
ENTRY(VPSRLQZ256rr, VPSRLQYrr)
ENTRY(VPSUBQZ256rm, VPSUBQYrm)
ENTRY(VPSUBQZ256rr, VPSUBQYrr)
ENTRY(VPUNPCKHQDQZ256rm, VPUNPCKHQDQYrm)
ENTRY(VPUNPCKHQDQZ256rr, VPUNPCKHQDQYrr)
ENTRY(VPUNPCKLQDQZ256rm, VPUNPCKLQDQYrm)
ENTRY(VPUNPCKLQDQZ256rr, VPUNPCKLQDQYrr)
ENTRY(VPXORQZ256rm, VPXORYrm)
ENTRY(VPXORQZ256rr, VPXORYrr)
ENTRY(VRNDSCALEPDZ256rmi, VROUNDPDYm)
ENTRY(VRNDSCALEPDZ256rri, VROUNDPDYr)
ENTRY(VSHUFPDZ256rmi, VSHUFPDYrmi)
ENTRY(VSHUFPDZ256rri, VSHUFPDYrri)
ENTRY(VSQRTPDZ256m, VSQRTPDYm)
ENTRY(VSQRTPDZ256r, VSQRTPDYr)
ENTRY(VSUBPDZ256rm, VSUBPDYrm)
ENTRY(VSUBPDZ256rr, VSUBPDYrr)
ENTRY(VUNPCKHPDZ256rm, VUNPCKHPDYrm)
ENTRY(VUNPCKHPDZ256rr, VUNPCKHPDYrr)
ENTRY(VUNPCKLPDZ256rm, VUNPCKLPDYrm)
ENTRY(VUNPCKLPDZ256rr, VUNPCKLPDYrr)
ENTRY(VXORPDZ256rm, VXORPDYrm)
ENTRY(VXORPDZ256rr, VXORPDYrr)
ENTRY(VPBROADCASTQZ128rm, VPBROADCASTQrm)
ENTRY(VPBROADCASTQZ128rr, VPBROADCASTQrr)
ENTRY(VBROADCASTF64X2Z128rm, VBROADCASTF128rm)
ENTRY(VBROADCASTI64X2Z128rm, VBROADCASTI128rm)
ENTRY(VBROADCASTSDZ256rm, VBROADCASTSDYrm)
ENTRY(VBROADCASTSDZ256rr, VBROADCASTSDYrr)
ENTRY(VPBROADCASTQZ256rm, VPBROADCASTQYrm)
ENTRY(VPBROADCASTQZ256rr, VPBROADCASTQYrr)
#undef ENTRY