public IInstruction ReadInstruction(uint inst) { if (!Enum.IsDefined(typeof(Opcode), inst >> 26)) { return(UndefinedInstruction.FromInteger(inst)); } var opcode = (Opcode)(inst >> 26); switch (opcode) { case Opcode.RType: var rIns = RTypeInstruction.FromInteger(inst); rIns.Executor = RTypeExecutors[rIns.Function]; return(rIns); case Opcode.Jump: case Opcode.JumpAndLink: var jIns = JTypeInstruction.FromInteger(inst); jIns.Executor = JTypeExecutors[jIns.JumpType]; return(jIns); case Opcode.CoProcessor: var coIns = CoProcessorInstruction.FromInteger(inst); coIns.Executor = CoProcessorExecutors[coIns.Format]; return(coIns); default: var iIns = ITypeInstruction.FromInteger(inst); iIns.Executor = ITypeExecutors[iIns.Opcode]; return(iIns); } }
public static CoProcessorInstruction FromInteger(uint v) { var cp = new CoProcessorInstruction() { Opcode = (MIPSI.Opcode)(v >> 26), Format = (CoProcessorFormat)((v >> 21) & 0x1f), Rt = (v >> 16) & 0x1f, Rd = (v >> 11) & 0x1f }; return cp; }
public static CoProcessorInstruction FromInteger(uint v) { var cp = new CoProcessorInstruction() { Opcode = (MIPSI.Opcode)(v >> 26), Format = (CoProcessorFormat)((v >> 21) & 0x1f), Rt = (v >> 16) & 0x1f, Rd = (v >> 11) & 0x1f }; return(cp); }