Пример #1
0
 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;
 }
Пример #2
0
        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);
            }
        }