dim added a comment.

In https://reviews.llvm.org/D28213#666269, @dim wrote:

> In https://reviews.llvm.org/D28213#666196, @mgorny wrote:
>
> >
>


...

>> What's the value of `__atomic_always_lock_free(sizeof(long long), 0)` for 
>> gcc and clang?
> 
> For gcc, it is always 0, for clang (I tested 3.4.1 through 4.0.0) it is 
> always 1.  Maybe that was always incorrect on 32-bit FreeBSD, then?

Hmm, I just noticed the following rather disappointing comment in 
`tools/clang/lib/Basic/Targets.cpp`:

  X86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
      : X86TargetInfo(Triple, Opts) {
    [...]
    // x86-32 has atomics up to 8 bytes
    // FIXME: Check that we actually have cmpxchg8b before setting
    // MaxAtomicInlineWidth. (cmpxchg8b is an i586 instruction.)
    MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;

So this can never have worked properly for e.g. i486 and i586...


Repository:
  rL LLVM

https://reviews.llvm.org/D28213



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to