+2000-08-09 Alexandre Oliva <aoliva@redhat.com>
+
+ * caller-save.c (mark_referenced_regs): Mark partially-overwritten
+ multi-word registers.
+
2000-08-08 Joseph S. Myers <jsm28@cam.ac.uk>
* c-common.c (combine_strings, check_format_info): Refer to ISO C
x = SET_DEST (x);
code = GET_CODE (x);
if (code == REG || code == PC || code == CC0
- || (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG))
+ || (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG
+ /* If we're setting only part of a multi-word register,
+ we shall mark it as referenced, because the words
+ that are not being set should be restored. */
+ && ((GET_MODE_SIZE (GET_MODE (x))
+ >= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
+ || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))
+ <= UNITS_PER_WORD))))
return;
}
if (code == MEM || code == SUBREG)