|
From: <sv...@va...> - 2005-08-24 10:01:38
|
Author: sewardj
Date: 2005-08-24 11:01:36 +0100 (Wed, 24 Aug 2005)
New Revision: 1351
Log:
Fix incorrect building of the flags thunk after ADC and SBB.
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 2005-08-24 09:22:39 UTC (rev 1350)
+++ trunk/priv/guest-x86/toIR.c 2005-08-24 10:01:36 UTC (rev 1351)
@@ -46,7 +46,9 @@
=20
/* TODO:
=20
- check flag settings for cmpxchg
+ All Puts to CC_OP/CC_DEP1/CC_DEP2/CC_NDEP should really be checked
+ to ensure a 32-bit value is being written.
+
FUCOMI(P): what happens to A and S flags? Currently are forced
to zero.
=20
@@ -1036,9 +1038,9 @@
mkexpr(oldcn)) );
=20
stmt( IRStmt_Put( OFFB_CC_OP, mkU32(thunkOp) ) );
- stmt( IRStmt_Put( OFFB_CC_DEP1, mkexpr(ta1) ) );
- stmt( IRStmt_Put( OFFB_CC_DEP2, binop(xor, mkexpr(ta2),=20
- mkexpr(oldcn)) ) );
+ stmt( IRStmt_Put( OFFB_CC_DEP1, widenUto32(mkexpr(ta1)) ));
+ stmt( IRStmt_Put( OFFB_CC_DEP2, widenUto32(binop(xor, mkexpr(ta2),=20
+ mkexpr(oldcn)) =
)) );
stmt( IRStmt_Put( OFFB_CC_NDEP, mkexpr(oldc) ) );
}
=20
@@ -1072,9 +1074,9 @@
mkexpr(oldcn)) );
=20
stmt( IRStmt_Put( OFFB_CC_OP, mkU32(thunkOp) ) );
- stmt( IRStmt_Put( OFFB_CC_DEP1, mkexpr(ta1) ) );
- stmt( IRStmt_Put( OFFB_CC_DEP2, binop(xor, mkexpr(ta2),=20
- mkexpr(oldcn)) ) );
+ stmt( IRStmt_Put( OFFB_CC_DEP1, widenUto32(mkexpr(ta1) )) );
+ stmt( IRStmt_Put( OFFB_CC_DEP2, widenUto32(binop(xor, mkexpr(ta2),=20
+ mkexpr(oldcn)) =
)) );
stmt( IRStmt_Put( OFFB_CC_NDEP, mkexpr(oldc) ) );
}
=20
|