diff options
| author | Simon Marlow <simonmar@microsoft.com> | 2007-02-27 13:46:09 +0000 |
|---|---|---|
| committer | Simon Marlow <simonmar@microsoft.com> | 2007-02-27 13:46:09 +0000 |
| commit | b067bdc33ce1a0bb01957b0bcfbb1c516dba53a4 (patch) | |
| tree | ca8c9a739185c3714fa795c1924b5bd781c21bbd /rts | |
| parent | f38310c9d33a263a610005996f32f3d7d2e25c44 (diff) | |
| download | haskell-b067bdc33ce1a0bb01957b0bcfbb1c516dba53a4.tar.gz | |
Remove the itbls field of BCO, put itbls in with the literals
This is a simplification & minor optimisation for GHCi
Diffstat (limited to 'rts')
| -rw-r--r-- | rts/Disassembler.c | 5 | ||||
| -rw-r--r-- | rts/Interpreter.c | 7 | ||||
| -rw-r--r-- | rts/PrimOps.cmm | 12 | ||||
| -rw-r--r-- | rts/Sanity.c | 1 | ||||
| -rw-r--r-- | rts/sm/Compact.c | 1 | ||||
| -rw-r--r-- | rts/sm/Scav.c | 2 |
6 files changed, 8 insertions, 20 deletions
diff --git a/rts/Disassembler.c b/rts/Disassembler.c index f29cce2daa..4407c77f3b 100644 --- a/rts/Disassembler.c +++ b/rts/Disassembler.c @@ -41,9 +41,6 @@ disInstr ( StgBCO *bco, int pc ) StgMutArrPtrs* ptrs_arr = bco->ptrs; StgPtr* ptrs = (StgPtr*)(&ptrs_arr->payload[0]); - StgArrWords* itbls_arr = bco->itbls; - StgInfoTable** itbls = (StgInfoTable**)(&itbls_arr->payload[0]); - instr = instrs[pc++]; switch (instr) { case bci_SWIZZLE: @@ -163,7 +160,7 @@ disInstr ( StgBCO *bco, int pc ) pc += 1; break; case bci_PACK: debugBelch("PACK %d words with itbl ", instrs[pc+1] ); - printPtr( (StgPtr)itbls[instrs[pc]] ); + printPtr( (StgPtr)literals[instrs[pc]] ); debugBelch("\n"); pc += 2; break; diff --git a/rts/Interpreter.c b/rts/Interpreter.c index 0312d3d842..62fd2c2ef2 100644 --- a/rts/Interpreter.c +++ b/rts/Interpreter.c @@ -54,7 +54,6 @@ #define BCO_PTR(n) (W_)ptrs[n] #define BCO_LIT(n) literals[n] -#define BCO_ITBL(n) itbls[n] #define LOAD_STACK_POINTERS \ Sp = cap->r.rCurrentTSO->sp; \ @@ -729,8 +728,6 @@ run_BCO: register StgWord16* instrs = (StgWord16*)(bco->instrs->payload); register StgWord* literals = (StgWord*)(&bco->literals->payload[0]); register StgPtr* ptrs = (StgPtr*)(&bco->ptrs->payload[0]); - register StgInfoTable** itbls = (StgInfoTable**) - (&bco->itbls->payload[0]); #ifdef INTERP_STATS it_lastopc = 0; /* no opcode */ @@ -1018,12 +1015,12 @@ run_BCO: int i; int o_itbl = BCO_NEXT; int n_words = BCO_NEXT; - StgInfoTable* itbl = INFO_PTR_TO_STRUCT(BCO_ITBL(o_itbl)); + StgInfoTable* itbl = INFO_PTR_TO_STRUCT(BCO_LIT(o_itbl)); int request = CONSTR_sizeW( itbl->layout.payload.ptrs, itbl->layout.payload.nptrs ); StgClosure* con = (StgClosure*)allocate_NONUPD(request); ASSERT( itbl->layout.payload.ptrs + itbl->layout.payload.nptrs > 0); - SET_HDR(con, BCO_ITBL(o_itbl), CCS_SYSTEM/*ToDo*/); + SET_HDR(con, (StgInfoTable*)BCO_LIT(o_itbl), CCS_SYSTEM/*ToDo*/); for (i = 0; i < n_words; i++) { con->payload[i] = (StgClosure*)Sp[i]; } diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm index e0823e4eaf..955e50bbff 100644 --- a/rts/PrimOps.cmm +++ b/rts/PrimOps.cmm @@ -1900,17 +1900,16 @@ newBCOzh_fast /* R1 = instrs R2 = literals R3 = ptrs - R4 = itbls - R5 = arity - R6 = bitmap array + R4 = arity + R5 = bitmap array */ W_ bco, bitmap_arr, bytes, words; - bitmap_arr = R6; + bitmap_arr = R5; words = BYTES_TO_WDS(SIZEOF_StgBCO) + StgArrWords_words(bitmap_arr); bytes = WDS(words); - ALLOC_PRIM( bytes, R1_PTR&R2_PTR&R3_PTR&R4_PTR&R6_PTR, newBCOzh_fast ); + ALLOC_PRIM( bytes, R1_PTR&R2_PTR&R3_PTR&R5_PTR, newBCOzh_fast ); bco = Hp - bytes + WDS(1); SET_HDR(bco, stg_BCO_info, W_[CCCS]); @@ -1918,8 +1917,7 @@ newBCOzh_fast StgBCO_instrs(bco) = R1; StgBCO_literals(bco) = R2; StgBCO_ptrs(bco) = R3; - StgBCO_itbls(bco) = R4; - StgBCO_arity(bco) = HALF_W_(R5); + StgBCO_arity(bco) = HALF_W_(R4); StgBCO_size(bco) = HALF_W_(words); // Copy the arity/bitmap info into the BCO diff --git a/rts/Sanity.c b/rts/Sanity.c index 48d913c46e..6fdca3624a 100644 --- a/rts/Sanity.c +++ b/rts/Sanity.c @@ -324,7 +324,6 @@ checkClosure( StgClosure* p ) ASSERT(LOOKS_LIKE_CLOSURE_PTR(bco->instrs)); ASSERT(LOOKS_LIKE_CLOSURE_PTR(bco->literals)); ASSERT(LOOKS_LIKE_CLOSURE_PTR(bco->ptrs)); - ASSERT(LOOKS_LIKE_CLOSURE_PTR(bco->itbls)); return bco_sizeW(bco); } diff --git a/rts/sm/Compact.c b/rts/sm/Compact.c index 5cef8168f0..62d9152898 100644 --- a/rts/sm/Compact.c +++ b/rts/sm/Compact.c @@ -530,7 +530,6 @@ thread_obj (StgInfoTable *info, StgPtr p) thread_(&bco->instrs); thread_(&bco->literals); thread_(&bco->ptrs); - thread_(&bco->itbls); return p + bco_sizeW(bco); } diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c index cd200f3dbb..139ecad53f 100644 --- a/rts/sm/Scav.c +++ b/rts/sm/Scav.c @@ -411,7 +411,6 @@ scavenge(step *stp) bco->instrs = (StgArrWords *)evacuate((StgClosure *)bco->instrs); bco->literals = (StgArrWords *)evacuate((StgClosure *)bco->literals); bco->ptrs = (StgMutArrPtrs *)evacuate((StgClosure *)bco->ptrs); - bco->itbls = (StgArrWords *)evacuate((StgClosure *)bco->itbls); p += bco_sizeW(bco); break; } @@ -792,7 +791,6 @@ linear_scan: bco->instrs = (StgArrWords *)evacuate((StgClosure *)bco->instrs); bco->literals = (StgArrWords *)evacuate((StgClosure *)bco->literals); bco->ptrs = (StgMutArrPtrs *)evacuate((StgClosure *)bco->ptrs); - bco->itbls = (StgArrWords *)evacuate((StgClosure *)bco->itbls); break; } |
