genrecog.c (print_host_wide_int): New.

* genrecog.c (print_host_wide_int): New.
        (write_switch, write_cond): Use it.

From-SVN: r74806
This commit is contained in:
Richard Henderson 2003-12-18 14:10:06 -08:00 committed by Richard Henderson
parent 0b667ed86d
commit 4f2ca7f524
2 changed files with 21 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2003-12-18 Richard Henderson <rth@redhat.com>
* genrecog.c (print_host_wide_int): New.
(write_switch, write_cond): Use it.
2003-12-18 Richard Henderson <rth@redhat.com>
* c-decl.c (check_bitfield_type_and_width): Remove enum special

View File

@ -1734,6 +1734,20 @@ write_afterward (struct decision *start, struct decision *afterward,
}
}
/* Emit a HOST_WIDE_INT as an integer constant expression. We need to take
special care to avoid "decimal constant is so large that it is unsigned"
warnings in the resulting code. */
static void
print_host_wide_int (HOST_WIDE_INT val)
{
HOST_WIDE_INT min = (unsigned HOST_WIDE_INT)1 << (HOST_BITS_PER_WIDE_INT-1);
if (val == min)
printf ("(" HOST_WIDE_INT_PRINT_DEC_C "-1)", val + 1);
else
printf (HOST_WIDE_INT_PRINT_DEC_C, val);
}
/* Emit a switch statement, if possible, for an initial sequence of
nodes at START. Return the first node yet untested. */
@ -1907,7 +1921,7 @@ write_switch (struct decision *start, int depth)
case DT_elt_one_int:
case DT_elt_zero_wide:
case DT_elt_zero_wide_safe:
printf (HOST_WIDE_INT_PRINT_DEC_C, p->tests->u.intval);
print_host_wide_int (p->tests->u.intval);
break;
default:
abort ();
@ -1964,7 +1978,7 @@ write_cond (struct decision_test *p, int depth,
case DT_elt_zero_wide:
case DT_elt_zero_wide_safe:
printf ("XWINT (x%d, 0) == ", depth);
printf (HOST_WIDE_INT_PRINT_DEC_C, p->u.intval);
print_host_wide_int (p->u.intval);
break;
case DT_veclen_ge: