aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2011-04-13 11:31:55 +0000
committerNick Clifton <nickc@gcc.gnu.org>2011-04-13 11:31:55 +0000
commit673a5740323aa8a438767120e223d323c2fb6f71 (patch)
tree6aa769cda1046146105a794c0960e90a4b152ca4 /gcc/config
parent4ea1a1624497fae9aad24cd4c561a69b9fd71f08 (diff)
downloadgcc-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.md8
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;