On 17/05/16 22:19, Richard Henderson wrote: > On 05/17/2016 10:13 AM, Sergey Fedorov wrote: >>>> +static inline void qemu_spin_lock(QemuSpin *spin) >>>> +{ >>>> + while (atomic_test_and_set_acquire(&spin->value)) { >> >From gcc-4.8 info page, node "__atomic Builtins", description of >> __atomic_test_and_set(): >> >> It should be only used for operands of type 'bool' or 'char'. >> > Hum. I thought I remembered all operand sizes there, but I've just re-checked > and you're right about bool (and really only bool). > > Perhaps we should just stick with __sync_test_and_set then. I'm thinking here > of e.g. armv6, a reasonable host, which can't operate on 1 byte atomic values. >
Sorry, I can't see reading ARMv6 ARM that 1-byte access can't be atomic. What I've found: B2.4.1 Normal memory attribute (snip) Shared Normal memory (snip) ... Reads to Shared Normal Memory that are aligned in memory to the size of the access must be atomic. Kind regards, Sergey