diff options
Diffstat (limited to 'includes/Cmm.h')
-rw-r--r-- | includes/Cmm.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/includes/Cmm.h b/includes/Cmm.h index 99f5233ab5..e7d4b4944f 100644 --- a/includes/Cmm.h +++ b/includes/Cmm.h @@ -308,7 +308,9 @@ #define ENTER_(ret,x) \ again: \ W_ info; \ - LOAD_INFO(ret,x) \ + LOAD_INFO(ret,x) \ + /* See Note [Heap memory barriers] in SMP.h */ \ + prim_read_barrier; \ switch [INVALID_OBJECT .. N_CLOSURE_TYPES] \ (TO_W_( %INFO_TYPE(%STD_INFO(info)) )) { \ case \ @@ -631,6 +633,14 @@ #define OVERWRITING_CLOSURE_OFS(c,n) /* nothing */ #endif +// Memory barriers. +// For discussion of how these are used to fence heap object +// accesses see Note [Heap memory barriers] in SMP.h. +#if defined(THREADED_RTS) +#define prim_read_barrier prim %read_barrier() +#else +#define prim_read_barrier /* nothing */ +#endif #if defined(THREADED_RTS) #define prim_write_barrier prim %write_barrier() #else |