diff options
author | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-07-08 16:21:58 +0000 |
---|---|---|
committer | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-07-08 16:21:58 +0000 |
commit | 76c640761ecd8a0efd0546fb88abacb000434d6b (patch) | |
tree | 663775dd7f56c1e0bd6ec666857472c3fb3c2d24 /gcc/rtlanal.c | |
parent | 7336c0af0217001ba0d211ba83f7dfb3ba37cc84 (diff) | |
download | gcc-76c640761ecd8a0efd0546fb88abacb000434d6b.tar.gz |
* defaults.h (REG_WORDS_BIG_ENDIAN): Provide a default.
* doc/tm.texi.in (WORDS_BIG_ENDIAN): Mention REG_WORDS_BIG_ENDIAN.
(REG_WORDS_BIG_ENDIAN): Document.
* doc/tm.texi: Regenerate.
* reload.c (operands_match_p): Take it into account.
(reload_adjust_reg_for_mode): Likewise.
* rtlanal.c (subreg_get_info): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176048 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r-- | gcc/rtlanal.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 76aa79a4b9a..c3cdd31b6d0 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -3289,7 +3289,7 @@ subreg_get_info (unsigned int xregno, enum machine_mode xmode, return a negative offset so that we find the proper highpart of the register. */ if (GET_MODE_SIZE (ymode) > UNITS_PER_WORD - ? WORDS_BIG_ENDIAN : BYTES_BIG_ENDIAN) + ? REG_WORDS_BIG_ENDIAN : BYTES_BIG_ENDIAN) info->offset = nregs_xmode - nregs_ymode; else info->offset = 0; @@ -3344,6 +3344,15 @@ subreg_get_info (unsigned int xregno, enum machine_mode xmode, gcc_assert ((GET_MODE_SIZE (xmode) % GET_MODE_SIZE (ymode)) == 0); gcc_assert ((nregs_xmode % nregs_ymode) == 0); + if (WORDS_BIG_ENDIAN != REG_WORDS_BIG_ENDIAN + && GET_MODE_SIZE (xmode) > UNITS_PER_WORD) + { + HOST_WIDE_INT xsize = GET_MODE_SIZE (xmode); + HOST_WIDE_INT ysize = GET_MODE_SIZE (ymode); + HOST_WIDE_INT off_low = offset & (ysize - 1); + HOST_WIDE_INT off_high = offset & ~(ysize - 1); + offset = (xsize - ysize - off_high) | off_low; + } /* The XMODE value can be seen as a vector of NREGS_XMODE values. The subreg must represent a lowpart of given field. Compute what field it is. */ |