gcc/ck_pr: GCC-backed primitives should serve as compiler barriers.

Olivier pointed out that he was seeing some load / store operations
get optimized away and / or re-ordered otherwise.
ck_pring
Samy Al Bahra 10 years ago
parent 8ee26212f9
commit 63d6c00c3d

@ -60,28 +60,39 @@ ck_pr_barrier(void)
ck_pr_md_load_##S(const M *target) \
{ \
T r; \
ck_pr_barrier(); \
r = CK_PR_ACCESS(*(T *)target); \
ck_pr_barrier(); \
return (r); \
} \
CK_CC_INLINE static void \
ck_pr_md_store_##S(M *target, T v) \
{ \
ck_pr_barrier(); \
CK_PR_ACCESS(*(T *)target) = v; \
ck_pr_barrier(); \
return; \
}
CK_CC_INLINE static void *
ck_pr_md_load_ptr(const void *target)
{
void *r;
return CK_PR_ACCESS(*(void **)target);
ck_pr_barrier();
r = CK_PR_ACCESS(*(void **)target);
ck_pr_barrier();
return r;
}
CK_CC_INLINE static void
ck_pr_md_store_ptr(void *target, const void *v)
{
ck_pr_barrier();
CK_PR_ACCESS(*(void **)target) = (void *)v;
ck_pr_barrier();
return;
}

Loading…
Cancel
Save