|
From: <sv...@va...> - 2006-03-14 18:39:34
|
Author: sewardj
Date: 2006-03-14 18:39:29 +0000 (Tue, 14 Mar 2006)
New Revision: 1595
Log:
Merge r1521 (fix x86 SSE front end causing too much memory to be read
for some SSE comparisons).
Modified:
branches/VEX_3_1_BRANCH/priv/guest-x86/toIR.c
Modified: branches/VEX_3_1_BRANCH/priv/guest-x86/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/VEX_3_1_BRANCH/priv/guest-x86/toIR.c 2006-03-07 01:40:44 UTC=
(rev 1594)
+++ branches/VEX_3_1_BRANCH/priv/guest-x86/toIR.c 2006-03-14 18:39:29 UTC=
(rev 1595)
@@ -6680,7 +6680,7 @@
vpanic("findSSECmpOp(x86,guest)");
}
=20
-/* Handles SSE 32F comparisons. */
+/* Handles SSE 32F/64F comparisons. */
=20
static UInt dis_SSEcmp_E_to_G ( UChar sorb, Int delta,=20
HChar* opname, Bool all_lanes, Int sz )
@@ -6708,8 +6708,15 @@
addr =3D disAMode ( &alen, sorb, delta, dis_buf );
imm8 =3D getIByte(delta+alen);
findSSECmpOp(&needNot, &op, imm8, all_lanes, sz);
- assign( plain, binop(op, getXMMReg(gregOfRM(rm)),=20
- loadLE(Ity_V128, mkexpr(addr))) );
+ assign( plain,=20
+ binop(
+ op,
+ getXMMReg(gregOfRM(rm)),=20
+ all_lanes ? loadLE(Ity_V128, mkexpr(addr))
+ : sz =3D=3D 8 ? unop( Iop_64UtoV128, loadLE(Ity_I64,=
mkexpr(addr)))
+ : /*sz=3D=3D4*/ unop( Iop_32UtoV128, loadLE(Ity_I32,=
mkexpr(addr)))
+ )=20
+ );
delta +=3D alen+1;
DIP("%s $%d,%s,%s\n", opname,
(Int)imm8,
|