|
From: <sv...@va...> - 2005-08-24 10:56:10
|
Author: sewardj
Date: 2005-08-24 11:56:01 +0100 (Wed, 24 Aug 2005)
New Revision: 1353
Log:
Build rflag thunk for adc/sbb correctly.
Modified:
trunk/priv/guest-amd64/toIR.c
Modified: trunk/priv/guest-amd64/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-amd64/toIR.c 2005-08-24 10:46:19 UTC (rev 1352)
+++ trunk/priv/guest-amd64/toIR.c 2005-08-24 10:56:01 UTC (rev 1353)
@@ -53,12 +53,11 @@
disInstr for details.
*/
=20
-//.. /* TODO:
-//..=20
-//.. check flag settings for cmpxchg
-//.. FUCOMI(P): what happens to A and S flags? Currently are forced
-//.. to zero.
-//..=20
+/* TODO:
+
+ All Puts to CC_OP/CC_DEP1/CC_DEP2/CC_NDEP should really be checked
+ to ensure a 64-bit value is being written.
+
//.. x87 FP Limitations:
//..=20
//.. * all arithmetic done at 64 bits
@@ -91,7 +90,8 @@
//.. bit be set by PUSHF.
//..=20
//.. This module uses global variables and so is not MT-safe (if that
-//.. should ever become relevant). */
+//.. should ever become relevant).
+*/
=20
/* Translates AMD64 code to IR. */
=20
@@ -1685,9 +1685,9 @@
mkexpr(oldcn)) );
=20
stmt( IRStmt_Put( OFFB_CC_OP, mkU64(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, widenUto64(mkexpr(ta1)) ));
+ stmt( IRStmt_Put( OFFB_CC_DEP2, widenUto64(binop(xor, mkexpr(ta2),=20
+ mkexpr(oldcn)) =
)) );
stmt( IRStmt_Put( OFFB_CC_NDEP, mkexpr(oldc) ) );
}
=20
@@ -1725,9 +1725,9 @@
mkexpr(oldcn)) );
=20
stmt( IRStmt_Put( OFFB_CC_OP, mkU64(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, widenUto64(mkexpr(ta1) )) );
+ stmt( IRStmt_Put( OFFB_CC_DEP2, widenUto64(binop(xor, mkexpr(ta2),=20
+ mkexpr(oldcn)) =
)) );
stmt( IRStmt_Put( OFFB_CC_NDEP, mkexpr(oldc) ) );
}
=20
|