diff options
author | DJ Delorie <dj@redhat.com> | 2014-11-06 12:57:15 -0500 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2014-11-06 12:57:15 -0500 |
commit | 45d898e429e6537766aac1afea7dff39a7f136cd (patch) | |
tree | 4108cc8ae8bf7cb695afcfa9288ee9f126c6df7d /gcc/config/m32c/m32c.c | |
parent | 2f21e1ba46762bceac682c433028627f6953ed50 (diff) | |
download | gcc-45d898e429e6537766aac1afea7dff39a7f136cd.zip gcc-45d898e429e6537766aac1afea7dff39a7f136cd.tar.gz gcc-45d898e429e6537766aac1afea7dff39a7f136cd.tar.bz2 |
cond.md (movqicc_<code>_<mode>): Remove mode of conditional.
* config/m32c/cond.md (movqicc_<code>_<mode>): Remove mode of
conditional.
(movhicc_<code>_<mode>): Likewise.
* config/m32c/m32c.c (encode_pattern_1): Specialise PSImode
subregs.
(m32c_eh_return_data_regno): Change to using memregs to avoid
tying up all the compute regs.
(m32c_legitimate_address_p) Subregs are not valid addresses.
From-SVN: r217200
Diffstat (limited to 'gcc/config/m32c/m32c.c')
-rw-r--r-- | gcc/config/m32c/m32c.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index 6197b33..fa0e883 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -195,6 +195,9 @@ encode_pattern_1 (rtx x) if (GET_MODE_SIZE (GET_MODE (x)) != GET_MODE_SIZE (GET_MODE (XEXP (x, 0)))) *patternp++ = 'S'; + if (GET_MODE (x) == PSImode + && GET_CODE (XEXP (x, 0)) == REG) + *patternp++ = 'S'; encode_pattern_1 (XEXP (x, 0)); break; case MEM: @@ -1008,12 +1011,9 @@ m32c_eh_return_data_regno (int n) switch (n) { case 0: - return A0_REGNO; + return MEM0_REGNO; case 1: - if (TARGET_A16) - return R3_REGNO; - else - return R1_REGNO; + return MEM0_REGNO+4; default: return INVALID_REGNUM; } @@ -1790,6 +1790,8 @@ m32c_legitimate_address_p (machine_mode mode, rtx x, bool strict) /* case SB_REGNO: */ return 1; default: + if (GET_CODE (reg) == SUBREG) + return 0; if (IS_PSEUDO (reg, strict)) return 1; return 0; |