• Davi Arnaut's avatar
    Bug#56760: my_atomics failures on osx10.5-x86-64bit · 86ec0f98
    Davi Arnaut authored
    The problem was due to a misuse of GCC asm constraints used to
    implement a atomic load. On x86_64, the load was implemented
    as a cmpxchg which implicitly uses the eax register as a
    source and destination operand, yet the dummy value used for
    comparison wasn't being properly loaded into eax (and other
    problems).
    
    The core problem is that cmpxchg is unnecessary as a load
    on x86_64 as there are other simpler instructions such
    as xadd. Even though, such instructions are only used to
    have a memory barrier as load and stores are atomic by
    definition. Hence, the solution is to explicitly issue the
    required CPU and compiler barriers.
    86ec0f98
x86-gcc.h 5.64 KB