X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2Fstg%2FSMP.h;fp=includes%2Fstg%2FSMP.h;h=ad8c0baef93ac47501300afa5bab3ba5cd3482bc;hb=565f3c753ccedeb19b5b8190090241a2185eb0cb;hp=b302f4886bdeaa234955519eaaed18cf0c3011b8;hpb=5ac6359ebd27b7a84eb63a3ea779d9ce6659ce76;p=ghc-hetmet.git diff --git a/includes/stg/SMP.h b/includes/stg/SMP.h index b302f48..ad8c0ba 100644 --- a/includes/stg/SMP.h +++ b/includes/stg/SMP.h @@ -293,6 +293,12 @@ load_load_barrier(void) { #endif } +// Load a pointer from a memory location that might be being modified +// concurrently. This prevents the compiler from optimising away +// multiple loads of the memory location, as it might otherwise do in +// a busy wait loop for example. +#define VOLATILE_LOAD(p) (*((StgVolatilePtr)(p))) + /* ---------------------------------------------------------------------- */ #else /* !THREADED_RTS */ @@ -331,6 +337,8 @@ atomic_dec(StgVolatilePtr p) return --(*p); } +#define VOLATILE_LOAD(p) ((StgWord)*((StgWord*)(p))) + #endif /* !THREADED_RTS */ #endif /* SMP_H */