sh.md (*prefetch_i4): Disable for TARGET_VXWORKS_RTP.
authorRichard Sandiford <richard@codesourcery.com>
Fri, 6 Jul 2007 17:00:15 +0000 (17:00 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 6 Jul 2007 17:00:15 +0000 (17:00 +0000)
gcc/
* config/sh/sh.md (*prefetch_i4): Disable for TARGET_VXWORKS_RTP.
(prefetch): Likewise if "pref" would be used.

From-SVN: r126423

gcc/ChangeLog
gcc/config/sh/sh.md

index 36b080b04ebde24fafbf16b5cbd01f9c665871c4..7a9b7c971c5e9746a1ee91bde6776c8b5238aa74 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-06  Richard Sandiford  <richard@codesourcery.com>
+
+       * config/sh/sh.md (*prefetch_i4): Disable for TARGET_VXWORKS_RTP.
+       (prefetch): Likewise if "pref" would be used.
+
 2007-07-06  Josh Conner  <jconner@apple.com>
 
        PR middle-end/32602
index f7b179d44adf9d851e7bff714d18b0f839e1f398..e2d144e970a79f72d6071071c2ae229cc9d41362 100644 (file)
@@ -13565,18 +13565,21 @@ mov.l\\t1f,r0\\n\\
   [(prefetch (match_operand:SI 0 "register_operand" "r")
              (match_operand:SI 1 "const_int_operand" "n")
              (match_operand:SI 2 "const_int_operand" "n"))]
-  "TARGET_HARD_SH4 || TARGET_SHCOMPACT"
+  "(TARGET_HARD_SH4 || TARGET_SHCOMPACT) && !TARGET_VXWORKS_RTP"
   "*
 {
   return \"pref @%0\";
 }"
   [(set_attr "type" "other")])
 
+;; In user mode, the "pref" instruction will raise a RADDERR exception
+;; for accesses to [0x80000000,0xffffffff].  This makes it an unsuitable
+;; implementation of __builtin_prefetch for VxWorks RTPs.
 (define_expand "prefetch"
   [(prefetch (match_operand 0 "address_operand" "p")
              (match_operand:SI 1 "const_int_operand" "n")
              (match_operand:SI 2 "const_int_operand" "n"))]
-  "TARGET_HARD_SH4 || TARGET_SH5"
+  "(TARGET_HARD_SH4 || TARGET_SH5) && (TARGET_SHMEDIA || !TARGET_VXWORKS_RTP)"
   "
 {
   if (GET_MODE (operands[0]) != Pmode