__atomic_load doesn't match ACQUIRE memory model
Bug #1084010 reported by
Yvan Roux
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Linaro GCC |
Fix Released
|
Undecided
|
Yvan Roux |
Bug Description
Compiling this code for ARMv7
int v;
int foo()
{
return __atomic_load_n (&v, __ATOMIC_ACQUIRE);
}
generates a data memory barrier defore the load:
foo:
movw r3, #:lower16:v
movt r3, #:upper16:v
dmb sy
ldr r0, [r3, #0]
bx lr
But, the `Acquire’ semantics imply that no reads in the current thread
dependent on the value currently loaded can be reordered before this load.
Thus, the barrier needs to be after the load and not before.
This problem is referenced in GCC PR http://
Changed in gcc-linaro: | |
status: | In Progress → Fix Committed |
Changed in gcc-linaro: | |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
Fix commited upstream r194490 and 194504