|
From: <sv...@va...> - 2006-08-28 18:04:40
|
Author: sewardj
Date: 2006-08-28 19:04:33 +0100 (Mon, 28 Aug 2006)
New Revision: 1652
Log:
Stop mkU16 asserting if d32 is a negative 16-bit number (bug #132813).
Modified:
trunk/priv/guest-x86/toIR.c
Modified: trunk/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
--- trunk/priv/guest-x86/toIR.c 2006-08-28 13:34:58 UTC (rev 1651)
+++ trunk/priv/guest-x86/toIR.c 2006-08-28 18:04:33 UTC (rev 1652)
@@ -11728,6 +11728,10 @@
t1 =3D newTemp(Ity_I32); t2 =3D newTemp(ty);
assign( t1, binop(Iop_Sub32,getIReg(4,R_ESP),mkU32(sz)) );
putIReg(4, R_ESP, mkexpr(t1) );
+ /* stop mkU16 asserting if d32 is a negative 16-bit number
+ (bug #132813) */
+ if (ty =3D=3D Ity_I16)
+ d32 &=3D 0xFFFF;
storeLE( mkexpr(t1), mkU(ty,d32) );
DIP("push%c $0x%x\n", nameISize(sz), d32);
break;
|