diff options
author | Richard Henderson <rth@redhat.com> | 2003-12-18 14:10:06 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2003-12-18 14:10:06 -0800 |
commit | 4f2ca7f5242367c32aa8ca848bfdf1d5cacd7d8b (patch) | |
tree | d5bb985b417ee92e791b0c01e0418b21679eca8b /gcc/genrecog.c | |
parent | 0b667ed86d1e3dafb25492864e181bc04cff7bba (diff) | |
download | gcc-4f2ca7f5242367c32aa8ca848bfdf1d5cacd7d8b.zip gcc-4f2ca7f5242367c32aa8ca848bfdf1d5cacd7d8b.tar.gz gcc-4f2ca7f5242367c32aa8ca848bfdf1d5cacd7d8b.tar.bz2 |
genrecog.c (print_host_wide_int): New.
* genrecog.c (print_host_wide_int): New.
(write_switch, write_cond): Use it.
From-SVN: r74806
Diffstat (limited to 'gcc/genrecog.c')
-rw-r--r-- | gcc/genrecog.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/genrecog.c b/gcc/genrecog.c index adf81dd..208ea8e 100644 --- a/gcc/genrecog.c +++ b/gcc/genrecog.c @@ -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: |