From: Julian Seward Date: Tue, 14 Mar 2006 18:39:29 +0000 (+0000) Subject: Merge r1521 (fix x86 SSE front end causing too much memory to be read X-Git-Tag: svn/VALGRIND_3_1_1^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5754d6a557b7416c565643c590f3424c06b019d3;p=thirdparty%2Fvalgrind.git Merge r1521 (fix x86 SSE front end causing too much memory to be read for some SSE comparisons). git-svn-id: svn://svn.valgrind.org/vex/branches/VEX_3_1_BRANCH@1595 --- diff --git a/VEX/priv/guest-x86/toIR.c b/VEX/priv/guest-x86/toIR.c index b53dba0972..8cfbd07f23 100644 --- a/VEX/priv/guest-x86/toIR.c +++ b/VEX/priv/guest-x86/toIR.c @@ -6680,7 +6680,7 @@ static void findSSECmpOp ( Bool* needNot, IROp* op, vpanic("findSSECmpOp(x86,guest)"); } -/* Handles SSE 32F comparisons. */ +/* Handles SSE 32F/64F comparisons. */ static UInt dis_SSEcmp_E_to_G ( UChar sorb, Int delta, HChar* opname, Bool all_lanes, Int sz ) @@ -6708,8 +6708,15 @@ static UInt dis_SSEcmp_E_to_G ( UChar sorb, Int delta, addr = disAMode ( &alen, sorb, delta, dis_buf ); imm8 = getIByte(delta+alen); findSSECmpOp(&needNot, &op, imm8, all_lanes, sz); - assign( plain, binop(op, getXMMReg(gregOfRM(rm)), - loadLE(Ity_V128, mkexpr(addr))) ); + assign( plain, + binop( + op, + getXMMReg(gregOfRM(rm)), + all_lanes ? loadLE(Ity_V128, mkexpr(addr)) + : sz == 8 ? unop( Iop_64UtoV128, loadLE(Ity_I64, mkexpr(addr))) + : /*sz==4*/ unop( Iop_32UtoV128, loadLE(Ity_I32, mkexpr(addr))) + ) + ); delta += alen+1; DIP("%s $%d,%s,%s\n", opname, (Int)imm8,