From 7dc7d79b63f1787e087174ee6a7313b7658fe799 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Sat, 8 May 2010 21:04:43 +0000 Subject: [PATCH] Clarify the carry testing magic. [r27516] --- ir/be/ia32/ia32_nodes_attr.h | 9 ++++++--- ir/be/ia32/ia32_optimize.c | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ir/be/ia32/ia32_nodes_attr.h b/ir/be/ia32/ia32_nodes_attr.h index fc53e6d0f..9b4012370 100644 --- a/ir/be/ia32/ia32_nodes_attr.h +++ b/ir/be/ia32/ia32_nodes_attr.h @@ -32,9 +32,12 @@ #include "irnode_t.h" enum { - ia32_pn_Cmp_unsigned = 0x1000, - ia32_pn_Cmp_float = 0x2000, - ia32_pn_Cmp_parity = 0x4000 + ia32_pn_Cmp_unsigned = 0x1000, + ia32_pn_Cmp_float = 0x2000, + ia32_pn_Cmp_parity = 0x4000, + /* The unsigned Lt/Ge comparisons test the carry bit. */ + ia32_pn_Cmp_carry = pn_Cmp_Lt | ia32_pn_Cmp_unsigned + ia32_pn_Cmp_not_carry = pn_Cmp_Ge | ia32_pn_Cmp_unsigned, }; typedef enum { diff --git a/ir/be/ia32/ia32_optimize.c b/ir/be/ia32/ia32_optimize.c index 0334f34b0..801f8aa1b 100644 --- a/ir/be/ia32/ia32_optimize.c +++ b/ir/be/ia32/ia32_optimize.c @@ -265,8 +265,8 @@ static void peephole_ia32_Test(ir_node *node) int pnc = get_ia32_condcode(user); switch (pnc) { - case pn_Cmp_Eq: pnc = pn_Cmp_Ge | ia32_pn_Cmp_unsigned; break; - case pn_Cmp_Lg: pnc = pn_Cmp_Lt | ia32_pn_Cmp_unsigned; break; + case pn_Cmp_Eq: pnc = ia32_pn_Cmp_no_carry; break; + case pn_Cmp_Lg: pnc = ia32_pn_Cmp_carry; break; default: panic("unexpected pn"); } set_ia32_condcode(user, pnc); -- 2.20.1