diff options
author | Richard Stallman <rms@gnu.org> | 1993-10-20 04:08:47 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-10-20 04:08:47 +0000 |
commit | 54c40e686a0a24ff1f5cedff61ecb17fc7d6e5ef (patch) | |
tree | a9256317ceb1dcaec89f0a273619681c65d91da1 | |
parent | 14aceb299be2800a56ff2800ff5a8ecd345b8e8d (diff) | |
download | gcc-54c40e686a0a24ff1f5cedff61ecb17fc7d6e5ef.zip gcc-54c40e686a0a24ff1f5cedff61ecb17fc7d6e5ef.tar.gz gcc-54c40e686a0a24ff1f5cedff61ecb17fc7d6e5ef.tar.bz2 |
(reload): Cope when inherited register is larger than one word.
(choose_reload_regs): Ditto.
From-SVN: r5820
-rw-r--r-- | gcc/reload1.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 00d781c..33f118b 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -4971,6 +4971,7 @@ choose_reload_regs (insn, avoid_return_reg) reload_override_in[r] = reg_last_reload_reg[regno]; else { + int k; /* We can use this as a reload reg. */ /* Mark the register as in use for this part of the insn. */ @@ -4983,8 +4984,9 @@ choose_reload_regs (insn, avoid_return_reg) reload_inheritance_insn[r] = reg_reloaded_insn[i]; reload_spill_index[r] = i; - SET_HARD_REG_BIT (reload_reg_used_for_inherit, - spill_regs[i]); + for (k = 0; k < nr; k++) + SET_HARD_REG_BIT (reload_reg_used_for_inherit, + spill_regs[i + k]); } } } @@ -5073,10 +5075,13 @@ choose_reload_regs (insn, avoid_return_reg) i = spill_reg_order[regno]; if (i >= 0) { + int nr = HARD_REGNO_NREGS (regno, reload_mode[r]); + int k; mark_reload_reg_in_use (regno, reload_opnum[r], reload_when_needed[r], reload_mode[r]); - SET_HARD_REG_BIT (reload_reg_used_for_inherit, regno); + for (k = 0; k < nr; k++) + SET_HARD_REG_BIT (reload_reg_used_for_inherit, regno + k); } } } |