|
|
@ -51,10 +51,10 @@ ck_pr_stall(void)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef CK_MD_RMO
|
|
|
|
#if defined(CK_MD_RMO) || defined(CK_MD_PSO)
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* By default, we will assume TSO model is used on SPARCv9.
|
|
|
|
* If RMO is forced, then do not assume TSO model.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
#define CK_PR_FENCE(T, I) \
|
|
|
|
#define CK_PR_FENCE(T, I) \
|
|
|
|
CK_CC_INLINE static void \
|
|
|
|
CK_CC_INLINE static void \
|
|
|
|
ck_pr_fence_strict_##T(void) \
|
|
|
|
ck_pr_fence_strict_##T(void) \
|
|
|
@ -63,12 +63,12 @@ ck_pr_stall(void)
|
|
|
|
} \
|
|
|
|
} \
|
|
|
|
CK_CC_INLINE static void ck_pr_fence_##T(void) \
|
|
|
|
CK_CC_INLINE static void ck_pr_fence_##T(void) \
|
|
|
|
{ \
|
|
|
|
{ \
|
|
|
|
__asm__ __volatile__("" ::: "memory"); \
|
|
|
|
__asm__ __volatile__(I ::: "memory"); \
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* If RMO is forced, then do not assume TSO model.
|
|
|
|
* By default, we will assume TSO model is used on SPARCv9.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
#define CK_PR_FENCE(T, I) \
|
|
|
|
#define CK_PR_FENCE(T, I) \
|
|
|
|
CK_CC_INLINE static void \
|
|
|
|
CK_CC_INLINE static void \
|
|
|
|
ck_pr_fence_strict_##T(void) \
|
|
|
|
ck_pr_fence_strict_##T(void) \
|
|
|
@ -77,9 +77,9 @@ ck_pr_stall(void)
|
|
|
|
} \
|
|
|
|
} \
|
|
|
|
CK_CC_INLINE static void ck_pr_fence_##T(void) \
|
|
|
|
CK_CC_INLINE static void ck_pr_fence_##T(void) \
|
|
|
|
{ \
|
|
|
|
{ \
|
|
|
|
__asm__ __volatile__(I ::: "memory"); \
|
|
|
|
__asm__ __volatile__("" ::: "memory"); \
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif /* CK_MD_RMO */
|
|
|
|
#endif /* !CK_MD_RMO && !CK_MD_PSO */
|
|
|
|
|
|
|
|
|
|
|
|
CK_PR_FENCE(load_depends, "")
|
|
|
|
CK_PR_FENCE(load_depends, "")
|
|
|
|
CK_PR_FENCE(store, "membar #StoreStore")
|
|
|
|
CK_PR_FENCE(store, "membar #StoreStore")
|
|
|
|