remove unnecessary size field in BCO (#7518)
authorSimon Marlow <marlowsd@gmail.com>
Wed, 9 Jan 2013 11:51:58 +0000 (11:51 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 9 Jan 2013 12:11:26 +0000 (12:11 +0000)
compiler/ghci/ByteCodeAsm.lhs
rts/Interpreter.c

index 17b3042..9631add 100644 (file)
@@ -129,10 +129,7 @@ assembleBCO dflags (ProtoBCO nm instrs bitmap bsize arity _origin _malloced) = d
   -- pass 1: collect up the offsets of the local labels.
   let asm = mapM_ (assembleI dflags) instrs
 
-      -- Remember that the first insn starts at offset
-      --     sizeOf Word / sizeOf Word16
-      -- since offset 0 (eventually) will hold the total # of insns.
-      initial_offset = largeArg16s dflags
+      initial_offset = 0
 
       -- Jump instructions are variable-sized, there are long and short variants
       -- depending on the magnitude of the offset.  However, we can't tell what
@@ -153,8 +150,7 @@ assembleBCO dflags (ProtoBCO nm instrs bitmap bsize arity _origin _malloced) = d
         (Map.lookup lbl lbl_map)
 
   -- pass 2: run assembler and generate instructions, literals and pointers
-  let initial_insns = addListToSS emptySS $ largeArg dflags n_insns
-  let initial_state = (initial_insns, emptySS, emptySS)
+  let initial_state = (emptySS, emptySS, emptySS)
   (final_insns, final_lits, final_ptrs) <- execState initial_state $ runAsm dflags long_jumps env asm
 
   -- precomputed size should be equal to final size
index 809f0ab..f4fe816 100644 (file)
@@ -788,9 +788,7 @@ run_BCO:
        register StgPtr*   ptrs       = (StgPtr*)(&bco->ptrs->payload[0]);
 #ifdef DEBUG
        int bcoSize;
-    bcoSize = BCO_READ_NEXT_WORD;
-#else
-    BCO_NEXT_WORD;
+        bcoSize = bco->instrs->bytes / sizeof(StgWord16);
 #endif
        IF_DEBUG(interpreter,debugBelch("bcoSize = %d\n", bcoSize));