public static OpCode DecodeOpCode(MemoryManager memory, ulong address, ExecutionMode mode) { int opCode = memory.ReadInt32((long)address); InstDescriptor inst; Type type; if (mode == ExecutionMode.Aarch64) { (inst, type) = OpCodeTable.GetInstA64(opCode); } else { if (mode == ExecutionMode.Aarch32Arm) { (inst, type) = OpCodeTable.GetInstA32(opCode); } else /* if (mode == ExecutionMode.Aarch32Thumb) */ { (inst, type) = OpCodeTable.GetInstT32(opCode); } } if (type != null) { return(MakeOpCode(inst, type, address, opCode)); } else { return(new OpCode(inst, address, opCode)); } }
public static OpCode64 DecodeOpCode(CpuThreadState state, MemoryManager memory, long position) { int opCode = memory.ReadInt32(position); Inst inst; if (state.ExecutionMode == ExecutionMode.AArch64) { inst = OpCodeTable.GetInstA64(opCode); } else { //TODO: Thumb support. inst = OpCodeTable.GetInstA32(opCode); } OpCode64 decodedOpCode = new OpCode64(Inst.Undefined, position, opCode); if (inst.Type != null) { decodedOpCode = MakeOpCode(inst.Type, inst, position, opCode); } return(decodedOpCode); }
public static OpCode DecodeOpCode(IMemoryManager memory, ulong address, ExecutionMode mode) { int opCode = memory.Read <int>(address); InstDescriptor inst; OpCodeTable.MakeOp makeOp; if (mode == ExecutionMode.Aarch64) { (inst, makeOp) = OpCodeTable.GetInstA64(opCode); } else { if (mode == ExecutionMode.Aarch32Arm) { (inst, makeOp) = OpCodeTable.GetInstA32(opCode); } else /* if (mode == ExecutionMode.Aarch32Thumb) */ { (inst, makeOp) = OpCodeTable.GetInstT32(opCode); } } if (makeOp != null) { return((OpCode)makeOp(inst, address, opCode)); } else { return(new OpCode(inst, address, opCode)); } }
public static OpCode64 DecodeOpCode(MemoryManager memory, long position, ExecutionMode mode) { int opCode = memory.ReadInt32(position); Inst inst; if (mode == ExecutionMode.Aarch64) { inst = OpCodeTable.GetInstA64(opCode); } else { if (mode == ExecutionMode.Aarch32Arm) { inst = OpCodeTable.GetInstA32(opCode); } else /* if (mode == ExecutionMode.Aarch32Thumb) */ { inst = OpCodeTable.GetInstT32(opCode); } } OpCode64 decodedOpCode = new OpCode64(Inst.Undefined, position, opCode); if (inst.Type != null) { decodedOpCode = MakeOpCode(inst.Type, inst, position, opCode); } return(decodedOpCode); }