diff options
author | Christian Bruel <chrbr@gcc.gnu.org> | 2013-09-23 10:30:00 +0200 |
---|---|---|
committer | Christian Bruel <chrbr@gcc.gnu.org> | 2013-09-23 10:30:00 +0200 |
commit | 0e26cf7972346f2d75ad9eb8fb3984f104ac2079 (patch) | |
tree | 6b28ecb56fd261e0db81992a7cf75e7765ce0c61 /gcc | |
parent | 4d0e5b54a81475d0f3b7feb7751750b821ded6a9 (diff) | |
download | gcc-0e26cf7972346f2d75ad9eb8fb3984f104ac2079.zip gcc-0e26cf7972346f2d75ad9eb8fb3984f104ac2079.tar.gz gcc-0e26cf7972346f2d75ad9eb8fb3984f104ac2079.tar.bz2 |
re PR target/58475 (SH4 insn swapb does not satisfy its constraints:)
2013-09-23 Christian Bruel <christian.bruel@st.com>
PR target/58475
* config/sh/sh.md (movsf_ie): Allow fpul_operand.
* config/sh/predicate.md (arith_reg_operand): Disallow FPUL_REG.
From-SVN: r202825
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/sh/predicates.md | 2 | ||||
-rw-r--r-- | gcc/config/sh/sh.md | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/sh/torture/pr58475.c | 15 |
5 files changed, 31 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1d9c5a9..15369d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-09-23 Christian Bruel <christian.bruel@st.com> + + PR target/58475 + * config/sh/sh.md (movsf_ie): Allow fpul_operand. + * config/sh/predicate.md (arith_reg_operand): Disallow FPUL_REG. + 2013-09-23 James Greenhalgh <james.greenhalgh@arm.com> Revert r202780: @@ -7,6 +13,7 @@ (aarch64_expand_epilogue): Likewise. (aarch64_legitimize_reload_address): Likewise. +>>>>>>> .r202824 2013-09-22 Eric Botcazou <ebotcazou@adacore.com> * gimplify.c (gimplify_asm_expr): Reset the TREE_CHAIN of clobbers to diff --git a/gcc/config/sh/predicates.md b/gcc/config/sh/predicates.md index 998ba73..10d741a 100644 --- a/gcc/config/sh/predicates.md +++ b/gcc/config/sh/predicates.md @@ -154,7 +154,7 @@ return (regno != T_REG && regno != PR_REG && ! TARGET_REGISTER_P (regno) - && (regno != FPUL_REG || TARGET_SH4) + && regno != FPUL_REG && regno != MACH_REG && regno != MACL_REG); } /* Allow a no-op sign extension - compare LOAD_EXTEND_OP. diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 2c20d38..db6c0b6 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -8203,15 +8203,9 @@ label: (use (match_operand:PSI 2 "fpscr_operand" "c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c")) (clobber (match_scratch:SI 3 "=X,X,Bsc,Bsc,&z,X,X,X,X,X,X,X,X,y,X,X,X,X,X"))] "TARGET_SH2E - && (arith_reg_operand (operands[0], SFmode) - || arith_reg_operand (operands[1], SFmode) - || arith_reg_operand (operands[3], SImode) - || (fpul_operand (operands[0], SFmode) - && memory_operand (operands[1], SFmode) - && GET_CODE (XEXP (operands[1], 0)) == POST_INC) - || (fpul_operand (operands[1], SFmode) - && memory_operand (operands[0], SFmode) - && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC))" + && (arith_reg_operand (operands[0], SFmode) || fpul_operand (operands[0], SFmode) + || arith_reg_operand (operands[1], SFmode) || fpul_operand (operands[1], SFmode) + || arith_reg_operand (operands[3], SImode))" "@ fmov %1,%0 mov %1,%0 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e17d519..330bb1c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Christian Bruel <christian.bruel@st.com> + + PR target/58475 + * gcc.target/sh/torture/pr58475.c: New test. + 2013-09-23 Janus Weil <janus@gcc.gnu.org> PR fortran/58355 diff --git a/gcc/testsuite/gcc.target/sh/torture/pr58475.c b/gcc/testsuite/gcc.target/sh/torture/pr58475.c new file mode 100644 index 0000000..a1153da --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/torture/pr58475.c @@ -0,0 +1,15 @@ +/* { dg-do compile { target "sh*-*-*" } } */ + +int +kerninfo(int __bsx, double tscale) +{ + return ( + (int)(__extension__ + ({ + ((((__bsx) & 0xff000000u) >> 24) + | (((__bsx) & 0x00ff0000) >> 8) + | (((__bsx) & 0x0000ff00) << 8) + | (((__bsx) & 0x000000ff) << 24) + ); })) + * tscale); +} |