libstdc++-v3/config/cpu/m68k/atomicity.h

Sebastian Huber sebastian.huber@embedded-brains.de
Fri Sep 9 08:28:00 GMT 2016


Hello,

for RTEMS there is a special case in:

libstdc++-v3/config/cpu/m68k/atomicity.h

[...]
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
[...]
#elif defined(__rtems__)
   // TAS/JBNE is unsafe on systems with strict priority-based scheduling.
   // Disable interrupts, which we can do only from supervisor mode.
   _Atomic_word
   __attribute__ ((__unused__))
   __exchange_and_add(volatile _Atomic_word* __mem, int __val) throw ()
   {
     _Atomic_word __result;
     short __level, __tmpsr;
     __asm__ __volatile__ ("move%.w %%sr,%0\n\tor%.l %0,%1\n\tmove%.w 
%1,%%sr"
               : "=d"(__level), "=d"(__tmpsr) : "1"(0x700));

     __result = *__mem;
     *__mem = __result + __val;
     __asm__ __volatile__ ("move%.w %0,%%sr" : : "d"(__level));

     return __result;
   }

#else
[...]

Since C++14 is the default for GCC 6, would it be possible to use the 
standard atomic operations instead? For targets that don't support the 
operations in hardware, this would lead to a libatomic dependency.

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the Libstdc++ mailing list