* src/atomic_ops/sysdeps/armcc/arm_v6.h (AO_nop_full): Insert
AO_compiler_barrier for AO_UNIPROCESSOR case.
* src/atomic_ops/sysdeps/gcc/arm.h (AO_nop_full): Likewise.
* src/atomic_ops/sysdeps/msftc/arm.h (AO_nop_full): Likewise.
* src/atomic_ops/sysdeps/msftc/arm.h (AO_nop_full): Refine comment.
__asm {
mcr p15,0,dest,c7,c10,5
};
+# else
+ AO_compiler_barrier();
# endif
}
#define AO_HAVE_nop_full
: "=&r"(dest)
: /* empty */
: AO_THUMB_SWITCH_CLOBBERS "memory");
+# else
+ AO_compiler_barrier();
# endif
}
#define AO_HAVE_nop_full
#if _M_ARM >= 6
/* ARMv6 is the first architecture providing support for simple LL/SC. */
-/* If only a single processor is used, we can define AO_UNIPROCESSOR */
-/* and do not need to access CP15 for ensuring a DMB at all. */
+/* If only a single processor is used, we can define AO_UNIPROCESSOR. */
#ifdef AO_UNIPROCESSOR
- AO_INLINE void AO_nop_full(void) {}
+ AO_INLINE void AO_nop_full(void)
+ {
+ AO_compiler_barrier();
+ }
# define AO_HAVE_nop_full
#else
/* AO_nop_full() is emulated using AO_test_and_set_full(). */