RTS tidyup sweep, first phase
[ghc-hetmet.git] / rts / Disassembler.c
index 00f700f..fff3fe9 100644 (file)
 #include "PosixSource.h"
 #include "Rts.h"
 #include "RtsAPI.h"
+#include "rts/Bytecodes.h"
+
 #include "RtsUtils.h"
-#include "Closures.h"
-#include "TSO.h"
 #include "Schedule.h"
-
-#include "Bytecodes.h"
 #include "Printer.h"
 #include "Disassembler.h"
 #include "Interpreter.h"
@@ -31,6 +29,7 @@ int
 disInstr ( StgBCO *bco, int pc )
 {
    int i;
+   StgWord16 instr;
 
    StgWord16*     instrs      = (StgWord16*)(bco->instrs->payload);
 
@@ -40,10 +39,13 @@ 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]);
-
-   switch (instrs[pc++]) {
+   instr = instrs[pc++];
+   switch (instr) {
+      case bci_BRK_FUN:
+         debugBelch ("BRK_FUN  " );  printPtr( ptrs[instrs[pc]] ); 
+         debugBelch (" %d ", instrs[pc+1]); printPtr( ptrs[instrs[pc+2]] ); debugBelch("\n" );
+         pc += 3;
+         break;
       case bci_SWIZZLE:
          debugBelch("SWIZZLE stkoff %d by %d\n",
                          instrs[pc], (signed int)instrs[pc+1]);
@@ -144,20 +146,27 @@ disInstr ( StgBCO *bco, int pc )
       case bci_ALLOC_AP:
          debugBelch("ALLOC_AP  %d words\n", instrs[pc] );
          pc += 1; break;
+      case bci_ALLOC_AP_NOUPD:
+         debugBelch("ALLOC_AP_NOUPD %d words\n", instrs[pc] );
+         pc += 1; break;
       case bci_ALLOC_PAP:
-         debugBelch("ALLOC_PAP %d words, %d arity\n",
+         debugBelch("ALLOC_PAP %d arity, %d words\n",
                 instrs[pc], instrs[pc+1] );
          pc += 2; break;
       case bci_MKAP:
          debugBelch("MKAP      %d words, %d stkoff\n", instrs[pc+1], 
                                                            instrs[pc] );
          pc += 2; break;
+      case bci_MKPAP:
+         debugBelch("MKPAP     %d words, %d stkoff\n", instrs[pc+1], 
+                                                           instrs[pc] );
+         pc += 2; break;
       case bci_UNPACK:
          debugBelch("UNPACK    %d\n", instrs[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;
 
@@ -230,7 +239,7 @@ disInstr ( StgBCO *bco, int pc )
         break;
 
       default:
-         barf("disInstr: unknown opcode");
+         barf("disInstr: unknown opcode %u", (unsigned int) instr);
    }
    return pc;
 }