All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@suse.com>
To: xen-devel <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: [PATCH v2 3/6] x86emul: support AVX512 opmask insns
Date: Wed, 29 Aug 2018 08:24:13 -0600	[thread overview]
Message-ID: <5B86AC8D02000078001E31F3@prv1-mh.provo.novell.com> (raw)
In-Reply-To: <5B86AB9002000078001E31E3@prv1-mh.provo.novell.com>

These are all VEX encoded, so the EVEX decoding logic continues to
remain unused at this point.

The new testcase is deliberately coded in assembly, as a C one would
have become almost unreadable due to the overwhelming amount of
__builtin_...() that would need to be used. After all the compiler has
no underlying type (yet) that could be operated on without builtins,
other than the vector types used for "normal" SIMD insns.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/tools/tests/x86_emulator/Makefile
+++ b/tools/tests/x86_emulator/Makefile
@@ -16,6 +16,8 @@ FMA := fma4 fma
 SG := avx2-sg
 TESTCASES := blowfish $(SIMD) $(FMA) $(SG)
 
+OPMASK := avx512f avx512dq avx512bw
+
 blowfish-cflags := ""
 blowfish-cflags-x86_32 := "-mno-accumulate-outgoing-args -Dstatic="
 
@@ -51,6 +53,10 @@ xop-vecs := $(avx-vecs)
 xop-ints := 1 2 4 8
 xop-flts := $(avx-flts)
 
+avx512f-opmask-vecs := 2
+avx512dq-opmask-vecs := 1
+avx512bw-opmask-vecs := 4 8
+
 # For AVX and later, have the compiler avoid XMM0 to widen coverage of
 # the VEX.vvvv checks in the emulator.  For 3DNow!, however, force SSE
 # use for floating point operations, to avoid mixing MMX and FPU register
@@ -80,9 +86,13 @@ $(1)-cflags := \
 	   $(foreach flt,$($(1)-flts), \
 	     "-D_$(vec)x$(idx)f$(flt) -m$(1:-sg=) $(call non-sse,$(1)) -Os -DVEC_MAX=$(vec) -DIDX_SIZE=$(idx) -DFLOAT_SIZE=$(flt)")))
 endef
+define opmask-defs
+$(1)-opmask-cflags := $(foreach vec,$($(1)-opmask-vecs), "-D_$(vec) -m$(1) -Os -DSIZE=$(vec)")
+endef
 
 $(foreach flavor,$(SIMD) $(FMA),$(eval $(call simd-defs,$(flavor))))
 $(foreach flavor,$(SG),$(eval $(call simd-sg-defs,$(flavor))))
+$(foreach flavor,$(OPMASK),$(eval $(call opmask-defs,$(flavor))))
 
 $(addsuffix .h,$(TESTCASES)): %.h: %.c testcase.mk Makefile
 	rm -f $@.new $*.bin
@@ -100,6 +110,22 @@ $(addsuffix .h,$(TESTCASES)): %.h: %.c t
 	)
 	mv $@.new $@
 
+$(addsuffix -opmask.h,$(OPMASK)): %.h: opmask.S testcase.mk Makefile
+	rm -f $@.new $*.bin
+	$(foreach arch,$(filter-out $(XEN_COMPILE_ARCH),x86_32) $(XEN_COMPILE_ARCH), \
+	    for cflags in $($*-cflags) $($*-cflags-$(arch)); do \
+		$(MAKE) -f testcase.mk TESTCASE=$* XEN_TARGET_ARCH=$(arch) $*-cflags="$$cflags" all; \
+		prefix=$(shell echo $(subst -,_,$*) | sed -e 's,^\([0-9]\),_\1,'); \
+		flavor=$$(echo $${cflags} | sed -e 's, .*,,' -e 'y,-=,__,') ; \
+		(echo 'static const unsigned int __attribute__((section(".test, \"ax\", @progbits #")))' \
+		      "$${prefix}_$(arch)$${flavor}[] = {"; \
+		 od -v -t x $*.bin | sed -e 's/^[0-9]* /0x/' -e 's/ /, 0x/g' -e 's/$$/,/'; \
+		 echo "};") >>$@.new; \
+		rm -f $*.bin; \
+	    done; \
+	)
+	mv $@.new $@
+
 $(addsuffix .c,$(SIMD)):
 	ln -sf simd.c $@
 
@@ -145,4 +171,4 @@ x86-emulate.o test_x86_emulator.o wrappe
 x86-emulate.o: x86_emulate/x86_emulate.c
 x86-emulate.o: HOSTCFLAGS += -D__XEN_TOOLS__
 
-test_x86_emulator.o: $(addsuffix .h,$(TESTCASES))
+test_x86_emulator.o: $(addsuffix .h,$(TESTCASES)) $(addsuffix -opmask.h,$(OPMASK))
--- /dev/null
+++ b/tools/tests/x86_emulator/opmask.S
@@ -0,0 +1,144 @@
+#ifdef __i386__
+# define R(x) e##x
+# define DATA(x) x
+#else
+# if SIZE == 8
+#  define R(x) r##x
+# else
+#  define R(x) e##x
+# endif
+# define DATA(x) x(%rip)
+#endif
+
+#if SIZE == 1
+# define _(x) x##b
+#elif SIZE == 2
+# define _(x) x##w
+# define WIDEN(x) x##bw
+#elif SIZE == 4
+# define _(x) x##d
+# define WIDEN(x) x##wd
+#elif SIZE == 8
+# define _(x) x##q
+# define WIDEN(x) x##dq
+#endif
+
+    .macro check res1:req, res2:req, line:req
+    _(kmov)       %\res1, DATA(out)
+#if SIZE < 8 || !defined(__i386__)
+    _(kmov)       %\res2, %R(dx)
+    cmp           DATA(out), %R(dx)
+#else
+    sub           $8, %esp
+    kmovq         %\res2, (%esp)
+    pop           %ecx
+    pop           %edx
+    cmp           DATA(out), %ecx
+    jne           0f
+    cmp           DATA(out+4), %edx
+0:
+#endif
+    je            1f
+    mov           $\line, %eax
+    ret
+1:
+    .endm
+
+    .text
+    .globl _start
+_start:
+    _(kmov)       DATA(in1), %k1
+#if SIZE < 8 || !defined(__i386__)
+    mov           DATA(in2), %R(ax)
+    _(kmov)       %R(ax), %k2
+#else
+    _(kmov)       DATA(in2), %k2
+#endif
+
+    _(kor)        %k1, %k2, %k3
+    _(kand)       %k1, %k2, %k4
+    _(kandn)      %k3, %k4, %k5
+    _(kxor)       %k1, %k2, %k6
+    check         k5, k6, __LINE__
+
+    _(knot)       %k6, %k3
+    _(kxnor)      %k1, %k2, %k4
+    check         k3, k4, __LINE__
+
+    _(kshiftl)    $1, %k1, %k3
+    _(kshiftl)    $2, %k3, %k4
+    _(kshiftl)    $3, %k1, %k5
+    check         k4, k5, __LINE__
+
+    _(kshiftr)    $1, %k1, %k3
+    _(kshiftr)    $2, %k3, %k4
+    _(kshiftr)    $3, %k1, %k5
+    check         k4, k5, __LINE__
+
+    _(kortest)    %k6, %k6
+    jnbe          1f
+    mov           $__LINE__, %eax
+    ret
+1:
+
+    _(kxor)       %k0, %k0, %k3
+    _(kortest)    %k3, %k3
+    jz            1f
+    mov           $__LINE__, %eax
+    ret
+1:
+
+    _(kxnor)      %k0, %k0, %k3
+    _(kortest)    %k3, %k3
+    jc            1f
+    mov           $__LINE__, %eax
+    ret
+1:
+
+#if SIZE > 1
+
+    _(kshiftr)    $SIZE*4, %k3, %k4
+    WIDEN(kunpck) %k4, %k4, %k5
+    check         k3, k5, __LINE__
+
+#endif
+
+#if SIZE != 2 || defined(__AVX512DQ__)
+
+    _(kadd)       %k1, %k1, %k3
+    _(kshiftl)    $1, %k1, %k4
+    check         k3, k4, __LINE__
+
+    _(ktest)      %k2, %k1
+    jnbe          1f
+    mov           $__LINE__, %eax
+    ret
+1:
+
+    _(kxor)       %k0, %k0, %k3
+    _(ktest)      %k0, %k3
+    jz            1f
+    mov           $__LINE__, %eax
+    ret
+1:
+
+    _(kxnor)      %k0, %k0, %k4
+    _(ktest)      %k0, %k4
+    jc            1f
+    mov           $__LINE__, %eax
+    ret
+1:
+
+#endif
+
+    xor           %eax, %eax
+    ret
+
+    .section .rodata, "a", @progbits
+    .balign 8
+in1: .byte 0b10110011, 0b10001111, 0b00001111, 0b10000011, 0b11110000, 0b00111111, 0b10000000, 0b11111111
+in2: .byte 0b11111111, 0b00000001, 0b11111100, 0b00001111, 0b11000001, 0b11110000, 0b11110001, 0b11001101
+
+    .data
+    .balign 8
+out: .quad 0
--- a/tools/tests/x86_emulator/test_x86_emulator.c
+++ b/tools/tests/x86_emulator/test_x86_emulator.c
@@ -18,6 +18,9 @@ asm ( ".pushsection .test, \"ax\", @prog
 #include "avx2.h"
 #include "avx2-sg.h"
 #include "xop.h"
+#include "avx512f-opmask.h"
+#include "avx512dq-opmask.h"
+#include "avx512bw-opmask.h"
 
 #define verbose false /* Switch to true for far more logging. */
 
@@ -78,6 +81,24 @@ static bool simd_check_xop(void)
     return cpu_has_xop;
 }
 
