floatingpoint.c

来自「ppc750 system design simulator using sys」· C语言 代码 · 共 1,640 行 · 第 1/3 页

C
1,640
字号
char *faddsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fadds");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u", FD, FA, FB);	return buf;}char *fdivsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fdivs");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u", FD, FA, FB);	return buf;}char *fmaddsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fmadds");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *fmsubsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fmsubs");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *fmulsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fmuls");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u", FD, FA, FC);	return buf;}char *fnmaddsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fnmadds");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *fnmsubsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fnmsubs");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *fresx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fres");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fsqrtsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fsqrts");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fsubsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fsubs");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u", FD, FA, FB);	return buf;}char *fabsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fabs");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fcmpo_disasm(ppc_inst_t inst, addr_t pc, char *buf) { buf += sprintf(buf, "fcmpo cr%u, f%u, f%u", CRFD, FA, FB); return buf; }char *fcmpu_disasm(ppc_inst_t inst, addr_t pc, char *buf) { buf += sprintf(buf, "fcmpu cr%u, f%u, f%u", CRFD, FA, FB); return buf; }char *fctiwx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fctiw");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fctiwzx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fctiwz");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fmrx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fmr");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fnabsx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fnabs");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fnegx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fneg");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *frspx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "frsp");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *faddx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fadd");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u", FD, FA, FB);	return buf;}char *fdivx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fdiv");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u", FD, FA, FB);	return buf;}char *fmaddx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fmadd");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *fmsubx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fmsub");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *fmulx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fmul");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u", FD, FA, FC);	return buf;}char *fnmaddx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fnmadd");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *fnmsubx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fnmsub");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *frsqrtex_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "frsqrte");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fselx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fsel");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u, f%u", FD, FA, FC, FB);	return buf;}char *fsqrtx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fsqrt");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u", FD, FB);	return buf;}char *fsubx_disasm(ppc_inst_t inst, addr_t pc, char *buf){	buf += sprintf(buf, "fsub");	if(Rc) buf += sprintf(buf, ".");	buf += sprintf(buf, " f%u, f%u, f%u", FD, FA, FB);	return buf;}void faddsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FADDSD : ID_FADDS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fdivsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatDiv;	di->operation.floatingPoint.ident = ID_FDIVS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fmaddsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = Rc ? ID_FMADDSD : ID_FMADDS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = FC;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fmsubsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = Rc ? ID_FMSUBSD : ID_FMSUBS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = FC;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fmulsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMul;	di->operation.floatingPoint.ident = Rc ? ID_FMULSD : ID_FMULS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = -1;	di->io.floatingPoint.srcReg[2] = FC;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fnmaddsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = Rc ? ID_FNMADDSD : ID_FNMADDS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = FC;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fnmsubsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = Rc ? ID_FNMSUBSD : ID_FNMSUBS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = FC;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fresx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatConversion;	di->operation.floatingPoint.ident = Rc ? ID_FRESD : ID_FRES;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = -1;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fsqrtsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FSQRTSD : ID_FSQRTS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = -1;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fsubsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FSUBSD : ID_FSUBS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fabsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FABSD : ID_FABS;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = -1;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fcmpo_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = ID_FCMPO;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = -1;	di->io.floatingPoint.outCR = TRUE;	di->io.floatingPoint.crf = CRFD;}void fcmpu_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = ID_FCMPU;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = FA;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = -1;	di->io.floatingPoint.outCR = TRUE;	di->io.floatingPoint.crf = CRFD;}void fctiwx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatConversion;	di->operation.floatingPoint.ident = Rc ? ID_FCTIWD : ID_FCTIW;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = -1;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = FD;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fctiwzx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatConversion;	di->operation.floatingPoint.ident = Rc ? ID_FCTIWZD : ID_FCTIWZ;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = -1;	di->io.floatingPoint.srcReg[1] = FB;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = FD;	di->io.floatingPoint.outCR = FALSE;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fmrx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMove;	di->operation.floatingPoint.ident = Rc ? ID_FMRD : ID_FMR;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = -1;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?