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
This commit is contained in:
Joseph Myers 2006-11-18 00:22:45 +00:00 committed by Joseph Myers
parent 0828ca7e69
commit 8609875306
6 changed files with 29 additions and 1 deletions

View File

@ -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.

View File

@ -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();

View File

@ -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

View File

@ -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")])

View File

@ -1,3 +1,8 @@
2006-11-18 Joseph Myers <joseph@codesourcery.com>
* config/cpu/powerpc/atomic_word.h (_GLIBCXX_WRITE_MEM_BARRIER):
Use plain sync if __NO_LWSYNC__.
2006-11-14 Joseph Myers <joseph@codesourcery.com>
* testsuite/26_numerics/complex/13450.cc: Do not test long double

View File

@ -33,6 +33,10 @@
typedef int _Atomic_word;
#define _GLIBCXX_READ_MEM_BARRIER __asm __volatile ("isync":::"memory")
#ifdef __NO_LWSYNC__
#define _GLIBCXX_WRITE_MEM_BARRIER __asm __volatile ("sync":::"memory")
#else
#define _GLIBCXX_WRITE_MEM_BARRIER __asm __volatile ("lwsync":::"memory")
#endif
#endif