+static bool simd_check_avx512f(void)
+{
+    return cpu_has_avx512f;
+}
+#define simd_check_avx512f_opmask simd_check_avx512f
+
+static bool simd_check_avx512dq(void)
+{
+    return cpu_has_avx512dq;
+}
+#define simd_check_avx512dq_opmask simd_check_avx512dq
+
+static bool simd_check_avx512bw(void)
+{
+    return cpu_has_avx512bw;
+}
+#define simd_check_avx512bw_opmask simd_check_avx512bw
+
 static void simd_set_regs(struct cpu_user_regs *regs)
 {
     if ( cpu_has_mmx )
@@ -223,6 +244,10 @@ static const struct {
     SIMD(XOP i16x16,              xop,      32i2),
     SIMD(XOP i32x8,               xop,      32i4),
     SIMD(XOP i64x4,               xop,      32i8),
+    SIMD(OPMASK/w,     avx512f_opmask,         2),
+    SIMD(OPMASK/b,    avx512dq_opmask,         1),
+    SIMD(OPMASK/d,    avx512bw_opmask,         4),
+    SIMD(OPMASK/q,    avx512bw_opmask,         8),
 #undef SIMD_
 #undef SIMD
 };
@@ -3469,8 +3494,8 @@ int main(int argc, char **argv)
             rc = x86_emulate(&ctxt, &emulops);
             if ( rc != X86EMUL_OKAY )
             {
-                printf("failed at %%eip == %08lx (opcode %08x)\n",
-                       (unsigned long)regs.eip, ctxt.opcode);
+                printf("failed (%d) at %%eip == %08lx (opcode %08x)\n",
+                       rc, (unsigned long)regs.eip, ctxt.opcode);
                 return 1;
             }
         }
--- a/tools/tests/x86_emulator/testcase.mk
+++ b/tools/tests/x86_emulator/testcase.mk
@@ -14,3 +14,9 @@ all: $(TESTCASE).bin
 	$(LD) $(LDFLAGS_DIRECT) -N -Ttext 0x100000 -o $*.tmp $*.o
 	$(OBJCOPY) -O binary $*.tmp $@
 	rm -f $*.tmp
+
+%-opmask.bin: opmask.S
+	$(CC) $(filter-out -M% .%,$(CFLAGS)) -c $< -o $*.o
+	$(LD) $(LDFLAGS_DIRECT) -N -Ttext 0x100000 -o $*.tmp $*.o
+	$(OBJCOPY) -O binary $*.tmp $@
+	rm -f $*.tmp
--- a/tools/tests/x86_emulator/x86-emulate.c
+++ b/tools/tests/x86_emulator/x86-emulate.c
@@ -209,6 +209,9 @@ int emul_test_get_fpu(
     case X86EMUL_FPU_ymm:
         if ( cpu_has_avx )
             break;
+    case X86EMUL_FPU_opmask:
+        if ( cpu_has_avx512f )
+            break;
     default:
         return X86EMUL_UNHANDLEABLE;
     }
--- a/tools/tests/x86_emulator/x86-emulate.h
+++ b/tools/tests/x86_emulator/x86-emulate.h
@@ -236,6 +236,36 @@ static inline uint64_t xgetbv(uint32_t x
     (res.c & (1U << 21)) != 0; \
 })
 
