|
From: <sv...@va...> - 2010-02-28 04:52:00
|
Author: sewardj
Date: 2010-02-28 04:51:02 +0000 (Sun, 28 Feb 2010)
New Revision: 1962
Log:
Fix incorrect spec rule for LE after INCB, for end-of range cases (arg = 0x7F).
Modified:
trunk/priv/guest_amd64_helpers.c
Modified: trunk/priv/guest_amd64_helpers.c
===================================================================
--- trunk/priv/guest_amd64_helpers.c 2010-02-21 20:40:53 UTC (rev 1961)
+++ trunk/priv/guest_amd64_helpers.c 2010-02-28 04:51:02 UTC (rev 1962)
@@ -1189,11 +1189,12 @@
/*---------------- INCB ----------------*/
if (isU64(cc_op, AMD64G_CC_OP_INCB) && isU64(cond, AMD64CondLE)) {
- /* 8-bit inc, then LE --> test result <=s 0 */
- return unop(Iop_1Uto64,
- binop(Iop_CmpLE64S,
- binop(Iop_Shl64,cc_dep1,mkU8(56)),
- mkU64(0)));
+ /* 8-bit inc, then LE --> sign bit of the arg */
+ return binop(Iop_And64,
+ binop(Iop_Shr64,
+ binop(Iop_Sub64, cc_dep1, mkU64(1)),
+ mkU8(7)),
+ mkU64(1));
}
/*---------------- INCW ----------------*/
|