size_t DisCliValueString( void *d, dis_dec_ins *ins, unsigned op, char *buff, size_t buff_size ) { mad_disasm_data *dd = d; mad_type_info mti; address val; buff[0] = '\0'; val = dd->addr; switch( ins->op[op].type & DO_MASK ) { case DO_RELATIVE: val.mach.offset += ins->op[op].value; //NYI: 64 bit MCAddrToString( val, MIPST_N32_PTR, MLK_CODE, buff, buff_size ); break; case DO_ABSOLUTE: if( dd->ins.type == DI_MIPS_J || dd->ins.type == DI_MIPS_JAL ) { // Handle j/jal as having pointer operand to show target symbol val.mach.offset = ins->op[op].value; MCAddrToString( val, MIPST_N32_PTR, MLK_CODE, buff, buff_size ); break; } // Fall through case DO_IMMED: case DO_MEMORY_ABS: MCTypeInfoForHost( MTK_INTEGER, SIGNTYPE_SIZE( sizeof( ins->op[0].value ) ), &mti ); MCTypeToString( dd->radix, &mti, &ins->op[op].value, buff, &buff_size ); break; } return( strlen( buff ) ); }
size_t DisCliValueString( void *d, dis_dec_ins *ins, unsigned op, char *buff, size_t buff_size ) { mad_disasm_data *dd = d; mad_type_info mti; address val; buff[0] = '\0'; val = dd->addr; switch( ins->op[op].type & DO_MASK ) { case DO_RELATIVE: val.mach.offset += ins->op[op].value; //NYI: 64 bit MCAddrToString( val, PPCT_N32_PTR, MLK_CODE, buff, buff_size ); break; case DO_IMMED: case DO_ABSOLUTE: case DO_MEMORY_ABS: MCTypeInfoForHost( MTK_INTEGER, SIGNTYPE_SIZE( sizeof( ins->op[0].value ) ), &mti ); MCTypeToString( dd->radix, &mti, &ins->op[op].value, buff, &buff_size ); break; } return( strlen( buff ) ); }
char *CnvLong( long value, char *buff, size_t buff_len ) { return( DoMadLongConv( buff, buff_len, value, CurrRadix, SIGNTYPE_SIZE( sizeof( value ) ) ) ); }