📄 integer.c
字号:
char *xori_disasm(ppc_inst_t inst, addr_t pc, char *buf) { buf += sprintf(buf, "xori r%u, r%u, %u", RA, RS, IMM); return buf; }char *xoris_disasm(ppc_inst_t inst, addr_t pc, char *buf) { buf += sprintf(buf, "xoris r%u, r%u, %u", RA, RS, IMM); return buf; }char *rlwimix_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "rlwimi"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, %u, %u, %u", RA, RS, SH, MB, ME); return buf;}char *rlwinmx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "rlwinm"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, %u, %u, %u", RA, RS, SH, MB, ME); return buf;}char *rlwnmx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "rlwnm"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u, %u, %u", RA, RS, RB, MB, ME); return buf;}char *andx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "and"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *andcx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "andc"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *cmp_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "cmp"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " cr%u, %u, r%u, r%u", CRFD, L, RA, RB); return buf;}char *cmpl_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "cmpl"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " cr%u, %u, r%u, r%u", CRFD, L, RA, RB); return buf;}char *cntlzwx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "cntlzw"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u", RA, RS); return buf;}char *eqvx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "eqv"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *extsbx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "extsb"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u", RA, RS); return buf;}char *extshx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "extsh"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u", RA, RS); return buf;}char *nandx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "nand"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *norx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "nor"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *orx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "or"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *orcx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "orc"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *slwx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "slw"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *srawx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "sraw"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *srawix_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "srawi"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, %u", RA, RS, SH); return buf;}char *srwx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "srw"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *tw_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "tw"); buf += sprintf(buf, " %u, r%u, r%u", TO, RA, RB); return buf;}char *xorx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "xor"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RA, RS, RB); return buf;}char *addx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "add"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *addcx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "addc"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *addex_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "adde"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *addmex_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "addme"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u", RD, RA); return buf;}char *addzex_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "addze"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u", RD, RA); return buf;}char *divwx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "divw"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *divwux_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "divwu"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *mulhwx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "mulhw"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *mulhwux_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "mulhwu"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *mullwx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "mullw"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *negx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "neg"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u", RD, RA); return buf;}char *subfx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "subf"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *subfcx_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "subfc"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *subfex_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "subfe"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *subfmex_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "subfme"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}char *subfzex_disasm(ppc_inst_t inst, addr_t pc, char *buf){ buf += sprintf(buf, "subfze"); if(OE) buf += sprintf(buf, "o"); if(Rc) buf += sprintf(buf, "."); buf += sprintf(buf, " r%u, r%u, r%u", RD, RA, RB); return buf;}void addi_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = SEXT16(IMM); di->iclass = ICIntArithmetic; di->operation.integer.ident = ID_ADDI; di->operation.integer.nullRA = (RA == 0); di->io.integer.srcReg[0] = RA ? RA : -1; /* bug */ di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RD; di->io.integer.outCR = FALSE; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void addic_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = SEXT16(IMM); di->iclass = ICIntArithmetic; di->operation.integer.ident = ID_ADDIC; di->io.integer.srcReg[0] = RA; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RD; di->io.integer.outCR = FALSE; di->io.integer.outCarry = TRUE; di->io.integer.outOverflow = FALSE;}void addicd_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = SEXT16(IMM); di->iclass = ICIntArithmetic; di->operation.integer.ident = ID_ADDICD; di->io.integer.srcReg[0] = RA; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RD; di->io.integer.outCR = TRUE; di->io.integer.crf = 0; di->io.integer.outCarry = TRUE; di->io.integer.outOverflow = FALSE;}void addis_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = SEXT16(IMM); di->iclass = ICIntArithmetic; di->operation.integer.ident = ID_ADDIS; di->operation.integer.nullRA = (RA == 0); di->io.integer.srcReg[0] = RA ? RA : -1; /* bug */ di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RD; di->io.integer.outCR = FALSE; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void andid_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = UIMM; di->iclass = ICIntLogical; di->operation.integer.ident = ID_ANDID; di->io.integer.srcReg[0] = RS; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RA; di->io.integer.outCR = TRUE; di->io.integer.crf = 0; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void andisd_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = UIMM; di->iclass = ICIntLogical; di->operation.integer.ident = ID_ANDISD; di->io.integer.srcReg[0] = RS; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RA; di->io.integer.outCR = TRUE; di->io.integer.crf = 0; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void cmpi_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = SEXT16(IMM); di->iclass = ICIntArithmetic; di->operation.integer.ident = ID_CMPI; di->operation.integer.extra.compare.crfD = CRFD; di->io.integer.srcReg[0] = RA; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = -1; di->io.integer.outCR = TRUE; di->io.integer.crf = CRFD; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void cmpli_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = UIMM; di->iclass = ICIntArithmetic; di->operation.integer.ident = ID_CMPLI; di->operation.integer.extra.compare.crfD = CRFD; di->io.integer.srcReg[0] = RA; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = -1; di->io.integer.outCR = TRUE; di->io.integer.crf = CRFD; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void mulli_translate(ppc_inst_t inst, struct DecodedInstruction *di){ sword_t _sh; _sh = SEXT16(IMM); di->hasImmed = TRUE; di->immed = _sh; di->iclass = ICIntMul; di->operation.integer.ident = ID_MULLI; di->io.integer.srcReg[0] = RA; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RD; di->io.integer.outCR = FALSE; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void ori_translate(ppc_inst_t inst, struct DecodedInstruction *di){ BOOL nop = RS == RA && UIMM == 0; di->hasImmed = TRUE; di->immed = UIMM; di->iclass = ICIntLogical; di->operation.integer.ident = ID_ORI; di->io.integer.srcReg[0] = RS; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = nop ? -1: RA; di->io.integer.outCR = FALSE; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void oris_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = UIMM; di->iclass = ICIntLogical; di->operation.integer.ident = ID_ORIS; di->io.integer.srcReg[0] = RS; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RA; di->io.integer.outCR = FALSE; di->io.integer.outCarry = FALSE; di->io.integer.outOverflow = FALSE;}void subfic_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = SEXT16(IMM); di->iclass = ICIntArithmetic; di->operation.integer.ident = ID_SUBFIC; di->io.integer.srcReg[0] = RA; di->io.integer.srcReg[1] = -1; di->io.integer.inCarry = FALSE; di->io.integer.dstReg = RD; di->io.integer.outCR = FALSE; di->io.integer.outCarry = TRUE; di->io.integer.outOverflow = FALSE;}void twi_translate(ppc_inst_t inst, struct DecodedInstruction *di) { di->iclass = 0; }void xori_translate(ppc_inst_t inst, struct DecodedInstruction *di){ di->hasImmed = TRUE; di->immed = UIMM; di->iclass = ICIntLogical; di->operation.integer.ident = ID_XORI; di->io.integer.srcReg[0] = RS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -