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.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/compiler/cbits/genSym.c b/compiler/cbits/genSym.c
index 08d403d849..70ea417c4b 100644
--- a/compiler/cbits/genSym.c
+++ b/compiler/cbits/genSym.c
@@ -2,16 +2,21 @@
#include "Rts.h"
static HsInt GenSymCounter = 0;
+static HsInt GenSymInc = 1;
HsInt genSym(void) {
#if defined(THREADED_RTS)
if (n_capabilities == 1) {
- return GenSymCounter++;
+ return GenSymCounter = (GenSymCounter + GenSymInc) & 0xFFFFFF;
} else {
- return atomic_inc((StgWord *)&GenSymCounter, 1);
+ return atomic_inc((StgWord *)&GenSymCounter, GenSymInc) & 0xFFFFFF;
}
#else
- return GenSymCounter++;
+ return GenSymCounter = (GenSymCounter + GenSymInc) & 0xFFFFFF;
#endif
}
+void initGenSym(HsInt NewGenSymCounter, HsInt NewGenSymInc) {
+ GenSymCounter = NewGenSymCounter;
+ GenSymInc = NewGenSymInc;
+}