+Wed Feb 10 10:09:41 1999 Jeffrey A Law (law@cygnus.com)
+
+ * reload1.c (reload_combine_note_store): Second argument is no
+ longer unused/ignored. Handle multi-register hard regs.
+ (move2add_note_store): Simplify.
+
Wed Feb 10 10:05:23 1999 Mumit Khan <khan@xraylith.wisc.edu>
* collect2.c (collect_execute): Remove cygwin-specific code.
/* Check if DST is a register or a subreg of a register; if it is,
update reg_state[regno].store_ruid and reg_state[regno].use_index
- accordingly. Called via note_stores from reload_combine.
- The second argument, SET, is ignored. */
+ accordingly. Called via note_stores from reload_combine. */
static void
reload_combine_note_store (dst, set)
- rtx dst, set ATTRIBUTE_UNUSED;
+ rtx dst, set;
{
int regno = 0;
int i;
|| GET_CODE (SET_DEST (set)) == SIGN_EXTRACT
|| GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
{
- reg_state[regno].use_index = -1;
- reg_state[regno].store_ruid = reload_combine_ruid;
+ for (i = size / UNITS_PER_WORD - 1 + regno; i >= regno; i--)
+ {
+ reg_state[i].use_index = -1;
+ reg_state[i].store_ruid = reload_combine_ruid;
+ }
}
else
{
regno += REGNO (dst);
- if (HARD_REGNO_NREGS (regno, mode) == 1 && GET_CODE (set) == SET)
+ if (HARD_REGNO_NREGS (regno, mode) == 1 && GET_CODE (set) == SET
+ && GET_CODE (SET_DEST (set)) != ZERO_EXTRACT
+ && GET_CODE (SET_DEST (set)) != SIGN_EXTRACT
+ && GET_CODE (SET_DEST (set)) != STRICT_LOW_PART)
{
rtx src = SET_SRC (set);
- /* Indicate that this register has been recently written to,
- but the exact contents are not available. */
- if (GET_CODE (SET_DEST (set)) == ZERO_EXTRACT
- || GET_CODE (SET_DEST (set)) == SIGN_EXTRACT
- || GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
- {
- reg_set_luid[regno] = move2add_luid;
- reg_offset[regno] = dst;
- return;
- }
-
reg_mode[regno] = mode;
switch (GET_CODE (src))
{