projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove accidental extra in previous patch
[ghc-hetmet.git]
/
ghc
/
includes
/
Cmm.h
diff --git
a/ghc/includes/Cmm.h
b/ghc/includes/Cmm.h
index
09320a0
..
783b0e4
100644
(file)
--- a/
ghc/includes/Cmm.h
+++ b/
ghc/includes/Cmm.h
@@
-232,9
+232,11
@@
#define ENTER() \
again: \
#define ENTER() \
again: \
+ W_ info; \
+ info = %INFO_PTR(R1); \
switch [INVALID_OBJECT .. N_CLOSURE_TYPES] \
switch [INVALID_OBJECT .. N_CLOSURE_TYPES] \
- (TO_W_( %INFO_TYPE(%GET_STD_INFO(R1)) )) { \
- case \
+ (TO_W_( %INFO_TYPE(%STD_INFO(info)) )) { \
+ case \
IND, \
IND_OLDGEN, \
IND_PERM, \
IND, \
IND_OLDGEN, \
IND_PERM, \
@@
-244,7
+246,7
@@
R1 = StgInd_indirectee(R1); \
goto again; \
} \
R1 = StgInd_indirectee(R1); \
goto again; \
} \
- case \
+ case \
BCO, \
FUN, \
FUN_1_0, \
BCO, \
FUN, \
FUN_1_0, \
@@
-259,7
+261,7
@@
} \
default: \
{ \
} \
default: \
{ \
- jump %GET_ENTRY(R1); \
+ jump %ENTRY_CODE(info); \
} \
}
} \
}
@@
-292,6
+294,8
@@
#error mp_limb_t != StgWord: assumptions in PrimOps.cmm are now false
#endif
#error mp_limb_t != StgWord: assumptions in PrimOps.cmm are now false
#endif
+#define MyCapability() (BaseReg - OFFSET_Capability_r)
+
/* -------------------------------------------------------------------------
Allocation and garbage collection
------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------
Allocation and garbage collection
------------------------------------------------------------------------- */
@@
-317,8
+321,11
@@
HP_CHK_GEN(alloc,liveness,reentry); \
TICK_ALLOC_HEAP_NOCTR(alloc);
HP_CHK_GEN(alloc,liveness,reentry); \
TICK_ALLOC_HEAP_NOCTR(alloc);
+// allocateLocal() allocates from the nursery, so we check to see
+// whether the nursery is nearly empty in any function that uses
+// allocateLocal() - this includes many of the primops.
#define MAYBE_GC(liveness,reentry) \
#define MAYBE_GC(liveness,reentry) \
- if (CInt[alloc_blocks] >= CInt[alloc_blocks_lim]) { \
+ if (bdescr_link(CurrentNursery) == NULL || CInt[alloc_blocks] >= CInt[alloc_blocks_lim]) { \
R9 = liveness; \
R10 = reentry; \
jump stg_gc_gen_hp; \
R9 = liveness; \
R10 = reentry; \
jump stg_gc_gen_hp; \
@@
-335,11
+342,7
@@
* the value from GHC, but it seems like too much trouble to do that
* for StgThunkHeader.
*/
* the value from GHC, but it seems like too much trouble to do that
* for StgThunkHeader.
*/
-#ifdef SMP
#define SIZEOF_StgThunkHeader SIZEOF_StgHeader+SIZEOF_StgSMPThunkHeader
#define SIZEOF_StgThunkHeader SIZEOF_StgHeader+SIZEOF_StgSMPThunkHeader
-#else
-#define SIZEOF_StgThunkHeader SIZEOF_StgHeader
-#endif
#define StgThunk_payload(__ptr__,__ix__) \
W_[__ptr__+SIZEOF_StgThunkHeader+ WDS(__ix__)]
#define StgThunk_payload(__ptr__,__ix__) \
W_[__ptr__+SIZEOF_StgThunkHeader+ WDS(__ix__)]
@@
-383,8
+386,8
@@
*/
#define StgFunInfoExtra_slow_apply(fun_info) \
*/
#define StgFunInfoExtra_slow_apply(fun_info) \
- (StgFunInfoExtraRev_slow_apply_offset(fun_info) \
- + (fun_info) + SIZEOF_StgFunInfoExtraRev + SIZEOF_StgInfoTable)
+ (TO_W_(StgFunInfoExtraRev_slow_apply_offset(fun_info)) \
+ + (fun_info) + SIZEOF_StgFunInfoExtraRev + SIZEOF_StgInfoTable)
#define StgFunInfoExtra_fun_type(i) StgFunInfoExtraRev_fun_type(i)
#define StgFunInfoExtra_arity(i) StgFunInfoExtraRev_arity(i)
#define StgFunInfoExtra_fun_type(i) StgFunInfoExtraRev_fun_type(i)
#define StgFunInfoExtra_arity(i) StgFunInfoExtraRev_arity(i)