+#define cpu_has_avx512f ({ \
+    struct cpuid_leaf res; \
+    emul_test_cpuid(1, 0, &res, NULL); \
+    if ( !(res.c & (1U << 27)) || ((xgetbv(0) & 0xe6) != 0xe6) ) \
+        res.b = 0; \
+    else \
+        emul_test_cpuid(7, 0, &res, NULL); \
+    (res.b & (1U << 16)) != 0; \
+})
+
+#define cpu_has_avx512dq ({ \
+    struct cpuid_leaf res; \
+    emul_test_cpuid(1, 0, &res, NULL); \
+    if ( !(res.c & (1U << 27)) || ((xgetbv(0) & 0xe6) != 0xe6) ) \
+        res.b = 0; \
+    else \
+        emul_test_cpuid(7, 0, &res, NULL); \
+    (res.b & (1U << 17)) != 0; \
+})
+
+#define cpu_has_avx512bw ({ \
+    struct cpuid_leaf res; \
+    emul_test_cpuid(1, 0, &res, NULL); \
+    if ( !(res.c & (1U << 27)) || ((xgetbv(0) & 0xe6) != 0xe6) ) \
+        res.b = 0; \
+    else \
+        emul_test_cpuid(7, 0, &res, NULL); \
+    (res.b & (1U << 30)) != 0; \
+})
+
 int emul_test_cpuid(
     uint32_t leaf,
     uint32_t subleaf,
--- a/xen/arch/x86/x86_emulate/x86_emulate.c
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c
@@ -491,6 +491,7 @@ static const struct ext0f3a_table {
     [0x20] = { .simd_size = simd_none },
     [0x21] = { .simd_size = simd_other },
     [0x22] = { .simd_size = simd_none },
+    [0x30 ... 0x33] = { .simd_size = simd_other, .two_op = 1 },
     [0x38] = { .simd_size = simd_128 },
     [0x39] = { .simd_size = simd_128, .to_mem = 1, .two_op = 1 },
     [0x40 ... 0x41] = { .simd_size = simd_packed_fp },
@@ -1187,6 +1188,11 @@ static int _get_fpu(
             return X86EMUL_UNHANDLEABLE;
         break;
 
+    case X86EMUL_FPU_opmask:
+        if ( !(xcr0 & X86_XCR0_SSE) || !(xcr0 & X86_XCR0_OPMASK) )
+            return X86EMUL_UNHANDLEABLE;
+        break;
+
     default:
         break;
     }
@@ -1762,12 +1768,15 @@ static bool vcpu_has(
 #define vcpu_has_bmi2()        vcpu_has(         7, EBX,  8, ctxt, ops)
 #define vcpu_has_rtm()         vcpu_has(         7, EBX, 11, ctxt, ops)
 #define vcpu_has_mpx()         vcpu_has(         7, EBX, 14, ctxt, ops)
+#define vcpu_has_avx512f()     vcpu_has(         7, EBX, 16, ctxt, ops)
+#define vcpu_has_avx512dq()    vcpu_has(         7, EBX, 17, ctxt, ops)
 #define vcpu_has_rdseed()      vcpu_has(         7, EBX, 18, ctxt, ops)
 #define vcpu_has_adx()         vcpu_has(         7, EBX, 19, ctxt, ops)
 #define vcpu_has_smap()        vcpu_has(         7, EBX, 20, ctxt, ops)
 #define vcpu_has_clflushopt()  vcpu_has(         7, EBX, 23, ctxt, ops)
 #define vcpu_has_clwb()        vcpu_has(         7, EBX, 24, ctxt, ops)
 #define vcpu_has_sha()         vcpu_has(         7, EBX, 29, ctxt, ops)
+#define vcpu_has_avx512bw()    vcpu_has(         7, EBX, 30, ctxt, ops)
 #define vcpu_has_rdpid()       vcpu_has(         7, ECX, 22, ctxt, ops)
 #define vcpu_has_clzero()      vcpu_has(0x80000008, EBX,  0, ctxt, ops)
 
@@ -2396,6 +2405,18 @@ x86_decode_twobyte(
         }
         break;
 
+    case X86EMUL_OPC_VEX(0, 0x90):    /* kmov{w,q} */
+    case X86EMUL_OPC_VEX_66(0, 0x90): /* kmov{b,d} */
+        state->desc = DstReg | SrcMem | Mov;
+        state->simd_size = simd_other;
+        break;
+
+    case X86EMUL_OPC_VEX(0, 0x91):    /* kmov{w,q} */
+    case X86EMUL_OPC_VEX_66(0, 0x91): /* kmov{b,d} */
+        state->desc = DstMem | SrcReg | Mov;
+        state->simd_size = simd_other;
+        break;
+
     case 0xae:
         ctxt->opcode |= MASK_INSR(vex.pfx, X86EMUL_OPC_PFX_MASK);
         /* fall through */
@@ -6002,6 +6023,60 @@ x86_emulate(
             dst.val = src.val;
         break;
 
+    case X86EMUL_OPC_VEX(0x0f, 0x4a):    /* kadd{w,q} k,k,k */
+        if ( !vex.w )
+            host_and_vcpu_must_have(avx512dq);
+        /* fall through */
+    case X86EMUL_OPC_VEX(0x0f, 0x41):    /* kand{w,q} k,k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x41): /* kand{b,d} k,k,k */
+    case X86EMUL_OPC_VEX(0x0f, 0x42):    /* kandn{w,q} k,k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x42): /* kandn{b,d} k,k,k */
+    case X86EMUL_OPC_VEX(0x0f, 0x45):    /* kor{w,q} k,k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x45): /* kor{b,d} k,k,k */
+    case X86EMUL_OPC_VEX(0x0f, 0x46):    /* kxnor{w,q} k,k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x46): /* kxnor{b,d} k,k,k */
+    case X86EMUL_OPC_VEX(0x0f, 0x47):    /* kxor{w,q} k,k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x47): /* kxor{b,d} k,k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x4a): /* kadd{b,d} k,k,k */
+        generate_exception_if(!vex.l, EXC_UD);
+    opmask_basic:
+        if ( vex.w )
+            host_and_vcpu_must_have(avx512bw);
+        else if ( vex.pfx )
+            host_and_vcpu_must_have(avx512dq);
+    opmask_common:
+        host_and_vcpu_must_have(avx512f);
+        generate_exception_if(!vex.r || (mode_64bit() && !(vex.reg & 8)) ||
+                              ea.type != OP_REG, EXC_UD);
+
+        vex.reg |= 8;
+        d &= ~TwoOp;
+
+        get_fpu(X86EMUL_FPU_opmask);
+
+        opc = init_prefixes(stub);
+        opc[0] = b;
+        opc[1] = modrm;
+        insn_bytes = PFX_BYTES + 2;
+
+        state->simd_size = simd_other;
+        op_bytes = 1; /* Any non-zero value will do. */
+        break;
+
+    case X86EMUL_OPC_VEX(0x0f, 0x44):    /* knot{w,q} k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x44): /* knot{b,d} k,k */
+        generate_exception_if(vex.l || vex.reg != 0xf, EXC_UD);
+        goto opmask_basic;
+
+    case X86EMUL_OPC_VEX(0x0f, 0x4b):    /* kunpck{w,d}{d,q} k,k,k */
+        generate_exception_if(!vex.l, EXC_UD);
+        host_and_vcpu_must_have(avx512bw);
+        goto opmask_common;
+
+    case X86EMUL_OPC_VEX_66(0x0f, 0x4b): /* kunpckbw k,k,k */
+        generate_exception_if(!vex.l || vex.w, EXC_UD);
+        goto opmask_common;
+
     CASE_SIMD_PACKED_FP(, 0x0f, 0x50):     /* movmskp{s,d} xmm,reg */
     CASE_SIMD_PACKED_FP(_VEX, 0x0f, 0x50): /* vmovmskp{s,d} {x,y}mm,reg */
     CASE_SIMD_PACKED_INT(0x0f, 0xd7):      /* pmovmskb {,x}mm,reg */
@@ -6552,6 +6627,154 @@ x86_emulate(
         dst.val = test_cc(b, _regs.eflags);
         break;
 
+    case X86EMUL_OPC_VEX(0x0f, 0x91):    /* kmov{w,q} k,mem */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x91): /* kmov{b,d} k,mem */
+        generate_exception_if(ea.type != OP_MEM, EXC_UD);
+        /* fall through */
+    case X86EMUL_OPC_VEX(0x0f, 0x90):    /* kmov{w,q} k/mem,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x90): /* kmov{b,d} k/mem,k */
+        generate_exception_if(vex.l || !vex.r, EXC_UD);
+        host_and_vcpu_must_have(avx512f);
+        if ( vex.w )
+        {
+            host_and_vcpu_must_have(avx512bw);
+            op_bytes = 4 << !vex.pfx;
+        }
+        else if ( vex.pfx )
+        {
+            host_and_vcpu_must_have(avx512dq);
+            op_bytes = 1;
+        }
+        else
+            op_bytes = 2;
+
+        get_fpu(X86EMUL_FPU_opmask);
+
+        opc = init_prefixes(stub);
+        opc[0] = b;
+        opc[1] = modrm;
+        if ( ea.type == OP_MEM )
+        {
+            /* convert memory operand to (%rAX) */
+            vex.b = 1;
+            opc[1] &= 0x38;
+        }
+        insn_bytes = PFX_BYTES + 2;
+        break;
+
+    case X86EMUL_OPC_VEX(0x0f, 0x92):    /* kmovw r32,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x92): /* kmovb r32,k */
+    case X86EMUL_OPC_VEX_F2(0x0f, 0x92): /* kmov{d,q} reg,k */
+        generate_exception_if(vex.l || !vex.r || vex.reg != 0xf ||
+                              ea.type != OP_REG, EXC_UD);
+
+        host_and_vcpu_must_have(avx512f);
+        if ( vex.pfx == vex_f2 )
+            host_and_vcpu_must_have(avx512bw);
+        else
+        {
+            generate_exception_if(vex.w, EXC_UD);
+            if ( vex.pfx )
+                host_and_vcpu_must_have(avx512dq);
+        }
+
+        get_fpu(X86EMUL_FPU_opmask);
+
+        opc = init_prefixes(stub);
+        opc[0] = b;
+        /* Convert GPR source to %rAX. */
+        vex.b = 1;
+        if ( !mode_64bit() )
+            vex.w = 0;
+        opc[1] = modrm & 0xf8;
+        opc[2] = 0xc3;
+
+        copy_VEX(opc, vex);
+        ea.reg = decode_gpr(&_regs, modrm_rm);
+        invoke_stub("", "", "=m" (dummy) : "a" (*ea.reg));
+
+        put_stub(stub);
+
+        ASSERT(!state->simd_size);
+        dst.type = OP_NONE;
+        break;
+
+    case X86EMUL_OPC_VEX(0x0f, 0x93):    /* kmovw k,r32 */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x93): /* kmovb k,r32 */
+    case X86EMUL_OPC_VEX_F2(0x0f, 0x93): /* kmov{d,q} k,reg */
+        generate_exception_if(vex.l || vex.reg != 0xf || ea.type != OP_REG,
+                              EXC_UD);
+        dst = ea;
+        dst.reg = decode_gpr(&_regs, modrm_reg);
+
+        host_and_vcpu_must_have(avx512f);
+        if ( vex.pfx == vex_f2 )
+        {
+            host_and_vcpu_must_have(avx512bw);
+            dst.bytes = 4 << (mode_64bit() && vex.w);
+        }
+        else
+        {
+            generate_exception_if(vex.w, EXC_UD);
+            dst.bytes = 4;
+            if ( vex.pfx )
+                host_and_vcpu_must_have(avx512dq);
+        }
+
+        get_fpu(X86EMUL_FPU_opmask);
+
+        opc = init_prefixes(stub);
+        opc[0] = b;
+        /* Convert GPR destination to %rAX. */
+        vex.r = 1;
+        if ( !mode_64bit() )
+            vex.w = 0;
+        opc[1] = modrm & 0xc7;
+        opc[2] = 0xc3;
+
+        copy_VEX(opc, vex);
+        invoke_stub("", "", "=a" (dst.val) : [dummy] "i" (0));
+
+        put_stub(stub);
+
+        ASSERT(!state->simd_size);
+        break;
+
+    case X86EMUL_OPC_VEX(0x0f, 0x99):    /* ktest{w,q} k,k */
+        if ( !vex.w )
+            host_and_vcpu_must_have(avx512dq);
+        /* fall through */
+    case X86EMUL_OPC_VEX(0x0f, 0x98):    /* kortest{w,q} k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x98): /* kortest{b,d} k,k */
+    case X86EMUL_OPC_VEX_66(0x0f, 0x99): /* ktest{b,d} k,k */
+        generate_exception_if(vex.l || !vex.r || vex.reg != 0xf ||
+                              ea.type != OP_REG, EXC_UD);
+        host_and_vcpu_must_have(avx512f);
+        if ( vex.w )
+            host_and_vcpu_must_have(avx512bw);
+        else if ( vex.pfx )
+            host_and_vcpu_must_have(avx512dq);
+
+        get_fpu(X86EMUL_FPU_opmask);
+
+        opc = init_prefixes(stub);
+        opc[0] = b;
+        opc[1] = modrm;
+        opc[2] = 0xc3;
+
+        copy_VEX(opc, vex);
+        invoke_stub(_PRE_EFLAGS("[eflags]", "[mask]", "[tmp]"),
+                    _POST_EFLAGS("[eflags]", "[mask]", "[tmp]"),
+                    [eflags] "+g" (_regs.eflags),
+                    "=a" (dst.val), [tmp] "=&r" (dummy)
+                    : [mask] "i" (EFLAGS_MASK));
+
+        put_stub(stub);
+
+        ASSERT(!state->simd_size);
+        dst.type = OP_NONE;
+        break;
+
     case X86EMUL_OPC(0x0f, 0xa2): /* cpuid */
         msr_val = 0;
         fail_if(ops->cpuid == NULL);
@@ -8170,6 +8393,23 @@ x86_emulate(
         generate_exception_if(vex.l, EXC_UD);
         goto simd_0f_imm8_avx;
 
+    case X86EMUL_OPC_VEX_66(0x0f3a, 0x30): /* kshiftr{b,w} $imm8,k,k */
+    case X86EMUL_OPC_VEX_66(0x0f3a, 0x32): /* kshiftl{b,w} $imm8,k,k */
+        if ( !vex.w )
+            host_and_vcpu_must_have(avx512dq);
+    opmask_shift_imm:
+        generate_exception_if(vex.l || !vex.r || vex.reg != 0xf ||
+                              ea.type != OP_REG, EXC_UD);
+        host_and_vcpu_must_have(avx512f);
+        get_fpu(X86EMUL_FPU_opmask);
+        op_bytes = 1; /* Any non-zero value will do. */
+        goto simd_0f_imm8;
+
+    case X86EMUL_OPC_VEX_66(0x0f3a, 0x31): /* kshiftr{d,q} $imm8,k,k */
+    case X86EMUL_OPC_VEX_66(0x0f3a, 0x33): /* kshiftl{d,q} $imm8,k,k */
+        host_and_vcpu_must_have(avx512bw);
+        goto opmask_shift_imm;
+
     case X86EMUL_OPC_66(0x0f3a, 0x44):     /* pclmulqdq $imm8,xmm/m128,xmm */
     case X86EMUL_OPC_VEX_66(0x0f3a, 0x44): /* vpclmulqdq $imm8,xmm/m128,xmm,xmm */
         host_and_vcpu_must_have(pclmulqdq);
--- a/xen/arch/x86/x86_emulate/x86_emulate.h
+++ b/xen/arch/x86/x86_emulate/x86_emulate.h
@@ -170,6 +170,7 @@ enum x86_emulate_fpu_type {
     X86EMUL_FPU_mmx, /* MMX instruction set (%mm0-%mm7) */
     X86EMUL_FPU_xmm, /* SSE instruction set (%xmm0-%xmm7/15) */
     X86EMUL_FPU_ymm, /* AVX/XOP instruction set (%ymm0-%ymm7/15) */
+    X86EMUL_FPU_opmask, /* AVX512 opmask instruction set (%k0-%k7) */
     /* This sentinel will never be passed to ->get_fpu(). */
     X86EMUL_FPU_none
 };
--- a/xen/include/asm-x86/cpufeature.h
+++ b/xen/include/asm-x86/cpufeature.h
@@ -99,9 +99,12 @@
 #define cpu_has_rtm             boot_cpu_has(X86_FEATURE_RTM)
 #define cpu_has_fpu_sel         (!boot_cpu_has(X86_FEATURE_NO_FPU_SEL))
 #define cpu_has_mpx             boot_cpu_has(X86_FEATURE_MPX)
+#define cpu_has_avx512f         boot_cpu_has(X86_FEATURE_AVX512F)
+#define cpu_has_avx512dq        boot_cpu_has(X86_FEATURE_AVX512DQ)
 #define cpu_has_rdseed          boot_cpu_has(X86_FEATURE_RDSEED)
 #define cpu_has_smap            boot_cpu_has(X86_FEATURE_SMAP)
 #define cpu_has_sha             boot_cpu_has(X86_FEATURE_SHA)
+#define cpu_has_avx512bw        boot_cpu_has(X86_FEATURE_AVX512BW)
 
 /* CPUID level 0x80000007.edx */
 #define cpu_has_itsc            boot_cpu_has(X86_FEATURE_ITSC)




_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  parent reply	other threads:[~2018-08-29 14:24 UTC|newest]

Thread overview: 465+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-09  8:15 [PATCH 0/6] x86emul: fixes, improvements, and beginnings of AVX512 support Jan Beulich
2018-08-09  8:23 ` [PATCH 1/6] x86emul: fix FMA scalar operand sizes Jan Beulich
2018-08-09  8:24 ` [PATCH 2/6] x86emul: extend MASKMOV{Q,DQU} tests Jan Beulich
2018-08-09  8:24 ` [PATCH 3/6] x86emul: support AVX512 opmask insns Jan Beulich
2018-08-09  8:25 ` [PATCH 4/6] x86emul: clean up AVX2 insn use in test harness Jan Beulich
2018-08-09  8:25 ` [PATCH 5/6] x86emul: correct EVEX decoding Jan Beulich
2018-08-09  8:26 ` [PATCH 6/6] x86emul: generalize vector length handling for AVX512/EVEX Jan Beulich
2018-08-29 14:20 ` [PATCH v2 0/6] x86emul: fixes, improvements, and beginnings of AVX512 support Jan Beulich
2018-08-29 14:23   ` [PATCH v2 1/6] x86emul: fix FMA scalar operand sizes Jan Beulich
2018-09-03 16:43     ` Andrew Cooper
2018-09-04  7:52       ` Jan Beulich
2018-08-29 14:23   ` [PATCH v2 2/6] x86emul: extend MASKMOV{Q,DQU} tests Jan Beulich
2018-09-03 16:44     ` [PATCH v2 2/6] x86emul: extend MASKMOV{Q, DQU} tests Andrew Cooper
2018-08-29 14:24   ` Jan Beulich [this message]
2018-09-03 17:57     ` [PATCH v2 3/6] x86emul: support AVX512 opmask insns Andrew Cooper
2018-09-04  7:58       ` Jan Beulich
2018-08-29 14:24   ` [PATCH v2 4/6] x86emul: clean up AVX2 insn use in test harness Jan Beulich
2018-09-03 18:04     ` Andrew Cooper
2018-08-29 14:25   ` [PATCH v2 5/6] x86emul: correct EVEX decoding Jan Beulich
2018-09-04 10:48     ` Andrew Cooper
2018-09-04 12:48       ` Jan Beulich
2018-08-29 14:25   ` [PATCH v2 6/6] x86emul: generalize vector length handling for AVX512/EVEX Jan Beulich
2018-09-04 11:02     ` Andrew Cooper
2018-09-04 12:50       ` Jan Beulich
2018-09-18 11:46 ` [PATCH v3 00/34] x86emul: fixes, improvements, and beginnings of AVX512 support Jan Beulich
2018-09-18 11:53   ` [PATCH v3 01/34] x86emul: support AVX512 opmask insns Jan Beulich
2018-10-25 18:32     ` Andrew Cooper
2018-10-26  9:03       ` Jan Beulich
2018-10-26 11:29         ` Andrew Cooper
2018-10-26 11:59           ` Jan Beulich
2018-10-26 12:19             ` Andrew Cooper
2018-10-26 12:34               ` Jan Beulich
2018-09-18 11:53   ` [PATCH v3 02/34] x86/HVM: grow MMIO cache data size to 64 bytes Jan Beulich
2018-09-18 16:05     ` Paul Durrant
2018-10-25 18:36     ` Andrew Cooper
2018-10-26  9:04       ` Jan Beulich
2018-10-26 11:29         ` Andrew Cooper
2018-09-18 11:55   ` [PATCH v3 03/34] x86emul: correct EVEX decoding Jan Beulich
2018-09-18 11:55   ` [PATCH v3 04/34] x86emul: generalize vector length handling for AVX512/EVEX Jan Beulich
2018-09-18 11:56   ` [PATCH v3 05/34] x86emul: support basic AVX512 moves Jan Beulich
2018-09-18 11:57   ` [PATCH v3 06/34] x86emul: test for correct EVEX Disp8 scaling Jan Beulich
2018-09-18 11:57   ` [PATCH v3 07/34] x86emul: use AVX512 logic for emulating V{, P}MASKMOV* Jan Beulich
2018-09-18 11:58   ` [PATCH v3 08/34] x86emul: support AVX512F legacy-equivalent arithmetic FP insns Jan Beulich
2018-09-18 11:59   ` [PATCH v3 09/34] x86emul: support AVX512DQ logic " Jan Beulich
2018-09-18 11:59   ` [PATCH v3 10/34] x86emul: support AVX512F "normal" FP compare insns Jan Beulich
2018-09-18 12:00   ` [PATCH v3 11/34] x86emul: support AVX512F misc legacy-equivalent FP insns Jan Beulich
2018-09-18 12:00   ` [PATCH v3 12/34] x86emul: support AVX512F fused-multiply-add insns Jan Beulich
2018-09-18 12:01   ` [PATCH v3 13/34] x86emul: support AVX512F legacy-equivalent logic insns Jan Beulich
2018-09-18 12:02   ` [PATCH v3 14/34] x86emul: support AVX512{F, DQ} FP broadcast insns Jan Beulich
2018-09-18 12:03   ` [PATCH v3 15/34] x86emul: support AVX512F v{, u}comis{d, s} insns Jan Beulich
2018-09-18 12:03   ` [PATCH v3 16/34] x86emul/test: introduce eq() Jan Beulich
2018-09-18 12:04   ` [PATCH v3 17/34] x86emul: support AVX512{F, BW} packed integer compare insns Jan Beulich
2018-09-18 12:05   ` [PATCH v3 18/34] x86emul: support AVX512{F, BW} packed integer arithmetic insns Jan Beulich
2018-09-18 12:05   ` [PATCH v3 19/34] x86emul: use simd_128 also for legacy vector shift insns Jan Beulich
2018-09-18 12:05   ` [PATCH v3 20/34] x86emul: support AVX512{F, BW} shift/rotate insns Jan Beulich
2018-09-18 12:06   ` [PATCH v3 21/34] x86emul: support AVX512{F, BW, DQ} extract insns Jan Beulich
2018-09-18 12:07   ` [PATCH v3 22/34] x86emul: support AVX512{F, BW, DQ} insert insns Jan Beulich
2018-09-18 12:07   ` [PATCH v3 23/34] x86emul: basic AVX512F testing Jan Beulich
2018-09-18 12:08   ` [PATCH v3 24/34] x86emul: support AVX512{F, BW, DQ} integer broadcast insns Jan Beulich
2018-09-18 12:09   ` [PATCH v3 25/34] x86emul: basic AVX512VL testing Jan Beulich
2018-09-18 12:09   ` [PATCH v3 26/34] x86emul: support AVX512{F, BW} zero- and sign-extending moves Jan Beulich
2018-09-18 12:09   ` [PATCH v3 27/34] x86emul: support AVX512{F, BW} down conversion moves Jan Beulich
2018-09-18 12:10   ` [PATCH v3 28/34] x86emul: support AVX512{F, BW} integer unpack insns Jan Beulich
2018-09-18 12:11   ` [PATCH v3 29/34] x86emul: support AVX512{F, BW, _VBMI} full permute insns Jan Beulich
2018-09-18 12:11   ` [PATCH v3 29/34] x86emul: support AVX512{F, BW} integer shuffle insns Jan Beulich
2018-09-18 12:12   ` [PATCH v3 30/34] x86emul: support AVX512{BW, DQ} mask move insns Jan Beulich
2018-09-18 12:14   ` [PATCH v3 32/34] x86emul: basic AVX512BW testing Jan Beulich
2018-09-18 12:14   ` [PATCH v3 33/34] x86emul: basic AVX512DQ testing Jan Beulich
2018-09-18 12:14   ` [PATCH v3 34/34] x86emul: also allow running the 32-bit harness on a 64-bit distro Jan Beulich
2018-09-25 13:14 ` [PATCH v4 00/44] x86emul: fixes, improvements, and beginnings of AVX512 support Jan Beulich
2018-09-25 13:25   ` [PATCH v4 01/44] x86emul: support AVX512 opmask insns Jan Beulich
2018-09-26  6:06     ` Jan Beulich
2018-09-25 13:26   ` [PATCH v4 02/44] x86/HVM: grow MMIO cache data size to 64 bytes Jan Beulich
2018-09-25 13:27   ` [PATCH v4 03/44] x86emul: correct EVEX decoding Jan Beulich
2018-10-26 14:33     ` Andrew Cooper
2018-09-25 13:28   ` [PATCH v4 04/44] x86emul: generalize vector length handling for AVX512/EVEX Jan Beulich
2018-10-26 16:10     ` Andrew Cooper
2018-09-25 13:28   ` [PATCH v4 05/44] x86emul: support basic AVX512 moves Jan Beulich
2018-11-13 17:12     ` Andrew Cooper
2018-11-14 14:35       ` Jan Beulich
2018-11-14 16:26         ` Andrew Cooper
2018-11-15  9:54           ` Jan Beulich
2018-09-25 13:29   ` [PATCH v4 06/44] x86emul: test for correct EVEX Disp8 scaling Jan Beulich
2018-11-12 17:42     ` Andrew Cooper
2018-11-13 11:12       ` Jan Beulich
2018-11-13 15:45         ` Andrew Cooper
2018-11-14 14:17           ` Jan Beulich
2018-11-14 14:42             ` Andrew Cooper
2018-11-14 14:58               ` Jan Beulich
2018-09-25 13:29   ` [PATCH v4 07/44] x86emul: also allow running the 32-bit harness on a 64-bit distro Jan Beulich
2018-11-12 17:50     ` Andrew Cooper
2018-11-13 11:42       ` Jan Beulich
2018-11-13 15:58         ` Andrew Cooper
2018-11-14  8:42           ` Jan Beulich
2018-09-25 13:30   ` [PATCH v4 08/44] x86emul: use AVX512 logic for emulating V{, P}MASKMOV* Jan Beulich
2018-11-13 18:12     ` Andrew Cooper
2018-09-25 13:31   ` [PATCH v4 09/44] x86emul: support AVX512F legacy-equivalent arithmetic FP insns Jan Beulich
2018-11-13 18:21     ` Andrew Cooper
2018-09-25 13:32   ` [PATCH v4 10/44] x86emul: support AVX512DQ logic " Jan Beulich
2018-11-13 18:56     ` Andrew Cooper
2018-09-25 13:32   ` [PATCH v4 11/44] x86emul: support AVX512F "normal" FP compare insns Jan Beulich
2018-11-13 19:04     ` Andrew Cooper
2018-11-14 14:41       ` Jan Beulich
2018-11-14 14:45         ` Andrew Cooper
2018-09-25 13:33   ` [PATCH v4 12/44] x86emul: support AVX512F misc legacy-equivalent FP insns Jan Beulich
2018-11-13 19:17     ` Andrew Cooper
2018-09-25 13:33   ` [PATCH v4 13/44] x86emul: support AVX512F fused-multiply-add insns Jan Beulich
2018-11-13 19:28     ` Andrew Cooper
2018-09-25 13:34   ` [PATCH v4 14/44] x86emul: support AVX512F legacy-equivalent logic insns Jan Beulich
2018-11-13 19:30     ` Andrew Cooper
2018-09-25 13:35   ` [PATCH v4 15/44] x86emul: support AVX512{F, DQ} FP broadcast insns Jan Beulich
2018-11-13 19:37     ` Andrew Cooper
2018-09-25 13:35   ` [PATCH v4 16/44] x86emul: support AVX512F v{, u}comis{d, s} insns Jan Beulich
2018-11-13 19:39     ` Andrew Cooper
2018-09-25 13:36   ` [PATCH v4 17/44] x86emul/test: introduce eq() Jan Beulich
2018-10-26 11:31     ` Andrew Cooper
2018-09-25 13:37   ` [PATCH v4 18/44] x86emul: support AVX512{F, BW} packed integer compare insns Jan Beulich
2018-09-25 13:37   ` [PATCH v4 19/44] x86emul: support AVX512{F, BW} packed integer arithmetic insns Jan Beulich
2018-09-25 13:38   ` [PATCH v4 20/44] x86emul: use simd_128 also for legacy vector shift insns Jan Beulich
2018-09-25 13:39   ` [PATCH v4 21/44] x86emul: support AVX512{F, BW} shift/rotate insns Jan Beulich
2018-09-25 13:40   ` [PATCH v4 22/44] x86emul: support AVX512{F, BW, DQ} extract insns Jan Beulich
2018-09-25 13:40   ` [PATCH v4 23/44] x86emul: support AVX512{F, BW, DQ} insert insns Jan Beulich
2018-09-25 13:41   ` [PATCH v4 24/44] x86emul: basic AVX512F testing Jan Beulich
2018-09-25 13:41   ` [PATCH v4 25/44] x86emul: support AVX512{F, BW, DQ} integer broadcast insns Jan Beulich
2018-09-25 13:42   ` [PATCH v4 26/44] x86emul: basic AVX512VL testing Jan Beulich
2018-09-25 13:43   ` [PATCH v4 27/44] x86emul: support AVX512{F, BW} zero- and sign-extending moves Jan Beulich
2018-09-25 13:43   ` [PATCH v4 28/44] x86emul: support AVX512{F, BW} down conversion moves Jan Beulich
2018-09-25 13:44   ` [PATCH v4 29/44] x86emul: support AVX512{F, BW} integer unpack insns Jan Beulich
2018-09-25 13:44   ` [PATCH v4 30/44] x86emul: support AVX512{F, BW, _VBMI} full permute insns Jan Beulich
2018-09-25 13:46   ` [PATCH v4 31/44] x86emul: support AVX512{F, BW} integer shuffle insns Jan Beulich
2018-09-25 13:46   ` [PATCH v4 32/44] x86emul: support AVX512{BW, DQ} mask move insns Jan Beulich
2018-09-25 13:47   ` [PATCH v4 33/44] x86emul: basic AVX512BW testing Jan Beulich
2018-09-25 13:48   ` [PATCH v4 34/44] x86emul: basic AVX512DQ testing Jan Beulich
2018-09-25 13:48   ` [PATCH v4 35/44] x86emul: support AVX512F move high/low insns Jan Beulich
2018-09-25 13:49   ` [PATCH v4 36/44] x86emul: support AVX512F move duplicate insns Jan Beulich
2018-09-25 13:49   ` [PATCH v4 37/44] x86emul: support AVX512{F, BW, VBMI} permute insns Jan Beulich
2018-09-25 13:50   ` [PATCH v4 38/44] x86emul: support AVX512BW pack insns Jan Beulich
2018-09-25 13:51   ` [PATCH v4 39/44] x86emul: support AVX512F floating-point conversion insns Jan Beulich
2018-09-25 13:52   ` [PATCH v4 40/44] x86emul: support AVX512F legacy-equivalent packed int/FP " Jan Beulich
2018-09-25 13:53   ` [PATCH v4 41/44] x86emul: support AVX512F legacy-equivalent scalar " Jan Beulich
2018-09-25 13:53   ` [PATCH v4 42/44] x86emul: support AVX512DQ packed quad-int/FP " Jan Beulich
2018-09-25 13:54   ` [PATCH v4 43/44] x86emul: support AVX512{F, DQ} uint-to-FP " Jan Beulich
2018-09-25 13:55   ` [PATCH v4 44/44] x86emul: support AVX512{F, DQ} FP-to-uint " Jan Beulich
2018-11-19 10:00 ` [PATCH v5 00/47] x86emul: fair parts of AVX512 support Jan Beulich
2018-11-19 10:13   ` [PATCH v5 01/47] x86emul: introduce IMPOSSIBLE() Jan Beulich
2018-11-19 18:11     ` Andrew Cooper
2018-11-20  8:12       ` Jan Beulich
2018-11-19 10:13   ` [PATCH v5 02/47] x86emul: support basic AVX512 moves Jan Beulich
2018-11-19 18:35     ` Andrew Cooper
2018-11-19 10:14   ` [PATCH v5 03/47] x86emul: test for correct EVEX Disp8 scaling Jan Beulich
2018-11-19 18:35     ` Andrew Cooper
2018-11-19 10:14   ` [PATCH v5 04/47] x86emul: also allow running the 32-bit harness on a 64-bit distro Jan Beulich
2018-11-19 18:40     ` Andrew Cooper
2018-11-19 10:15   ` [PATCH v5 05/47] x86emul: use AVX512 logic for emulating V{, P}MASKMOV* Jan Beulich
2018-11-19 10:16   ` [PATCH v5 06/47] x86emul: support AVX512F legacy-equivalent arithmetic FP insns Jan Beulich
2018-11-19 10:16   ` [PATCH v5 07/47] x86emul: support AVX512DQ logic " Jan Beulich
2018-11-19 10:17   ` [PATCH v5 08/47] x86emul: support basic AVX512F FP compare insns Jan Beulich
2018-11-19 10:17   ` [PATCH v5 09/47] x86emul: support AVX512F misc legacy-equivalent FP insns Jan Beulich
2018-11-19 10:18   ` [PATCH v5 10/47] x86emul: support AVX512F fused-multiply-add insns Jan Beulich
2018-11-19 10:18   ` [PATCH v5 11/47] x86emul: support AVX512F legacy-equivalent logic insns Jan Beulich
2018-11-19 10:19   ` [PATCH v5 12/47] x86emul: support AVX512{F, DQ} FP broadcast insns Jan Beulich
2018-11-19 18:44     ` Andrew Cooper
2018-11-19 10:20   ` [PATCH v5 13/47] x86emul: support AVX512F v{, u}comis{d, s} insns Jan Beulich
2018-11-19 10:21   ` [PATCH v5 14/47] x86emul: support AVX512{F, BW} packed integer compare insns Jan Beulich
2018-11-19 19:09     ` Andrew Cooper
2018-11-19 10:21   ` [PATCH v5 15/47] x86emul: support AVX512{F, BW} packed integer arithmetic insns Jan Beulich
2018-11-19 19:18     ` Andrew Cooper
2018-11-19 10:22   ` [PATCH v5 16/47] x86emul: use simd_128 also for legacy vector shift insns Jan Beulich
2018-11-19 19:21     ` Andrew Cooper
2018-11-19 10:22   ` [PATCH v5 17/47] x86emul: support AVX512{F, BW} shift/rotate insns Jan Beulich
2018-11-19 10:23   ` [PATCH v5 18/47] x86emul: support AVX512{F, BW, DQ} extract insns Jan Beulich
2018-11-19 10:23   ` [PATCH v5 19/47] x86emul: support AVX512{F, BW, DQ} insert insns Jan Beulich
2018-11-19 10:24   ` [PATCH v5 20/47] x86emul: basic AVX512F testing Jan Beulich
2018-11-19 10:25   ` [PATCH v5 21/47] x86emul: support AVX512{F, BW, DQ} integer broadcast insns Jan Beulich
2018-11-19 10:25   ` [PATCH v5 22/47] x86emul: basic AVX512VL testing Jan Beulich
2018-11-19 10:26   ` [PATCH v5 23/47] x86emul: support AVX512{F, BW} zero- and sign-extending moves Jan Beulich
2018-11-19 10:26   ` [PATCH v5 24/47] x86emul: support AVX512{F, BW} down conversion moves Jan Beulich
2018-11-19 10:28   ` [PATCH v5 25/47] x86emul: support AVX512{F, BW} integer unpack insns Jan Beulich
2018-11-19 10:28   ` [PATCH v5 26/47] x86emul: support AVX512{F, BW, _VBMI} full permute insns Jan Beulich
2018-11-19 10:29   ` [PATCH v5 27/47] x86emul: support AVX512{F, BW} integer shuffle insns Jan Beulich
2018-11-19 10:30   ` [PATCH v5 28/47] x86emul: support AVX512{BW, DQ} mask move insns Jan Beulich
2018-11-19 10:30   ` [PATCH v5 29/47] x86emul: basic AVX512BW testing Jan Beulich
2018-11-19 10:31   ` [PATCH v5 30/47] x86emul: basic AVX512DQ testing Jan Beulich
2018-11-19 10:31   ` [PATCH v5 31/47] x86emul: support AVX512F move high/low insns Jan Beulich
2018-11-19 10:31   ` [PATCH v5 32/47] x86emul: support AVX512F move duplicate insns Jan Beulich
2018-11-19 10:32   ` [PATCH v5 33/47] x86emul: support AVX512{F, BW, VBMI} permute insns Jan Beulich
2018-11-19 10:33   ` [PATCH v5 34/47] x86emul: support AVX512BW pack insns Jan Beulich
2018-11-19 10:33   ` [PATCH v5 35/47] x86emul: support AVX512F floating-point conversion insns Jan Beulich
2018-11-19 10:34   ` [PATCH v5 36/47] x86emul: support AVX512F legacy-equivalent packed int/FP " Jan Beulich
2018-11-19 10:35   ` [PATCH v5 37/47] x86emul: support AVX512F legacy-equivalent scalar " Jan Beulich
2018-11-19 10:36   ` [PATCH v5 38/47] x86emul: support AVX512DQ packed quad-int/FP " Jan Beulich
2018-11-19 10:37   ` [PATCH v5 39/47] x86emul: support AVX512{F, DQ} uint-to-FP " Jan Beulich
2018-11-19 10:37   ` [PATCH v5 40/47] x86emul: support AVX512{F, DQ} FP-to-uint " Jan Beulich
2018-11-19 10:38   ` [PATCH v5 41/47] x86emul: support remaining AVX512F legacy-equivalent insns Jan Beulich
2018-11-19 10:38   ` [PATCH v5 42/47] x86emul: support remaining AVX512BW " Jan Beulich
2018-11-19 10:39   ` [PATCH v5 43/47] x86emul: support AVX512{F, ER} reciprocal insns Jan Beulich
2018-11-19 10:39   ` [PATCH v5 44/47] x86emul: support AVX512F floating point manipulation insns Jan Beulich
2018-11-19 10:40   ` [PATCH v5 45/47] x86emul: support AVX512DQ " Jan Beulich
2018-11-19 10:40   ` [PATCH v5 46/47] x86emul: support AVX512{F, _VBMI2} compress/expand insns Jan Beulich
2018-11-19 10:41   ` [PATCH v5 47/47] x86emul: support remaining misc AVX512{F, BW} insns Jan Beulich
2018-12-06  9:45 ` [PATCH v6 00/42] x86emul: fair parts of AVX512 support Jan Beulich
2018-12-06  9:51   ` [PATCH v6 01/42] x86emul: support AVX512{F, BW} shift/rotate insns Jan Beulich
2018-12-06  9:51   ` [PATCH v6 02/42] x86emul: support AVX512{F, BW, DQ} extract insns Jan Beulich
2018-12-06  9:51   ` [PATCH v6 03/42] x86emul: support AVX512{F, BW, DQ} insert insns Jan Beulich
2018-12-06  9:52   ` [PATCH v6 04/42] x86emul: basic AVX512F testing Jan Beulich
2018-12-06  9:53   ` [PATCH v6 05/42] x86emul: support AVX512{F, BW, DQ} integer broadcast insns Jan Beulich
2018-12-06  9:53   ` [PATCH v6 06/42] x86emul: basic AVX512VL testing Jan Beulich
2018-12-06  9:53   ` [PATCH v6 07/42] x86emul: support AVX512{F, BW} zero- and sign-extending moves Jan Beulich
2018-12-06  9:54   ` [PATCH v6 08/42] x86emul: support AVX512{F, BW} down conversion moves Jan Beulich
2018-12-06  9:54   ` [PATCH v6 09/42] x86emul: support AVX512{F, BW} integer unpack insns Jan Beulich
2018-12-06  9:55   ` [PATCH v6 10/42] x86emul: support AVX512{F, BW, _VBMI} full permute insns Jan Beulich
2018-12-06  9:55   ` [PATCH v6 11/42] x86emul: support AVX512{F, BW} integer shuffle insns Jan Beulich
2018-12-06  9:55   ` [PATCH v6 12/42] x86emul: support AVX512{BW, DQ} mask move insns Jan Beulich
2018-12-06  9:56   ` [PATCH v6 13/42] x86emul: basic AVX512BW testing Jan Beulich
2018-12-06  9:57   ` [PATCH v6 14/42] x86emul: basic AVX512DQ testing Jan Beulich
2018-12-06  9:57   ` [PATCH v6 15/42] x86emul: support AVX512F move high/low insns Jan Beulich
2018-12-06  9:58   ` [PATCH v6 16/42] x86emul: support AVX512F move duplicate insns Jan Beulich
2018-12-06  9:59   ` [PATCH v6 17/42] x86emul: support AVX512{F, BW, _VBMI} permute insns Jan Beulich
2018-12-06  9:59   ` [PATCH v6 18/42] x86emul: support AVX512BW pack insns Jan Beulich
2018-12-06 10:00   ` [PATCH v6 19/42] x86emul: support AVX512F floating-point conversion insns Jan Beulich
2018-12-06 10:00   ` [PATCH v6 20/42] x86emul: support AVX512F legacy-equivalent packed int/FP " Jan Beulich
2018-12-06 10:01   ` [PATCH v6 21/42] x86emul: support AVX512F legacy-equivalent scalar " Jan Beulich
2018-12-06 10:01   ` [PATCH v6 22/42] x86emul: support AVX512DQ packed quad-int/FP " Jan Beulich
2018-12-06 10:02   ` [PATCH v6 23/42] x86emul: support AVX512{F, DQ} uint-to-FP " Jan Beulich
2018-12-06 10:02   ` [PATCH v6 24/42] x86emul: support AVX512{F, DQ} FP-to-uint " Jan Beulich
2018-12-06 10:04   ` [PATCH v6 25/42] x86emul: support remaining AVX512F legacy-equivalent insns Jan Beulich
2018-12-06 10:04   ` [PATCH v6 26/42] x86emul: support remaining AVX512BW " Jan Beulich
2018-12-06 10:04   ` [PATCH v6 27/42] x86emul: support AVX512{F, ER} reciprocal insns Jan Beulich
2018-12-06 10:05   ` [PATCH v6 28/42] x86emul: support AVX512F floating point manipulation insns Jan Beulich
2018-12-06 10:05   ` [PATCH v6 29/42] x86emul: support AVX512DQ " Jan Beulich
2018-12-06 10:06   ` [PATCH v6 30/42] x86emul: support AVX512{F, _VBMI2} compress/expand insns Jan Beulich
2018-12-06 10:07   ` [PATCH v6 31/42] x86emul: support remaining misc AVX512{F, BW} insns Jan Beulich
2018-12-06 10:07   ` [PATCH v6 32/42] x86emul: support AVX512F gather insns Jan Beulich
2018-12-06 10:08   ` [PATCH v6 33/42] x86emul: add high register S/G test cases Jan Beulich
2018-12-06 10:08   ` [PATCH v6 34/42] x86emul: support AVX512F scatter insns Jan Beulich
2018-12-06 10:09   ` [PATCH v6 35/42] x86emul: support AVX512PF insns Jan Beulich
2018-12-06 10:09   ` [PATCH v6 36/42] x86emul: support AVX512CD insns Jan Beulich
2018-12-06 10:10   ` [PATCH v6 37/42] x86emul: complete support of AVX512_VBMI insns Jan Beulich
2018-12-06 10:10   ` [PATCH v6 38/42] x86emul: support of AVX512* population count insns Jan Beulich
2018-12-06 10:11   ` [PATCH v6 39/42] x86emul: support of AVX512_IFMA insns Jan Beulich
2018-12-06 10:11   ` [PATCH v6 40/42] x86emul: support remaining AVX512_VBMI2 insns Jan Beulich
2018-12-06 10:12   ` [PATCH v6 41/42] x86emul: support AVX512_4FMAPS insns Jan Beulich
2018-12-06 10:12   ` [PATCH v6 42/42] x86emul: support AVX512_4VNNIW insns Jan Beulich
2018-12-19 14:17 ` [PATCH v7 00/49] x86emul: remaining AVX512 support Jan Beulich
2018-12-19 14:34   ` Jan Beulich
2018-12-19 14:35   ` [PATCH v7 01/49] x86emul: rename evex.br to evex.brs Jan Beulich
2018-12-19 15:14     ` Andrew Cooper
2018-12-19 14:36   ` [PATCH v7 02/49] x86emul: support AVX512{F, BW} shift/rotate insns Jan Beulich
2018-12-19 16:00     ` Andrew Cooper
2018-12-19 14:36   ` [PATCH v7 03/49] x86emul: support AVX512{F, BW, DQ} extract insns Jan Beulich
2018-12-19 18:20     ` Andrew Cooper
2018-12-20  7:49       ` Jan Beulich
2018-12-19 14:37   ` [PATCH v7 04/49] x86emul: support AVX512{F, BW, DQ} insert insns Jan Beulich
2019-03-14 15:35     ` Andrew Cooper
2018-12-19 14:37   ` [PATCH v7 05/49] x86emul: basic AVX512F testing Jan Beulich
2019-03-14 15:42     ` Andrew Cooper
2018-12-19 14:38   ` [PATCH v7 06/49] x86emul: support AVX512{F, BW, DQ} integer broadcast insns Jan Beulich
2019-03-14 16:38     ` Andrew Cooper
2019-03-14 17:15       ` Jan Beulich
2019-03-15 16:39         ` Andrew Cooper
2019-03-18  9:45           ` Jan Beulich
2018-12-19 14:38   ` [PATCH v7 07/49] x86emul: basic AVX512VL testing Jan Beulich
2019-03-14 16:39     ` Andrew Cooper
2018-12-19 14:41   ` [PATCH v7 08/49] x86emul: support AVX512{F, BW} zero- and sign-extending moves Jan Beulich
2018-12-19 14:41   ` [PATCH v7 09/49] x86emul: support AVX512{F, BW} down conversion moves Jan Beulich
2018-12-19 14:42   ` [PATCH v7 10/49] x86emul: support AVX512{F, BW} integer unpack insns Jan Beulich
2018-12-19 14:42   ` [PATCH v7 11/49] x86emul: support AVX512{F, BW, _VBMI} full permute insns Jan Beulich
2018-12-19 14:43   ` [PATCH v7 12/49] x86emul: support AVX512{F, BW} integer shuffle insns Jan Beulich
2018-12-19 14:43   ` [PATCH v7 13/49] x86emul: support AVX512{BW, DQ} mask move insns Jan Beulich
2018-12-19 14:44   ` [PATCH v7 14/49] x86emul: basic AVX512BW testing Jan Beulich
2018-12-19 14:46   ` [PATCH v7 15/49] x86emul: basic AVX512DQ testing Jan Beulich
2018-12-19 14:46   ` [PATCH v7 16/49] x86emul: support AVX512F move high/low insns Jan Beulich
2018-12-19 14:47   ` [PATCH v7 17/49] x86emul: support AVX512F move duplicate insns Jan Beulich
2018-12-19 14:47   ` [PATCH v7 18/49] x86emul: support AVX512{F, BW, _VBMI} permute insns Jan Beulich
2018-12-19 14:48   ` [PATCH v7 19/49] x86emul: support AVX512BW pack insns Jan Beulich
2018-12-19 14:48   ` [PATCH v7 20/49] x86emul: support AVX512F floating-point conversion insns Jan Beulich
2018-12-19 14:48   ` [PATCH v7 21/49] x86emul: support AVX512F legacy-equivalent packed int/FP " Jan Beulich
2018-12-19 14:51   ` [PATCH v7 22/49] x86emul: support AVX512F legacy-equivalent scalar " Jan Beulich
2018-12-19 14:51   ` [PATCH v7 23/49] x86emul: support AVX512DQ packed quad-int/FP " Jan Beulich
2018-12-19 14:52   ` [PATCH v7 24/49] x86emul: support AVX512{F, DQ} uint-to-FP " Jan Beulich
2018-12-19 14:52   ` [PATCH v7 25/49] x86emul: support AVX512{F, DQ} FP-to-uint " Jan Beulich
2018-12-19 14:53   ` [PATCH v7 26/49] x86emul: support remaining AVX512F legacy-equivalent insns Jan Beulich
2018-12-19 14:53   ` [PATCH v7 27/49] x86emul: support remaining AVX512BW " Jan Beulich
2018-12-19 14:54   ` [PATCH v7 28/49] x86emul: support AVX512{F, ER} reciprocal insns Jan Beulich
2018-12-19 14:55   ` [PATCH v7 29/49] x86emul: support AVX512F floating point manipulation insns Jan Beulich
2018-12-19 14:55   ` [PATCH v7 30/49] x86emul: support AVX512DQ " Jan Beulich
2018-12-19 14:56   ` [PATCH v7 31/49] x86emul: support AVX512{F, _VBMI2} compress/expand insns Jan Beulich
2018-12-19 14:56   ` [PATCH v7 32/49] x86emul: support remaining misc AVX512{F, BW} insns Jan Beulich
2018-12-19 14:57   ` [PATCH v7 33/49] x86emul: support AVX512F gather insns Jan Beulich
2018-12-19 14:57   ` [PATCH v7 34/49] x86emul: add high register S/G test cases Jan Beulich
2018-12-19 14:58   ` [PATCH v7 35/49] x86emul: support AVX512F scatter insns Jan Beulich
2018-12-19 14:59   ` [PATCH v7 36/49] x86emul: support AVX512PF insns Jan Beulich
2018-12-19 14:59   ` [PATCH v7 37/49] x86emul: support AVX512CD insns Jan Beulich
2018-12-19 15:00   ` [PATCH v7 38/49] x86emul: complete support of AVX512_VBMI insns Jan Beulich
2018-12-19 15:00   ` [PATCH v7 39/49] x86emul: support of AVX512* population count insns Jan Beulich
2018-12-19 15:01   ` [PATCH v7 40/49] x86emul: support of AVX512_IFMA insns Jan Beulich
2018-12-19 15:01   ` [PATCH v7 42/49] x86emul: support remaining AVX512_VBMI2 insns Jan Beulich
2018-12-19 15:02   ` [PATCH v7 42/49] x86emul: support AVX512_4FMAPS insns Jan Beulich
2018-12-19 15:05   ` [PATCH v7 43/49] x86emul: support AVX512_4VNNIW insns Jan Beulich
2018-12-19 15:06   ` [PATCH v7 44/49] x86emul: support AVX512_VNNI insns Jan Beulich
2018-12-19 15:06   ` [PATCH v7 45/49] x86emul: support VPCLMULQDQ insns Jan Beulich
2018-12-19 15:07   ` [PATCH v7 46/49] x86emul: support VAES insns Jan Beulich
2018-12-19 15:07   ` [PATCH v7 47/49] x86emul: support GFNI insns Jan Beulich
2018-12-19 15:07   ` [PATCH v7 48/49] x86emul: restore ordering within main switch statement Jan Beulich
2018-12-19 15:08   ` [PATCH v7 49/49] tools: re-sync CPUID leaf 7 tables Jan Beulich
2019-03-14 11:07     ` Andrew Cooper
2019-03-15 10:30 ` [PATCH v8 00/50] x86emul: remaining AVX512 support Jan Beulich
2019-03-15 10:36   ` [PATCH v8 01/50] x86emul: no need to set fault_suppression to false for VMOVNT* Jan Beulich
2019-03-15 16:52     ` Andrew Cooper
2019-03-15 10:36   ` [PATCH v8 02/50] x86emul: support AVX512{F, BW, DQ} extract insns Jan Beulich
2019-03-15 17:51     ` Andrew Cooper
2019-03-15 10:37   ` [PATCH v8 03/50] x86emul: support AVX512{F, BW, DQ} insert insns Jan Beulich
2019-03-15 10:38   ` [PATCH v8 04/50] x86emul: basic AVX512F testing Jan Beulich
2019-03-15 10:39   ` [PATCH v8 05/50] x86emul: support AVX512{F, BW, DQ} integer broadcast insns Jan Beulich
2019-03-15 10:39   ` [PATCH v8 06/50] x86emul: basic AVX512VL testing Jan Beulich
2019-03-15 10:40   ` [PATCH v8 07/50] x86emul: support AVX512{F, BW} zero- and sign-extending moves Jan Beulich
2019-03-15 18:02     ` Andrew Cooper
2019-03-15 10:40   ` [PATCH v8 08/50] x86emul: support AVX512{F, BW} down conversion moves Jan Beulich
2019-03-15 18:10     ` Andrew Cooper
2019-03-15 10:41   ` [PATCH v8 09/50] x86emul: support AVX512{F, BW} integer unpack insns Jan Beulich
2019-03-15 18:21     ` Andrew Cooper
2019-03-18  9:55       ` Jan Beulich
2019-05-20 12:11         ` Andrew Cooper
2019-05-20 12:11           ` [Xen-devel] " Andrew Cooper
2019-03-15 10:41   ` [PATCH v8 10/50] x86emul: support AVX512{F, BW, _VBMI} full permute insns Jan Beulich
2019-05-17 16:50     ` Andrew Cooper
2019-05-17 16:50       ` [Xen-devel] " Andrew Cooper
2019-05-20  6:55       ` Jan Beulich
2019-05-20  6:55         ` [Xen-devel] " Jan Beulich
2019-05-20 12:10         ` Andrew Cooper
2019-05-20 12:10           ` [Xen-devel] " Andrew Cooper
2019-03-15 10:43   ` [PATCH v8 11/50] x86emul: support AVX512{F, BW} integer shuffle insns Jan Beulich
2019-05-17 17:01     ` Andrew Cooper
2019-05-17 17:01       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:43   ` [PATCH v8 12/50] x86emul: support AVX512{BW, DQ} mask move insns Jan Beulich
2019-05-17 17:02     ` Andrew Cooper
2019-05-17 17:02       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:43   ` [PATCH v8 13/50] x86emul: basic AVX512BW testing Jan Beulich
2019-05-17 17:03     ` Andrew Cooper
2019-05-17 17:03       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:44   ` [PATCH v8 14/50] x86emul: basic AVX512DQ testing Jan Beulich
2019-05-17 17:03     ` Andrew Cooper
2019-05-17 17:03       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:44   ` [PATCH v8 15/50] x86emul: support AVX512F move high/low insns Jan Beulich
2019-05-21 10:59     ` Andrew Cooper
2019-05-21 10:59       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:45   ` [PATCH v8 16/50] x86emul: support AVX512F move duplicate insns Jan Beulich
2019-05-21 11:09     ` Andrew Cooper
2019-05-21 11:09       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:46   ` [PATCH v8 17/50] x86emul: support AVX512{F, BW, _VBMI} permute insns Jan Beulich
2019-05-21 11:24     ` Andrew Cooper
2019-05-21 11:24       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:46   ` [PATCH v8 18/50] x86emul: support AVX512BW pack insns Jan Beulich
2019-05-21 11:26     ` Andrew Cooper
2019-05-21 11:26       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:47   ` [PATCH v8 19/50] x86emul: support AVX512F floating-point conversion insns Jan Beulich
2019-05-21 11:33     ` Andrew Cooper
2019-05-21 11:33       ` [Xen-devel] " Andrew Cooper
2019-05-21 15:46       ` Jan Beulich
2019-05-21 15:46         ` [Xen-devel] " Jan Beulich
2019-05-23 16:08         ` Andrew Cooper
2019-05-23 16:08           ` [Xen-devel] " Andrew Cooper
2019-03-15 10:47   ` [PATCH v8 20/50] x86emul: support AVX512F legacy-equivalent packed int/FP " Jan Beulich
2019-05-21 11:37     ` Andrew Cooper
2019-05-21 11:37       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:52   ` [PATCH v8 21/50] x86emul: support AVX512F legacy-equivalent scalar " Jan Beulich
2019-05-21 11:44     ` Andrew Cooper
2019-05-21 11:44       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:52   ` [PATCH v8 22/50] x86emul: support AVX512DQ packed quad-int/FP " Jan Beulich
2019-05-21 11:53     ` Andrew Cooper
2019-05-21 11:53       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:53   ` [PATCH v8 23/50] x86emul: support AVX512{F, DQ} uint-to-FP " Jan Beulich
2019-05-21 11:58     ` Andrew Cooper
2019-05-21 11:58       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:54   ` [PATCH v8 24/50] x86emul: support AVX512{F, DQ} FP-to-uint " Jan Beulich
2019-05-21 12:09     ` Andrew Cooper
2019-05-21 12:09       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:54   ` [PATCH v8 25/50] x86emul: support remaining AVX512F legacy-equivalent insns Jan Beulich
2019-05-21 13:06     ` Andrew Cooper
2019-05-21 13:06       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:54   ` [PATCH v8 26/50] x86emul: support remaining AVX512BW " Jan Beulich
2019-05-21 13:08     ` Andrew Cooper
2019-05-21 13:08       ` [Xen-devel] " Andrew Cooper
2019-05-21 13:34       ` Jan Beulich
2019-05-21 13:34         ` [Xen-devel] " Jan Beulich
2019-05-23 16:10     ` Andrew Cooper
2019-05-23 16:10       ` [Xen-devel] " Andrew Cooper
2019-03-15 10:55   ` [PATCH v8 27/50] x86emul: support AVX512{F, ER} reciprocal insns Jan Beulich
2019-05-23 16:15     ` Andrew Cooper
2019-05-23 16:15       ` [Xen-devel] " Andrew Cooper
2019-05-24  6:43       ` Jan Beulich
2019-05-24  6:43         ` [Xen-devel] " Jan Beulich
2019-05-24 20:48         ` Andrew Cooper
2019-05-24 20:48           ` [Xen-devel] " Andrew Cooper
2019-05-27  8:02           ` Jan Beulich
2019-05-27  8:02             ` [Xen-devel] " Jan Beulich
2019-05-29 10:00             ` Andrew Cooper
2019-05-29 10:00               ` [Xen-devel] " Andrew Cooper
2019-03-15 10:56   ` [PATCH v8 28/50] x86emul: support AVX512F floating point manipulation insns Jan Beulich
2019-05-29 12:51     ` Andrew Cooper
2019-05-29 12:51       ` [Xen-devel] " Andrew Cooper
2019-05-29 13:15       ` Jan Beulich
2019-05-29 13:15         ` [Xen-devel] " Jan Beulich
2019-06-10 14:01         ` Andrew Cooper
2019-06-10 14:03     ` Andrew Cooper
2019-03-15 10:56   ` [PATCH v8 29/50] x86emul: support AVX512DQ " Jan Beulich
2019-06-10 14:06     ` [Xen-devel] " Andrew Cooper
2019-03-15 10:56   ` [PATCH v8 30/50] x86emul: support AVX512{F, _VBMI2} compress/expand insns Jan Beulich
2019-06-10 14:51     ` [Xen-devel] " Andrew Cooper
2019-06-11 10:20       ` Jan Beulich
2019-06-18 16:24         ` Andrew Cooper
2019-06-19  6:38           ` Jan Beulich
2019-03-15 10:58   ` [PATCH v8 31/50] x86emul: support remaining misc AVX512{F, BW} insns Jan Beulich
2019-06-18 16:42     ` [Xen-devel] " Andrew Cooper
2019-06-19  6:44       ` Jan Beulich
2019-03-15 10:58   ` [PATCH v8 32/50] x86emul: support AVX512F gather insns Jan Beulich
2019-06-19 12:05     ` [Xen-devel] " Andrew Cooper
2019-06-19 12:43       ` Jan Beulich
2019-03-15 10:59   ` [PATCH v8 33/50] x86emul: add high register S/G test cases Jan Beulich
2019-06-19 12:07     ` [Xen-devel] " Andrew Cooper
2019-03-15 10:59   ` [PATCH v8 34/50] x86emul: support AVX512F scatter insns Jan Beulich
2019-03-15 11:00   ` [PATCH v8 35/50] x86emul: support AVX512PF insns Jan Beulich
2019-03-15 11:00   ` [PATCH v8 36/50] x86emul: support AVX512CD insns Jan Beulich
2019-06-19 12:13     ` [Xen-devel] " Andrew Cooper
2019-03-15 11:01   ` [PATCH v8 37/50] x86emul: complete support of AVX512_VBMI insns Jan Beulich
2019-06-19 12:16     ` [Xen-devel] " Andrew Cooper
2019-03-15 11:01   ` [PATCH v8 38/50] x86emul: support of AVX512* population count insns Jan Beulich
2019-06-19 12:22     ` [Xen-devel] " Andrew Cooper
2019-06-19 12:48       ` Jan Beulich
2019-03-15 11:02   ` [PATCH v8 39/50] x86emul: support of AVX512_IFMA insns Jan Beulich
2019-06-19 12:23     ` [Xen-devel] " Andrew Cooper
2019-03-15 11:02   ` [PATCH v8 40/50] x86emul: support remaining AVX512_VBMI2 insns Jan Beulich
2019-06-19 12:25     ` [Xen-devel] " Andrew Cooper
2019-03-15 11:04   ` [PATCH v8 41/50] x86emul: support AVX512_4FMAPS insns Jan Beulich
2019-06-19 14:58     ` [Xen-devel] " Andrew Cooper
2019-06-21  6:50       ` Jan Beulich
2019-03-15 11:04   ` [PATCH v8 42/50] x86emul: support AVX512_4VNNIW insns Jan Beulich
2019-06-19 14:58     ` [Xen-devel] " Andrew Cooper
2019-03-15 11:04   ` [PATCH v8 43/50] x86emul: support AVX512_VNNI insns Jan Beulich
2019-06-19 15:01     ` [Xen-devel] " Andrew Cooper
2019-06-21  6:55       ` Jan Beulich
2019-03-15 11:05   ` [PATCH v8 44/50] x86emul: support VPCLMULQDQ insns Jan Beulich
2019-06-21 12:52     ` [Xen-devel] " Andrew Cooper
2019-06-21 13:44       ` Jan Beulich
2019-03-15 11:06   ` [PATCH v8 45/50] x86emul: support VAES insns Jan Beulich
2019-06-21 12:57     ` [Xen-devel] " Andrew Cooper
2019-03-15 11:06   ` [PATCH v8 46/50] x86emul: support GFNI insns Jan Beulich
2019-06-21 13:19     ` [Xen-devel] " Andrew Cooper
2019-06-21 13:33       ` Andrew Cooper
2019-06-21 14:00       ` Jan Beulich
2019-06-21 14:20         ` Andrew Cooper
2019-06-21 15:02           ` Jan Beulich
2019-06-25  6:48           ` Jan Beulich
2019-03-15 11:07   ` [PATCH v8 47/50] x86emul: restore ordering within main switch statement Jan Beulich
2019-06-21 13:20     ` [Xen-devel] " Andrew Cooper
2019-03-15 11:07   ` [PATCH v8 48/50] x86emul: add an AES/VAES test case to the harness Jan Beulich
2019-06-21 13:36     ` [Xen-devel] " Andrew Cooper
2019-06-21 14:04       ` Jan Beulich
2019-06-21 14:20         ` Andrew Cooper
2019-03-15 11:08   ` [PATCH v8 49/50] x86emul: add a SHA " Jan Beulich
2019-06-21 13:51     ` [Xen-devel] " Andrew Cooper
2019-06-21 14:10       ` Jan Beulich
2019-06-21 14:23         ` Andrew Cooper
2019-03-15 11:08   ` [PATCH v8 50/50] x86emul: add a PCLMUL/VPCLMUL " Jan Beulich
2019-06-21 13:58     ` [Xen-devel] " Andrew Cooper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5B86AC8D02000078001E31F3@prv1-mh.provo.novell.com \
    --to=jbeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.