projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2005-02-25 10:45:25 by simonmar]
[ghc-hetmet.git]
/
ghc
/
rts
/
GCCompact.c
diff --git
a/ghc/rts/GCCompact.c
b/ghc/rts/GCCompact.c
index
2f124d5
..
30836e3
100644
(file)
--- a/
ghc/rts/GCCompact.c
+++ b/
ghc/rts/GCCompact.c
@@
-113,19
+113,19
@@
obj_sizeW( StgClosure *p, StgInfoTable *info )
case CONSTR_0_1:
case FUN_1_0:
case CONSTR_1_0:
case CONSTR_0_1:
case FUN_1_0:
case CONSTR_1_0:
- return sizeofW(StgHeader) + 1;
case THUNK_0_1:
case THUNK_0_1:
+ case THUNK_1_0:
+ return sizeofW(StgHeader) + 1;
case THUNK_0_2:
case FUN_0_2:
case CONSTR_0_2:
case THUNK_0_2:
case FUN_0_2:
case CONSTR_0_2:
- case THUNK_1_0:
case THUNK_1_1:
case FUN_1_1:
case CONSTR_1_1:
case THUNK_2_0:
case FUN_2_0:
case CONSTR_2_0:
case THUNK_1_1:
case FUN_1_1:
case CONSTR_1_1:
case THUNK_2_0:
case FUN_2_0:
case CONSTR_2_0:
- return sizeofW(StgHeader) + 2; // MIN_UPD_SIZE
+ return sizeofW(StgHeader) + 2;
case THUNK_SELECTOR:
return THUNK_SELECTOR_sizeW();
case AP_STACK:
case THUNK_SELECTOR:
return THUNK_SELECTOR_sizeW();
case AP_STACK:
@@
-137,6
+137,7
@@
obj_sizeW( StgClosure *p, StgInfoTable *info )
return arr_words_sizeW((StgArrWords *)p);
case MUT_ARR_PTRS:
case MUT_ARR_PTRS_FROZEN:
return arr_words_sizeW((StgArrWords *)p);
case MUT_ARR_PTRS:
case MUT_ARR_PTRS_FROZEN:
+ case MUT_ARR_PTRS_FROZEN0:
return mut_arr_ptrs_sizeW((StgMutArrPtrs*)p);
case TSO:
return tso_sizeW((StgTSO *)p);
return mut_arr_ptrs_sizeW((StgMutArrPtrs*)p);
case TSO:
return tso_sizeW((StgTSO *)p);
@@
-461,6
+462,7
@@
update_fwd_large( bdescr *bd )
case MUT_ARR_PTRS:
case MUT_ARR_PTRS_FROZEN:
case MUT_ARR_PTRS:
case MUT_ARR_PTRS_FROZEN:
+ case MUT_ARR_PTRS_FROZEN0:
// follow everything
{
StgPtr next;
// follow everything
{
StgPtr next;
@@
-496,6
+498,7
@@
thread_obj (StgInfoTable *info, StgPtr p)
switch (info->type) {
case FUN_0_1:
case CONSTR_0_1:
switch (info->type) {
case FUN_0_1:
case CONSTR_0_1:
+ case THUNK_0_1:
return p + sizeofW(StgHeader) + 1;
case FUN_1_0:
return p + sizeofW(StgHeader) + 1;
case FUN_1_0:
@@
-505,9
+508,8
@@
thread_obj (StgInfoTable *info, StgPtr p)
case THUNK_1_0:
thread((StgPtr)&((StgClosure *)p)->payload[0]);
case THUNK_1_0:
thread((StgPtr)&((StgClosure *)p)->payload[0]);
- return p + sizeofW(StgHeader) + 2; // MIN_UPD_SIZE
+ return p + sizeofW(StgHeader) + 1;
- case THUNK_0_1: // MIN_UPD_SIZE
case THUNK_0_2:
case FUN_0_2:
case CONSTR_0_2:
case THUNK_0_2:
case FUN_0_2:
case CONSTR_0_2:
@@
-542,7
+544,6
@@
thread_obj (StgInfoTable *info, StgPtr p)
case STABLE_NAME:
case IND_PERM:
case MUT_VAR:
case STABLE_NAME:
case IND_PERM:
case MUT_VAR:
- case MUT_CONS:
case CAF_BLACKHOLE:
case SE_CAF_BLACKHOLE:
case SE_BLACKHOLE:
case CAF_BLACKHOLE:
case SE_CAF_BLACKHOLE:
case SE_BLACKHOLE:
@@
-582,8
+583,8
@@
thread_obj (StgInfoTable *info, StgPtr p)
case IND_OLDGEN:
case IND_OLDGEN_PERM:
case IND_OLDGEN:
case IND_OLDGEN_PERM:
- thread((StgPtr)&((StgIndOldGen *)p)->indirectee);
- return p + sizeofW(StgIndOldGen);
+ thread((StgPtr)&((StgInd *)p)->indirectee);
+ return p + sizeofW(StgInd);
case THUNK_SELECTOR:
{
case THUNK_SELECTOR:
{
@@
-604,6
+605,7
@@
thread_obj (StgInfoTable *info, StgPtr p)
case MUT_ARR_PTRS:
case MUT_ARR_PTRS_FROZEN:
case MUT_ARR_PTRS:
case MUT_ARR_PTRS_FROZEN:
+ case MUT_ARR_PTRS_FROZEN0:
// follow everything
{
StgPtr next;
// follow everything
{
StgPtr next;
@@
-841,7
+843,7
@@
update_bkwd_compact( step *stp )
// Rebuild the mutable list for the old generation.
if (ip_MUTABLE(info)) {
// Rebuild the mutable list for the old generation.
if (ip_MUTABLE(info)) {
- recordMutable((StgMutClosure *)free);
+ recordMutable((StgClosure *)free);
}
// relocate TSOs
}
// relocate TSOs
@@
-868,19
+870,6
@@
update_bkwd_compact( step *stp )
return free_blocks;
}
return free_blocks;
}
-static void
-thread_mut_once_list( generation *g )
-{
- StgMutClosure *p, *next;
-
- for (p = g->mut_once_list; p != END_MUT_LIST; p = next) {
- next = p->mut_link;
- thread((StgPtr)&p->mut_link);
- }
-
- thread((StgPtr)&g->mut_once_list);
-}
-
void
compact( void (*get_roots)(evac_fn) )
{
void
compact( void (*get_roots)(evac_fn) )
{
@@
-900,8
+889,13
@@
compact( void (*get_roots)(evac_fn) )
// mutable lists
for (g = 1; g < RtsFlags.GcFlags.generations; g++) {
// mutable lists
for (g = 1; g < RtsFlags.GcFlags.generations; g++) {
- thread((StgPtr)&generations[g].mut_list);
- thread_mut_once_list(&generations[g]);
+ bdescr *bd;
+ StgPtr p;
+ for (bd = generations[g].mut_list; bd != NULL; bd = bd->link) {
+ for (p = bd->start; p < bd->free; p++) {
+ thread(p);
+ }
+ }
}
// the global thread list
}
// the global thread list