aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2006-11-18 00:22:45 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2006-11-18 00:22:45 +0000
commit8609875306931541730c93b2b99d835f110673fd (patch)
tree732c162adaa79606a4d2a844a12e25444af0c6c7 /gcc
parent0828ca7e69a85c0bff581e757a2e0d276a25d88a (diff)
downloadgcc-8609875306931541730c93b2b99d835f110673fd.zip
gcc-8609875306931541730c93b2b99d835f110673fd.tar.gz
gcc-8609875306931541730c93b2b99d835f110673fd.tar.bz2
rs6000.h (TARGET_NO_LWSYNC): Define.
gcc: * config/rs6000/rs6000.h (TARGET_NO_LWSYNC): Define. * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define __NO_LWSYNC__ if TARGET_NO_LWSYNC. * config/rs6000/sync.md (lwsync): Emit plain sync if TARGET_NO_LWSYNC. libstdc++-v3: * config/cpu/powerpc/atomic_word.h (_GLIBCXX_WRITE_MEM_BARRIER): Use plain sync if __NO_LWSYNC__. From-SVN: r118961
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000-c.c3
-rw-r--r--gcc/config/rs6000/rs6000.h3
-rw-r--r--gcc/config/rs6000/sync.md7
4 files changed, 20 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f3c8b87..01ed1bf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2006-11-18 Joseph Myers <joseph@codesourcery.com>
+
+ * config/rs6000/rs6000.h (TARGET_NO_LWSYNC): Define.
+ * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define
+ __NO_LWSYNC__ if TARGET_NO_LWSYNC.
+ * config/rs6000/sync.md (lwsync): Emit plain sync if
+ TARGET_NO_LWSYNC.
+
2006-11-17 DJ Delorie <dj@redhat.com>
* reload1.c (reloads_unique_chain): New.
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 94d4a6a..d4988bd 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -127,6 +127,9 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
/* Used by lwarx/stwcx. errata work-around. */
if (rs6000_cpu == PROCESSOR_PPC405)
builtin_define ("__PPC405__");
+ /* Used by libstdc++. */
+ if (TARGET_NO_LWSYNC)
+ builtin_define ("__NO_LWSYNC__");
/* May be overridden by target configuration. */
RS6000_CPU_CPP_ENDIAN_BUILTINS();
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 6ccc3c0..0795e6e 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -342,6 +342,9 @@ extern enum rs6000_nop_insertion rs6000_sched_insert_nops;
#define TARGET_E500_SINGLE 0
#define TARGET_E500_DOUBLE 0
+/* E500 processors only support plain "sync", not lwsync. */
+#define TARGET_NO_LWSYNC TARGET_E500
+
/* Sometimes certain combinations of command options do not make sense
on a particular target machine. You can define a macro
`OVERRIDE_OPTIONS' to take account of this. This macro, if
diff --git a/gcc/config/rs6000/sync.md b/gcc/config/rs6000/sync.md
index b244ef6..b716647 100644
--- a/gcc/config/rs6000/sync.md
+++ b/gcc/config/rs6000/sync.md
@@ -615,6 +615,11 @@
[(set (mem:BLK (match_scratch 0 "X"))
(unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPEC_LWSYNC))]
""
- ".long 0x7c2004ac"
+{
+ if (TARGET_NO_LWSYNC)
+ return "sync";
+ else
+ return ".long 0x7c2004ac";
+}
[(set_attr "type" "sync")])