]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
When generating IR for movsd mem->reg, don't first write the entire
authorJulian Seward <jseward@acm.org>
Wed, 6 Apr 2005 01:11:08 +0000 (01:11 +0000)
committerJulian Seward <jseward@acm.org>
Wed, 6 Apr 2005 01:11:08 +0000 (01:11 +0000)
guest reg with zeroes and then overwrite the lower half.  This forces
the back end to generate code which creates huge write-after-write
stalls in the memory system of P4s due to the different sized writes.
This apparently small change reduces the run-time of one
sse2-intensive floating point program from 145 seconds to 90 seconds
(--tool=none).

git-svn-id: svn://svn.valgrind.org/vex/trunk@1121

VEX/priv/guest-x86/toIR.c

index 6175c3bebe95db50910529c9b8f3e341bc16f9ad..5dd7638fe697204865d744e296fca4d2cff07e11 100644 (file)
@@ -9278,7 +9278,7 @@ DisResult disInstr ( /*IN*/  Bool       resteerOK,
          delta += 3+1;
       } else {
          addr = disAMode ( &alen, sorb, delta+3, dis_buf );
-         putXMMReg( gregOfRM(modrm), mkV128(0) );
+         putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
          putXMMRegLane64( gregOfRM(modrm), 0,
                           loadLE(Ity_I64, mkexpr(addr)) );
          DIP("movsd %s,%s\n", dis_buf,