public IrInstruction(Chunks.Shex.Tokens.InstructionToken token) { Token = token; AsmDebug = Token.ToString(); Operands = new List <IrOperand>( token.Operands.Select(o => new IrDebugOperand(o.ToString()))); Opcode = (IrInstructionOpcode)Token.Header.OpcodeType; }
public static IrInstructionType GetInstructionType(this IrInstructionOpcode opcode) { switch (opcode) { case IrInstructionOpcode.FirstBitHi: case IrInstructionOpcode.FirstBitSHi: case IrInstructionOpcode.BfRev: case IrInstructionOpcode.Bfi: case IrInstructionOpcode.UBfe: case IrInstructionOpcode.IBfe: case IrInstructionOpcode.Dp2: case IrInstructionOpcode.Dp3: case IrInstructionOpcode.Dp4: case IrInstructionOpcode.Log: case IrInstructionOpcode.Rsq: case IrInstructionOpcode.Exp: case IrInstructionOpcode.Sqrt: case IrInstructionOpcode.RoundPi: case IrInstructionOpcode.RoundNi: case IrInstructionOpcode.RoundZ: case IrInstructionOpcode.RoundNe: case IrInstructionOpcode.Frc: case IrInstructionOpcode.IMax: case IrInstructionOpcode.UMax: case IrInstructionOpcode.DMax: case IrInstructionOpcode.Max: case IrInstructionOpcode.IMin: case IrInstructionOpcode.UMin: case IrInstructionOpcode.DMin: case IrInstructionOpcode.Min: case IrInstructionOpcode.EvalCentroid: case IrInstructionOpcode.EvalSampleIndex: case IrInstructionOpcode.EvalSnapped: case IrInstructionOpcode.Drcp: case IrInstructionOpcode.Rcp: case IrInstructionOpcode.F32ToF16: case IrInstructionOpcode.F16ToF32: case IrInstructionOpcode.INeg: case IrInstructionOpcode.DerivRtx: case IrInstructionOpcode.RtxCoarse: case IrInstructionOpcode.RtxFine: case IrInstructionOpcode.Msad: case IrInstructionOpcode.FirstBitLo: case IrInstructionOpcode.SampleInfo: case IrInstructionOpcode.CheckAccessFullyMapped: case IrInstructionOpcode.Saturate: return(IrInstructionType.IntrinsicCall); case IrInstructionOpcode.Abort: return(IrInstructionType.IntrinsicCallNoDest); case IrInstructionOpcode.DAdd: case IrInstructionOpcode.IAdd: case IrInstructionOpcode.Add: case IrInstructionOpcode.DMul: case IrInstructionOpcode.IMul: case IrInstructionOpcode.Mul: case IrInstructionOpcode.UDiv: case IrInstructionOpcode.Ddiv: case IrInstructionOpcode.Div: case IrInstructionOpcode.Or: case IrInstructionOpcode.And: case IrInstructionOpcode.UShr: case IrInstructionOpcode.IShr: case IrInstructionOpcode.IShl: case IrInstructionOpcode.Xor: case IrInstructionOpcode.Ge: case IrInstructionOpcode.Lt: case IrInstructionOpcode.Eq: case IrInstructionOpcode.IGe: case IrInstructionOpcode.ILt: case IrInstructionOpcode.IEq: case IrInstructionOpcode.DLt: case IrInstructionOpcode.DGe: case IrInstructionOpcode.DEq: return(IrInstructionType.BinaryOp); case IrInstructionOpcode.LdS: case IrInstructionOpcode.LdMsS: case IrInstructionOpcode.LdMs: case IrInstructionOpcode.LdUavTypedS: case IrInstructionOpcode.LdUavTyped: case IrInstructionOpcode.LdRawS: case IrInstructionOpcode.LdRaw: return(IrInstructionType.ObjectCall); case IrInstructionOpcode.AtomicAnd: case IrInstructionOpcode.AtomicOr: case IrInstructionOpcode.AtomicXor: case IrInstructionOpcode.AtomicCmpStore: case IrInstructionOpcode.AtomicIAdd: case IrInstructionOpcode.AtomicIMax: case IrInstructionOpcode.AtomicIMin: case IrInstructionOpcode.AtomicUMax: case IrInstructionOpcode.AtomicUMin: case IrInstructionOpcode.ImmAtomicIAdd: case IrInstructionOpcode.ImmAtomicAnd: case IrInstructionOpcode.ImmAtomicOr: case IrInstructionOpcode.ImmAtomicXor: case IrInstructionOpcode.ImmAtomicExch: case IrInstructionOpcode.ImmAtomicCmpExch: case IrInstructionOpcode.ImmAtomicIMax: case IrInstructionOpcode.ImmAtomicIMin: case IrInstructionOpcode.ImmAtomicUMax: case IrInstructionOpcode.ImmAtomicUMin: case IrInstructionOpcode.ImmAtomicAlloc: case IrInstructionOpcode.ImmAtomicConsume: case IrInstructionOpcode.Bufinfo: return(IrInstructionType.ObjectCallNoDest); case IrInstructionOpcode.Loop: case IrInstructionOpcode.EndLoop: case IrInstructionOpcode.Break: case IrInstructionOpcode.BreakC: case IrInstructionOpcode.ContinueC: case IrInstructionOpcode.If: case IrInstructionOpcode.RetC: case IrInstructionOpcode.Else: case IrInstructionOpcode.EndSwitch: case IrInstructionOpcode.EndIf: case IrInstructionOpcode.Continue: case IrInstructionOpcode.Switch: case IrInstructionOpcode.Case: case IrInstructionOpcode.Default: case IrInstructionOpcode.Ret: case IrInstructionOpcode.MovC: return(IrInstructionType.ControlFlow); case IrInstructionOpcode.Sample: case IrInstructionOpcode.SampleBClS: case IrInstructionOpcode.SampleB: case IrInstructionOpcode.SampleClS: case IrInstructionOpcode.SampleC: case IrInstructionOpcode.SampleCLzS: case IrInstructionOpcode.SampleCLz: case IrInstructionOpcode.SampleDClS: case IrInstructionOpcode.SampleD: case IrInstructionOpcode.SampleLS: case IrInstructionOpcode.SampleL: case IrInstructionOpcode.SampleCClS: case IrInstructionOpcode.Gather4: case IrInstructionOpcode.Gather4C: case IrInstructionOpcode.Gather4CS: case IrInstructionOpcode.Gather4Po: case IrInstructionOpcode.Gather4PoC: case IrInstructionOpcode.Gather4PoCS: case IrInstructionOpcode.Gather4PoS: case IrInstructionOpcode.Gather4S: case IrInstructionOpcode.Lod: case IrInstructionOpcode.Resinfo: return(IrInstructionType.SampleCall); default: return(IrInstructionType.Misc); } }