aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-10-20 04:08:47 +0000
committerRichard Stallman <rms@gnu.org>1993-10-20 04:08:47 +0000
commit54c40e686a0a24ff1f5cedff61ecb17fc7d6e5ef (patch)
treea9256317ceb1dcaec89f0a273619681c65d91da1 /gcc
parent14aceb299be2800a56ff2800ff5a8ecd345b8e8d (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/reload1.c11
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);
}
}
}