summaryrefslogtreecommitdiff
path: root/compiler/cbits/genSym.c
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/cbits/genSym.c')
-rw-r--r--compiler/cbits/genSym.c32
1 files changed, 5 insertions, 27 deletions
diff --git a/compiler/cbits/genSym.c b/compiler/cbits/genSym.c
index ecb318d5a8..8a47d77f27 100644
--- a/compiler/cbits/genSym.c
+++ b/compiler/cbits/genSym.c
@@ -2,39 +2,17 @@
#include <assert.h>
#include "Unique.h"
-static HsInt GenSymCounter = 0;
-static HsInt GenSymInc = 1;
+HsInt ghc_unique_counter = 0;
+HsInt ghc_unique_inc = 1;
#define UNIQUE_BITS (sizeof (HsInt) * 8 - UNIQUE_TAG_BITS)
#define UNIQUE_MASK ((1ULL << UNIQUE_BITS) - 1)
-STATIC_INLINE void checkUniqueRange(HsInt u STG_UNUSED) {
+HsInt genSym(void) {
+ HsInt u = atomic_inc((StgWord *)&ghc_unique_counter, ghc_unique_inc) & UNIQUE_MASK;
#if DEBUG
// Uh oh! We will overflow next time a unique is requested.
assert(u != UNIQUE_MASK);
#endif
-}
-
-HsInt genSym(void) {
-#if defined(THREADED_RTS)
- if (n_capabilities == 1) {
- GenSymCounter = (GenSymCounter + GenSymInc) & UNIQUE_MASK;
- checkUniqueRange(GenSymCounter);
- return GenSymCounter;
- } else {
- HsInt n = atomic_inc((StgWord *)&GenSymCounter, GenSymInc)
- & UNIQUE_MASK;
- checkUniqueRange(n);
- return n;
- }
-#else
- GenSymCounter = (GenSymCounter + GenSymInc) & UNIQUE_MASK;
- checkUniqueRange(GenSymCounter);
- return GenSymCounter;
-#endif
-}
-
-void initGenSym(HsInt NewGenSymCounter, HsInt NewGenSymInc) {
- GenSymCounter = NewGenSymCounter;
- GenSymInc = NewGenSymInc;
+ return u;
}