* emit-rtl.c (gen_highpart): initialize `word' properly for pseudo.
From-SVN: r19271
This commit is contained in:
parent
4daa9c1429
commit
6cca74ab23
|
@ -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
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in New Issue