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 + -
显示快捷键?