Commit eab2120d by J"orn Rennecke Committed by Joern Rennecke

rtlanal.c (subreg_regno_offset): Return correct offset for big endian paradoxical subregs.

	* rtlanal.c (subreg_regno_offset): Return correct offset for
	big endian paradoxical subregs.

From-SVN: r55650
parent 0e902d98
Mon Jul 22 15:21:41 2002 J"orn Rennecke <joern.rennecke@superh.com> Mon Jul 22 15:27:25 2002 J"orn Rennecke <joern.rennecke@superh.com>
* rtlanal.c (subreg_regno_offset): Return correct offset for
big endian paradoxical subregs.
* optabs.c (expand_vector_unop): Don't expand using sub_optab * optabs.c (expand_vector_unop): Don't expand using sub_optab
if we got the wrong mode. if we got the wrong mode.
......
...@@ -3117,6 +3117,16 @@ subreg_regno_offset (xregno, xmode, offset, ymode) ...@@ -3117,6 +3117,16 @@ subreg_regno_offset (xregno, xmode, offset, ymode)
nregs_xmode = HARD_REGNO_NREGS (xregno, xmode); nregs_xmode = HARD_REGNO_NREGS (xregno, xmode);
nregs_ymode = HARD_REGNO_NREGS (xregno, ymode); nregs_ymode = HARD_REGNO_NREGS (xregno, ymode);
/* If this is a big endian paradoxical subreg, which uses more actual
hard registers than the original register, we must return a negative
offset so that we find the proper highpart of the register. */
if (offset == 0
&& nregs_ymode > nregs_xmode
&& (GET_MODE_SIZE (ymode) > UNITS_PER_WORD
? WORDS_BIG_ENDIAN : BYTES_BIG_ENDIAN))
return nregs_xmode - nregs_ymode;
if (offset == 0 || nregs_xmode == nregs_ymode) if (offset == 0 || nregs_xmode == nregs_ymode)
return 0; return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment