summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorSimon Marlow <simonmar@microsoft.com>2007-02-27 13:46:09 +0000
committerSimon Marlow <simonmar@microsoft.com>2007-02-27 13:46:09 +0000
commitb067bdc33ce1a0bb01957b0bcfbb1c516dba53a4 (patch)
treeca8c9a739185c3714fa795c1924b5bd781c21bbd /rts
parentf38310c9d33a263a610005996f32f3d7d2e25c44 (diff)
downloadhaskell-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.c5
-rw-r--r--rts/Interpreter.c7
-rw-r--r--rts/PrimOps.cmm12
-rw-r--r--rts/Sanity.c1
-rw-r--r--rts/sm/Compact.c1
-rw-r--r--rts/sm/Scav.c2
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;
}