From cc4b123a47bc4f5e99b7cda313d517ab8ad703b8 Mon Sep 17 00:00:00 2001 From: Robert Khasanov Date: Mon, 25 Aug 2014 14:49:34 +0000 Subject: [PATCH] [SKX] avx512_icmp_packed multiclass extension Extended avx512_icmp_packed multiclass by masking versions. Added avx512_icmp_packed_rmb multiclass for embedded broadcast versions. Added corresponding _vl multiclasses. Added encoding tests for CPCMP{EQ|GT}* instructions. Add more fields for X86VectorVTInfo. Added AVX512VLVectorVTInfo that include X86VectorVTInfo for 512/256/128-bit versions Differential Revision: http://reviews.llvm.org/D5024 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216383 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrAVX512.td | 200 +++++++++-- test/MC/X86/avx512-encodings.s | 208 ++++++++++++ test/MC/X86/x86-64-avx512bw.s | 128 +++++++ test/MC/X86/x86-64-avx512bw_vl.s | 256 ++++++++++++++ test/MC/X86/x86-64-avx512f_vl.s | 416 +++++++++++++++++++++++ utils/TableGen/X86DisassemblerTables.cpp | 6 + utils/TableGen/X86RecognizableInstr.cpp | 2 + 7 files changed, 1189 insertions(+), 27 deletions(-) diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 2b84b6c4665..a372a60c336 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -22,34 +22,83 @@ class X86VectorVTInfo("v" # NumElts # EltVT); + ValueType VT = !cast(VTName); string EltTypeName = !cast(EltVT); // Size of the element type in bits, e.g. 32 for v16i32. - string EltSize = !subst("i", "", !subst("f", "", EltTypeName)); + string EltSizeName = !subst("i", "", !subst("f", "", EltTypeName)); + int EltSize = EltVT.Size; // "i" for integer types and "f" for floating-point types - string TypeVariantName = !subst(EltSize, "", EltTypeName); + string TypeVariantName = !subst(EltSizeName, "", EltTypeName); // Size of RC in bits, e.g. 512 for VR512. int Size = VT.Size; // The corresponding memory operand, e.g. i512mem for VR512. X86MemOperand MemOp = !cast(TypeVariantName # Size # "mem"); + X86MemOperand ScalarMemOp = !cast(EltVT # "mem"); + + // Load patterns + // Note: For 128/256-bit integer VT we choose loadv2i64/loadv4i64 + // due to load promotion during legalization + PatFrag LdFrag = !cast("load" # + !if (!eq (TypeVariantName, "i"), + !if (!eq (Size, 128), "v2i64", + !if (!eq (Size, 256), "v4i64", + VTName)), VTName)); + PatFrag ScalarLdFrag = !cast("load" # EltVT); // The corresponding float type, e.g. v16f32 for v16i32 - ValueType FloatVT = !if (!eq(TypeVariantName, "i"), - !cast("v" # NumElts # "f" # EltSize), - VT); + // Note: For EltSize < 32, FloatVT is illegal and TableGen + // fails to compile, so we choose FloatVT = VT + ValueType FloatVT = !cast( + !if (!eq (!srl(EltSize,5),0), + VTName, + !if (!eq(TypeVariantName, "i"), + "v" # NumElts # "f" # EltSize, + VTName))); // The string to specify embedded broadcast in assembly. string BroadcastStr = "{1to" # NumElts # "}"; } +def v64i8_info : X86VectorVTInfo<64, i8, VR512, "b">; +def v32i16_info : X86VectorVTInfo<32, i16, VR512, "w">; def v16i32_info : X86VectorVTInfo<16, i32, VR512, "d">; def v8i64_info : X86VectorVTInfo<8, i64, VR512, "q">; +// "x" in v32i8x_info means RC = VR256X +def v32i8x_info : X86VectorVTInfo<32, i8, VR256X, "b">; +def v16i16x_info : X86VectorVTInfo<16, i16, VR256X, "w">; +def v8i32x_info : X86VectorVTInfo<8, i32, VR256X, "d">; +def v4i64x_info : X86VectorVTInfo<4, i64, VR256X, "q">; + +def v16i8x_info : X86VectorVTInfo<16, i8, VR128X, "b">; +def v8i16x_info : X86VectorVTInfo<8, i16, VR128X, "w">; +def v4i32x_info : X86VectorVTInfo<4, i32, VR128X, "d">; +def v2i64x_info : X86VectorVTInfo<2, i64, VR128X, "q">; + +class AVX512VLVectorVTInfo { + X86VectorVTInfo info512 = i512; + X86VectorVTInfo info256 = i256; + X86VectorVTInfo info128 = i128; +} + +def avx512vl_i8_info : AVX512VLVectorVTInfo; +def avx512vl_i16_info : AVX512VLVectorVTInfo; +def avx512vl_i32_info : AVX512VLVectorVTInfo; +def avx512vl_i64_info : AVX512VLVectorVTInfo; + + // Common base class of AVX512_masking and AVX512_masking_3src. multiclass AVX512_masking_common O, Format F, dag Outs, dag Ins, dag MaskingIns, dag ZeroMaskingIns, @@ -971,34 +1020,131 @@ defm VCMPSDZ : avx512_cmp_scalar opc, string OpcodeStr, RegisterClass KRC, - RegisterClass RC, X86MemOperand x86memop, PatFrag memop_frag, - SDNode OpNode, ValueType vt> { +multiclass avx512_icmp_packed opc, string OpcodeStr, SDNode OpNode, + X86VectorVTInfo _> { def rr : AVX512BI, EVEX_4V; + let mayLoad = 1 in def rm : AVX512BI, EVEX_4V; + def rrk : AVX512BI, EVEX_4V, EVEX_K; + let mayLoad = 1 in + def rmk : AVX512BI, EVEX_4V, EVEX_K; +} + +multiclass avx512_icmp_packed_rmb opc, string OpcodeStr, SDNode OpNode, + X86VectorVTInfo _> { + let mayLoad = 1 in { + def rmb : AVX512BI, EVEX_4V, EVEX_B; + def rmbk : AVX512BI, EVEX_4V, EVEX_K, EVEX_B; + } } -defm VPCMPEQDZ : avx512_icmp_packed<0x76, "vpcmpeqd", VK16, VR512, i512mem, - memopv16i32, X86pcmpeqm, v16i32>, EVEX_V512, - EVEX_CD8<32, CD8VF>; -defm VPCMPEQQZ : avx512_icmp_packed<0x29, "vpcmpeqq", VK8, VR512, i512mem, - memopv8i64, X86pcmpeqm, v8i64>, T8PD, EVEX_V512, - VEX_W, EVEX_CD8<64, CD8VF>; +multiclass avx512_icmp_packed_vl opc, string OpcodeStr, SDNode OpNode, + AVX512VLVectorVTInfo VTInfo, Predicate prd> { + let Predicates = [prd] in + defm Z : avx512_icmp_packed, + EVEX_V512; -defm VPCMPGTDZ : avx512_icmp_packed<0x66, "vpcmpgtd", VK16, VR512, i512mem, - memopv16i32, X86pcmpgtm, v16i32>, EVEX_V512, - EVEX_CD8<32, CD8VF>; -defm VPCMPGTQZ : avx512_icmp_packed<0x37, "vpcmpgtq", VK8, VR512, i512mem, - memopv8i64, X86pcmpgtm, v8i64>, T8PD, EVEX_V512, - VEX_W, EVEX_CD8<64, CD8VF>; + let Predicates = [prd, HasVLX] in { + defm Z256 : avx512_icmp_packed, + EVEX_V256; + defm Z128 : avx512_icmp_packed, + EVEX_V128; + } +} + +multiclass avx512_icmp_packed_rmb_vl opc, string OpcodeStr, + SDNode OpNode, AVX512VLVectorVTInfo VTInfo, + Predicate prd> { + let Predicates = [prd] in + defm Z : avx512_icmp_packed_rmb, + EVEX_V512; + + let Predicates = [prd, HasVLX] in { + defm Z256 : avx512_icmp_packed_rmb, + EVEX_V256; + defm Z128 : avx512_icmp_packed_rmb, + EVEX_V128; + } +} + +defm VPCMPEQB : avx512_icmp_packed_vl<0x74, "vpcmpeqb", X86pcmpeqm, + avx512vl_i8_info, HasBWI>, + EVEX_CD8<8, CD8VF>; + +defm VPCMPEQW : avx512_icmp_packed_vl<0x75, "vpcmpeqw", X86pcmpeqm, + avx512vl_i16_info, HasBWI>, + EVEX_CD8<16, CD8VF>; + +defm VPCMPEQD : avx512_icmp_packed_vl<0x76, "vpcmpeqd", X86pcmpeqm, + avx512vl_i32_info, HasAVX512>, + avx512_icmp_packed_rmb_vl<0x76, "vpcmpeqd", X86pcmpeqm, + avx512vl_i32_info, HasAVX512>, + EVEX_CD8<32, CD8VF>; + +defm VPCMPEQQ : avx512_icmp_packed_vl<0x29, "vpcmpeqq", X86pcmpeqm, + avx512vl_i64_info, HasAVX512>, + avx512_icmp_packed_rmb_vl<0x29, "vpcmpeqq", X86pcmpeqm, + avx512vl_i64_info, HasAVX512>, + T8PD, VEX_W, EVEX_CD8<64, CD8VF>; + +defm VPCMPGTB : avx512_icmp_packed_vl<0x64, "vpcmpgtb", X86pcmpgtm, + avx512vl_i8_info, HasBWI>, + EVEX_CD8<8, CD8VF>; + +defm VPCMPGTW : avx512_icmp_packed_vl<0x65, "vpcmpgtw", X86pcmpgtm, + avx512vl_i16_info, HasBWI>, + EVEX_CD8<16, CD8VF>; + +defm VPCMPGTD : avx512_icmp_packed_vl<0x66, "vpcmpgtd", X86pcmpgtm, + avx512vl_i32_info, HasAVX512>, + avx512_icmp_packed_rmb_vl<0x66, "vpcmpgtd", X86pcmpgtm, + avx512vl_i32_info, HasAVX512>, + EVEX_CD8<32, CD8VF>; + +defm VPCMPGTQ : avx512_icmp_packed_vl<0x37, "vpcmpgtq", X86pcmpgtm, + avx512vl_i64_info, HasAVX512>, + avx512_icmp_packed_rmb_vl<0x37, "vpcmpgtq", X86pcmpgtm, + avx512vl_i64_info, HasAVX512>, + T8PD, VEX_W, EVEX_CD8<64, CD8VF>; def : Pat<(v8i1 (X86pcmpgtm (v8i32 VR256X:$src1), (v8i32 VR256X:$src2))), (COPY_TO_REGCLASS (VPCMPGTDZrr diff --git a/test/MC/X86/avx512-encodings.s b/test/MC/X86/avx512-encodings.s index 8cd7aa41400..c98f60c60f2 100644 --- a/test/MC/X86/avx512-encodings.s +++ b/test/MC/X86/avx512-encodings.s @@ -1425,6 +1425,214 @@ // CHECK: encoding: [0x62,0xe1,0xdd,0x58,0xdb,0x8a,0xf8,0xfb,0xff,0xff] vpandq -1032(%rdx){1to8}, %zmm4, %zmm17 +// CHECK: vpcmpeqd %zmm10, %zmm2, %k5 +// CHECK: encoding: [0x62,0xd1,0x6d,0x48,0x76,0xea] + vpcmpeqd %zmm10, %zmm2, %k5 + +// CHECK: vpcmpeqd %zmm10, %zmm2, %k5 {%k7} +// CHECK: encoding: [0x62,0xd1,0x6d,0x4f,0x76,0xea] + vpcmpeqd %zmm10, %zmm2, %k5 {%k7} + +// CHECK: vpcmpeqd (%rcx), %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x48,0x76,0x29] + vpcmpeqd (%rcx), %zmm2, %k5 + +// CHECK: vpcmpeqd 291(%rax,%r14,8), %zmm2, %k5 +// CHECK: encoding: [0x62,0xb1,0x6d,0x48,0x76,0xac,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqd 291(%rax,%r14,8), %zmm2, %k5 + +// CHECK: vpcmpeqd (%rcx){1to16}, %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x58,0x76,0x29] + vpcmpeqd (%rcx){1to16}, %zmm2, %k5 + +// CHECK: vpcmpeqd 8128(%rdx), %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x48,0x76,0x6a,0x7f] + vpcmpeqd 8128(%rdx), %zmm2, %k5 + +// CHECK: vpcmpeqd 8192(%rdx), %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x48,0x76,0xaa,0x00,0x20,0x00,0x00] + vpcmpeqd 8192(%rdx), %zmm2, %k5 + +// CHECK: vpcmpeqd -8192(%rdx), %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x48,0x76,0x6a,0x80] + vpcmpeqd -8192(%rdx), %zmm2, %k5 + +// CHECK: vpcmpeqd -8256(%rdx), %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x48,0x76,0xaa,0xc0,0xdf,0xff,0xff] + vpcmpeqd -8256(%rdx), %zmm2, %k5 + +// CHECK: vpcmpeqd 508(%rdx){1to16}, %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x58,0x76,0x6a,0x7f] + vpcmpeqd 508(%rdx){1to16}, %zmm2, %k5 + +// CHECK: vpcmpeqd 512(%rdx){1to16}, %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x58,0x76,0xaa,0x00,0x02,0x00,0x00] + vpcmpeqd 512(%rdx){1to16}, %zmm2, %k5 + +// CHECK: vpcmpeqd -512(%rdx){1to16}, %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x58,0x76,0x6a,0x80] + vpcmpeqd -512(%rdx){1to16}, %zmm2, %k5 + +// CHECK: vpcmpeqd -516(%rdx){1to16}, %zmm2, %k5 +// CHECK: encoding: [0x62,0xf1,0x6d,0x58,0x76,0xaa,0xfc,0xfd,0xff,0xff] + vpcmpeqd -516(%rdx){1to16}, %zmm2, %k5 + +// CHECK: vpcmpeqq %zmm2, %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x40,0x29,0xda] + vpcmpeqq %zmm2, %zmm22, %k3 + +// CHECK: vpcmpeqq %zmm2, %zmm22, %k3 {%k6} +// CHECK: encoding: [0x62,0xf2,0xcd,0x46,0x29,0xda] + vpcmpeqq %zmm2, %zmm22, %k3 {%k6} + +// CHECK: vpcmpeqq (%rcx), %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x40,0x29,0x19] + vpcmpeqq (%rcx), %zmm22, %k3 + +// CHECK: vpcmpeqq 291(%rax,%r14,8), %zmm22, %k3 +// CHECK: encoding: [0x62,0xb2,0xcd,0x40,0x29,0x9c,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqq 291(%rax,%r14,8), %zmm22, %k3 + +// CHECK: vpcmpeqq (%rcx){1to8}, %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x50,0x29,0x19] + vpcmpeqq (%rcx){1to8}, %zmm22, %k3 + +// CHECK: vpcmpeqq 8128(%rdx), %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x40,0x29,0x5a,0x7f] + vpcmpeqq 8128(%rdx), %zmm22, %k3 + +// CHECK: vpcmpeqq 8192(%rdx), %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x40,0x29,0x9a,0x00,0x20,0x00,0x00] + vpcmpeqq 8192(%rdx), %zmm22, %k3 + +// CHECK: vpcmpeqq -8192(%rdx), %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x40,0x29,0x5a,0x80] + vpcmpeqq -8192(%rdx), %zmm22, %k3 + +// CHECK: vpcmpeqq -8256(%rdx), %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x40,0x29,0x9a,0xc0,0xdf,0xff,0xff] + vpcmpeqq -8256(%rdx), %zmm22, %k3 + +// CHECK: vpcmpeqq 1016(%rdx){1to8}, %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x50,0x29,0x5a,0x7f] + vpcmpeqq 1016(%rdx){1to8}, %zmm22, %k3 + +// CHECK: vpcmpeqq 1024(%rdx){1to8}, %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x50,0x29,0x9a,0x00,0x04,0x00,0x00] + vpcmpeqq 1024(%rdx){1to8}, %zmm22, %k3 + +// CHECK: vpcmpeqq -1024(%rdx){1to8}, %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x50,0x29,0x5a,0x80] + vpcmpeqq -1024(%rdx){1to8}, %zmm22, %k3 + +// CHECK: vpcmpeqq -1032(%rdx){1to8}, %zmm22, %k3 +// CHECK: encoding: [0x62,0xf2,0xcd,0x50,0x29,0x9a,0xf8,0xfb,0xff,0xff] + vpcmpeqq -1032(%rdx){1to8}, %zmm22, %k3 + +// CHECK: vpcmpgtd %zmm8, %zmm21, %k5 +// CHECK: encoding: [0x62,0xd1,0x55,0x40,0x66,0xe8] + vpcmpgtd %zmm8, %zmm21, %k5 + +// CHECK: vpcmpgtd %zmm8, %zmm21, %k5 {%k5} +// CHECK: encoding: [0x62,0xd1,0x55,0x45,0x66,0xe8] + vpcmpgtd %zmm8, %zmm21, %k5 {%k5} + +// CHECK: vpcmpgtd (%rcx), %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x40,0x66,0x29] + vpcmpgtd (%rcx), %zmm21, %k5 + +// CHECK: vpcmpgtd 291(%rax,%r14,8), %zmm21, %k5 +// CHECK: encoding: [0x62,0xb1,0x55,0x40,0x66,0xac,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtd 291(%rax,%r14,8), %zmm21, %k5 + +// CHECK: vpcmpgtd (%rcx){1to16}, %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x50,0x66,0x29] + vpcmpgtd (%rcx){1to16}, %zmm21, %k5 + +// CHECK: vpcmpgtd 8128(%rdx), %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x40,0x66,0x6a,0x7f] + vpcmpgtd 8128(%rdx), %zmm21, %k5 + +// CHECK: vpcmpgtd 8192(%rdx), %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x40,0x66,0xaa,0x00,0x20,0x00,0x00] + vpcmpgtd 8192(%rdx), %zmm21, %k5 + +// CHECK: vpcmpgtd -8192(%rdx), %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x40,0x66,0x6a,0x80] + vpcmpgtd -8192(%rdx), %zmm21, %k5 + +// CHECK: vpcmpgtd -8256(%rdx), %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x40,0x66,0xaa,0xc0,0xdf,0xff,0xff] + vpcmpgtd -8256(%rdx), %zmm21, %k5 + +// CHECK: vpcmpgtd 508(%rdx){1to16}, %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x50,0x66,0x6a,0x7f] + vpcmpgtd 508(%rdx){1to16}, %zmm21, %k5 + +// CHECK: vpcmpgtd 512(%rdx){1to16}, %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x50,0x66,0xaa,0x00,0x02,0x00,0x00] + vpcmpgtd 512(%rdx){1to16}, %zmm21, %k5 + +// CHECK: vpcmpgtd -512(%rdx){1to16}, %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x50,0x66,0x6a,0x80] + vpcmpgtd -512(%rdx){1to16}, %zmm21, %k5 + +// CHECK: vpcmpgtd -516(%rdx){1to16}, %zmm21, %k5 +// CHECK: encoding: [0x62,0xf1,0x55,0x50,0x66,0xaa,0xfc,0xfd,0xff,0xff] + vpcmpgtd -516(%rdx){1to16}, %zmm21, %k5 + +// CHECK: vpcmpgtq %zmm17, %zmm20, %k2 +// CHECK: encoding: [0x62,0xb2,0xdd,0x40,0x37,0xd1] + vpcmpgtq %zmm17, %zmm20, %k2 + +// CHECK: vpcmpgtq %zmm17, %zmm20, %k2 {%k3} +// CHECK: encoding: [0x62,0xb2,0xdd,0x43,0x37,0xd1] + vpcmpgtq %zmm17, %zmm20, %k2 {%k3} + +// CHECK: vpcmpgtq (%rcx), %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x40,0x37,0x11] + vpcmpgtq (%rcx), %zmm20, %k2 + +// CHECK: vpcmpgtq 291(%rax,%r14,8), %zmm20, %k2 +// CHECK: encoding: [0x62,0xb2,0xdd,0x40,0x37,0x94,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtq 291(%rax,%r14,8), %zmm20, %k2 + +// CHECK: vpcmpgtq (%rcx){1to8}, %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x50,0x37,0x11] + vpcmpgtq (%rcx){1to8}, %zmm20, %k2 + +// CHECK: vpcmpgtq 8128(%rdx), %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x40,0x37,0x52,0x7f] + vpcmpgtq 8128(%rdx), %zmm20, %k2 + +// CHECK: vpcmpgtq 8192(%rdx), %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x40,0x37,0x92,0x00,0x20,0x00,0x00] + vpcmpgtq 8192(%rdx), %zmm20, %k2 + +// CHECK: vpcmpgtq -8192(%rdx), %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x40,0x37,0x52,0x80] + vpcmpgtq -8192(%rdx), %zmm20, %k2 + +// CHECK: vpcmpgtq -8256(%rdx), %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x40,0x37,0x92,0xc0,0xdf,0xff,0xff] + vpcmpgtq -8256(%rdx), %zmm20, %k2 + +// CHECK: vpcmpgtq 1016(%rdx){1to8}, %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x50,0x37,0x52,0x7f] + vpcmpgtq 1016(%rdx){1to8}, %zmm20, %k2 + +// CHECK: vpcmpgtq 1024(%rdx){1to8}, %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x50,0x37,0x92,0x00,0x04,0x00,0x00] + vpcmpgtq 1024(%rdx){1to8}, %zmm20, %k2 + +// CHECK: vpcmpgtq -1024(%rdx){1to8}, %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x50,0x37,0x52,0x80] + vpcmpgtq -1024(%rdx){1to8}, %zmm20, %k2 + +// CHECK: vpcmpgtq -1032(%rdx){1to8}, %zmm20, %k2 +// CHECK: encoding: [0x62,0xf2,0xdd,0x50,0x37,0x92,0xf8,0xfb,0xff,0xff] + vpcmpgtq -1032(%rdx){1to8}, %zmm20, %k2 + // CHECK: vpmaxsd %zmm16, %zmm8, %zmm6 // CHECK: encoding: [0x62,0xb2,0x3d,0x48,0x3d,0xf0] vpmaxsd %zmm16, %zmm8, %zmm6 diff --git a/test/MC/X86/x86-64-avx512bw.s b/test/MC/X86/x86-64-avx512bw.s index 9418a5b9f75..ce688a19112 100644 --- a/test/MC/X86/x86-64-avx512bw.s +++ b/test/MC/X86/x86-64-avx512bw.s @@ -1,5 +1,133 @@ // RUN: llvm-mc -triple x86_64-unknown-unknown -mcpu=skx --show-encoding %s | FileCheck %s +// CHECK: vpcmpeqb %zmm26, %zmm26, %k4 +// CHECK: encoding: [0x62,0x91,0x2d,0x40,0x74,0xe2] + vpcmpeqb %zmm26, %zmm26, %k4 + +// CHECK: vpcmpeqb %zmm26, %zmm26, %k4 {%k6} +// CHECK: encoding: [0x62,0x91,0x2d,0x46,0x74,0xe2] + vpcmpeqb %zmm26, %zmm26, %k4 {%k6} + +// CHECK: vpcmpeqb (%rcx), %zmm26, %k4 +// CHECK: encoding: [0x62,0xf1,0x2d,0x40,0x74,0x21] + vpcmpeqb (%rcx), %zmm26, %k4 + +// CHECK: vpcmpeqb 291(%rax,%r14,8), %zmm26, %k4 +// CHECK: encoding: [0x62,0xb1,0x2d,0x40,0x74,0xa4,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqb 291(%rax,%r14,8), %zmm26, %k4 + +// CHECK: vpcmpeqb 8128(%rdx), %zmm26, %k4 +// CHECK: encoding: [0x62,0xf1,0x2d,0x40,0x74,0x62,0x7f] + vpcmpeqb 8128(%rdx), %zmm26, %k4 + +// CHECK: vpcmpeqb 8192(%rdx), %zmm26, %k4 +// CHECK: encoding: [0x62,0xf1,0x2d,0x40,0x74,0xa2,0x00,0x20,0x00,0x00] + vpcmpeqb 8192(%rdx), %zmm26, %k4 + +// CHECK: vpcmpeqb -8192(%rdx), %zmm26, %k4 +// CHECK: encoding: [0x62,0xf1,0x2d,0x40,0x74,0x62,0x80] + vpcmpeqb -8192(%rdx), %zmm26, %k4 + +// CHECK: vpcmpeqb -8256(%rdx), %zmm26, %k4 +// CHECK: encoding: [0x62,0xf1,0x2d,0x40,0x74,0xa2,0xc0,0xdf,0xff,0xff] + vpcmpeqb -8256(%rdx), %zmm26, %k4 + +// CHECK: vpcmpeqw %zmm19, %zmm23, %k5 +// CHECK: encoding: [0x62,0xb1,0x45,0x40,0x75,0xeb] + vpcmpeqw %zmm19, %zmm23, %k5 + +// CHECK: vpcmpeqw %zmm19, %zmm23, %k5 {%k7} +// CHECK: encoding: [0x62,0xb1,0x45,0x47,0x75,0xeb] + vpcmpeqw %zmm19, %zmm23, %k5 {%k7} + +// CHECK: vpcmpeqw (%rcx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x75,0x29] + vpcmpeqw (%rcx), %zmm23, %k5 + +// CHECK: vpcmpeqw 291(%rax,%r14,8), %zmm23, %k5 +// CHECK: encoding: [0x62,0xb1,0x45,0x40,0x75,0xac,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqw 291(%rax,%r14,8), %zmm23, %k5 + +// CHECK: vpcmpeqw 8128(%rdx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x75,0x6a,0x7f] + vpcmpeqw 8128(%rdx), %zmm23, %k5 + +// CHECK: vpcmpeqw 8192(%rdx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x75,0xaa,0x00,0x20,0x00,0x00] + vpcmpeqw 8192(%rdx), %zmm23, %k5 + +// CHECK: vpcmpeqw -8192(%rdx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x75,0x6a,0x80] + vpcmpeqw -8192(%rdx), %zmm23, %k5 + +// CHECK: vpcmpeqw -8256(%rdx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x75,0xaa,0xc0,0xdf,0xff,0xff] + vpcmpeqw -8256(%rdx), %zmm23, %k5 + +// CHECK: vpcmpgtb %zmm20, %zmm30, %k4 +// CHECK: encoding: [0x62,0xb1,0x0d,0x40,0x64,0xe4] + vpcmpgtb %zmm20, %zmm30, %k4 + +// CHECK: vpcmpgtb %zmm20, %zmm30, %k4 {%k1} +// CHECK: encoding: [0x62,0xb1,0x0d,0x41,0x64,0xe4] + vpcmpgtb %zmm20, %zmm30, %k4 {%k1} + +// CHECK: vpcmpgtb (%rcx), %zmm30, %k4 +// CHECK: encoding: [0x62,0xf1,0x0d,0x40,0x64,0x21] + vpcmpgtb (%rcx), %zmm30, %k4 + +// CHECK: vpcmpgtb 291(%rax,%r14,8), %zmm30, %k4 +// CHECK: encoding: [0x62,0xb1,0x0d,0x40,0x64,0xa4,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtb 291(%rax,%r14,8), %zmm30, %k4 + +// CHECK: vpcmpgtb 8128(%rdx), %zmm30, %k4 +// CHECK: encoding: [0x62,0xf1,0x0d,0x40,0x64,0x62,0x7f] + vpcmpgtb 8128(%rdx), %zmm30, %k4 + +// CHECK: vpcmpgtb 8192(%rdx), %zmm30, %k4 +// CHECK: encoding: [0x62,0xf1,0x0d,0x40,0x64,0xa2,0x00,0x20,0x00,0x00] + vpcmpgtb 8192(%rdx), %zmm30, %k4 + +// CHECK: vpcmpgtb -8192(%rdx), %zmm30, %k4 +// CHECK: encoding: [0x62,0xf1,0x0d,0x40,0x64,0x62,0x80] + vpcmpgtb -8192(%rdx), %zmm30, %k4 + +// CHECK: vpcmpgtb -8256(%rdx), %zmm30, %k4 +// CHECK: encoding: [0x62,0xf1,0x0d,0x40,0x64,0xa2,0xc0,0xdf,0xff,0xff] + vpcmpgtb -8256(%rdx), %zmm30, %k4 + +// CHECK: vpcmpgtw %zmm21, %zmm23, %k5 +// CHECK: encoding: [0x62,0xb1,0x45,0x40,0x65,0xed] + vpcmpgtw %zmm21, %zmm23, %k5 + +// CHECK: vpcmpgtw %zmm21, %zmm23, %k5 {%k7} +// CHECK: encoding: [0x62,0xb1,0x45,0x47,0x65,0xed] + vpcmpgtw %zmm21, %zmm23, %k5 {%k7} + +// CHECK: vpcmpgtw (%rcx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x65,0x29] + vpcmpgtw (%rcx), %zmm23, %k5 + +// CHECK: vpcmpgtw 291(%rax,%r14,8), %zmm23, %k5 +// CHECK: encoding: [0x62,0xb1,0x45,0x40,0x65,0xac,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtw 291(%rax,%r14,8), %zmm23, %k5 + +// CHECK: vpcmpgtw 8128(%rdx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x65,0x6a,0x7f] + vpcmpgtw 8128(%rdx), %zmm23, %k5 + +// CHECK: vpcmpgtw 8192(%rdx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x65,0xaa,0x00,0x20,0x00,0x00] + vpcmpgtw 8192(%rdx), %zmm23, %k5 + +// CHECK: vpcmpgtw -8192(%rdx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x65,0x6a,0x80] + vpcmpgtw -8192(%rdx), %zmm23, %k5 + +// CHECK: vpcmpgtw -8256(%rdx), %zmm23, %k5 +// CHECK: encoding: [0x62,0xf1,0x45,0x40,0x65,0xaa,0xc0,0xdf,0xff,0xff] + vpcmpgtw -8256(%rdx), %zmm23, %k5 + // CHECK: vmovdqu8 %zmm19, %zmm29 // CHECK: encoding: [0x62,0x21,0x7f,0x48,0x6f,0xeb] vmovdqu8 %zmm19, %zmm29 diff --git a/test/MC/X86/x86-64-avx512bw_vl.s b/test/MC/X86/x86-64-avx512bw_vl.s index c8e2c1969a2..f67d9f1ab59 100644 --- a/test/MC/X86/x86-64-avx512bw_vl.s +++ b/test/MC/X86/x86-64-avx512bw_vl.s @@ -1,5 +1,261 @@ // RUN: llvm-mc -triple x86_64-unknown-unknown -mcpu=skx --show-encoding %s | FileCheck %s +// CHECK: vpcmpeqb %xmm21, %xmm21, %k4 +// CHECK: encoding: [0x62,0xb1,0x55,0x00,0x74,0xe5] + vpcmpeqb %xmm21, %xmm21, %k4 + +// CHECK: vpcmpeqb %xmm21, %xmm21, %k4 {%k3} +// CHECK: encoding: [0x62,0xb1,0x55,0x03,0x74,0xe5] + vpcmpeqb %xmm21, %xmm21, %k4 {%k3} + +// CHECK: vpcmpeqb (%rcx), %xmm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x00,0x74,0x21] + vpcmpeqb (%rcx), %xmm21, %k4 + +// CHECK: vpcmpeqb 291(%rax,%r14,8), %xmm21, %k4 +// CHECK: encoding: [0x62,0xb1,0x55,0x00,0x74,0xa4,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqb 291(%rax,%r14,8), %xmm21, %k4 + +// CHECK: vpcmpeqb 2032(%rdx), %xmm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x00,0x74,0x62,0x7f] + vpcmpeqb 2032(%rdx), %xmm21, %k4 + +// CHECK: vpcmpeqb 2048(%rdx), %xmm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x00,0x74,0xa2,0x00,0x08,0x00,0x00] + vpcmpeqb 2048(%rdx), %xmm21, %k4 + +// CHECK: vpcmpeqb -2048(%rdx), %xmm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x00,0x74,0x62,0x80] + vpcmpeqb -2048(%rdx), %xmm21, %k4 + +// CHECK: vpcmpeqb -2064(%rdx), %xmm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x00,0x74,0xa2,0xf0,0xf7,0xff,0xff] + vpcmpeqb -2064(%rdx), %xmm21, %k4 + +// CHECK: vpcmpeqb %ymm18, %ymm21, %k4 +// CHECK: encoding: [0x62,0xb1,0x55,0x20,0x74,0xe2] + vpcmpeqb %ymm18, %ymm21, %k4 + +// CHECK: vpcmpeqb %ymm18, %ymm21, %k4 {%k1} +// CHECK: encoding: [0x62,0xb1,0x55,0x21,0x74,0xe2] + vpcmpeqb %ymm18, %ymm21, %k4 {%k1} + +// CHECK: vpcmpeqb (%rcx), %ymm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x20,0x74,0x21] + vpcmpeqb (%rcx), %ymm21, %k4 + +// CHECK: vpcmpeqb 291(%rax,%r14,8), %ymm21, %k4 +// CHECK: encoding: [0x62,0xb1,0x55,0x20,0x74,0xa4,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqb 291(%rax,%r14,8), %ymm21, %k4 + +// CHECK: vpcmpeqb 4064(%rdx), %ymm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x20,0x74,0x62,0x7f] + vpcmpeqb 4064(%rdx), %ymm21, %k4 + +// CHECK: vpcmpeqb 4096(%rdx), %ymm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x20,0x74,0xa2,0x00,0x10,0x00,0x00] + vpcmpeqb 4096(%rdx), %ymm21, %k4 + +// CHECK: vpcmpeqb -4096(%rdx), %ymm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x20,0x74,0x62,0x80] + vpcmpeqb -4096(%rdx), %ymm21, %k4 + +// CHECK: vpcmpeqb -4128(%rdx), %ymm21, %k4 +// CHECK: encoding: [0x62,0xf1,0x55,0x20,0x74,0xa2,0xe0,0xef,0xff,0xff] + vpcmpeqb -4128(%rdx), %ymm21, %k4 + +// CHECK: vpcmpeqw %xmm27, %xmm30, %k3 +// CHECK: encoding: [0x62,0x91,0x0d,0x00,0x75,0xdb] + vpcmpeqw %xmm27, %xmm30, %k3 + +// CHECK: vpcmpeqw %xmm27, %xmm30, %k3 {%k1} +// CHECK: encoding: [0x62,0x91,0x0d,0x01,0x75,0xdb] + vpcmpeqw %xmm27, %xmm30, %k3 {%k1} + +// CHECK: vpcmpeqw (%rcx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x75,0x19] + vpcmpeqw (%rcx), %xmm30, %k3 + +// CHECK: vpcmpeqw 291(%rax,%r14,8), %xmm30, %k3 +// CHECK: encoding: [0x62,0xb1,0x0d,0x00,0x75,0x9c,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqw 291(%rax,%r14,8), %xmm30, %k3 + +// CHECK: vpcmpeqw 2032(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x75,0x5a,0x7f] + vpcmpeqw 2032(%rdx), %xmm30, %k3 + +// CHECK: vpcmpeqw 2048(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x75,0x9a,0x00,0x08,0x00,0x00] + vpcmpeqw 2048(%rdx), %xmm30, %k3 + +// CHECK: vpcmpeqw -2048(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x75,0x5a,0x80] + vpcmpeqw -2048(%rdx), %xmm30, %k3 + +// CHECK: vpcmpeqw -2064(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x75,0x9a,0xf0,0xf7,0xff,0xff] + vpcmpeqw -2064(%rdx), %xmm30, %k3 + +// CHECK: vpcmpeqw %ymm29, %ymm20, %k2 +// CHECK: encoding: [0x62,0x91,0x5d,0x20,0x75,0xd5] + vpcmpeqw %ymm29, %ymm20, %k2 + +// CHECK: vpcmpeqw %ymm29, %ymm20, %k2 {%k5} +// CHECK: encoding: [0x62,0x91,0x5d,0x25,0x75,0xd5] + vpcmpeqw %ymm29, %ymm20, %k2 {%k5} + +// CHECK: vpcmpeqw (%rcx), %ymm20, %k2 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x75,0x11] + vpcmpeqw (%rcx), %ymm20, %k2 + +// CHECK: vpcmpeqw 291(%rax,%r14,8), %ymm20, %k2 +// CHECK: encoding: [0x62,0xb1,0x5d,0x20,0x75,0x94,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqw 291(%rax,%r14,8), %ymm20, %k2 + +// CHECK: vpcmpeqw 4064(%rdx), %ymm20, %k2 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x75,0x52,0x7f] + vpcmpeqw 4064(%rdx), %ymm20, %k2 + +// CHECK: vpcmpeqw 4096(%rdx), %ymm20, %k2 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x75,0x92,0x00,0x10,0x00,0x00] + vpcmpeqw 4096(%rdx), %ymm20, %k2 + +// CHECK: vpcmpeqw -4096(%rdx), %ymm20, %k2 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x75,0x52,0x80] + vpcmpeqw -4096(%rdx), %ymm20, %k2 + +// CHECK: vpcmpeqw -4128(%rdx), %ymm20, %k2 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x75,0x92,0xe0,0xef,0xff,0xff] + vpcmpeqw -4128(%rdx), %ymm20, %k2 + +// CHECK: vpcmpgtb %xmm17, %xmm30, %k3 +// CHECK: encoding: [0x62,0xb1,0x0d,0x00,0x64,0xd9] + vpcmpgtb %xmm17, %xmm30, %k3 + +// CHECK: vpcmpgtb %xmm17, %xmm30, %k3 {%k7} +// CHECK: encoding: [0x62,0xb1,0x0d,0x07,0x64,0xd9] + vpcmpgtb %xmm17, %xmm30, %k3 {%k7} + +// CHECK: vpcmpgtb (%rcx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x64,0x19] + vpcmpgtb (%rcx), %xmm30, %k3 + +// CHECK: vpcmpgtb 291(%rax,%r14,8), %xmm30, %k3 +// CHECK: encoding: [0x62,0xb1,0x0d,0x00,0x64,0x9c,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtb 291(%rax,%r14,8), %xmm30, %k3 + +// CHECK: vpcmpgtb 2032(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x64,0x5a,0x7f] + vpcmpgtb 2032(%rdx), %xmm30, %k3 + +// CHECK: vpcmpgtb 2048(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x64,0x9a,0x00,0x08,0x00,0x00] + vpcmpgtb 2048(%rdx), %xmm30, %k3 + +// CHECK: vpcmpgtb -2048(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x64,0x5a,0x80] + vpcmpgtb -2048(%rdx), %xmm30, %k3 + +// CHECK: vpcmpgtb -2064(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf1,0x0d,0x00,0x64,0x9a,0xf0,0xf7,0xff,0xff] + vpcmpgtb -2064(%rdx), %xmm30, %k3 + +// CHECK: vpcmpgtb %ymm17, %ymm17, %k2 +// CHECK: encoding: [0x62,0xb1,0x75,0x20,0x64,0xd1] + vpcmpgtb %ymm17, %ymm17, %k2 + +// CHECK: vpcmpgtb %ymm17, %ymm17, %k2 {%k4} +// CHECK: encoding: [0x62,0xb1,0x75,0x24,0x64,0xd1] + vpcmpgtb %ymm17, %ymm17, %k2 {%k4} + +// CHECK: vpcmpgtb (%rcx), %ymm17, %k2 +// CHECK: encoding: [0x62,0xf1,0x75,0x20,0x64,0x11] + vpcmpgtb (%rcx), %ymm17, %k2 + +// CHECK: vpcmpgtb 291(%rax,%r14,8), %ymm17, %k2 +// CHECK: encoding: [0x62,0xb1,0x75,0x20,0x64,0x94,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtb 291(%rax,%r14,8), %ymm17, %k2 + +// CHECK: vpcmpgtb 4064(%rdx), %ymm17, %k2 +// CHECK: encoding: [0x62,0xf1,0x75,0x20,0x64,0x52,0x7f] + vpcmpgtb 4064(%rdx), %ymm17, %k2 + +// CHECK: vpcmpgtb 4096(%rdx), %ymm17, %k2 +// CHECK: encoding: [0x62,0xf1,0x75,0x20,0x64,0x92,0x00,0x10,0x00,0x00] + vpcmpgtb 4096(%rdx), %ymm17, %k2 + +// CHECK: vpcmpgtb -4096(%rdx), %ymm17, %k2 +// CHECK: encoding: [0x62,0xf1,0x75,0x20,0x64,0x52,0x80] + vpcmpgtb -4096(%rdx), %ymm17, %k2 + +// CHECK: vpcmpgtb -4128(%rdx), %ymm17, %k2 +// CHECK: encoding: [0x62,0xf1,0x75,0x20,0x64,0x92,0xe0,0xef,0xff,0xff] + vpcmpgtb -4128(%rdx), %ymm17, %k2 + +// CHECK: vpcmpgtw %xmm22, %xmm28, %k2 +// CHECK: encoding: [0x62,0xb1,0x1d,0x00,0x65,0xd6] + vpcmpgtw %xmm22, %xmm28, %k2 + +// CHECK: vpcmpgtw %xmm22, %xmm28, %k2 {%k7} +// CHECK: encoding: [0x62,0xb1,0x1d,0x07,0x65,0xd6] + vpcmpgtw %xmm22, %xmm28, %k2 {%k7} + +// CHECK: vpcmpgtw (%rcx), %xmm28, %k2 +// CHECK: encoding: [0x62,0xf1,0x1d,0x00,0x65,0x11] + vpcmpgtw (%rcx), %xmm28, %k2 + +// CHECK: vpcmpgtw 291(%rax,%r14,8), %xmm28, %k2 +// CHECK: encoding: [0x62,0xb1,0x1d,0x00,0x65,0x94,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtw 291(%rax,%r14,8), %xmm28, %k2 + +// CHECK: vpcmpgtw 2032(%rdx), %xmm28, %k2 +// CHECK: encoding: [0x62,0xf1,0x1d,0x00,0x65,0x52,0x7f] + vpcmpgtw 2032(%rdx), %xmm28, %k2 + +// CHECK: vpcmpgtw 2048(%rdx), %xmm28, %k2 +// CHECK: encoding: [0x62,0xf1,0x1d,0x00,0x65,0x92,0x00,0x08,0x00,0x00] + vpcmpgtw 2048(%rdx), %xmm28, %k2 + +// CHECK: vpcmpgtw -2048(%rdx), %xmm28, %k2 +// CHECK: encoding: [0x62,0xf1,0x1d,0x00,0x65,0x52,0x80] + vpcmpgtw -2048(%rdx), %xmm28, %k2 + +// CHECK: vpcmpgtw -2064(%rdx), %xmm28, %k2 +// CHECK: encoding: [0x62,0xf1,0x1d,0x00,0x65,0x92,0xf0,0xf7,0xff,0xff] + vpcmpgtw -2064(%rdx), %xmm28, %k2 + +// CHECK: vpcmpgtw %ymm26, %ymm20, %k5 +// CHECK: encoding: [0x62,0x91,0x5d,0x20,0x65,0xea] + vpcmpgtw %ymm26, %ymm20, %k5 + +// CHECK: vpcmpgtw %ymm26, %ymm20, %k5 {%k2} +// CHECK: encoding: [0x62,0x91,0x5d,0x22,0x65,0xea] + vpcmpgtw %ymm26, %ymm20, %k5 {%k2} + +// CHECK: vpcmpgtw (%rcx), %ymm20, %k5 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x65,0x29] + vpcmpgtw (%rcx), %ymm20, %k5 + +// CHECK: vpcmpgtw 291(%rax,%r14,8), %ymm20, %k5 +// CHECK: encoding: [0x62,0xb1,0x5d,0x20,0x65,0xac,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtw 291(%rax,%r14,8), %ymm20, %k5 + +// CHECK: vpcmpgtw 4064(%rdx), %ymm20, %k5 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x65,0x6a,0x7f] + vpcmpgtw 4064(%rdx), %ymm20, %k5 + +// CHECK: vpcmpgtw 4096(%rdx), %ymm20, %k5 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x65,0xaa,0x00,0x10,0x00,0x00] + vpcmpgtw 4096(%rdx), %ymm20, %k5 + +// CHECK: vpcmpgtw -4096(%rdx), %ymm20, %k5 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x65,0x6a,0x80] + vpcmpgtw -4096(%rdx), %ymm20, %k5 + +// CHECK: vpcmpgtw -4128(%rdx), %ymm20, %k5 +// CHECK: encoding: [0x62,0xf1,0x5d,0x20,0x65,0xaa,0xe0,0xef,0xff,0xff] + vpcmpgtw -4128(%rdx), %ymm20, %k5 + // CHECK: vmovdqu8 %xmm23, %xmm26 // CHECK: encoding: [0x62,0x21,0x7f,0x08,0x6f,0xd7] vmovdqu8 %xmm23, %xmm26 diff --git a/test/MC/X86/x86-64-avx512f_vl.s b/test/MC/X86/x86-64-avx512f_vl.s index b529c03791a..2da03f48eb2 100644 --- a/test/MC/X86/x86-64-avx512f_vl.s +++ b/test/MC/X86/x86-64-avx512f_vl.s @@ -768,6 +768,422 @@ // CHECK: encoding: [0x62,0xe1,0x7c,0x28,0x10,0xaa,0xe0,0xef,0xff,0xff] vmovups -4128(%rdx), %ymm21 +// CHECK: vpcmpeqd %xmm24, %xmm29, %k3 +// CHECK: encoding: [0x62,0x91,0x15,0x00,0x76,0xd8] + vpcmpeqd %xmm24, %xmm29, %k3 + +// CHECK: vpcmpeqd %xmm24, %xmm29, %k3 {%k5} +// CHECK: encoding: [0x62,0x91,0x15,0x05,0x76,0xd8] + vpcmpeqd %xmm24, %xmm29, %k3 {%k5} + +// CHECK: vpcmpeqd (%rcx), %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x76,0x19] + vpcmpeqd (%rcx), %xmm29, %k3 + +// CHECK: vpcmpeqd 291(%rax,%r14,8), %xmm29, %k3 +// CHECK: encoding: [0x62,0xb1,0x15,0x00,0x76,0x9c,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqd 291(%rax,%r14,8), %xmm29, %k3 + +// CHECK: vpcmpeqd (%rcx){1to4}, %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x76,0x19] + vpcmpeqd (%rcx){1to4}, %xmm29, %k3 + +// CHECK: vpcmpeqd 2032(%rdx), %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x76,0x5a,0x7f] + vpcmpeqd 2032(%rdx), %xmm29, %k3 + +// CHECK: vpcmpeqd 2048(%rdx), %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x76,0x9a,0x00,0x08,0x00,0x00] + vpcmpeqd 2048(%rdx), %xmm29, %k3 + +// CHECK: vpcmpeqd -2048(%rdx), %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x76,0x5a,0x80] + vpcmpeqd -2048(%rdx), %xmm29, %k3 + +// CHECK: vpcmpeqd -2064(%rdx), %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x76,0x9a,0xf0,0xf7,0xff,0xff] + vpcmpeqd -2064(%rdx), %xmm29, %k3 + +// CHECK: vpcmpeqd 508(%rdx){1to4}, %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x76,0x5a,0x7f] + vpcmpeqd 508(%rdx){1to4}, %xmm29, %k3 + +// CHECK: vpcmpeqd 512(%rdx){1to4}, %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x76,0x9a,0x00,0x02,0x00,0x00] + vpcmpeqd 512(%rdx){1to4}, %xmm29, %k3 + +// CHECK: vpcmpeqd -512(%rdx){1to4}, %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x76,0x5a,0x80] + vpcmpeqd -512(%rdx){1to4}, %xmm29, %k3 + +// CHECK: vpcmpeqd -516(%rdx){1to4}, %xmm29, %k3 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x76,0x9a,0xfc,0xfd,0xff,0xff] + vpcmpeqd -516(%rdx){1to4}, %xmm29, %k3 + +// CHECK: vpcmpeqd %ymm20, %ymm26, %k5 +// CHECK: encoding: [0x62,0xb1,0x2d,0x20,0x76,0xec] + vpcmpeqd %ymm20, %ymm26, %k5 + +// CHECK: vpcmpeqd %ymm20, %ymm26, %k5 {%k5} +// CHECK: encoding: [0x62,0xb1,0x2d,0x25,0x76,0xec] + vpcmpeqd %ymm20, %ymm26, %k5 {%k5} + +// CHECK: vpcmpeqd (%rcx), %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x20,0x76,0x29] + vpcmpeqd (%rcx), %ymm26, %k5 + +// CHECK: vpcmpeqd 291(%rax,%r14,8), %ymm26, %k5 +// CHECK: encoding: [0x62,0xb1,0x2d,0x20,0x76,0xac,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqd 291(%rax,%r14,8), %ymm26, %k5 + +// CHECK: vpcmpeqd (%rcx){1to8}, %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x30,0x76,0x29] + vpcmpeqd (%rcx){1to8}, %ymm26, %k5 + +// CHECK: vpcmpeqd 4064(%rdx), %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x20,0x76,0x6a,0x7f] + vpcmpeqd 4064(%rdx), %ymm26, %k5 + +// CHECK: vpcmpeqd 4096(%rdx), %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x20,0x76,0xaa,0x00,0x10,0x00,0x00] + vpcmpeqd 4096(%rdx), %ymm26, %k5 + +// CHECK: vpcmpeqd -4096(%rdx), %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x20,0x76,0x6a,0x80] + vpcmpeqd -4096(%rdx), %ymm26, %k5 + +// CHECK: vpcmpeqd -4128(%rdx), %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x20,0x76,0xaa,0xe0,0xef,0xff,0xff] + vpcmpeqd -4128(%rdx), %ymm26, %k5 + +// CHECK: vpcmpeqd 508(%rdx){1to8}, %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x30,0x76,0x6a,0x7f] + vpcmpeqd 508(%rdx){1to8}, %ymm26, %k5 + +// CHECK: vpcmpeqd 512(%rdx){1to8}, %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x30,0x76,0xaa,0x00,0x02,0x00,0x00] + vpcmpeqd 512(%rdx){1to8}, %ymm26, %k5 + +// CHECK: vpcmpeqd -512(%rdx){1to8}, %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x30,0x76,0x6a,0x80] + vpcmpeqd -512(%rdx){1to8}, %ymm26, %k5 + +// CHECK: vpcmpeqd -516(%rdx){1to8}, %ymm26, %k5 +// CHECK: encoding: [0x62,0xf1,0x2d,0x30,0x76,0xaa,0xfc,0xfd,0xff,0xff] + vpcmpeqd -516(%rdx){1to8}, %ymm26, %k5 + +// CHECK: vpcmpeqq %xmm29, %xmm20, %k3 +// CHECK: encoding: [0x62,0x92,0xdd,0x00,0x29,0xdd] + vpcmpeqq %xmm29, %xmm20, %k3 + +// CHECK: vpcmpeqq %xmm29, %xmm20, %k3 {%k3} +// CHECK: encoding: [0x62,0x92,0xdd,0x03,0x29,0xdd] + vpcmpeqq %xmm29, %xmm20, %k3 {%k3} + +// CHECK: vpcmpeqq (%rcx), %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x00,0x29,0x19] + vpcmpeqq (%rcx), %xmm20, %k3 + +// CHECK: vpcmpeqq 291(%rax,%r14,8), %xmm20, %k3 +// CHECK: encoding: [0x62,0xb2,0xdd,0x00,0x29,0x9c,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqq 291(%rax,%r14,8), %xmm20, %k3 + +// CHECK: vpcmpeqq (%rcx){1to2}, %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x10,0x29,0x19] + vpcmpeqq (%rcx){1to2}, %xmm20, %k3 + +// CHECK: vpcmpeqq 2032(%rdx), %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x00,0x29,0x5a,0x7f] + vpcmpeqq 2032(%rdx), %xmm20, %k3 + +// CHECK: vpcmpeqq 2048(%rdx), %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x00,0x29,0x9a,0x00,0x08,0x00,0x00] + vpcmpeqq 2048(%rdx), %xmm20, %k3 + +// CHECK: vpcmpeqq -2048(%rdx), %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x00,0x29,0x5a,0x80] + vpcmpeqq -2048(%rdx), %xmm20, %k3 + +// CHECK: vpcmpeqq -2064(%rdx), %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x00,0x29,0x9a,0xf0,0xf7,0xff,0xff] + vpcmpeqq -2064(%rdx), %xmm20, %k3 + +// CHECK: vpcmpeqq 1016(%rdx){1to2}, %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x10,0x29,0x5a,0x7f] + vpcmpeqq 1016(%rdx){1to2}, %xmm20, %k3 + +// CHECK: vpcmpeqq 1024(%rdx){1to2}, %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x10,0x29,0x9a,0x00,0x04,0x00,0x00] + vpcmpeqq 1024(%rdx){1to2}, %xmm20, %k3 + +// CHECK: vpcmpeqq -1024(%rdx){1to2}, %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x10,0x29,0x5a,0x80] + vpcmpeqq -1024(%rdx){1to2}, %xmm20, %k3 + +// CHECK: vpcmpeqq -1032(%rdx){1to2}, %xmm20, %k3 +// CHECK: encoding: [0x62,0xf2,0xdd,0x10,0x29,0x9a,0xf8,0xfb,0xff,0xff] + vpcmpeqq -1032(%rdx){1to2}, %xmm20, %k3 + +// CHECK: vpcmpeqq %ymm23, %ymm30, %k5 +// CHECK: encoding: [0x62,0xb2,0x8d,0x20,0x29,0xef] + vpcmpeqq %ymm23, %ymm30, %k5 + +// CHECK: vpcmpeqq %ymm23, %ymm30, %k5 {%k6} +// CHECK: encoding: [0x62,0xb2,0x8d,0x26,0x29,0xef] + vpcmpeqq %ymm23, %ymm30, %k5 {%k6} + +// CHECK: vpcmpeqq (%rcx), %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x20,0x29,0x29] + vpcmpeqq (%rcx), %ymm30, %k5 + +// CHECK: vpcmpeqq 291(%rax,%r14,8), %ymm30, %k5 +// CHECK: encoding: [0x62,0xb2,0x8d,0x20,0x29,0xac,0xf0,0x23,0x01,0x00,0x00] + vpcmpeqq 291(%rax,%r14,8), %ymm30, %k5 + +// CHECK: vpcmpeqq (%rcx){1to4}, %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x30,0x29,0x29] + vpcmpeqq (%rcx){1to4}, %ymm30, %k5 + +// CHECK: vpcmpeqq 4064(%rdx), %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x20,0x29,0x6a,0x7f] + vpcmpeqq 4064(%rdx), %ymm30, %k5 + +// CHECK: vpcmpeqq 4096(%rdx), %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x20,0x29,0xaa,0x00,0x10,0x00,0x00] + vpcmpeqq 4096(%rdx), %ymm30, %k5 + +// CHECK: vpcmpeqq -4096(%rdx), %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x20,0x29,0x6a,0x80] + vpcmpeqq -4096(%rdx), %ymm30, %k5 + +// CHECK: vpcmpeqq -4128(%rdx), %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x20,0x29,0xaa,0xe0,0xef,0xff,0xff] + vpcmpeqq -4128(%rdx), %ymm30, %k5 + +// CHECK: vpcmpeqq 1016(%rdx){1to4}, %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x30,0x29,0x6a,0x7f] + vpcmpeqq 1016(%rdx){1to4}, %ymm30, %k5 + +// CHECK: vpcmpeqq 1024(%rdx){1to4}, %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x30,0x29,0xaa,0x00,0x04,0x00,0x00] + vpcmpeqq 1024(%rdx){1to4}, %ymm30, %k5 + +// CHECK: vpcmpeqq -1024(%rdx){1to4}, %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x30,0x29,0x6a,0x80] + vpcmpeqq -1024(%rdx){1to4}, %ymm30, %k5 + +// CHECK: vpcmpeqq -1032(%rdx){1to4}, %ymm30, %k5 +// CHECK: encoding: [0x62,0xf2,0x8d,0x30,0x29,0xaa,0xf8,0xfb,0xff,0xff] + vpcmpeqq -1032(%rdx){1to4}, %ymm30, %k5 + +// CHECK: vpcmpgtd %xmm20, %xmm29, %k4 +// CHECK: encoding: [0x62,0xb1,0x15,0x00,0x66,0xe4] + vpcmpgtd %xmm20, %xmm29, %k4 + +// CHECK: vpcmpgtd %xmm20, %xmm29, %k4 {%k2} +// CHECK: encoding: [0x62,0xb1,0x15,0x02,0x66,0xe4] + vpcmpgtd %xmm20, %xmm29, %k4 {%k2} + +// CHECK: vpcmpgtd (%rcx), %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x66,0x21] + vpcmpgtd (%rcx), %xmm29, %k4 + +// CHECK: vpcmpgtd 291(%rax,%r14,8), %xmm29, %k4 +// CHECK: encoding: [0x62,0xb1,0x15,0x00,0x66,0xa4,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtd 291(%rax,%r14,8), %xmm29, %k4 + +// CHECK: vpcmpgtd (%rcx){1to4}, %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x66,0x21] + vpcmpgtd (%rcx){1to4}, %xmm29, %k4 + +// CHECK: vpcmpgtd 2032(%rdx), %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x66,0x62,0x7f] + vpcmpgtd 2032(%rdx), %xmm29, %k4 + +// CHECK: vpcmpgtd 2048(%rdx), %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x66,0xa2,0x00,0x08,0x00,0x00] + vpcmpgtd 2048(%rdx), %xmm29, %k4 + +// CHECK: vpcmpgtd -2048(%rdx), %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x66,0x62,0x80] + vpcmpgtd -2048(%rdx), %xmm29, %k4 + +// CHECK: vpcmpgtd -2064(%rdx), %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x00,0x66,0xa2,0xf0,0xf7,0xff,0xff] + vpcmpgtd -2064(%rdx), %xmm29, %k4 + +// CHECK: vpcmpgtd 508(%rdx){1to4}, %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x66,0x62,0x7f] + vpcmpgtd 508(%rdx){1to4}, %xmm29, %k4 + +// CHECK: vpcmpgtd 512(%rdx){1to4}, %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x66,0xa2,0x00,0x02,0x00,0x00] + vpcmpgtd 512(%rdx){1to4}, %xmm29, %k4 + +// CHECK: vpcmpgtd -512(%rdx){1to4}, %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x66,0x62,0x80] + vpcmpgtd -512(%rdx){1to4}, %xmm29, %k4 + +// CHECK: vpcmpgtd -516(%rdx){1to4}, %xmm29, %k4 +// CHECK: encoding: [0x62,0xf1,0x15,0x10,0x66,0xa2,0xfc,0xfd,0xff,0xff] + vpcmpgtd -516(%rdx){1to4}, %xmm29, %k4 + +// CHECK: vpcmpgtd %ymm17, %ymm22, %k2 +// CHECK: encoding: [0x62,0xb1,0x4d,0x20,0x66,0xd1] + vpcmpgtd %ymm17, %ymm22, %k2 + +// CHECK: vpcmpgtd %ymm17, %ymm22, %k2 {%k1} +// CHECK: encoding: [0x62,0xb1,0x4d,0x21,0x66,0xd1] + vpcmpgtd %ymm17, %ymm22, %k2 {%k1} + +// CHECK: vpcmpgtd (%rcx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x20,0x66,0x11] + vpcmpgtd (%rcx), %ymm22, %k2 + +// CHECK: vpcmpgtd 291(%rax,%r14,8), %ymm22, %k2 +// CHECK: encoding: [0x62,0xb1,0x4d,0x20,0x66,0x94,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtd 291(%rax,%r14,8), %ymm22, %k2 + +// CHECK: vpcmpgtd (%rcx){1to8}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x30,0x66,0x11] + vpcmpgtd (%rcx){1to8}, %ymm22, %k2 + +// CHECK: vpcmpgtd 4064(%rdx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x20,0x66,0x52,0x7f] + vpcmpgtd 4064(%rdx), %ymm22, %k2 + +// CHECK: vpcmpgtd 4096(%rdx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x20,0x66,0x92,0x00,0x10,0x00,0x00] + vpcmpgtd 4096(%rdx), %ymm22, %k2 + +// CHECK: vpcmpgtd -4096(%rdx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x20,0x66,0x52,0x80] + vpcmpgtd -4096(%rdx), %ymm22, %k2 + +// CHECK: vpcmpgtd -4128(%rdx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x20,0x66,0x92,0xe0,0xef,0xff,0xff] + vpcmpgtd -4128(%rdx), %ymm22, %k2 + +// CHECK: vpcmpgtd 508(%rdx){1to8}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x30,0x66,0x52,0x7f] + vpcmpgtd 508(%rdx){1to8}, %ymm22, %k2 + +// CHECK: vpcmpgtd 512(%rdx){1to8}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x30,0x66,0x92,0x00,0x02,0x00,0x00] + vpcmpgtd 512(%rdx){1to8}, %ymm22, %k2 + +// CHECK: vpcmpgtd -512(%rdx){1to8}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x30,0x66,0x52,0x80] + vpcmpgtd -512(%rdx){1to8}, %ymm22, %k2 + +// CHECK: vpcmpgtd -516(%rdx){1to8}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf1,0x4d,0x30,0x66,0x92,0xfc,0xfd,0xff,0xff] + vpcmpgtd -516(%rdx){1to8}, %ymm22, %k2 + +// CHECK: vpcmpgtq %xmm25, %xmm30, %k3 +// CHECK: encoding: [0x62,0x92,0x8d,0x00,0x37,0xd9] + vpcmpgtq %xmm25, %xmm30, %k3 + +// CHECK: vpcmpgtq %xmm25, %xmm30, %k3 {%k6} +// CHECK: encoding: [0x62,0x92,0x8d,0x06,0x37,0xd9] + vpcmpgtq %xmm25, %xmm30, %k3 {%k6} + +// CHECK: vpcmpgtq (%rcx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x00,0x37,0x19] + vpcmpgtq (%rcx), %xmm30, %k3 + +// CHECK: vpcmpgtq 291(%rax,%r14,8), %xmm30, %k3 +// CHECK: encoding: [0x62,0xb2,0x8d,0x00,0x37,0x9c,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtq 291(%rax,%r14,8), %xmm30, %k3 + +// CHECK: vpcmpgtq (%rcx){1to2}, %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x10,0x37,0x19] + vpcmpgtq (%rcx){1to2}, %xmm30, %k3 + +// CHECK: vpcmpgtq 2032(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x00,0x37,0x5a,0x7f] + vpcmpgtq 2032(%rdx), %xmm30, %k3 + +// CHECK: vpcmpgtq 2048(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x00,0x37,0x9a,0x00,0x08,0x00,0x00] + vpcmpgtq 2048(%rdx), %xmm30, %k3 + +// CHECK: vpcmpgtq -2048(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x00,0x37,0x5a,0x80] + vpcmpgtq -2048(%rdx), %xmm30, %k3 + +// CHECK: vpcmpgtq -2064(%rdx), %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x00,0x37,0x9a,0xf0,0xf7,0xff,0xff] + vpcmpgtq -2064(%rdx), %xmm30, %k3 + +// CHECK: vpcmpgtq 1016(%rdx){1to2}, %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x10,0x37,0x5a,0x7f] + vpcmpgtq 1016(%rdx){1to2}, %xmm30, %k3 + +// CHECK: vpcmpgtq 1024(%rdx){1to2}, %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x10,0x37,0x9a,0x00,0x04,0x00,0x00] + vpcmpgtq 1024(%rdx){1to2}, %xmm30, %k3 + +// CHECK: vpcmpgtq -1024(%rdx){1to2}, %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x10,0x37,0x5a,0x80] + vpcmpgtq -1024(%rdx){1to2}, %xmm30, %k3 + +// CHECK: vpcmpgtq -1032(%rdx){1to2}, %xmm30, %k3 +// CHECK: encoding: [0x62,0xf2,0x8d,0x10,0x37,0x9a,0xf8,0xfb,0xff,0xff] + vpcmpgtq -1032(%rdx){1to2}, %xmm30, %k3 + +// CHECK: vpcmpgtq %ymm20, %ymm22, %k2 +// CHECK: encoding: [0x62,0xb2,0xcd,0x20,0x37,0xd4] + vpcmpgtq %ymm20, %ymm22, %k2 + +// CHECK: vpcmpgtq %ymm20, %ymm22, %k2 {%k1} +// CHECK: encoding: [0x62,0xb2,0xcd,0x21,0x37,0xd4] + vpcmpgtq %ymm20, %ymm22, %k2 {%k1} + +// CHECK: vpcmpgtq (%rcx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x20,0x37,0x11] + vpcmpgtq (%rcx), %ymm22, %k2 + +// CHECK: vpcmpgtq 291(%rax,%r14,8), %ymm22, %k2 +// CHECK: encoding: [0x62,0xb2,0xcd,0x20,0x37,0x94,0xf0,0x23,0x01,0x00,0x00] + vpcmpgtq 291(%rax,%r14,8), %ymm22, %k2 + +// CHECK: vpcmpgtq (%rcx){1to4}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x30,0x37,0x11] + vpcmpgtq (%rcx){1to4}, %ymm22, %k2 + +// CHECK: vpcmpgtq 4064(%rdx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x20,0x37,0x52,0x7f] + vpcmpgtq 4064(%rdx), %ymm22, %k2 + +// CHECK: vpcmpgtq 4096(%rdx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x20,0x37,0x92,0x00,0x10,0x00,0x00] + vpcmpgtq 4096(%rdx), %ymm22, %k2 + +// CHECK: vpcmpgtq -4096(%rdx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x20,0x37,0x52,0x80] + vpcmpgtq -4096(%rdx), %ymm22, %k2 + +// CHECK: vpcmpgtq -4128(%rdx), %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x20,0x37,0x92,0xe0,0xef,0xff,0xff] + vpcmpgtq -4128(%rdx), %ymm22, %k2 + +// CHECK: vpcmpgtq 1016(%rdx){1to4}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x30,0x37,0x52,0x7f] + vpcmpgtq 1016(%rdx){1to4}, %ymm22, %k2 + +// CHECK: vpcmpgtq 1024(%rdx){1to4}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x30,0x37,0x92,0x00,0x04,0x00,0x00] + vpcmpgtq 1024(%rdx){1to4}, %ymm22, %k2 + +// CHECK: vpcmpgtq -1024(%rdx){1to4}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x30,0x37,0x52,0x80] + vpcmpgtq -1024(%rdx){1to4}, %ymm22, %k2 + +// CHECK: vpcmpgtq -1032(%rdx){1to4}, %ymm22, %k2 +// CHECK: encoding: [0x62,0xf2,0xcd,0x30,0x37,0x92,0xf8,0xfb,0xff,0xff] + vpcmpgtq -1032(%rdx){1to4}, %ymm22, %k2 + // CHECK: vmovapd %xmm22, (%rcx) // CHECK: encoding: [0x62,0xe1,0xfd,0x08,0x29,0x31] vmovapd %xmm22, (%rcx) diff --git a/utils/TableGen/X86DisassemblerTables.cpp b/utils/TableGen/X86DisassemblerTables.cpp index 1d8561a2c5e..6ec147cdd33 100644 --- a/utils/TableGen/X86DisassemblerTables.cpp +++ b/utils/TableGen/X86DisassemblerTables.cpp @@ -217,6 +217,7 @@ static inline bool inheritsFrom(InstructionContext child, case IC_EVEX_KZ_B: case IC_EVEX_OPSIZE_K: case IC_EVEX_OPSIZE_B: + case IC_EVEX_OPSIZE_K_B: case IC_EVEX_OPSIZE_KZ: return false; case IC_EVEX_W_K: @@ -224,11 +225,14 @@ static inline bool inheritsFrom(InstructionContext child, case IC_EVEX_W_XD_K: case IC_EVEX_W_OPSIZE_K: case IC_EVEX_W_OPSIZE_B: + case IC_EVEX_W_OPSIZE_K_B: return false; case IC_EVEX_L_K: case IC_EVEX_L_XS_K: case IC_EVEX_L_XD_K: case IC_EVEX_L_OPSIZE_K: + case IC_EVEX_L_OPSIZE_B: + case IC_EVEX_L_OPSIZE_K_B: return false; case IC_EVEX_W_KZ: case IC_EVEX_W_XS_KZ: @@ -244,6 +248,8 @@ static inline bool inheritsFrom(InstructionContext child, case IC_EVEX_L_W_XS_K: case IC_EVEX_L_W_XD_K: case IC_EVEX_L_W_OPSIZE_K: + case IC_EVEX_L_W_OPSIZE_B: + case IC_EVEX_L_W_OPSIZE_K_B: case IC_EVEX_L_W_KZ: case IC_EVEX_L_W_XS_KZ: case IC_EVEX_L_W_XD_KZ: diff --git a/utils/TableGen/X86RecognizableInstr.cpp b/utils/TableGen/X86RecognizableInstr.cpp index e4a40cbe792..a891d66c016 100644 --- a/utils/TableGen/X86RecognizableInstr.cpp +++ b/utils/TableGen/X86RecognizableInstr.cpp @@ -1090,6 +1090,8 @@ RecognizableInstr::roRegisterEncodingFromString(const std::string &s, ENCODING("FR32X", ENCODING_REG) ENCODING("VR512", ENCODING_REG) ENCODING("VK1", ENCODING_REG) + ENCODING("VK2", ENCODING_REG) + ENCODING("VK4", ENCODING_REG) ENCODING("VK8", ENCODING_REG) ENCODING("VK16", ENCODING_REG) ENCODING("VK32", ENCODING_REG) -- 2.34.1