X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FDisassembler.c;h=4a4d99be4e21466dbbd47d32cbdcd1708a1e9477;hb=e1a4f2a5be6e4cd06d96b601fefd519c2569ba99;hp=c1f29ee641ccb878ae7dfe6e34622783a547474f;hpb=9da01c710daee2cd5038afb8fad761cdaf343033;p=ghc-hetmet.git diff --git a/ghc/rts/Disassembler.c b/ghc/rts/Disassembler.c index c1f29ee..4a4d99b 100644 --- a/ghc/rts/Disassembler.c +++ b/ghc/rts/Disassembler.c @@ -5,8 +5,8 @@ * Copyright (c) 1994-1998. * * $RCSfile: Disassembler.c,v $ - * $Revision: 1.5 $ - * $Date: 1999/03/09 14:51:23 $ + * $Revision: 1.11 $ + * $Date: 1999/11/16 17:39:10 $ * ---------------------------------------------------------------------------*/ #include "Rts.h" @@ -41,7 +41,7 @@ static InstrPtr disNone ( StgBCO *bco, InstrPtr pc, char* i ) static InstrPtr disInt ( StgBCO *bco, InstrPtr pc, char* i ) { StgInt x = bcoInstr(bco,pc++); - ASSERT(pc < bco->n_instrs); + ASSERT(pc <= bco->n_instrs); fprintf(stderr,"%s %d",i,x); return pc; } @@ -49,7 +49,7 @@ static InstrPtr disInt ( StgBCO *bco, InstrPtr pc, char* i ) static InstrPtr disInt16 ( StgBCO *bco, InstrPtr pc, char* i ) { StgInt x = bcoInstr16(bco,pc); pc+=2; - ASSERT(pc < bco->n_instrs); + ASSERT(pc <= bco->n_instrs); fprintf(stderr,"%s %d",i,x); return pc; } @@ -120,14 +120,14 @@ static InstrPtr disConstPtr16 ( StgBCO *bco, InstrPtr pc, char* i ) static InstrPtr disConstInt ( StgBCO *bco, InstrPtr pc, char* i ) { StgInt x = bcoConstInt(bco,bcoInstr(bco,pc++)); - fprintf(stderr,"%s %d",i,x); + fprintf(stderr,"%s %d (0x%x)",i,x,x); return pc; } static InstrPtr disConstInt16 ( StgBCO *bco, InstrPtr pc, char* i ) { StgInt x = bcoConstInt(bco,bcoInstr16(bco,pc)); pc += 2; - fprintf(stderr,"%s %d",i,x); + fprintf(stderr,"%s %d (0x%x)",i,x,x); return pc; } @@ -205,6 +205,8 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) return disNone(bco,pc,"PANIC"); case i_STK_CHECK: return disInt(bco,pc,"STK_CHECK"); + case i_STK_CHECK_big: + return disInt16(bco,pc,"STK_CHECK_big"); case i_ARG_CHECK: return disInt(bco,pc,"ARG_CHECK"); case i_ALLOC_AP: @@ -223,6 +225,14 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) return disInt(bco,pc,"PACK"); case i_SLIDE: return disIntInt(bco,pc,"SLIDE"); + case i_RV: + return disIntInt(bco,pc,"R_V"); + case i_RVE: + return disIntInt(bco,pc,"R_V_E"); + case i_VV: + return disIntInt(bco,pc,"V_V"); + case i_SE: + return disIntInt(bco,pc,"S_E"); case i_SLIDE_big: return disIntInt16(bco,pc,"SLIDE_big"); case i_ENTER: @@ -246,8 +256,6 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) case i_VOID: return disNone(bco,pc,"VOID"); - case i_RETURN_GENERIC: - return disNone(bco,pc,"RETURN_GENERIC"); case i_VAR_INT: return disInt(bco,pc,"VAR_INT"); @@ -257,8 +265,6 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) return disConstInt(bco,pc,"CONST_INT"); case i_CONST_INT_big: return disConstInt16(bco,pc,"CONST_INT_big"); - case i_RETURN_INT: - return disNone(bco,pc,"RETURN_INT"); case i_PACK_INT: return disNone(bco,pc,"PACK_INT"); case i_UNPACK_INT: @@ -266,37 +272,20 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) case i_TEST_INT: return disPC(bco,pc,"TEST_INT"); -#ifdef PROVIDE_INT64 - case i_VAR_INT64: - return disInt(bco,pc,"VAR_INT64"); - case i_CONST_INT64: - return disConstInt(bco,pc,"CONST_INT64"); - case i_RETURN_INT64: - return disNone(bco,pc,"RETURN_INT64"); - case i_PACK_INT64: - return disNone(bco,pc,"PACK_INT64"); - case i_UNPACK_INT64: - return disNone(bco,pc,"UNPACK_INT64"); -#endif -#ifdef PROVIDE_INTEGER case i_CONST_INTEGER: return disConstAddr(bco,pc,"CONST_INTEGER"); case i_CONST_INTEGER_big: return disConstAddr16(bco,pc,"CONST_INTEGER_big"); -#endif -#ifdef PROVIDE_WORD + case i_VAR_WORD: return disInt(bco,pc,"VAR_WORD"); case i_CONST_WORD: return disConstInt(bco,pc,"CONST_WORD"); - case i_RETURN_WORD: - return disNone(bco,pc,"RETURN_WORD"); case i_PACK_WORD: return disNone(bco,pc,"PACK_WORD"); case i_UNPACK_WORD: return disNone(bco,pc,"UNPACK_WORD"); -#endif -#ifdef PROVIDE_ADDR + case i_VAR_ADDR: return disInt(bco,pc,"VAR_ADDR"); case i_VAR_ADDR_big: @@ -305,13 +294,11 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) return disConstAddr(bco,pc,"CONST_ADDR"); case i_CONST_ADDR_big: return disConstAddr16(bco,pc,"CONST_ADDR_big"); - case i_RETURN_ADDR: - return disNone(bco,pc,"RETURN_ADDR"); case i_PACK_ADDR: return disNone(bco,pc,"PACK_ADDR"); case i_UNPACK_ADDR: return disNone(bco,pc,"UNPACK_ADDR"); -#endif + case i_VAR_CHAR: return disInt(bco,pc,"VAR_CHAR"); case i_VAR_CHAR_big: @@ -320,8 +307,6 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) return disConstChar(bco,pc,"CONST_CHAR"); case i_CONST_CHAR_big: return disConstChar16(bco,pc,"CONST_CHAR_big"); - case i_RETURN_CHAR: - return disNone(bco,pc,"RETURN_CHAR"); case i_PACK_CHAR: return disNone(bco,pc,"PACK_CHAR"); case i_UNPACK_CHAR: @@ -335,8 +320,6 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) return disConstFloat(bco,pc,"CONST_FLOAT"); case i_CONST_FLOAT_big: return disConstFloat16(bco,pc,"CONST_FLOAT_big"); - case i_RETURN_FLOAT: - return disNone(bco,pc,"RETURN_FLOAT"); case i_PACK_FLOAT: return disNone(bco,pc,"PACK_FLOAT"); case i_UNPACK_FLOAT: @@ -350,23 +333,17 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) return disConstDouble(bco,pc,"CONST_DOUBLE"); case i_CONST_DOUBLE_big: return disConstDouble16(bco,pc,"CONST_DOUBLE_big"); - case i_RETURN_DOUBLE: - return disNone(bco,pc,"RETURN_DOUBLE"); case i_PACK_DOUBLE: return disNone(bco,pc,"PACK_DOUBLE"); case i_UNPACK_DOUBLE: return disNone(bco,pc,"UNPACK_DOUBLE"); -#ifdef PROVIDE_STABLE case i_VAR_STABLE: return disInt(bco,pc,"VAR_STABLE"); - case i_RETURN_STABLE: - return disNone(bco,pc,"RETURN_STABLE"); case i_PACK_STABLE: return disNone(bco,pc,"PACK_STABLE"); case i_UNPACK_STABLE: return disNone(bco,pc,"UNPACK_STABLE"); -#endif case i_PRIMOP1: { @@ -394,12 +371,18 @@ InstrPtr disInstr( StgBCO *bco, InstrPtr pc ) switch (op) { case i_INTERNAL_ERROR2: return disNone(bco,pc,"INTERNAL_ERROR2"); - case i_ccall_Id: - return disNone(bco,pc,"ccall_Id"); - case i_ccall_IO: - return disNone(bco,pc,"ccall_IO"); + case i_ccall_ccall_Id: + return disNone(bco,pc,"ccall_ccall_Id"); + case i_ccall_ccall_IO: + return disNone(bco,pc,"ccall_ccall_IO"); + case i_ccall_stdcall_Id: + return disNone(bco,pc,"ccall_stdcall_Id"); + case i_ccall_stdcall_IO: + return disNone(bco,pc,"ccall_stdcall_IO"); case i_raise: return disNone(bco,pc,"primRaise"); + case i_takeMVar: + return disNone(bco,pc,"primTakeMVar"); default: { const AsmPrim* p = asmFindPrimop(i_PRIMOP2,op);