From: Julian Seward Date: Wed, 6 Apr 2005 01:11:08 +0000 (+0000) Subject: When generating IR for movsd mem->reg, don't first write the entire X-Git-Tag: svn/VALGRIND_3_0_1^2~213 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e808d67c2c71f7fb578c59e13c8f06c9aae0eed;p=thirdparty%2Fvalgrind.git When generating IR for movsd mem->reg, don't first write the entire 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 --- diff --git a/VEX/priv/guest-x86/toIR.c b/VEX/priv/guest-x86/toIR.c index 6175c3bebe..5dd7638fe6 100644 --- a/VEX/priv/guest-x86/toIR.c +++ b/VEX/priv/guest-x86/toIR.c @@ -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,