systemregisters.c

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

C
979
字号
	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = -1;	di->io.floatingPoint.outCR = FALSE;}void mtfsfix_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICMoveToFPSCR;	di->operation.floatingPoint.ident = Rc ? ID_MTFSFID : ID_MTFSFI;	di->io.floatingPoint.inFPSCR = FALSE;	di->io.floatingPoint.srcReg[0] = -1;	di->io.floatingPoint.srcReg[1] = -1;	di->io.floatingPoint.srcReg[2] = -1;	di->io.floatingPoint.dstReg = -1;	di->io.floatingPoint.outCR = FALSE;}void mtfsfx_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->hasImmed = FALSE;	di->iclass = ICMoveToFPSCR;	di->operation.floatingPoint.ident = Rc ? ID_MTFSFD : ID_MTFSF;	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 = -1;	di->io.floatingPoint.outCR = FALSE;}void mcrxr_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void mfcr_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICMoveFromCR;	di->operation.systemRegister.ident = ID_MFCR;	di->hasImmed = FALSE;	di->io.mfcr.dstReg = RD;}void mfmsr_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void mfsr_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void mfsrin_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void mtmsr_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void mtsr_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void mtsrin_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void mfspr_translate(ppc_inst_t inst, struct DecodedInstruction *di){	word_t _s, _d;	_s = SPR;	_d = ((_s & 0x1F) << 5) + (( _s >> 5)&0x1F);	di->iclass = ICMoveFromSpr;	di->hasImmed = FALSE;	di->operation.systemRegister.ident = ID_MFSPR;	di->operation.systemRegister.extra.mfspr.spr = _d;	di->io.mfspr.srcSpr = _d;	di->io.mfspr.dstReg = RD;}void mftb_translate(ppc_inst_t inst, struct DecodedInstruction *di){	word_t _s, _d;	_s = TBR;	_d = ((_s & 0x1F) << 5) + (( _s >> 5)&0x1F);	di->iclass = ICMoveFromTbr;	di->hasImmed = FALSE;	di->operation.systemRegister.ident = ID_MFTB;	di->operation.systemRegister.extra.mftb.tbr = _d;	di->io.mftb.srcTbr = _d;	di->io.mftb.dstReg = RD;}void mtcrf_translate(ppc_inst_t inst, struct DecodedInstruction *di){	word_t _crm;	_crm = CRM;	di->iclass = ICMoveToCrf;	di->operation.systemRegister.ident = ID_MTCRF;	di->operation.systemRegister.extra.mtcrf.gpr = RS;	di->operation.systemRegister.extra.mtcrf.crm = _crm;	di->hasImmed = FALSE;	di->io.mtcrf.srcReg = RS;	switch(_crm)	{		case 128: di->io.mtcrf.dstCrf = 0; break;		case 64: di->io.mtcrf.dstCrf = 1; break;		case 32: di->io.mtcrf.dstCrf = 2; break;		case 16: di->io.mtcrf.dstCrf = 3; break;		case 8: di->io.mtcrf.dstCrf = 4; break;		case 4: di->io.mtcrf.dstCrf = 5; break;		case 2: di->io.mtcrf.dstCrf = 6; break;		case 1: di->io.mtcrf.dstCrf = 7; break;		default: di->io.mtcrf.dstCrf = -1;	}}void mtspr_translate(ppc_inst_t inst, struct DecodedInstruction *di){	word_t _s, _d;	_s = SPR;	_d = ((_s & 0x1f) << 5) + (( _s >> 5)&0x1F);	di->iclass = ICMoveToSpr;	di->hasImmed = FALSE;	di->operation.systemRegister.ident = ID_MTSPR;	di->operation.systemRegister.extra.mtspr.gpr = RD;	di->io.mtspr.dstSpr = _d;	di->io.mtspr.srcReg = RD;}void crand_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICCRLogical;	di->operation.systemRegister.ident = ID_CRAND;	di->operation.systemRegister.extra.crlogical.srcCrb[0] = CRBA;	di->operation.systemRegister.extra.crlogical.srcCrb[1] = CRBB;	di->operation.systemRegister.extra.crlogical.dstCrb = CRBD;	di->hasImmed = FALSE;	di->io.crlogical.srcCrf[0] = CRBA/4;	di->io.crlogical.srcCrf[1] = CRBB/4;	di->io.crlogical.dstCrf = CRBD/4;}void crandc_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICCRLogical;	di->operation.systemRegister.ident = ID_CRANDC;	di->operation.systemRegister.extra.crlogical.srcCrb[0] = CRBA;	di->operation.systemRegister.extra.crlogical.srcCrb[1] = CRBB;	di->operation.systemRegister.extra.crlogical.dstCrb = CRBD;	di->hasImmed = FALSE;	di->io.crlogical.srcCrf[0] = CRBA/4;	di->io.crlogical.srcCrf[1] = CRBB/4;	di->io.crlogical.dstCrf = CRBD/4;}void creqv_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICCRLogical;	di->operation.systemRegister.ident = ID_CREQV;	di->operation.systemRegister.extra.crlogical.srcCrb[0] = CRBA;	di->operation.systemRegister.extra.crlogical.srcCrb[1] = CRBB;	di->operation.systemRegister.extra.crlogical.dstCrb = CRBD;	di->hasImmed = FALSE;	di->io.crlogical.srcCrf[0] = CRBA/4;	di->io.crlogical.srcCrf[1] = CRBB/4;	di->io.crlogical.dstCrf = CRBD/4;}void crnand_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICCRLogical;	di->operation.systemRegister.ident = ID_CRNAND;	di->operation.systemRegister.extra.crlogical.srcCrb[0] = CRBA;	di->operation.systemRegister.extra.crlogical.srcCrb[1] = CRBB;	di->operation.systemRegister.extra.crlogical.dstCrb = CRBD;	di->hasImmed = FALSE;	di->io.crlogical.srcCrf[0] = CRBA/4;	di->io.crlogical.srcCrf[1] = CRBB/4;	di->io.crlogical.dstCrf = CRBD/4;}void crnor_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICCRLogical;	di->operation.systemRegister.ident = ID_CRNOR;	di->operation.systemRegister.extra.crlogical.srcCrb[0] = CRBA;	di->operation.systemRegister.extra.crlogical.srcCrb[1] = CRBB;	di->operation.systemRegister.extra.crlogical.dstCrb = CRBD;	di->hasImmed = FALSE;	di->io.crlogical.srcCrf[0] = CRBA/4;	di->io.crlogical.srcCrf[1] = CRBB/4;	di->io.crlogical.dstCrf = CRBD/4;}void cror_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICCRLogical;	di->operation.systemRegister.ident = ID_CROR;	di->operation.systemRegister.extra.crlogical.srcCrb[0] = CRBA;	di->operation.systemRegister.extra.crlogical.srcCrb[1] = CRBB;	di->operation.systemRegister.extra.crlogical.dstCrb = CRBD;	di->hasImmed = FALSE;	di->io.crlogical.srcCrf[0] = CRBA/4;	di->io.crlogical.srcCrf[1] = CRBB/4;	di->io.crlogical.dstCrf = CRBD/4;}void crorc_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICCRLogical;	di->operation.systemRegister.ident = ID_CRORC;	di->operation.systemRegister.extra.crlogical.srcCrb[0] = CRBA;	di->operation.systemRegister.extra.crlogical.srcCrb[1] = CRBB;	di->operation.systemRegister.extra.crlogical.dstCrb = CRBD;	di->hasImmed = FALSE;	di->io.crlogical.srcCrf[0] = CRBA/4;	di->io.crlogical.srcCrf[1] = CRBB/4;	di->io.crlogical.dstCrf = CRBD/4;}void crxor_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICCRLogical;	di->operation.systemRegister.ident = ID_CRXOR;	di->operation.systemRegister.extra.crlogical.srcCrb[0] = CRBA;	di->operation.systemRegister.extra.crlogical.srcCrb[1] = CRBB;	di->operation.systemRegister.extra.crlogical.dstCrb = CRBD;	di->hasImmed = FALSE;	di->io.crlogical.srcCrf[0] = CRBA/4;	di->io.crlogical.srcCrf[1] = CRBB/4;	di->io.crlogical.dstCrf = CRBD/4;}void mcrf_translate(ppc_inst_t inst, struct DecodedInstruction *di){	di->iclass = ICMoveCrf;	di->operation.systemRegister.ident = ID_MCRF;	di->operation.systemRegister.extra.mcrf.srcCrf = CRFS;	di->hasImmed = FALSE;	di->io.mcrf.srcCrf = CRFS;	di->io.mcrf.dstCrf = CRFD;}void rfi_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void rfid_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }	void sync_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void isync_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void mcrfs_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mcrfs", 2, XML_DSTCRF, CRFD, XML_SRCCRF, CRFS); }void mffsx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "mffs.", 3, XML_DSTFPR, FD, XML_DSTCRF, 1, XML_SRCFPSCR, 0);	else		xmlf(buf, pc, "mffs", 2, XML_DSTFPR, FD, XML_SRCFPSCR, 0);}void mtfsb0x_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "mtfsb0.", 2, XML_DSTCRF, 1, XML_DSTFPSCR, 0);	else		xmlf(buf, pc, "mtfsb0", 1, XML_DSTFPSCR, 0);}void mtfsb1x_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "mtfsb1.", 2, XML_DSTCRF, 1, XML_DSTFPSCR, 0);	else		xmlf(buf, pc, "mtfsb1", 1, XML_DSTFPSCR, 0);}void mtfsfix_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "mtfsfi.", 3, XML_DSTCRF, 1, XML_DSTFPSCR, 0, XML_UIMM, MTFSFI_IMM);	else		xmlf(buf, pc, "mtfsfi", 2, XML_DSTFPSCR, 0, XML_UIMM, MTFSFI_IMM);}void mtfsfx_xml(ppc_inst_t inst, addr_t pc, char *buf){	if(Rc)		xmlf(buf, pc, "mtfsf.", 3, XML_DSTCRF, 1, XML_DSTFPSCR, 0, XML_SRCFPR, FB);	else		xmlf(buf, pc, "mtfsf", 2, XML_DSTFPSCR, 0, XML_SRCFPR, FB);}void mcrxr_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mcrxr", 2, XML_DSTCRF, CRFD, XML_SRCSPR, 1); }void mfcr_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mfcr", 2, XML_DSTGPR, RD, XML_SRCCRF, -1); }void mfmsr_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mfmsr", 0);}void mfsr_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mfsr", 0); }void mfsrin_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mfsrin", 0); }void mtmsr_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mtmsr", 0); }void mtsr_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mtsr", 0); }void mtsrin_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mtsrin", 0); }void mfspr_xml(ppc_inst_t inst, addr_t pc, char *buf){	word_t _s, _d;	_s = SPR;	_d = (_s & 0x1F) + (( _s >> 5)&0x1F);	xmlf(buf, pc, "mfspr", 2, XML_DSTGPR, RD, XML_SRCSPR, _d);}void mftb_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mftb", 0); }void mtcrf_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "mtcrf", 2, XML_DSTCRF, -1, XML_SRCGPR, RS); }void mtspr_xml(ppc_inst_t inst, addr_t pc, char *buf){	word_t _s, _d;	_s = SPR;	_d = (_s & 0x1F) + (( _s >> 5)&0x1F);	xmlf(buf, pc, "mtspr", 2, XML_DSTSPR, _d, XML_SRCGPR, RS);}void crand_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "crand", 2, XML_DSTCRF, -1, XML_SRCCRF, -1); }void crandc_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "crandc", 2, XML_DSTCRF, -1, XML_SRCCRF, -1); }void creqv_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "creqv", 2, XML_DSTCRF, -1, XML_SRCCRF, -1); }void crnand_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "crnand", 2, XML_DSTCRF, -1, XML_SRCCRF, -1); }void crnor_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "crnor", 2, XML_DSTCRF, -1, XML_SRCCRF, -1); }void cror_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "cror", 2, XML_DSTCRF, -1, XML_SRCCRF, -1); }void crorc_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "crorc", 2, XML_DSTCRF, -1, XML_SRCCRF, -1); }void crxor_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "crxor", 2, XML_DSTCRF, -1, XML_SRCCRF, -1); }void mcrf_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "crand", 2, XML_DSTCRF, CRFD, XML_SRCCRF, CRFS); }void rfi_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "rfi", 0); }void rfid_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "rfid", 0); }	void sync_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "sync", 0); }void isync_xml(ppc_inst_t inst, addr_t pc, char *buf) { xmlf(buf, pc, "isync", 0); }

⌨️ 快捷键说明

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