📄 sparc_disas.cpp
字号:
else
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "jmp");
strcat(dis_info, bl2);
regimm(insn, DEC, true);
}
}
else
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "jmpl");
strcat(dis_info, bl2);
regres(insn, DEC);
}
return dis_info;
case TICC:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "t");
branchop(insn);
strcat(dis_info, bl2);
regimm(insn, HEX, false);
return dis_info;
case FLUSH:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "flush");
strcat(dis_info, bl2);
regimm(insn, HEX, false);
return dis_info;
case RETT:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "rett");
strcat(dis_info, bl2);
regimm(insn, DEC, true);
return dis_info;
case RESTORE:
if (rd == 0)
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "restore");
}
else
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "restore");
strcat(dis_info, bl2);
regres(insn, HEX);
}
return dis_info;
case SAVE:
if (rd == 0)
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "save");
}
else
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "save");
strcat(dis_info, bl2);
regres(insn, DEC);
}
return dis_info;
case FPOP1:
switch (opf)
{
case FITOS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fitos");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FITOD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fitod");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FSTOI:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fstoi");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FDTOI:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fdtoi");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FSTOD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fistod");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FDTOS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fdtos");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FMOVS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fmovs");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FNEGS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fnegs");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FABSS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fabss");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FSQRTS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fsqrts");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FSQRTD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fsqrtd");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FADDS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fadds");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FADDD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "faddd");
strcat(dis_info, bl2);
freg3(insn);
return dis_info;
case FSUBS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fsubs");
strcat(dis_info, bl2);
freg3(insn);
return dis_info;
case FSUBD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fsubd");
strcat(dis_info, bl2);
freg3(insn);
return dis_info;
case FMULS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fmuls");
strcat(dis_info, bl2);
freg3(insn);
return dis_info;
case FMULD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fmuld");
strcat(dis_info, bl2);
freg3(insn);
return dis_info;
case FSMULD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fsmuld");
strcat(dis_info, bl2);
freg2(insn);
return dis_info;
case FDIVS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fdivs");
strcat(dis_info, bl2);
freg3(insn);
return dis_info;
case FDIVD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fdivd");
strcat(dis_info, bl2);
freg3(insn);
return dis_info;
default:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "unknown FOP1: ");
strcat(dis_info, bl2);
tost(op);
return dis_info;
}
case FPOP2:
switch(opf)
{
case FCMPS:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fcmps");
strcat(dis_info, bl2);
fregc(insn);
return dis_info;
case FCMPD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fcmpd");
strcat(dis_info, bl2);
fregc(insn);
return dis_info;
case FCMPES:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fcmpes");
strcat(dis_info, bl2);
fregc(insn);
return dis_info;
case FCMPED:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "fcmped");
strcat(dis_info, bl2);
fregc(insn);
return dis_info;
default:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "unknown FOP2: ");
strcat(dis_info, bl2);
tost(insn.op);
return dis_info;
}
case CPOP1:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "cpop1");
strcat(dis_info, bl2);
tost(opf);
strcat(dis_info, ", ");
creg3(insn);
return dis_info;
case CPOP2:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "cpop2");
strcat(dis_info, bl2);
tost(opf);
strcat(dis_info, ", ");
creg3(insn);
return dis_info;
default:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "unknown opcode: ");
tost(insn.op);
return dis_info;
}
case LDST:
switch (op3)
{
case STC:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "st");
strcat(dis_info, bl2);
stparcp(insn, rd, DEC);
return dis_info;
case STF:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "st");
strcat(dis_info, bl2);
stparf(insn, rd, DEC);
return dis_info;
case ST:
if (rd == 0)
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "clr");
strcat(dis_info, bl2);
stparc(insn, rd, DEC);
}
else
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "st");
strcat(dis_info, bl2);
stparc(insn, rd, DEC);
}
return dis_info;
case STB:
if (rd == 0)
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "clrb");
strcat(dis_info, bl2);
stparc(insn, rd, DEC);
}
else
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "stb");
strcat(dis_info, bl2);
stparc(insn, rd, DEC);
}
return dis_info;
case STH:
if (rd == 0)
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "clrh");
strcat(dis_info, bl2);
stparc(insn, rd, DEC);
}
else
{
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "sth");
strcat(dis_info, bl2);
stparc(insn, rd, DEC);
}
return dis_info;
case STDC:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "std");
strcat(dis_info, bl2);
stparcp(insn,rd, DEC);
return dis_info;
case STDF:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "std");
strcat(dis_info, bl2);
stparf(insn,rd, DEC);
return dis_info;
case STCSR:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "st");
strcat(dis_info, bl2);
strcat(dis_info, "%csr, [");
regimm(insn, DEC, true);
strcat(dis_info, "]");
return dis_info;
case STFSR:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "st");
strcat(dis_info, bl2);
strcat(dis_info, "%fsr, [");
regimm(insn, DEC, true);
strcat(dis_info, "]");
return dis_info;
case STDCQ:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "std");
strcat(dis_info, bl2);
strcat(dis_info, "%cq, [");
regimm(insn, DEC, true);
strcat(dis_info, "]");
return dis_info;
case STDFQ:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "std");
strcat(dis_info, bl2);
strcat(dis_info, "%fq, [");
regimm(insn, DEC, true);
strcat(dis_info, "]");
return dis_info;
case ISTD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "std");
strcat(dis_info, bl2);
stpar(insn,rd, DEC);
return dis_info;
case STA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "sta");
strcat(dis_info, bl2);
stpara(insn,rd, DEC);
return dis_info;
case STBA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "stba");
strcat(dis_info, bl2);
stpara(insn,rd, DEC);
return dis_info;
case STHA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "stha");
strcat(dis_info, bl2);
stpara(insn,rd, DEC);
return dis_info;
case STDA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "stda");
strcat(dis_info, bl2);
stpara(insn,rd, DEC);
return dis_info;
case LDC:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ld");
strcat(dis_info, bl2);
ldparcp(insn,rd, DEC);
return dis_info;
case LDF:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ld");
strcat(dis_info, bl2);
ldparf(insn,rd, DEC);
return dis_info;
case LDCSR:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ld");
strcat(dis_info, bl2);
strcat(dis_info, "[");
regimm(insn, DEC, true);
strcat(dis_info, "]");
strcat(dis_info, ", %csr");
return dis_info;
case LDFSR:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ld");
strcat(dis_info, bl2);
strcat(dis_info, "[");
regimm(insn, DEC, true);
strcat(dis_info, "]");
strcat(dis_info, ", %fsr");
return dis_info;
case LD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ld");
strcat(dis_info, bl2);
ldpar(insn,rd, DEC);
return dis_info;
case LDUB:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldub");
strcat(dis_info, bl2);
ldpar(insn,rd, DEC);
return dis_info;
case LDUH:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "lduh");
strcat(dis_info, bl2);
ldpar(insn,rd, DEC);
return dis_info;
case LDDC:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldd");
strcat(dis_info, bl2);
ldparcp(insn,rd, DEC);
return dis_info;
case LDDF:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldd");
strcat(dis_info, bl2);
ldparf(insn,rd, DEC);
return dis_info;
case LDD:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldd");
strcat(dis_info, bl2);
ldpar(insn,rd, DEC);
return dis_info;
case LDSB:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldsb");
strcat(dis_info, bl2);
ldpar(insn,rd, DEC);
return dis_info;
case LDSH:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldsh");
strcat(dis_info, bl2);
ldpar(insn,rd, DEC);
return dis_info;
case LDSTUB:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldstub");
strcat(dis_info, bl2);
ldpar(insn,rd, DEC);
return dis_info;
case SWAP:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "swap");
strcat(dis_info, bl2);
ldpar(insn,rd, DEC);
return dis_info;
case LDA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "lda");
strcat(dis_info, bl2);
ldpara(insn,rd, DEC);
return dis_info;
case LDUBA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "lduba");
strcat(dis_info, bl2);
ldpara(insn,rd, DEC);
return dis_info;
case LDUHA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "lduha");
strcat(dis_info, bl2);
ldpara(insn,rd, DEC);
return dis_info;
case LDDA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldda");
strcat(dis_info, bl2);
ldpara(insn,rd, DEC);
return dis_info;
case LDSBA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldsba");
strcat(dis_info, bl2);
ldpara(insn,rd, DEC);
return dis_info;
case LDSHA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldsha");
strcat(dis_info, bl2);
ldpara(insn,rd, DEC);
return dis_info;
case LDSTUBA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "ldstuba");
strcat(dis_info, bl2);
ldpara(insn,rd, DEC);
return dis_info;
case SWAPA:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "swapa");
strcat(dis_info, bl2);
ldpara(insn,rd, DEC);
return dis_info;
default:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "unknown opcode: ");
tost(op);
return dis_info;
}
default:
tostf(pc);
strcat(dis_info, bb);
strcat(dis_info, "unknown opcode: ");
tost(op);
return dis_info;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -