perf: Key the interpreter symbol cache by Name rather than FastString
[ghc.git] / rts / ClosureSize.c
blob23d6eb4b6d313db4d83532a1348be1ad5be42947
1 /* -----------------------------------------------------------------------------
3 * (c) The GHC Team 2021
5 * Implementation of closure_sizeW_
7 * ---------------------------------------------------------------------------*/
9 #include "Rts.h"
11 uint32_t
12 closure_sizeW_ (const StgClosure *p, const StgInfoTable *info)
14 switch (info->type) {
15 case THUNK_0_1:
16 case THUNK_1_0:
17 return sizeofW(StgThunk) + 1;
18 case FUN_0_1:
19 case CONSTR_0_1:
20 case FUN_1_0:
21 case CONSTR_1_0:
22 return sizeofW(StgHeader) + 1;
23 case THUNK_0_2:
24 case THUNK_1_1:
25 case THUNK_2_0:
26 return sizeofW(StgThunk) + 2;
27 case FUN_0_2:
28 case CONSTR_0_2:
29 case FUN_1_1:
30 case CONSTR_1_1:
31 case FUN_2_0:
32 case CONSTR_2_0:
33 return sizeofW(StgHeader) + 2;
34 case THUNK:
35 return thunk_sizeW_fromITBL(info);
36 case THUNK_SELECTOR:
37 return THUNK_SELECTOR_sizeW();
38 case AP_STACK:
39 return ap_stack_sizeW((StgAP_STACK *)p);
40 case AP:
41 return ap_sizeW((StgAP *)p);
42 case PAP:
43 return pap_sizeW((StgPAP *)p);
44 case IND:
45 return sizeofW(StgInd);
46 case ARR_WORDS:
47 return arr_words_sizeW((StgArrBytes *)p);
48 case MUT_ARR_PTRS_CLEAN:
49 case MUT_ARR_PTRS_DIRTY:
50 case MUT_ARR_PTRS_FROZEN_CLEAN:
51 case MUT_ARR_PTRS_FROZEN_DIRTY:
52 return mut_arr_ptrs_sizeW((StgMutArrPtrs*)p);
53 case SMALL_MUT_ARR_PTRS_CLEAN:
54 case SMALL_MUT_ARR_PTRS_DIRTY:
55 case SMALL_MUT_ARR_PTRS_FROZEN_CLEAN:
56 case SMALL_MUT_ARR_PTRS_FROZEN_DIRTY:
57 return small_mut_arr_ptrs_sizeW((StgSmallMutArrPtrs*)p);
58 case TSO:
59 return sizeofW(StgTSO);
60 case STACK:
61 return stack_sizeW((StgStack*)p);
62 case BCO:
63 return bco_sizeW((StgBCO *)p);
64 case TREC_CHUNK:
65 return sizeofW(StgTRecChunk);
66 case CONTINUATION:
67 return continuation_sizeW((StgContinuation *)p);
68 default:
69 return sizeW_fromITBL(info);