From db7cafb0ad510fe38d0e2ad0ccc5149acaaad65c Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sun, 7 Sep 1997 16:10:34 -0600 Subject: [PATCH] version.c: Bump for snapshot. * version.c: Bump for snapshot. * expmed.c (expand_divmod): Make op1_is_pow2 depend on unsignedp for negative constants. Promote EXACT_DIV_EXPR to TRUNC_DIV_EXPR when op1_is_pow2. * final.c (shorten_branches): During first pass, assume worst possible alignment for ADDR_VEC and ADDR_VEC_DIFF insns. * Makefile.in (distclean): Remove various things left around by running the testsuite. From-SVN: r15136 --- gcc/ChangeLog | 18 ++++++++++++++++++ gcc/expmed.c | 4 +++- gcc/final.c | 8 +++++--- gcc/version.c | 2 +- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 45c72a6f0cb..bfdb162512f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,21 @@ +Sun Sep 7 14:19:39 1997 Jeffrey A Law (law@cygnus.com) + + * version.c: Bump for snapshot. + +Sun Sep 7 14:17:36 1997 Torbjorn Granlund (tege@pdc.kth.se) + + * expmed.c (expand_divmod): Make op1_is_pow2 depend on unsignedp + for negative constants. Promote EXACT_DIV_EXPR to TRUNC_DIV_EXPR + when op1_is_pow2. + +Sun Sep 7 13:46:46 1997 Jeffrey A Law (law@cygnus.com) + + * final.c (shorten_branches): During first pass, assume worst + possible alignment for ADDR_VEC and ADDR_VEC_DIFF insns. + + * Makefile.in (distclean): Remove various things left around + by running the testsuite. + Sun Sep 7 13:16:06 1997 Manfred Hollstein * configure.in (out_file): Emit definition to config.status in order diff --git a/gcc/expmed.c b/gcc/expmed.c index 291e8d4aeea..fa3cc490a8c 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -2718,7 +2718,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) op1_is_constant = GET_CODE (op1) == CONST_INT; op1_is_pow2 = (op1_is_constant && ((EXACT_POWER_OF_2_OR_ZERO_P (INTVAL (op1)) - || EXACT_POWER_OF_2_OR_ZERO_P (-INTVAL (op1))))); + || (! unsignedp && EXACT_POWER_OF_2_OR_ZERO_P (-INTVAL (op1)))))); /* This is the structure of expand_divmod: @@ -2854,6 +2854,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) code = TRUNC_DIV_EXPR; if (code == FLOOR_MOD_EXPR) code = TRUNC_MOD_EXPR; + if (code == EXACT_DIV_EXPR && op1_is_pow2) + code = TRUNC_DIV_EXPR; } if (op1 != const0_rtx) diff --git a/gcc/final.c b/gcc/final.c index 122a733f457..a7fe94d38cb 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -748,9 +748,11 @@ shorten_branches (first) insn_lengths[uid] = (XVECLEN (body, GET_CODE (body) == ADDR_DIFF_VEC) * GET_MODE_SIZE (GET_MODE (body))); - /* Account for possible alignment. */ - insn_lengths[uid] - += unitsize - (insn_current_address & (unitsize - 1)); + /* We don't know what address the ADDR_VEC/ADDR_DIFF_VEC will end + up at after branch shortening. As a result, it is impossible + to determine how much padding we need at this point. Therefore, + assume worst possible alignment. */ + insn_lengths[uid] += unitsize - 1; #else ; #endif diff --git a/gcc/version.c b/gcc/version.c index 541ea9cfa5d..c18f3ac7b9e 100644 --- a/gcc/version.c +++ b/gcc/version.c @@ -1 +1 @@ -char *version_string = "egcs-2.90.05 970904 (gcc2-970802 experimental)"; +char *version_string = "egcs-2.90.06 970907 (gcc2-970802 experimental)"; -- 2.30.2