emit-rtl.c (gen_lowpart_common): Use word 0 if register mode is narrower than requested mode.

* emit-rtl.c (gen_lowpart_common): Use word 0 if register mode
is narrower than requested mode.
(gen_highpart): Abort if register mode is narrower than
requested mode.

From-SVN: r37696
This commit is contained in:
Alexandre Oliva 2000-11-23 13:23:04 +00:00 committed by Alexandre Oliva
parent d0c3e4f498
commit 69295d6d26
2 changed files with 12 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2000-11-23 Alexandre Oliva <aoliva@redhat.com>
* emit-rtl.c (gen_lowpart_common): Use word 0 if register mode
is narrower than requested mode.
(gen_highpart): Abort if register mode is narrower than
requested mode.
2000-11-23 Graham Stott <grahams@redhat.com>
* cse.c (cse_insn): Initialise all regcost variables.

View File

@ -709,7 +709,8 @@ gen_lowpart_common (mode, x)
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 && REGNO (x) < FIRST_PSEUDO_REGISTER
&& GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (mode))
word = (HARD_REGNO_NREGS (REGNO (x), GET_MODE (x))
- HARD_REGNO_NREGS (REGNO (x), mode));
@ -1141,7 +1142,9 @@ gen_highpart (mode, x)
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)
if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (mode))
abort ();
else if (WORDS_BIG_ENDIAN)
word = 0;
else if (REGNO (x) < FIRST_PSEUDO_REGISTER)
word = (HARD_REGNO_NREGS (REGNO (x), GET_MODE (x))