mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-12 18:07:44 +08:00
expmed.c (expand_divmod): Don't widen for computing remainder if we seem to have a divmod pattern for...
* expmed.c (expand_divmod): Don't widen for computing remainder if we seem to have a divmod pattern for needed mode. From-SVN: r22828
This commit is contained in:
parent
4284b774e6
commit
32fdf36bb6
@ -1,3 +1,8 @@
|
||||
Mon Oct 5 01:07:23 1998 Torbjorn Granlund <tege@matematik.su.se>
|
||||
|
||||
* expmed.c (expand_divmod): Don't widen for computing remainder
|
||||
if we seem to have a divmod pattern for needed mode.
|
||||
|
||||
Mon Oct 5 01:01:42 1998 Zack Weinberg <zack@rabi.phys.columbia.edu>
|
||||
|
||||
* cpplib.c (macroexpand): Correct off-by-one error in handling
|
||||
|
20
gcc/expmed.c
20
gcc/expmed.c
@ -3709,10 +3709,22 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
|
||||
|
||||
if (rem_flag)
|
||||
{
|
||||
/* Try to produce the remainder directly without a library call. */
|
||||
remainder = sign_expand_binop (compute_mode, umod_optab, smod_optab,
|
||||
op0, op1, target,
|
||||
unsignedp, OPTAB_WIDEN);
|
||||
/* Try to produce the remainder without producing the quotient.
|
||||
If we seem to have a divmod patten that does not require widening,
|
||||
don't try windening here. We should really have an WIDEN argument
|
||||
to expand_twoval_binop, since what we'd really like to do here is
|
||||
1) try a mod insn in compute_mode
|
||||
2) try a divmod insn in compute_mode
|
||||
3) try a div insn in compute_mode and multiply-subtract to get
|
||||
remainder
|
||||
4) try the same things with widening allowed. */
|
||||
remainder
|
||||
= sign_expand_binop (compute_mode, umod_optab, smod_optab,
|
||||
op0, op1, target,
|
||||
unsignedp,
|
||||
((optab2->handlers[(int) compute_mode].insn_code
|
||||
!= CODE_FOR_nothing)
|
||||
? OPTAB_DIRECT : OPTAB_WIDEN));
|
||||
if (remainder == 0)
|
||||
{
|
||||
/* No luck there. Can we do remainder and divide at once
|
||||
|
Loading…
Reference in New Issue
Block a user