diff options
author | Simon Marlow <marlowsd@gmail.com> | 2008-11-14 09:57:38 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2008-11-14 09:57:38 +0000 |
commit | fa4e32f81bcfbba98ba7e9d5cb96a74b75b052da (patch) | |
tree | a15f3b456a7a00383b6207dd540ff4798db6efc8 /includes | |
parent | 0b60725b6817a819b0d3c5ad940aef3eda008b88 (diff) | |
download | haskell-fa4e32f81bcfbba98ba7e9d5cb96a74b75b052da.tar.gz |
Omit definitions of cas() and xchg() in .hc code
They cause compilation errors (correctly) with newer gccs
Shows up compiling the RTS via C, which happens on Windows
Diffstat (limited to 'includes')
-rw-r--r-- | includes/SMP.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/includes/SMP.h b/includes/SMP.h index eaac770107..e3b4cd54a2 100644 --- a/includes/SMP.h +++ b/includes/SMP.h @@ -34,6 +34,12 @@ Atomic operations ------------------------------------------------------------------------- */ +#if !IN_STG_CODE +// We only want write_barrier() declared in .hc files. Defining the +// other inline functions here causes type mismatch errors from gcc, +// because the generated C code is assuming that there are no +// prototypes in scope. + /* * The atomic exchange operation: xchg(p,w) exchanges the value * pointed to by p with the value w, returning the old value. @@ -54,6 +60,8 @@ EXTERN_INLINE StgWord xchg(StgPtr p, StgWord w); */ EXTERN_INLINE StgWord cas(StgVolatilePtr p, StgWord o, StgWord n); +#endif // !IN_STG_CODE + /* * Prevents write operations from moving across this call in either * direction. @@ -63,6 +71,9 @@ EXTERN_INLINE void write_barrier(void); /* ---------------------------------------------------------------------------- Implementations ------------------------------------------------------------------------- */ + +#if !IN_STG_CODE + /* * NB: the xchg instruction is implicitly locked, so we do not need * a lock prefix here. @@ -149,6 +160,8 @@ cas(StgVolatilePtr p, StgWord o, StgWord n) #endif } +#endif // !IN_STG_CODE + /* * Write barrier - ensure that all preceding writes have happened * before all following writes. |