[PATCH] ARM: allow inline atomics on Cortex M

Jonathan Roelofs jonathan at codesourcery.com
Mon Jun 16 14:21:59 PDT 2014



On 6/16/14, 3:00 PM, Phoebe Buckheister wrote:
> Current code to determine availability of atomics seems a bit
> incorrect, or at least weird.
>
> I don't quite understand why clang looks at the OS specified in the
> triple, as availability of atomic instructions doesn't depend on the
> OS; it only depends on the arch version and the execution mode. Atomics
> are there in ARM mode on v6 and later, and in Thumb mode on v7 and later
> (but no ldrexd/strexd in the M profile).
Clang is looking at the OS because these OSes support calling a kernel provided 
cmpxchg, which is what you need to make the __sync_* builtins work on pre v6 
hardware (and this is how they are implemented in libgcc).

Given that, I think that this check and comment:

```
-    // On linux, binaries targeting old cpus call functions in libgcc to
-    // perform atomic operations. The implementation in libgcc then calls into
-    // the kernel which on armv6 and newer uses ldrex and strex. The net result
-    // is that if we assume the kernel is at least as recent as the hardware,
-    // it is safe to use atomic instructions on armv6 and newer.
-    if (!T.isOSLinux() &&
-        T.getOS() != llvm::Triple::FreeBSD &&
-        T.getOS() != llvm::Triple::NetBSD &&
-        T.getOS() != llvm::Triple::Bitrig)
-      return false;
```

ought to really be placed as a fallback if the HW is older than v6.


Cheers,

Jon

>
> This patch is an attempt to rectify the situation: check only the arch
> version - correctly, as thumbv7em fails the old check - and allow
> atomics up to 32 bits on the ARMv7 M profiles.
>
> If the OS check has a reason I missed, I'll add it back - but bare
> metal wants atomics too ...
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>

-- 
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded



More information about the cfe-commits mailing list