X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firarch.c;h=4b1ab6266eac9bb5e66267b42bc20f1dbf9ae63f;hb=eb47aca33f2f8c414409f3695e73277b47442334;hp=0df9fdb07dc529df9f75e7f0463bc4c85ef642a9;hpb=8b5aac95f0921dc70b53f2526f7a7413df3f6f85;p=libfirm diff --git a/ir/ir/irarch.c b/ir/ir/irarch.c index 0df9fdb07..4b1ab6266 100644 --- a/ir/ir/irarch.c +++ b/ir/ir/irarch.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -674,7 +674,7 @@ static struct ms magic(ir_tarval *d) int bits = get_mode_size_bits(u_mode); int p; ir_tarval *ad, *anc, *delta, *q1, *r1, *q2, *r2, *t; /* unsigned */ - pn_Cmp d_cmp, M_cmp; + ir_relation d_cmp, M_cmp; ir_tarval *bits_minus_1, *two_bits_1; @@ -703,7 +703,7 @@ static struct ms magic(ir_tarval *d) q1 = ADD(q1, q1); /* Update q1 = 2^p/|nc| */ r1 = ADD(r1, r1); /* Update r1 = rem(2^p, |nc|) */ - if (CMP(r1, anc) & pn_Cmp_Ge) { + if (CMP(r1, anc) & ir_relation_greater_equal) { q1 = ADD(q1, ONE(u_mode)); r1 = SUB(r1, anc); } @@ -711,17 +711,17 @@ static struct ms magic(ir_tarval *d) q2 = ADD(q2, q2); /* Update q2 = 2^p/|d| */ r2 = ADD(r2, r2); /* Update r2 = rem(2^p, |d|) */ - if (CMP(r2, ad) & pn_Cmp_Ge) { + if (CMP(r2, ad) & ir_relation_greater_equal) { q2 = ADD(q2, ONE(u_mode)); r2 = SUB(r2, ad); } delta = SUB(ad, r2); - } while (CMP(q1, delta) & pn_Cmp_Lt || (CMP(q1, delta) & pn_Cmp_Eq && CMP(r1, ZERO(u_mode)) & pn_Cmp_Eq)); + } while (CMP(q1, delta) & ir_relation_less || (CMP(q1, delta) & ir_relation_equal && CMP(r1, ZERO(u_mode)) & ir_relation_equal)); d_cmp = CMP(d, ZERO(mode)); - if (d_cmp & pn_Cmp_Ge) + if (d_cmp & ir_relation_greater_equal) mag.M = ADD(CNV(q2, mode), ONE(mode)); else mag.M = SUB(ZERO(mode), ADD(CNV(q2, mode), ONE(mode))); @@ -731,10 +731,10 @@ static struct ms magic(ir_tarval *d) mag.s = p - bits; /* need an add if d > 0 && M < 0 */ - mag.need_add = d_cmp & pn_Cmp_Gt && M_cmp & pn_Cmp_Lt; + mag.need_add = d_cmp & ir_relation_greater && M_cmp & ir_relation_less; /* need a sub if d < 0 && M > 0 */ - mag.need_sub = d_cmp & pn_Cmp_Lt && M_cmp & pn_Cmp_Gt; + mag.need_sub = d_cmp & ir_relation_less && M_cmp & ir_relation_greater; tarval_set_integer_overflow_mode(rem); @@ -782,7 +782,7 @@ static struct mu magicu(ir_tarval *d) do { ++p; - if (CMP(r1, SUB(nc, r1)) & pn_Cmp_Ge) { + if (CMP(r1, SUB(nc, r1)) & ir_relation_greater_equal) { q1 = ADD(ADD(q1, q1), ONE(mode)); r1 = SUB(ADD(r1, r1), nc); } @@ -791,15 +791,15 @@ static struct mu magicu(ir_tarval *d) r1 = ADD(r1, r1); } - if (CMP(ADD(r2, ONE(mode)), SUB(d, r2)) & pn_Cmp_Ge) { - if (CMP(q2, seven_ff) & pn_Cmp_Ge) + if (CMP(ADD(r2, ONE(mode)), SUB(d, r2)) & ir_relation_greater_equal) { + if (CMP(q2, seven_ff) & ir_relation_greater_equal) magu.need_add = 1; q2 = ADD(ADD(q2, q2), ONE(mode)); r2 = SUB(ADD(ADD(r2, r2), ONE(mode)), d); } else { - if (CMP(q2, two_bits_1) & pn_Cmp_Ge) + if (CMP(q2, two_bits_1) & ir_relation_greater_equal) magu.need_add = 1; q2 = ADD(q2, q2); @@ -807,7 +807,7 @@ static struct mu magicu(ir_tarval *d) } delta = SUB(SUB(d, ONE(mode)), r2); } while (p < 2*bits && - (CMP(q1, delta) & pn_Cmp_Lt || (CMP(q1, delta) & pn_Cmp_Eq && CMP(r1, ZERO(mode)) & pn_Cmp_Eq))); + (CMP(q1, delta) & ir_relation_less || (CMP(q1, delta) & ir_relation_equal && CMP(r1, ZERO(mode)) & ir_relation_equal))); magu.M = ADD(q2, ONE(mode)); /* Magic number */ magu.s = p - bits; /* and shift amount */ @@ -925,6 +925,11 @@ ir_node *arch_dep_replace_div_by_const(ir_node *irn) left = get_Div_left(irn); mode = get_irn_mode(left); + + /* can only handle integer Div's */ + if (!mode_is_int(mode)) + return irn; + block = get_irn_n(irn, -1); dbg = get_irn_dbg_info(irn);