]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Bug 397089 - Incorrect decoding of three-register vmovss/vmovsd opcode 11h.
authorJulian Seward <jseward@acm.org>
Fri, 14 Sep 2018 11:19:34 +0000 (13:19 +0200)
committerJulian Seward <jseward@acm.org>
Fri, 14 Sep 2018 11:19:34 +0000 (13:19 +0200)
This fixes the incorrect 11h decoding of three-register vmovss/vmovsd.
Patch from Tomas Trnka (tomastrnka@gmx.com).

VEX/priv/guest_amd64_toIR.c

index f4620306ca09d276b4f5c1a6e6ce3b8ff591e292..2cabf80c9fe9244b56b88d7f3ef395b6a26b2f68 100644 (file)
@@ -24234,12 +24234,12 @@ Long dis_ESC_0F__VEX (
          UInt  rV    = getVexNvvvv(pfx);
          delta++;
          DIP("vmovsd %s,%s,%s\n",
-             nameXMMReg(rE), nameXMMReg(rV), nameXMMReg(rG));
+             nameXMMReg(rG), nameXMMReg(rV), nameXMMReg(rE));
          IRTemp res = newTemp(Ity_V128);
          assign(res, binop(Iop_64HLtoV128,
                            getXMMRegLane64(rV, 1),
-                           getXMMRegLane64(rE, 0)));
-         putYMMRegLoAndZU(rG, mkexpr(res));
+                           getXMMRegLane64(rG, 0)));
+         putYMMRegLoAndZU(rE, mkexpr(res));
          *uses_vvvv = True;
          goto decode_success;
       }
@@ -24264,14 +24264,14 @@ Long dis_ESC_0F__VEX (
          UInt  rV    = getVexNvvvv(pfx);
          delta++;
          DIP("vmovss %s,%s,%s\n",
-             nameXMMReg(rE), nameXMMReg(rV), nameXMMReg(rG));
+             nameXMMReg(rG), nameXMMReg(rV), nameXMMReg(rE));
          IRTemp res = newTemp(Ity_V128);
          assign( res, binop( Iop_64HLtoV128,
                              getXMMRegLane64(rV, 1),
                              binop(Iop_32HLto64,
                                    getXMMRegLane32(rV, 1),
-                                   getXMMRegLane32(rE, 0)) ) );
-         putYMMRegLoAndZU(rG, mkexpr(res));
+                                   getXMMRegLane32(rG, 0)) ) );
+         putYMMRegLoAndZU(rE, mkexpr(res));
          *uses_vvvv = True;
          goto decode_success;
       }