Detab TcUnify
[ghc-hetmet.git] / rts / Disassembler.c
index b084a29..19c121f 100644 (file)
@@ -31,6 +31,7 @@ int
 disInstr ( StgBCO *bco, int pc )
 {
    int i;
+   StgWord16 instr;
 
    StgWord16*     instrs      = (StgWord16*)(bco->instrs->payload);
 
@@ -40,16 +41,19 @@ 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]);
          pc += 2; break;
       case bci_CCALL:
-         debugBelch("CCALL    marshaller at 0x%x\n", 
+         debugBelch("CCALL    marshaller at 0x%lx\n", 
                          literals[instrs[pc]] );
          pc += 1; break;
       case bci_STKCHECK: 
@@ -102,7 +106,7 @@ disInstr ( StgBCO *bco, int pc )
       case bci_PUSH_UBX:
          debugBelch("PUSH_UBX ");
          for (i = 0; i < instrs[pc+1]; i++) 
-            debugBelch("0x%x ", literals[i + instrs[pc]] );
+            debugBelch("0x%lx ", literals[i + instrs[pc]] );
          debugBelch("\n");
          pc += 2; break;
       case bci_PUSH_APPLY_N:
@@ -144,47 +148,54 @@ 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;
 
       case bci_TESTLT_I:
-         debugBelch("TESTLT_I  %d, fail to %d\n", literals[instrs[pc]],
+         debugBelch("TESTLT_I  %ld, fail to %d\n", literals[instrs[pc]],
                                                       instrs[pc+1]);
          pc += 2; break;
       case bci_TESTEQ_I:
-         debugBelch("TESTEQ_I  %d, fail to %d\n", literals[instrs[pc]],
+         debugBelch("TESTEQ_I  %ld, fail to %d\n", literals[instrs[pc]],
                                                       instrs[pc+1]);
          pc += 2; break;
 
       case bci_TESTLT_F:
-         debugBelch("TESTLT_F  %d, fail to %d\n", literals[instrs[pc]],
+         debugBelch("TESTLT_F  %ld, fail to %d\n", literals[instrs[pc]],
                                                       instrs[pc+1]);
          pc += 2; break;
       case bci_TESTEQ_F:
-         debugBelch("TESTEQ_F  %d, fail to %d\n", literals[instrs[pc]],
+         debugBelch("TESTEQ_F  %ld, fail to %d\n", literals[instrs[pc]],
                                                       instrs[pc+1]);
          pc += 2; break;
 
       case bci_TESTLT_D:
-         debugBelch("TESTLT_D  %d, fail to %d\n", literals[instrs[pc]],
+         debugBelch("TESTLT_D  %ld, fail to %d\n", literals[instrs[pc]],
                                                       instrs[pc+1]);
          pc += 2; break;
       case bci_TESTEQ_D:
-         debugBelch("TESTEQ_D  %d, fail to %d\n", literals[instrs[pc]],
+         debugBelch("TESTEQ_D  %ld, fail to %d\n", literals[instrs[pc]],
                                                       instrs[pc+1]);
          pc += 2; break;
 
@@ -230,7 +241,7 @@ disInstr ( StgBCO *bco, int pc )
         break;
 
       default:
-         barf("disInstr: unknown opcode");
+         barf("disInstr: unknown opcode %u", (unsigned int) instr);
    }
    return pc;
 }