mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-02 16:23:56 +08:00
atomicity.h (__exchange_and_add): Use TAS on __mcf5400__.
* config/cpu/m68k/atomicity.h (__exchange_and_add): Use TAS on __mcf5400__. Don't rely on __mc68000__ to detect a bare 68000. Document SMP safeness of asm macros. From-SVN: r72570
This commit is contained in:
parent
1e8a52484b
commit
068c84e3b5
@ -1,3 +1,9 @@
|
||||
2003-10-16 Bernardo Innocenti <bernie@develer.com>
|
||||
|
||||
* config/cpu/m68k/atomicity.h (__exchange_and_add): Use TAS on
|
||||
__mcf5400__. Don't rely on __mc68000__ to detect a bare 68000.
|
||||
Document SMP safeness of asm macros.
|
||||
|
||||
2003-10-16 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
* src/locale.cc (locale::locale(const char*)): Tweak
|
||||
|
@ -94,22 +94,25 @@ __exchange_and_add (volatile _Atomic_word *__mem, int __val)
|
||||
{
|
||||
_Atomic_word __result;
|
||||
|
||||
// bset with no immediate addressing
|
||||
#if defined(__mcf5200__) || defined(__mcf5300__) || defined(__mcf5400__)
|
||||
// bset with no immediate addressing (not SMP-safe)
|
||||
#if defined(__mcf5200__) || defined(__mcf5300__)
|
||||
__asm__ __volatile__("1: bset.b #7,%0@\n\tjbne 1b"
|
||||
: /* no outputs */
|
||||
: "a"(&__Atomicity_lock<0>::_S_atomicity_lock)
|
||||
: "cc", "memory");
|
||||
|
||||
// bset with immediate addressing
|
||||
#elif defined(__mc68000__)
|
||||
__asm__ __volatile__("1: bset.b #7,%0\n\tjbne 1b"
|
||||
// CPU32 and MCF5400 support test-and-set (SMP-safe).
|
||||
#elif defined(__mcpu32__) || defined(__mcf5400__)
|
||||
__asm__ __volatile__("1: tas %0\n\tjbne 1b"
|
||||
: "+m"(__Atomicity_lock<0>::_S_atomicity_lock)
|
||||
: /* none */
|
||||
: "cc");
|
||||
|
||||
#else // 680x0, cpu32, 5400 support test-and-set.
|
||||
__asm__ __volatile__("1: tas %0\n\tjbne 1b"
|
||||
// Use bset with immediate addressing for 68000/68010 (not SMP-safe)
|
||||
// NOTE: TAS is available on the 68000, but unsupported by some Amiga
|
||||
// memory controllers.
|
||||
#else
|
||||
__asm__ __volatile__("1: bset.b #7,%0\n\tjbne 1b"
|
||||
: "+m"(__Atomicity_lock<0>::_S_atomicity_lock)
|
||||
: /* none */
|
||||
: "cc");
|
||||
|
Loading…
Reference in New Issue
Block a user