Initial version
This commit is contained in:
commit
6f405265a5
102 changed files with 14486 additions and 0 deletions
219
code/bin/d.c
Normal file
219
code/bin/d.c
Normal file
|
@ -0,0 +1,219 @@
|
|||
/*
|
||||
Copyright (c) 1992-1993 The Regents of the University of California.
|
||||
All rights reserved. See copyright.h for copyright notice and limitation
|
||||
of liability and disclaimer of warranty provisions.
|
||||
*/
|
||||
|
||||
#include "copyright.h"
|
||||
#include "instr.h"
|
||||
#include "encode.h"
|
||||
|
||||
#define NULL 0
|
||||
|
||||
int sptr;
|
||||
int longdis = 1;
|
||||
|
||||
extern char *normalops[], *specialops[];
|
||||
|
||||
|
||||
char *regstrings[] =
|
||||
{
|
||||
"0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
|
||||
"r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19",
|
||||
"r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "gp", "sp",
|
||||
"r30", "r31"
|
||||
};
|
||||
|
||||
#define R(i) regstrings[i]
|
||||
|
||||
|
||||
dump_ascii(instruction, pc)
|
||||
int instruction, pc;
|
||||
{
|
||||
int addr;
|
||||
char *s;
|
||||
int opcode;
|
||||
|
||||
if ( longdis ) printf("%08x: %08x ", pc, instruction);
|
||||
printf("\t");
|
||||
opcode = (unsigned) instruction >> 26;
|
||||
if ( instruction == I_NOP) {
|
||||
printf("nop");
|
||||
}
|
||||
else if ( opcode == I_SPECIAL )
|
||||
{
|
||||
opcode = instruction & 0x3f;
|
||||
printf("%s\t", specialops[opcode]);
|
||||
|
||||
switch( opcode )
|
||||
{
|
||||
|
||||
/* rd,rt,shamt */
|
||||
case I_SLL:
|
||||
case I_SRL:
|
||||
case I_SRA:
|
||||
printf("%s,%s,0x%x",
|
||||
R(rd(instruction)),
|
||||
R(rt(instruction)),
|
||||
shamt(instruction));
|
||||
break;
|
||||
|
||||
/* rd,rt,rs */
|
||||
case I_SLLV:
|
||||
case I_SRLV:
|
||||
case I_SRAV:
|
||||
printf("%s,%s,%s",
|
||||
R(rd(instruction)),
|
||||
R(rt(instruction)),
|
||||
R(rs(instruction)));
|
||||
break;
|
||||
|
||||
/* rs */
|
||||
case I_JR:
|
||||
case I_JALR:
|
||||
case I_MFLO:
|
||||
case I_MTLO:
|
||||
printf("%s", R(rs(instruction)));
|
||||
break;
|
||||
|
||||
case I_SYSCALL:
|
||||
case I_BREAK:
|
||||
break;
|
||||
|
||||
/* rd */
|
||||
case I_MFHI:
|
||||
case I_MTHI:
|
||||
printf("%s", R(rd(instruction)));
|
||||
break;
|
||||
|
||||
/* rs,rt */
|
||||
case I_MULT:
|
||||
case I_MULTU:
|
||||
case I_DIV:
|
||||
case I_DIVU:
|
||||
printf("%s,%s",
|
||||
R(rs(instruction)),
|
||||
R(rt(instruction)));
|
||||
break;
|
||||
|
||||
/* rd,rs,rt */
|
||||
case I_ADD:
|
||||
case I_ADDU:
|
||||
case I_SUB:
|
||||
case I_SUBU:
|
||||
case I_AND:
|
||||
case I_OR:
|
||||
case I_XOR:
|
||||
case I_NOR:
|
||||
case I_SLT:
|
||||
case I_SLTU:
|
||||
printf("%s,%s,%s",
|
||||
R(rd(instruction)),
|
||||
R(rs(instruction)),
|
||||
R(rt(instruction)));
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
else if ( opcode == I_BCOND )
|
||||
{
|
||||
switch ( rt(instruction) ) /* this field encodes the op */
|
||||
{
|
||||
case I_BLTZ:
|
||||
printf("bltz");
|
||||
break;
|
||||
case I_BGEZ:
|
||||
printf("bgez");
|
||||
break;
|
||||
case I_BLTZAL:
|
||||
printf("bltzal");
|
||||
break;
|
||||
case I_BGEZAL:
|
||||
printf("bgezal");
|
||||
break;
|
||||
default :
|
||||
printf("BCOND");
|
||||
}
|
||||
printf("\t%s,%08x",
|
||||
R(rs(instruction)),
|
||||
off16(instruction)+pc+4);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s\t", normalops[opcode]);
|
||||
|
||||
switch ( opcode )
|
||||
{
|
||||
/* 26-bit_target */
|
||||
case I_J:
|
||||
case I_JAL:
|
||||
printf("%08x",
|
||||
top4(pc)|off26(instruction));
|
||||
break;
|
||||
|
||||
/* rs,rt,16-bit_offset */
|
||||
case I_BEQ:
|
||||
case I_BNE:
|
||||
printf("%s,%s,%08x",
|
||||
R(rt(instruction)),
|
||||
R(rs(instruction)),
|
||||
off16(instruction)+pc+4);
|
||||
break;
|
||||
|
||||
/* rt,rs,immediate */
|
||||
case I_ADDI:
|
||||
case I_ADDIU:
|
||||
case I_SLTI:
|
||||
case I_SLTIU:
|
||||
case I_ANDI:
|
||||
case I_ORI:
|
||||
case I_XORI:
|
||||
printf("%s,%s,0x%x",
|
||||
R(rt(instruction)),
|
||||
R(rs(instruction)),
|
||||
immed(instruction));
|
||||
break;
|
||||
|
||||
/* rt, immed */
|
||||
case I_LUI:
|
||||
printf("%s,0x%x",
|
||||
R(rt(instruction)),
|
||||
immed(instruction));
|
||||
break;
|
||||
|
||||
/* coprocessor garbage */
|
||||
case I_COP0:
|
||||
case I_COP1:
|
||||
case I_COP2:
|
||||
case I_COP3:
|
||||
break;
|
||||
|
||||
/* rt,offset(rs) */
|
||||
case I_LB:
|
||||
case I_LH:
|
||||
case I_LWL:
|
||||
case I_LW:
|
||||
case I_LBU:
|
||||
case I_LHU:
|
||||
case I_LWR:
|
||||
case I_SB:
|
||||
case I_SH:
|
||||
case I_SWL:
|
||||
case I_SW:
|
||||
case I_SWR:
|
||||
case I_LWC0:
|
||||
case I_LWC1:
|
||||
case I_LWC2:
|
||||
case I_LWC3 :
|
||||
case I_SWC0:
|
||||
case I_SWC1:
|
||||
case I_SWC2:
|
||||
case I_SWC3:
|
||||
printf("%s,0x%x(%s)",
|
||||
R(rt(instruction)),
|
||||
immed(instruction),
|
||||
R(rs(instruction)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue