mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-05-13 18:10:19 +08:00
parent
3489e3b639
commit
1af372a5ee
@ -28,6 +28,9 @@
|
||||
#ifndef CK_CC_H
|
||||
#define CK_CC_H
|
||||
|
||||
#ifdef __rtems__
|
||||
#include <rtems/score/cpuopts.h>
|
||||
#endif /* __rtems__ */
|
||||
#if defined(__GNUC__) || defined(__SUNPRO_C)
|
||||
#include "gcc/ck_cc.h"
|
||||
#endif
|
||||
|
@ -54,7 +54,8 @@ ck_pr_stall(void)
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__)
|
||||
#if __ARM_ARCH >= 7 || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__)
|
||||
#ifdef RTEMS_SMP
|
||||
#define CK_ISB __asm __volatile("isb" : : "r" (0) : "memory")
|
||||
#define CK_DMB __asm __volatile("dmb" : : "r" (0) : "memory")
|
||||
#define CK_DSB __asm __volatile("dsb" : : "r" (0) : "memory")
|
||||
@ -64,6 +65,12 @@ ck_pr_stall(void)
|
||||
#else
|
||||
#define CK_DMB_ST __asm __volatile("dmb st" : : "r" (0) : "memory")
|
||||
#endif /* __FreeBSD__ */
|
||||
#else /* !RTEMS_SMP */
|
||||
#define CK_ISB __asm __volatile("" : : "r" (0) : "memory")
|
||||
#define CK_DMB __asm __volatile("" : : "r" (0) : "memory")
|
||||
#define CK_DSB __asm __volatile("" : : "r" (0) : "memory")
|
||||
#define CK_DMB_ST __asm __volatile("" : : "r" (0) : "memory")
|
||||
#endif /* RTEMS_SMP */
|
||||
#else
|
||||
/* armv6 doesn't have dsb/dmb/isb, and no way to wait only for stores */
|
||||
#define CK_ISB \
|
||||
|
@ -67,22 +67,28 @@ ck_pr_stall(void)
|
||||
__asm__ __volatile__(I ::: "memory"); \
|
||||
}
|
||||
|
||||
#ifdef RTEMS_SMP
|
||||
#ifdef CK_MD_PPC32_LWSYNC
|
||||
#define CK_PR_LWSYNCOP "lwsync"
|
||||
#else /* CK_MD_PPC32_LWSYNC_DISABLE */
|
||||
#define CK_PR_LWSYNCOP "sync"
|
||||
#endif
|
||||
#define CK_PR_SYNCOP "sync"
|
||||
#else /* !RTEMS_SMP */
|
||||
#define CK_PR_LWSYNCOP ""
|
||||
#define CK_PR_SYNCOP ""
|
||||
#endif /* RTEMS_SMP */
|
||||
|
||||
CK_PR_FENCE(atomic, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(atomic_store, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(atomic_load, "sync")
|
||||
CK_PR_FENCE(atomic_load, CK_PR_SYNCOP)
|
||||
CK_PR_FENCE(store_atomic, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(load_atomic, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(store, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(store_load, "sync")
|
||||
CK_PR_FENCE(store_load, CK_PR_SYNCOP)
|
||||
CK_PR_FENCE(load, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(load_store, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(memory, "sync")
|
||||
CK_PR_FENCE(memory, CK_PR_SYNCOP)
|
||||
CK_PR_FENCE(acquire, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(release, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(acqrel, CK_PR_LWSYNCOP)
|
||||
@ -90,6 +96,7 @@ CK_PR_FENCE(lock, CK_PR_LWSYNCOP)
|
||||
CK_PR_FENCE(unlock, CK_PR_LWSYNCOP)
|
||||
|
||||
#undef CK_PR_LWSYNCOP
|
||||
#undef CK_PR_SYNCOP
|
||||
|
||||
#undef CK_PR_FENCE
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user