📄 mpc.c
字号:
append_register(dstr,opword,REG_FLOAT,16);
}
/********************************************************************/
static void
func16 (unsigned int opword)
{
append_Xbit_number(dstr,opword,3,6);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_FLOAT,11);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_FLOAT,16);
}
/********************************************************************/
static void
func17 (unsigned int opword)
{
append_register(dstr,opword,REG_FLOAT,6);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_FLOAT,16);
}
/********************************************************************/
static void
func18 (unsigned int opword)
{
append_register(dstr,opword,REG_FLOAT,6);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_FLOAT,11);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_FLOAT,21);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_FLOAT,16);
}
/********************************************************************/
static void
func19 (unsigned int opword)
{
append_register(dstr,opword,REG_FLOAT,6);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_FLOAT,11);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_FLOAT,21);
}
/********************************************************************/
static void
insn_rD_d_rA (unsigned int opword, int *d, int *rA)
{
/*
* Ex: lbz rD,d(rA)
*/
char valstr[10];
int disp;
disp = opword & 0x0000FFFF;
if (disp & 0x00008000)
{
disp = disp | 0xFFFF0000;
}
sprintf(valstr,"%d",disp);
*d = disp;
append_register(dstr,opword,REG_INT,6);
append_string(dstr,COMMA);
append_string(dstr,valstr);
append_string(dstr,"(");
*rA = append_register(dstr,opword,REG_INT,11);
append_string(dstr,")");
}
/********************************************************************/
static void
insn_rD_rA_rB (unsigned int opword, int *rA, int *rB)
{
/*
* Ex: lbzx rD,rA,rB
*/
append_register(dstr,opword,REG_INT,6);
append_string(dstr,COMMA);
*rA = append_register(dstr,opword,REG_INT,11);
append_string(dstr,COMMA);
*rB = append_register(dstr,opword,REG_INT,16);
}
/********************************************************************/
static void
func20a (unsigned int opword)
{
/*
* Ex: lbz rD,d(rA), where EA = (rA|0) + d
*/
int d, rA;
insn_rD_d_rA(opword, &d, &rA);
append_ea_rA_0_d(dstr, d, rA);
}
/********************************************************************/
static void
func20b (unsigned int opword)
{
/*
* Ex: lhau rD,d(rA), where EA = (rA) + (d)
*/
int d, rA;
insn_rD_d_rA(opword, &d, &rA);
append_ea_rA_d(dstr, d, rA);
}
/********************************************************************/
static void
func20c (unsigned int opword)
{
/*
* Ex: lbzx rD,rA,rB, where EA = (rA|0)+rB
*/
int rA, rB;
insn_rD_rA_rB(opword, &rA, &rB);
append_ea_rA_0_rB(dstr, rA, rB);
}
/********************************************************************/
static void
func20d (unsigned int opword)
{
/*
* Ex: lbzx rD,rA,rB, where EA = (rA) + (rB)
*/
int rA, rB;
insn_rD_rA_rB(opword, &rA, &rB);
append_ea_rA_rB(dstr, rA, rB);
}
/********************************************************************/
static void
insn_frD_d_rA (unsigned int opword, int *d, int *rA)
{
/*
* Ex: lfd frD,d(rA)
*/
char valstr[10];
int disp;
disp = opword & 0x0000FFFF;
if (disp & 0x00008000)
{
disp = disp | 0xFFFF0000;
}
sprintf(valstr,"%d",disp);
*d = disp;
append_register(dstr,opword,REG_FLOAT,6);
append_string(dstr,COMMA);
append_string(dstr,valstr);
append_string(dstr,"(");
*rA = append_register(dstr,opword,REG_INT,11);
append_string(dstr,")");
}
/********************************************************************/
static void
insn_frD_rA_rB (unsigned int opword, int *rA, int *rB)
{
/*
* Ex: lfdux frD,rA,rB
*/
append_register(dstr,opword,REG_FLOAT,6);
append_string(dstr,COMMA);
*rA = append_register(dstr,opword,REG_INT,11);
append_string(dstr,COMMA);
*rB = append_register(dstr,opword,REG_INT,16);
}
/********************************************************************/
static void
func21a (unsigned int opword)
{
/*
* Ex: lfd frD,d(rA), where EA = (rA|0) + d
*/
int d, rA;
insn_frD_d_rA(opword, &d, &rA);
append_ea_rA_0_d(dstr, d, rA);
}
/********************************************************************/
static void
func21b (unsigned int opword)
{
/*
* Ex: lfd frD,d(rA), where EA = (rA) + d
*/
int d, rA;
insn_frD_d_rA(opword, &d, &rA);
append_ea_rA_d(dstr, d, rA);
}
/********************************************************************/
static void
func21c (unsigned int opword)
{
/*
* Ex: lfdx frD,rA,rB where EA = (rA|0) + rB
*/
int rA, rB;
insn_frD_rA_rB(opword, &rA, &rB);
append_ea_rA_0_rB(dstr, rA, rB);
}
/********************************************************************/
static void
func21d (unsigned int opword)
{
/*
* Ex: lfdux frD,rA),rB where EA = (rA) + (rB)
*/
int rA, rB;
insn_frD_rA_rB(opword, &rA, &rB);
append_ea_rA_rB(dstr, rA, rB);
}
/********************************************************************/
static void
func23 (unsigned int opword)
{
int nb;
char nbstr[10];
nb = ((opword & 0x0000F800) >> 11);
if (nb == 0)
{
nb = 32;
}
sprintf(nbstr,"%d",nb);
append_register(dstr,opword,REG_INT,6);
append_string(dstr,COMMA);
append_register(dstr,opword,REG_INT,11);
append_string(dstr,COMMA);
append_string(dstr,nbstr);
}
/********************************************************************/
static void
func24 (unsigned int opword)
{
append_Xbit_number(dstr,opword,3,6);
append_string(dstr,COMMA);
append_Xbit_number(dstr,opword,3,11);
}
/********************************************************************/
static void
func25 (unsigned int opword)
{
append_Xbit_number(dstr,opword,3,6);
}
/********************************************************************/
static void
func26 (unsigned int opword)
{
append_register(dstr,opword,REG_INT,6);
}
/********************************************************************/
static void
func27 (unsigned int opword)
{
append_register(dstr,opword,REG_FLOAT,6);
}
/********************************************************************/
static void
func28 (unsigned int opword)
{
unsigned int opw1, opw2;
/* the SPR field is split, knock it out and put it together */
/* as a single 10-bit field. */
opw1 = (opword & 0x001F0000) >> 16;
opw2 = (opword & 0x0000F800) >> 6;
opw1 = opw1 | opw2;
if (((opword & 0x000007FE) >> 1) == 339) /* mfspr */
{
append_register(dstr,opword,REG_INT,6);
append_string(dstr,COMMA);
}
switch (opw1)
{
#if (defined(MPC602) || defined(MPC603) || defined(MPC604))
case 1:
append_string(dstr,"XER");
break;
case 8:
append_string(dstr,"LR");
break;
case 9:
append_string(dstr,"CTR");
break;
case 18:
append_string(dstr,"DSISR");
break;
case 19:
append_string(dstr,"DAR");
break;
case 22:
append_string(dstr,"DEC");
break;
case 25:
append_string(dstr,"SDR1");
break;
case 26:
append_string(dstr,"SRR0");
break;
case 27:
append_string(dstr,"SRR1");
break;
case 268:
case 284:
append_string(dstr,"TBL");
break;
case 269:
case 285:
append_string(dstr,"TBU");
break;
case 272:
append_string(dstr,"SPRG0");
break;
case 273:
append_string(dstr,"SPRG1");
break;
case 274:
append_string(dstr,"SPRG2");
break;
case 275:
append_string(dstr,"SPRG3");
break;
case 282:
append_string(dstr,"EAR");
break;
case 287:
append_string(dstr,"PVR");
break;
case 528:
append_string(dstr,"IBAT0U");
break;
case 529:
append_string(dstr,"IBAT0L");
break;
case 530:
append_string(dstr,"IBAT1U");
break;
case 531:
append_string(dstr,"IBAT1L");
break;
case 532:
append_string(dstr,"IBAT2U");
break;
case 533:
append_string(dstr,"IBAT2L");
break;
case 534:
append_string(dstr,"IBAT3U");
break;
case 535:
append_string(dstr,"IBAT3L");
break;
case 536:
append_string(dstr,"DBAT0U");
break;
case 537:
append_string(dstr,"DBAT0L");
break;
case 538:
append_string(dstr,"DBAT1U");
break;
case 539:
append_string(dstr,"DBAT1L");
break;
case 540:
append_string(dstr,"DBAT2U");
break;
case 541:
append_string(dstr,"DBAT2L");
break;
case 542:
append_string(dstr,"DBAT3U");
break;
case 543:
append_string(dstr,"DBAT3L");
break;
#endif
#if (defined(MPC602))
case 976:
append_string(dstr,"DMISS");
break;
case 977:
append_string(dstr,"DCMP");
break;
case 978:
append_string(dstr,"HASH1");
break;
case 979:
append_string(dstr,"HASH2");
break;
case 980:
append_string(dstr,"IMISS");
break;
case 981:
append_string(dstr,"ICMP");
break;
case 982:
append_string(dstr,"RPA");
break;
case 984:
append_string(dstr,"TCR");
break;
case 986:
append_string(dstr,"IBR");
break;
case 987:
append_string(dstr,"ESASRR");
break;
case 990:
append_string(dstr,"SEBR");
break;
case 991:
append_string(dstr,"SER");
break;
case 1008:
append_string(dstr,"HID0");
break;
case 1009:
append_string(dstr,"HID1");
break;
case 1010:
append_string(dstr,"IABR");
break;
case 1021:
append_string(dstr,"SP");
break;
case 1022:
append_string(dstr,"LT");
break;
#endif
#if (defined(MPC603))
case 976:
append_string(dstr,"DMISS");
break;
case 977:
append_string(dstr,"DCMP");
break;
case 978:
append_string(dstr,"HASH1");
break;
case 979:
append_string(dstr,"HASH2");
break;
case 980:
append_string(dstr,"IMISS");
break;
case 981:
append_string(dstr,"ICMP");
break;
case 982:
append_string(dstr,"RPA");
break;
case 1008:
append_string(dstr,"HID0");
break;
case 1009:
append_string(dstr,"HID1");
break;
case 1010:
append_string(dstr,"IABR");
break;
#endif
#if (defined(MPC821) || defined(MPC823) || defined(MPC850) || defined(MPC860))
case 1:
append_string(dstr,"XER");
break;
case 8:
append_string(dstr,"LR");
break;
case 9:
append_string(dstr,"CTR");
break;
case 18:
append_string(dstr,"DSISR");
break;
case 19:
append_string(dstr,"DAR");
break;
case 22:
append_string(dstr,"DEC");
break;
case 26:
append_string(dstr,"SRR0");
break;
case 27:
append_string(dstr,"SRR1");
break;
case 80:
append_string(dstr,"EIE");
break;
case 81:
append_string(dstr,"EID");
break;
case 82:
append_string(dstr,"NRI");
break;
case 144:
append_string(dstr,"CMPA");
break;
case 145:
append_string(dstr,"CMPB");
break;
case 146:
append_string(dstr,"CMPC");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -