qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Ricky Zhou <ricky@rzhou.org>
Subject: [PULL 07/68] target/i386: Fix exception classes for SSE/AVX instructions.
Date: Wed, 17 May 2023 19:44:19 +0200	[thread overview]
Message-ID: <20230517174520.887405-8-pbonzini@redhat.com> (raw)
In-Reply-To: <20230517174520.887405-1-pbonzini@redhat.com>

From: Ricky Zhou <ricky@rzhou.org>

Fix the exception classes for some SSE/AVX instructions to match what is
documented in the Intel manual.

These changes are expected to have no functional effect on the behavior
that qemu implements (primarily >= 16-byte memory alignment checks). For
instance, since qemu does not implement the AC flag, there is no
difference in behavior between Exception Classes 4 and 5 for
instructions where the SSE version only takes <16 byte memory operands.
Message-Id: <20230501111428.95998-2-ricky@rzhou.org>

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 target/i386/tcg/decode-new.c.inc | 46 ++++++++++++++++----------------
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc
index e0f25e7fd8ed..1a789201f740 100644
--- a/target/i386/tcg/decode-new.c.inc
+++ b/target/i386/tcg/decode-new.c.inc
@@ -237,7 +237,7 @@ static void decode_group14(DisasContext *s, CPUX86State *env, X86OpEntry *entry,
 static void decode_0F6F(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b)
 {
     static const X86OpEntry opcodes_0F6F[4] = {
-        X86_OP_ENTRY3(MOVDQ,       P,q, None,None, Q,q, vex1 mmx),  /* movq */
+        X86_OP_ENTRY3(MOVDQ,       P,q, None,None, Q,q, vex5 mmx),  /* movq */
         X86_OP_ENTRY3(MOVDQ,       V,x, None,None, W,x, vex1),      /* movdqa */
         X86_OP_ENTRY3(MOVDQ,       V,x, None,None, W,x, vex4_unal), /* movdqu */
         {},
@@ -306,7 +306,7 @@ static void decode_0F7E(DisasContext *s, CPUX86State *env, X86OpEntry *entry, ui
 static void decode_0F7F(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b)
 {
     static const X86OpEntry opcodes_0F7F[4] = {
-        X86_OP_ENTRY3(MOVDQ,       W,x, None,None, V,x, vex1 mmx), /* movq */
+        X86_OP_ENTRY3(MOVDQ,       W,x, None,None, V,x, vex5 mmx), /* movq */
         X86_OP_ENTRY3(MOVDQ,       W,x, None,None, V,x, vex1), /* movdqa */
         X86_OP_ENTRY3(MOVDQ,       W,x, None,None, V,x, vex4_unal), /* movdqu */
         {},
@@ -639,15 +639,15 @@ static void decode_0F10(DisasContext *s, CPUX86State *env, X86OpEntry *entry, ui
     static const X86OpEntry opcodes_0F10_reg[4] = {
         X86_OP_ENTRY3(MOVDQ,   V,x,  None,None, W,x, vex4_unal), /* MOVUPS */
         X86_OP_ENTRY3(MOVDQ,   V,x,  None,None, W,x, vex4_unal), /* MOVUPD */
-        X86_OP_ENTRY3(VMOVSS,  V,x,  H,x,       W,x, vex4),
-        X86_OP_ENTRY3(VMOVLPx, V,x,  H,x,       W,x, vex4), /* MOVSD */
+        X86_OP_ENTRY3(VMOVSS,  V,x,  H,x,       W,x, vex5),
+        X86_OP_ENTRY3(VMOVLPx, V,x,  H,x,       W,x, vex5), /* MOVSD */
     };
 
     static const X86OpEntry opcodes_0F10_mem[4] = {
         X86_OP_ENTRY3(MOVDQ,      V,x,  None,None, W,x,  vex4_unal), /* MOVUPS */
         X86_OP_ENTRY3(MOVDQ,      V,x,  None,None, W,x,  vex4_unal), /* MOVUPD */
-        X86_OP_ENTRY3(VMOVSS_ld,  V,x,  H,x,       M,ss, vex4),
-        X86_OP_ENTRY3(VMOVSD_ld,  V,x,  H,x,       M,sd, vex4),
+        X86_OP_ENTRY3(VMOVSS_ld,  V,x,  H,x,       M,ss, vex5),
+        X86_OP_ENTRY3(VMOVSD_ld,  V,x,  H,x,       M,sd, vex5),
     };
 
     if ((get_modrm(s, env) >> 6) == 3) {
@@ -662,15 +662,15 @@ static void decode_0F11(DisasContext *s, CPUX86State *env, X86OpEntry *entry, ui
     static const X86OpEntry opcodes_0F11_reg[4] = {
         X86_OP_ENTRY3(MOVDQ,   W,x,  None,None, V,x, vex4), /* MOVUPS */
         X86_OP_ENTRY3(MOVDQ,   W,x,  None,None, V,x, vex4), /* MOVUPD */
-        X86_OP_ENTRY3(VMOVSS,  W,x,  H,x,       V,x, vex4),
-        X86_OP_ENTRY3(VMOVLPx, W,x,  H,x,       V,q, vex4), /* MOVSD */
+        X86_OP_ENTRY3(VMOVSS,  W,x,  H,x,       V,x, vex5),
+        X86_OP_ENTRY3(VMOVLPx, W,x,  H,x,       V,q, vex5), /* MOVSD */
     };
 
     static const X86OpEntry opcodes_0F11_mem[4] = {
         X86_OP_ENTRY3(MOVDQ,      W,x,  None,None, V,x, vex4), /* MOVUPS */
         X86_OP_ENTRY3(MOVDQ,      W,x,  None,None, V,x, vex4), /* MOVUPD */
-        X86_OP_ENTRY3(VMOVSS_st,  M,ss, None,None, V,x, vex4),
-        X86_OP_ENTRY3(VMOVLPx_st, M,sd, None,None, V,x, vex4), /* MOVSD */
+        X86_OP_ENTRY3(VMOVSS_st,  M,ss, None,None, V,x, vex5),
+        X86_OP_ENTRY3(VMOVLPx_st, M,sd, None,None, V,x, vex5), /* MOVSD */
     };
 
     if ((get_modrm(s, env) >> 6) == 3) {
@@ -687,16 +687,16 @@ static void decode_0F12(DisasContext *s, CPUX86State *env, X86OpEntry *entry, ui
          * Use dq for operand for compatibility with gen_MOVSD and
          * to allow VEX128 only.
          */
-        X86_OP_ENTRY3(VMOVLPx_ld, V,dq, H,dq,      M,q, vex4), /* MOVLPS */
-        X86_OP_ENTRY3(VMOVLPx_ld, V,dq, H,dq,      M,q, vex4), /* MOVLPD */
+        X86_OP_ENTRY3(VMOVLPx_ld, V,dq, H,dq,      M,q, vex5), /* MOVLPS */
+        X86_OP_ENTRY3(VMOVLPx_ld, V,dq, H,dq,      M,q, vex5), /* MOVLPD */
         X86_OP_ENTRY3(VMOVSLDUP,  V,x,  None,None, W,x, vex4 cpuid(SSE3)),
-        X86_OP_ENTRY3(VMOVDDUP,   V,x,  None,None, WM,q, vex4 cpuid(SSE3)), /* qq if VEX.256 */
+        X86_OP_ENTRY3(VMOVDDUP,   V,x,  None,None, WM,q, vex5 cpuid(SSE3)), /* qq if VEX.256 */
     };
     static const X86OpEntry opcodes_0F12_reg[4] = {
-        X86_OP_ENTRY3(VMOVHLPS,  V,dq, H,dq,       U,dq, vex4),
-        X86_OP_ENTRY3(VMOVLPx,   W,x,  H,x,        U,q,  vex4), /* MOVLPD */
+        X86_OP_ENTRY3(VMOVHLPS,  V,dq, H,dq,       U,dq, vex7),
+        X86_OP_ENTRY3(VMOVLPx,   W,x,  H,x,        U,q,  vex5), /* MOVLPD */
         X86_OP_ENTRY3(VMOVSLDUP, V,x,  None,None,  U,x,  vex4 cpuid(SSE3)),
-        X86_OP_ENTRY3(VMOVDDUP,  V,x,  None,None,  U,x,  vex4 cpuid(SSE3)),
+        X86_OP_ENTRY3(VMOVDDUP,  V,x,  None,None,  U,x,  vex5 cpuid(SSE3)),
     };
 
     if ((get_modrm(s, env) >> 6) == 3) {
@@ -716,15 +716,15 @@ static void decode_0F16(DisasContext *s, CPUX86State *env, X86OpEntry *entry, ui
          * Operand 1 technically only reads the low 64 bits, but uses dq so that
          * it is easier to check for op0 == op1 in an endianness-neutral manner.
          */
-        X86_OP_ENTRY3(VMOVHPx_ld, V,dq, H,dq,      M,q, vex4), /* MOVHPS */
-        X86_OP_ENTRY3(VMOVHPx_ld, V,dq, H,dq,      M,q, vex4), /* MOVHPD */
+        X86_OP_ENTRY3(VMOVHPx_ld, V,dq, H,dq,      M,q, vex5), /* MOVHPS */
+        X86_OP_ENTRY3(VMOVHPx_ld, V,dq, H,dq,      M,q, vex5), /* MOVHPD */
         X86_OP_ENTRY3(VMOVSHDUP,  V,x,  None,None, W,x, vex4 cpuid(SSE3)),
         {},
     };
     static const X86OpEntry opcodes_0F16_reg[4] = {
         /* Same as above, operand 1 could be Hq if it wasn't for big-endian.  */
-        X86_OP_ENTRY3(VMOVLHPS,  V,dq, H,dq,      U,q, vex4),
-        X86_OP_ENTRY3(VMOVHPx,   V,x,  H,x,       U,x, vex4), /* MOVHPD */
+        X86_OP_ENTRY3(VMOVLHPS,  V,dq, H,dq,      U,q, vex7),
+        X86_OP_ENTRY3(VMOVHPx,   V,x,  H,x,       U,x, vex5), /* MOVHPD */
         X86_OP_ENTRY3(VMOVSHDUP, V,x,  None,None, U,x, vex4 cpuid(SSE3)),
         {},
     };
@@ -824,7 +824,7 @@ static void decode_0FE6(DisasContext *s, CPUX86State *env, X86OpEntry *entry, ui
     static const X86OpEntry opcodes_0FE6[4] = {
         {},
         X86_OP_ENTRY2(VCVTTPD2DQ,  V,x, W,x,      vex2),
-        X86_OP_ENTRY2(VCVTDQ2PD,   V,x, W,x,      vex2),
+        X86_OP_ENTRY2(VCVTDQ2PD,   V,x, W,x,      vex5),
         X86_OP_ENTRY2(VCVTPD2DQ,   V,x, W,x,      vex2),
     };
     *entry = *decode_by_prefix(s, opcodes_0FE6);
@@ -842,12 +842,12 @@ static const X86OpEntry opcodes_0F[256] = {
     [0x10] = X86_OP_GROUP0(0F10),
     [0x11] = X86_OP_GROUP0(0F11),
     [0x12] = X86_OP_GROUP0(0F12),
-    [0x13] = X86_OP_ENTRY3(VMOVLPx_st,  M,q, None,None, V,q,  vex4 p_00_66),
+    [0x13] = X86_OP_ENTRY3(VMOVLPx_st,  M,q, None,None, V,q,  vex5 p_00_66),
     [0x14] = X86_OP_ENTRY3(VUNPCKLPx,   V,x, H,x, W,x,        vex4 p_00_66),
     [0x15] = X86_OP_ENTRY3(VUNPCKHPx,   V,x, H,x, W,x,        vex4 p_00_66),
     [0x16] = X86_OP_GROUP0(0F16),
     /* Incorrectly listed as Mq,Vq in the manual */
-    [0x17] = X86_OP_ENTRY3(VMOVHPx_st,  M,q, None,None, V,dq, vex4 p_00_66),
+    [0x17] = X86_OP_ENTRY3(VMOVHPx_st,  M,q, None,None, V,dq, vex5 p_00_66),
 
     [0x50] = X86_OP_ENTRY3(MOVMSK,     G,y, None,None, U,x, vex7 p_00_66),
     [0x51] = X86_OP_GROUP3(sse_unary,  V,x, H,x, W,x, vex2_rep3 p_00_66_f3_f2), /* sqrtps */
-- 
2.40.1



  parent reply	other threads:[~2023-05-17 17:46 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-17 17:44 [PULL 00/68] i386, build system, KVM changes for 2023-05-18 Paolo Bonzini
2023-05-17 17:44 ` [PULL 01/68] target/i386: add support for FLUSH_L1D feature Paolo Bonzini
2023-05-17 17:44 ` [PULL 02/68] target/i386: add support for FB_CLEAR feature Paolo Bonzini
2023-05-17 17:44 ` [PULL 03/68] target/i386: fix operand size for VCOMI/VUCOMI instructions Paolo Bonzini
2023-05-17 17:44 ` [PULL 04/68] target/i386: fix avx2 instructions vzeroall and vpermdq Paolo Bonzini
2023-05-17 17:44 ` [PULL 05/68] tests/tcg/i386: correct mask for VPERM2F128/VPERM2I128 Paolo Bonzini
2023-05-17 17:44 ` [PULL 06/68] target/i386: Fix and add some comments next to SSE/AVX instructions Paolo Bonzini
2023-05-17 17:44 ` Paolo Bonzini [this message]
2023-05-17 17:44 ` [PULL 08/68] target/i386: Fix exception classes for MOVNTPS/MOVNTPD Paolo Bonzini
2023-05-17 17:44 ` [PULL 09/68] meson: Pass -j option to sphinx Paolo Bonzini
2023-05-17 17:44 ` [PULL 10/68] migration: Add last stage indicator to global dirty log Paolo Bonzini
2023-05-17 17:44 ` [PULL 11/68] kvm: Synchronize the backup bitmap in the last stage Paolo Bonzini
2023-05-17 17:44 ` [PULL 12/68] kvm: Add helper kvm_dirty_ring_init() Paolo Bonzini
2023-05-17 17:44 ` [PULL 13/68] kvm: Enable dirty ring for arm64 Paolo Bonzini
2023-05-17 17:44 ` [PULL 14/68] tcg: round-robin: do not use mb_read for rr_current_cpu Paolo Bonzini
2023-05-17 17:44 ` [PULL 15/68] coverity: the definitive COMPONENTS.md update Paolo Bonzini
2023-05-17 17:44 ` [PULL 16/68] scsi-generic: fix buffer overflow on block limits inquiry Paolo Bonzini
2023-05-17 17:44 ` [PULL 17/68] make: clean after distclean deletes source files Paolo Bonzini
2023-05-17 17:44 ` [PULL 18/68] python: shut up "pip install" during "make check-minreqs" Paolo Bonzini
2023-05-17 17:44 ` [PULL 19/68] python: update pylint configuration Paolo Bonzini
2023-05-17 17:44 ` [PULL 20/68] python: add mkvenv.py Paolo Bonzini
2023-05-17 17:44 ` [PULL 21/68] mkvenv: add better error message for broken or missing ensurepip Paolo Bonzini
2023-05-17 17:44 ` [PULL 22/68] mkvenv: add nested venv workaround Paolo Bonzini
2023-05-17 17:44 ` [PULL 23/68] mkvenv: add ensure subcommand Paolo Bonzini
2023-05-17 17:44 ` [PULL 24/68] mkvenv: add --diagnose option to explain "ensure" failures Paolo Bonzini
2023-05-17 17:44 ` [PULL 25/68] mkvenv: add console script entry point generation Paolo Bonzini
2023-05-17 17:44 ` [PULL 26/68] mkvenv: use pip's vendored distlib as a fallback Paolo Bonzini
2023-05-17 17:44 ` [PULL 27/68] mkvenv: avoid ensurepip if pip is installed Paolo Bonzini
2023-05-17 17:44 ` [PULL 28/68] mkvenv: work around broken pip installations on Debian 10 Paolo Bonzini
2023-05-17 17:44 ` [PULL 29/68] tests/docker: add python3-venv dependency Paolo Bonzini
2023-05-17 17:44 ` [PULL 30/68] tests/vm: Configure netbsd to use Python 3.10 Paolo Bonzini
2023-05-17 17:44 ` [PULL 31/68] tests/vm: add py310-expat to NetBSD Paolo Bonzini
2023-05-17 17:44 ` [PULL 32/68] python: add vendor.py utility Paolo Bonzini
2023-05-17 17:44 ` [PULL 33/68] configure: create a python venv unconditionally Paolo Bonzini
2023-05-17 17:44 ` [PULL 34/68] python/wheels: add vendored meson package Paolo Bonzini
2023-05-17 17:44 ` [PULL 35/68] configure: use 'mkvenv ensure meson' to bootstrap meson Paolo Bonzini
2023-05-17 17:44 ` [PULL 36/68] qemu.git: drop meson git submodule Paolo Bonzini
2023-05-17 17:44 ` [PULL 37/68] tests: Use configure-provided pyvenv for tests Paolo Bonzini
2023-05-17 17:44 ` [PULL 38/68] configure: move --enable-docs and --disable-docs back to configure Paolo Bonzini
2023-05-17 17:44 ` [PULL 39/68] configure: bootstrap sphinx with mkvenv Paolo Bonzini
2023-05-17 17:44 ` [PULL 40/68] configure: add --enable-pypi and --disable-pypi Paolo Bonzini
2023-05-17 17:44 ` [PULL 41/68] Python: Drop support for Python 3.6 Paolo Bonzini
2023-05-17 17:44 ` [PULL 42/68] configure: Add courtesy hint to Python version failure message Paolo Bonzini
2023-05-17 17:44 ` [PULL 43/68] mkvenv: mark command as required Paolo Bonzini
2023-05-17 17:44 ` [PULL 44/68] python: bump some of the dependencies Paolo Bonzini
2023-05-17 17:44 ` [PULL 45/68] meson: regenerate meson-buildoptions.sh Paolo Bonzini
2023-05-17 17:44 ` [PULL 46/68] meson: require 0.63.0 Paolo Bonzini
2023-05-17 17:44 ` [PULL 47/68] meson: use prefer_static option Paolo Bonzini
2023-05-17 17:45 ` [PULL 48/68] meson: remove static_kwargs Paolo Bonzini
2023-05-17 17:45 ` [PULL 49/68] meson: add more version numbers to the summary Paolo Bonzini
2023-05-17 17:45 ` [PULL 50/68] meson: drop unnecessary declare_dependency() Paolo Bonzini
2023-05-17 17:45 ` [PULL 51/68] build: move glib detection and workarounds to meson Paolo Bonzini
2023-05-17 17:45 ` [PULL 52/68] configure: remove pkg-config functions Paolo Bonzini
2023-05-17 17:45 ` [PULL 53/68] configure, meson: move --enable-modules to Meson Paolo Bonzini
2023-05-17 17:45 ` [PULL 54/68] meson: prepare move of QEMU_CFLAGS to meson Paolo Bonzini
2023-05-17 17:45 ` [PULL 55/68] build: move sanitizer tests " Paolo Bonzini
2023-05-17 17:45 ` [PULL 56/68] build: move SafeStack " Paolo Bonzini
2023-05-17 17:45 ` [PULL 57/68] build: move coroutine backend selection " Paolo Bonzini
2023-05-17 17:45 ` [PULL 58/68] build: move stack protector flag " Paolo Bonzini
2023-05-17 17:45 ` [PULL 59/68] build: move warning " Paolo Bonzini
2023-05-17 17:45 ` [PULL 60/68] build: move remaining compiler flag tests " Paolo Bonzini
2023-05-17 17:45 ` [PULL 61/68] build: move compiler version check " Paolo Bonzini
2023-05-17 17:45 ` [PULL 62/68] build: move --disable-debug-info " Paolo Bonzini
2023-05-17 17:45 ` [PULL 63/68] configure: remove compiler sanity check Paolo Bonzini
2023-05-17 18:48   ` Peter Maydell
2023-05-18  4:57     ` Paolo Bonzini
2023-05-17 17:45 ` [PULL 64/68] configure: do not rerun the tests with -Werror Paolo Bonzini
2023-05-17 17:45 ` [PULL 65/68] configure: remove unnecessary mkdir Paolo Bonzini
2023-05-17 17:45 ` [PULL 66/68] configure: reorder option parsing code Paolo Bonzini
2023-05-17 17:45 ` [PULL 67/68] configure: remove unnecessary check Paolo Bonzini
2023-05-17 17:45 ` [PULL 68/68] docs/devel: update build system docs Paolo Bonzini
2023-05-17 20:31 ` [PULL 00/68] i386, build system, KVM changes for 2023-05-18 Richard Henderson
2023-05-18  5:09   ` Paolo Bonzini
2023-05-18  9:22   ` Peter Maydell
2023-05-18  9:52     ` Paolo Bonzini
2023-05-18 11:35     ` Paolo Bonzini
2023-05-18 13:04     ` Richard Henderson
2023-05-19  3:06 ` Yang Zhong
2023-05-19  8:29   ` Paolo Bonzini
2023-05-22  9:11     ` Yang Zhong

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=20230517174520.887405-8-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=ricky@rzhou.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).