floatingpoint.c

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

C
1,640
字号
	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 fnabsx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FNABSD : ID_FNABS;	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 fnegx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatDiv;	di->operation.floatingPoint.ident = Rc ? ID_FNEG : ID_FNEGD;	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 frspx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatConversion;	di->operation.floatingPoint.ident = Rc ? ID_FRSPD : ID_FRSP;	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 faddx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FADDD : ID_FADD;	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 fdivx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatDiv;	di->operation.floatingPoint.ident = Rc ? ID_FDIVD : ID_FDIV;	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 fmaddx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = Rc ? ID_FMADDD : ID_FMADD;	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 fmsubx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = Rc ? ID_FMSUBD : ID_FMSUB;	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;	di->io.floatingPoint.outCR = FALSE;	if(Rc)	{		di->io.floatingPoint.outCR = TRUE;		di->io.floatingPoint.crf = 1;	}	else	{		di->io.floatingPoint.outCR = FALSE;	}}void fmulx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMul;	di->operation.floatingPoint.ident = Rc ? ID_FMULD : ID_FMUL;	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 fnmaddx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = Rc ? ID_FNMADDD : ID_FNMADD;	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 fnmsubx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatMulAdd;	di->operation.floatingPoint.ident = Rc ? ID_FNMSUBD : ID_FNMSUB;	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 frsqrtex_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FRSQRTED : ID_FRSQRTE;	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 fselx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FSELD : ID_FSEL;	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 fsqrtx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FSQRTD : ID_FSQRT;	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 fsubx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICFloatArithmetic;	di->operation.floatingPoint.ident = Rc ? ID_FSUBD : ID_FSUB;	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 faddsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fadds.", 4, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FA, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fadds", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);}void fdivsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fdivs.", 4, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FA, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fdivs", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);}void fmaddsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fmadds.", 5, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fmadds", 4, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);}void fmsubsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fmsubs.", 5, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FA);	else		xmlf(buf, pc, "fmsubs", 4, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FA);}	void fmulsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fmuls.", 4, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FA, XML_SRCFPR, FC);	else		xmlf(buf, pc, "fmuls", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC);}void fnmaddsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fnmadds.", 4, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fnmadds", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);}	void fnmsubsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fnmsubs.", 4, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fnmsubs", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);}void fresx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fres.", 3, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fres", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}	void fsqrtsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fsqrt.", 3, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fsqrt", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void fsubsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fsubs.", 4, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FA, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fsubs", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);}void fabsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fabs.", 3, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fabs", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void fcmpo_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "fcmpo", 3, XML_DSTCRF, CRFD, XML_SRCFPR, FA, XML_SRCFPR, FB); }void fcmpu_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "fcmpu", 3, XML_DSTCRF, CRFD, XML_SRCFPR, FA, XML_SRCFPR, FB); }void fctiwx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fctiw.", 3, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fctiw", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void fctiwzx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fctiwz.", 3, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fctiwz", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void fmrx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fmr.", 3, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fmr", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void fnabsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fnabs.", 3, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fnabs", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void fnegx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fneg.", 3, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fneg", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void frspx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "frsp.", 3, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FB);	else		xmlf(buf, pc, "frsp", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void faddx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fadd.", 4, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fadd", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);}void fdivx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fdiv.", 4, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fdiv", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);}void fmaddx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fmadd.", 5, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fmadd", 4, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);}void fmsubx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fmsub.", 5, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fmsub", 4, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);}void fmulx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fmul.", 4, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC);	else		xmlf(buf, pc, "fmul", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC);}void fnmaddx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fnmadd.", 5, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fnmadd", 4, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);}void fnmsubx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fnmsub.", 5, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fnmsub", 4, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);}void frsqrtex_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "frsqrte.", 3, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FB);	else		xmlf(buf, pc, "frsqrte", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void fselx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fselx.", 5, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fselx", 4, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FC, XML_SRCFPR, FB);}void fsqrtx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "frsqrt.", 3, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FB);	else		xmlf(buf, pc, "frsqrt", 2, XML_DSTFPR, FD, XML_SRCFPR, FB);}void fsubx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "fsub.", 4, XML_DSTCRF, 1, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);	else		xmlf(buf, pc, "fsub", 3, XML_DSTFPR, FD, XML_SRCFPR, FA, XML_SRCFPR, FB);}

⌨️ 快捷键说明

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