* emit-rtl.c (gen_highpart): initialize `word' properly for pseudo.

From-SVN: r19271
This commit is contained in:
Greg McGary 1998-04-17 16:35:07 +00:00 committed by Richard Henderson
parent 4daa9c1429
commit 6cca74ab23
2 changed files with 13 additions and 3 deletions

View File

@ -1,3 +1,7 @@
Fri Apr 17 16:35:35 1998 Greg McGary <gkm@gnu.org>
* emit-rtl.c (gen_highpart): initialize `word' properly for pseudo.
Fri Apr 17 14:30:37 1998 John Carr <jfc@mit.edu>
* emit-rtl.c (operand_subword_force): If a register can not be

View File

@ -1011,18 +1011,24 @@ gen_highpart (mode, x)
}
else if (GET_CODE (x) == REG)
{
int word = 0;
int word;
/* Let the backend decide how many registers to skip. This is needed
in particular for sparc64 where fp regs are smaller than a word. */
/* ??? Note that subregs are now ambiguous, in that those against
pseudos are sized by the Word Size, while those against hard
pseudos are sized by the word size, while those against hard
regs are sized by the underlying register size. Better would be
to always interpret the subreg offset parameter as bytes or bits. */
if (! WORDS_BIG_ENDIAN && REGNO (x) < FIRST_PSEUDO_REGISTER)
if (WORDS_BIG_ENDIAN)
word = 0;
else if (REGNO (x) < FIRST_PSEUDO_REGISTER)
word = (HARD_REGNO_NREGS (REGNO (x), GET_MODE (x))
- HARD_REGNO_NREGS (REGNO (x), mode));
else
word = ((GET_MODE_SIZE (GET_MODE (x))
- MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD))
/ UNITS_PER_WORD);
if (REGNO (x) < FIRST_PSEUDO_REGISTER
/* integrate.c can't handle parts of a return value register. */