* Copyright (c) 1994-1998.
*
* $RCSfile: Disassembler.c,v $
- * $Revision: 1.14 $
- * $Date: 2000/10/09 11:20:16 $
+ * $Revision: 1.15 $
+ * $Date: 2000/12/19 16:48:35 $
* ---------------------------------------------------------------------------*/
+#if 0
+
#include "Rts.h"
#ifdef INTERPRETER
#include "Assembler.h"
#include "Printer.h"
#include "Disassembler.h"
+#include "Interpreter.h"
/* --------------------------------------------------------------------------
* Disassembler
* ------------------------------------------------------------------------*/
+static int disInstr ( StgBCO *bco, int pc )
+{
+ StgArrWords* instr_arr = bco->instrs;
+ UShort* instrs = (UShort*)(&instr_arr->payload[0]);
+
+ switch (instrs[pc++]) {
+ case i_ARGCHECK:
+ fprintf(stderr, "ARGCHECK %d\n", instrs[pc] );
+ pc += 1; break;
+ case i_PUSH_L:
+ fprintf(stderr, "PUSH_L %d\n", instrs[pc] );
+ pc += 1; break;
+ case i_PUSH_LL:
+ fprintf(stderr, "PUSH_LL %d %d\n", instrs[pc], instrs[pc+1] );
+ pc += 2; break;
+ case i_PUSH_LLL:
+ fprintf(stderr, "PUSH_LLL %d %d %d\n", instrs[pc], instrs[pc+1],
+ instrs[pc+2] );
+ pc += 3; break;
+ case i_PUSH_G:
+ fprintf(stderr, "PUSH_G " ); printPtr( ptrs[instrs[pc]] );
+ pc += 1; break;
+ case i_PUSH_AS:
+ fprintf(stderr, "PUSH_AS " ); printPtr( ptrs[instrs[pc]] );
+ fprintf(stderr, " 0x%x", literals[instrs[pc+1]] );
+ pc += 2; break;
+ case i_PUSH_UBX:
+ fprintf(stderr, "PUSH_UBX ");
+ for (i = 0; i < instrs[pc+1]; i++)
+ fprintf(stderr, "0x%x ", literals[i + instrs[pc]] );
+ fprintf(stderr, "\n");
+ pc += 2; break;
+ case i_PUSH_TAG:
+ fprintf(stderr, "PUSH_TAG %d\n", instrs[pc] );
+ pc += 1; break;
+ case i_SLIDE:
+ fprintf(stderr, "SLIDE %d down by %d\n", instrs[pc], instrs[pc+1] );
+ pc += 2; break;
+ case i_ALLOC:
+ fprintf(stderr, "ALLOC %d words\n", instrs[pc] );
+ pc += 1; break;
+ case i_MKAP:
+ fprintf(stderr, "MKAP %d words, %d stkoff\n", instrs[pc+1],
+ instrs[pc] );
+ pc += 2; break;
+ case i_UNPACK:
+ fprintf(stderr, "UNPACK %d\n", instrs[pc] );
+ pc += 1; break;
+ case i_UPK_TAG:
+ fprintf(stderr, "UPK_TAG %d words, %d conoff, %d stkoff\n",
+ instrs[pc], instrs[pc+1], instrs[pc+2] );
+ pc += 3; break;
+ case i_PACK:
+ fprintf(stderr, "PACK %d words with itbl ", instrs[pc+1] );
+ printPtr( itbls[instrs[pc]] );
+ pc += 2; break;
+
+ case i_TESTLT_I:
+
+pc = disLitN ( bco, pc ); break;
+ case i_TESTEQ_I: pc = disLitNInt ( bco, pc );
+ }
+}
+
+
static InstrPtr disNone ( StgBCO *bco, InstrPtr pc, char* i );
static InstrPtr disInt ( StgBCO *bco, InstrPtr pc, char* i );
static InstrPtr disIntInt ( StgBCO *bco, InstrPtr pc, char* i );
}
#endif /* INTERPRETER */
+#endif 0
\ No newline at end of file
+
/* -----------------------------------------------------------------------------
- * $Id: Disassembler.h,v 1.4 2000/12/11 12:53:44 sewardj Exp $
+ * $Id: Disassembler.h,v 1.5 2000/12/19 16:48:35 sewardj Exp $
*
- * (c) The GHC Team, 1998-1999
+ * (c) The GHC Team, 1998-2000
*
* Prototypes for functions in Disassembler.c
*
* ---------------------------------------------------------------------------*/
+#ifdef GHCI
+
extern int disInstr ( StgBCO *bco, int pc );
extern void disassemble( StgBCO *bco, char* prefix );
+
+#endif
/* -----------------------------------------------------------------------------
- * $Id: PrimOps.hc,v 1.64 2000/12/19 12:34:01 sewardj Exp $
+ * $Id: PrimOps.hc,v 1.65 2000/12/19 16:48:35 sewardj Exp $
*
* (c) The GHC Team, 1998-2000
*
bco = (StgBCO *) (Hp + 1 - sizeofW(StgBCO));
SET_HDR(bco, &stg_BCO_info, CCCS);
- bco->instrs = R1.cl;
- bco->literals = R2.cl;
- bco->ptrs = R3.cl;
- bco->itbls = R4.cl;
+ bco->instrs = (StgArrWords*)R1.cl;
+ bco->literals = (StgArrWords*)R2.cl;
+ bco->ptrs = (StgMutArrPtrs*)R3.cl;
+ bco->itbls = (StgArrWords*)R4.cl;
TICK_RET_UNBOXED_TUP(1);
RET_P(bco);