// // Emit code to implement a binary/unsigned 48 bit literal COLDFIRE instruction // static void doBinopULit48(Uns64 instr, vmiBinop op, vmiFlagsCP flags, Uns8 instrLength){ //get immediate data from 48 bit instruction Uns64 rd = OP3_R1(instr); Uns32 IMML = OP3_IMML(instr); Uns32 IMMU = OP3_IMMU(instr); Uns32 Total = (IMMU << 16) | IMML; //get register and do operation between two registers(target) and constant vmiReg target = COLDFIRE_REGD(rd); vmimtBinopRRC(COLDFIRE_BITS, op, target, target, Total, flags); }
// // Emit code to implement a binary/unsigned literal OR1K instruction // static void doBinopULit(Uns32 instr, vmiBinop op, vmiFlagsCP flags) { Uns32 rd = OP2_D(instr); Uns32 ra = OP2_A(instr); Uns16 k = OP2_I(instr); vmiReg target = (rd==0) ? VMI_NOREG : OR1K_REG(rd); if(ra==0) { vmimtBinopRCC(OR1K_BITS, op, target, 0, k, flags); } else { vmimtBinopRRC(OR1K_BITS, op, target, OR1K_REG(ra), k, flags); } }
// // Emit code to implement a binary/signed literal OR1K instruction // static void doBinopSLit(Uns32 instr, vmiBinop op) { Uns32 rd = OP2_D(instr); Uns32 ra = OP2_A(instr); Int16 i = OP2_I(instr); vmiReg target = (rd==0) ? VMI_NOREG : OR1K_REG(rd); if(ra==0) { vmimtBinopRCC(OR1K_BITS, op, target, 0, i, 0); } else { vmimtBinopRRC(OR1K_BITS, op, target, OR1K_REG(ra), i, 0); } }