rx.md (movmemsi): Do not use this pattern when volatile pointers are involved.
authorNick Clifton <nickc@redhat.com>
Wed, 13 Apr 2011 11:31:55 +0000 (11:31 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Wed, 13 Apr 2011 11:31:55 +0000 (11:31 +0000)
* config/rx/rx.md (movmemsi): Do not use this pattern when
volatile pointers are involved.

From-SVN: r172368

gcc/ChangeLog
gcc/config/rx/rx.md

index a37cd7105c962bcd11a47d0ae10bd777e63b1a57..2863b7b9ac73d0d52ec62347ed1410d1a264efc4 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-13  Nick Clifton  <nickc@redhat.com>
+
+       * config/rx/rx.md (movmemsi): Do not use this pattern when
+       volatile pointers are involved.
+
 2011-04-13  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/sse.md (pinsrbits): Remove.
index 6ff3a1e7e2ab6dc5fb89c6dd14706113823b508a..42a64aa7e8ea7d047b5aaa3ec3abc41a3464bc6e 100644 (file)
     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;