ARM: Add ARMv6 or older __sync_synchronize built-in
* On ARMv6 or older, we do a simulated dsb. * Move __sync_synchronize into thread.c in libroot and use the new arch_atomic.h dsb/dmb defines. * Gets arm @bootstrap-raw to end of bootstrap.
This commit is contained in:
@@ -9,29 +9,41 @@
|
||||
#define _KERNEL_ARCH_ARM_ATOMIC_H
|
||||
|
||||
|
||||
#if __ARM_ARCH__ <= 6
|
||||
#define dsb() __asm__ __volatile__("mcr p15, 0, %0, c7, c10, 4" \
|
||||
: : "r" (0) : "memory")
|
||||
#define dmb() __asm__ __volatile__("mcr p15, 0, %0, c7, c10, 4" \
|
||||
: : "r" (0) : "memory")
|
||||
#else
|
||||
#define dsb() __asm__ __volatile__("dsb" : : : "memory")
|
||||
#define dmb() __asm__ __volatile__("dmb" : : : "memory")
|
||||
#endif
|
||||
|
||||
|
||||
static inline void
|
||||
memory_read_barrier_inline(void)
|
||||
{
|
||||
asm volatile ("":::"memory");
|
||||
dmb();
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
memory_write_barrier_inline(void)
|
||||
{
|
||||
asm volatile ("":::"memory");
|
||||
dmb();
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
memory_full_barrier_inline(void)
|
||||
{
|
||||
asm volatile ("":::"memory");
|
||||
dmb();
|
||||
}
|
||||
|
||||
|
||||
#define memory_read_barrier memory_read_barrier_inline
|
||||
#define memory_write_barrier memory_write_barrier_inline
|
||||
#define memory_full_barrier memory_full_barrier_inline
|
||||
#define memory_read_barrier memory_read_barrier_inline
|
||||
#define memory_write_barrier memory_write_barrier_inline
|
||||
#define memory_full_barrier memory_full_barrier_inline
|
||||
|
||||
|
||||
#endif // _KERNEL_ARCH_ARM_ATOMIC_H
|
||||
|
||||
Reference in New Issue
Block a user