|
From: <sv...@va...> - 2006-02-23 23:48:05
|
Author: sewardj
Date: 2006-02-23 23:47:56 +0000 (Thu, 23 Feb 2006)
New Revision: 1577
Log:
Fold in a fix for ppc32 rounding mode setting, from the trunk.
Modified:
branches/VEX_3_1_BRANCH/priv/guest-ppc32/toIR.c
Modified: branches/VEX_3_1_BRANCH/priv/guest-ppc32/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-ppc32/toIR.c 2006-02-23 22:30:35 U=
TC (rev 1576)
+++ branches/VEX_3_1_BRANCH/priv/guest-ppc32/toIR.c 2006-02-23 23:47:56 U=
TC (rev 1577)
@@ -1595,8 +1595,22 @@
=20
/* Allow writes to Rounding Mode */
if (mask & 0x3) {
- stmt( IRStmt_Put( OFFB_FPROUND,
- binop(Iop_And32, src, mkU32(0x3)) ));
+ /* construct new fpround from new and old values as per mask:
+ new fpround =3D (src & (3 & mask)) | (fpround & (3 & ~mask))=
*/
+ stmt(
+ IRStmt_Put(
+ OFFB_FPROUND,
+ binop(
+ Iop_Or32,
+ binop(Iop_And32, src, mkU32(3 & mask)),
+ binop(
+ Iop_And32,
+ IRExpr_Get(OFFB_FPROUND,Ity_I32),
+ mkU32(3 & ~mask)
+ )
+ )
+ )
+ );
}
=20
/* Give EmWarn for attempted writes to:
|