projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ext-core: twiddle primitive things
[ghc-hetmet.git]
/
includes
/
SMP.h
diff --git
a/includes/SMP.h
b/includes/SMP.h
index
eaac770
..
bf23e08
100644
(file)
--- a/
includes/SMP.h
+++ b/
includes/SMP.h
@@
-16,14
+16,6
@@
* Unregisterised builds are ok, but only 1 CPU supported.
*/
* Unregisterised builds are ok, but only 1 CPU supported.
*/
-#ifdef CMINUSMINUS
-
-#define unlockClosure(ptr,info) \
- prim %write_barrier() []; \
- StgHeader_info(ptr) = info;
-
-#else
-
#if defined(THREADED_RTS)
#if defined(TICKY_TICKY)
#if defined(THREADED_RTS)
#if defined(TICKY_TICKY)
@@
-34,6
+26,12
@@
Atomic operations
------------------------------------------------------------------------- */
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.
/*
* The atomic exchange operation: xchg(p,w) exchanges the value
* pointed to by p with the value w, returning the old value.
@@
-54,6
+52,8
@@
EXTERN_INLINE StgWord xchg(StgPtr p, StgWord w);
*/
EXTERN_INLINE StgWord cas(StgVolatilePtr p, StgWord o, StgWord n);
*/
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.
/*
* Prevents write operations from moving across this call in either
* direction.
@@
-63,6
+63,9
@@
EXTERN_INLINE void write_barrier(void);
/* ----------------------------------------------------------------------------
Implementations
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------------
Implementations
------------------------------------------------------------------------- */
+
+#if !IN_STG_CODE
+
/*
* NB: the xchg instruction is implicitly locked, so we do not need
* a lock prefix here.
/*
* NB: the xchg instruction is implicitly locked, so we do not need
* a lock prefix here.
@@
-149,6
+152,8
@@
cas(StgVolatilePtr p, StgWord o, StgWord n)
#endif
}
#endif
}
+#endif // !IN_STG_CODE
+
/*
* Write barrier - ensure that all preceding writes have happened
* before all following writes.
/*
* Write barrier - ensure that all preceding writes have happened
* before all following writes.
@@
-190,6
+195,4
@@
xchg(StgPtr p, StgWord w)
#endif /* !THREADED_RTS */
#endif /* !THREADED_RTS */
-#endif /* CMINUSMINUS */
-
#endif /* SMP_H */
#endif /* SMP_H */