]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
target/i386: fix avx2 instructions vzeroall and vpermdq
authorXinyu Li <lixinyu20s@ict.ac.cn>
Wed, 10 May 2023 14:52:22 +0000 (22:52 +0800)
committerMichael Tokarev <mjt@tls.msk.ru>
Thu, 18 May 2023 18:10:00 +0000 (21:10 +0300)
vzeroall: xmm_regs should be used instead of xmm_t0
vpermdq: bit 3 and 7 of imm should be considered

Signed-off-by: Xinyu Li <lixinyu20s@ict.ac.cn>
Message-Id: <20230510145222.586487-1-lixinyu20s@ict.ac.cn>
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
(cherry picked from commit 056d649007bc9fdae9f1d576e77c1316e9a34468)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
target/i386/ops_sse.h
target/i386/tcg/emit.c.inc

index 3cbc36a59d1a0eadfe70233890fa8bc7f08a9667..44c1e70093fb1585ad4b36534846a8c2302c1129 100644 (file)
@@ -2493,6 +2493,14 @@ void helper_vpermdq_ymm(Reg *d, Reg *v, Reg *s, uint32_t order)
     d->Q(1) = r1;
     d->Q(2) = r2;
     d->Q(3) = r3;
+    if (order & 0x8) {
+        d->Q(0) = 0;
+        d->Q(1) = 0;
+    }
+    if (order & 0x80) {
+        d->Q(2) = 0;
+        d->Q(3) = 0;
+    }
 }
 
 void helper_vpermq_ymm(Reg *d, Reg *s, uint32_t order)
index 7296f3952c41d74864bfa6b6b7968f41d70c0c87..5d31fce65dc9aeb0c592b86fa022f1677013c60d 100644 (file)
@@ -2288,7 +2288,7 @@ static void gen_VZEROALL(DisasContext *s, CPUX86State *env, X86DecodedInsn *deco
 {
     TCGv_ptr ptr = tcg_temp_new_ptr();
 
-    tcg_gen_addi_ptr(ptr, cpu_env, offsetof(CPUX86State, xmm_t0));
+    tcg_gen_addi_ptr(ptr, cpu_env, offsetof(CPUX86State, xmm_regs));
     gen_helper_memset(ptr, ptr, tcg_constant_i32(0),
                       tcg_constant_ptr(CPU_NB_REGS * sizeof(ZMMReg)));
     tcg_temp_free_ptr(ptr);