diff options
author | Nick Clifton <nickc@redhat.com> | 2011-04-13 11:31:55 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2011-04-13 11:31:55 +0000 |
commit | 673a5740323aa8a438767120e223d323c2fb6f71 (patch) | |
tree | 6aa769cda1046146105a794c0960e90a4b152ca4 /gcc/config | |
parent | 4ea1a1624497fae9aad24cd4c561a69b9fd71f08 (diff) | |
download | gcc-673a5740323aa8a438767120e223d323c2fb6f71.zip gcc-673a5740323aa8a438767120e223d323c2fb6f71.tar.gz gcc-673a5740323aa8a438767120e223d323c2fb6f71.tar.bz2 |
rx.md (movmemsi): Do not use this pattern when volatile pointers are involved.
* config/rx/rx.md (movmemsi): Do not use this pattern when
volatile pointers are involved.
From-SVN: r172368
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/rx/rx.md | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md index 6ff3a1e..42a64aa7 100644 --- a/gcc/config/rx/rx.md +++ b/gcc/config/rx/rx.md @@ -2030,6 +2030,14 @@ rtx addr2 = gen_rtx_REG (SImode, 2); rtx len = gen_rtx_REG (SImode, 3); + /* Do not use when the source or destination are volatile - the SMOVF + instruction will read and write in word sized blocks, which may be + outside of the valid address range. */ + if (MEM_P (operands[0]) && MEM_VOLATILE_P (operands[0])) + FAIL; + if (MEM_P (operands[1]) && MEM_VOLATILE_P (operands[1])) + FAIL; + if (REG_P (operands[0]) && (REGNO (operands[0]) == 2 || REGNO (operands[0]) == 3)) FAIL; |