mirror of git://git.musl-libc.org/musl
fix insufficient synchronization in sh atomic asm
while other usage I've seen only has the synco instruction after the atomic operation, I cannot find any documentation indicating that this is correct. certainly all stores before the atomic need to have been synchronized before the atomic operation takes place.
This commit is contained in:
parent
2068b4e891
commit
c394763d35
|
@ -1,7 +1,7 @@
|
|||
#include "libc.h"
|
||||
|
||||
#define LLSC_CLOBBERS "r0", "t", "memory"
|
||||
#define LLSC_START(mem) \
|
||||
#define LLSC_START(mem) "synco\n" \
|
||||
"0: movli.l @" mem ", r0\n"
|
||||
#define LLSC_END(mem) \
|
||||
"1: movco.l r0, @" mem "\n" \
|
||||
|
@ -99,6 +99,7 @@ void __sh_store(volatile int *p, int x)
|
|||
{
|
||||
if (__hwcap & CPU_HAS_LLSC) {
|
||||
__asm__ __volatile__(
|
||||
" synco\n"
|
||||
" mov.l %1, @%0\n"
|
||||
" synco\n"
|
||||
: : "r"(p), "r"(x) : "memory");
|
||||
|
|
Loading…
Reference in New Issue