コード例 #1
0
        public static DebugInstructionToken Parse(DebugBytecodeReader reader, uint token, Opcode opcode, uint size)
        {
            var result = new DebugInstructionToken();

            result.token  = token;
            result.Opcode = opcode;
            uint read      = 0;
            uint destIndex = opcode == Opcode.Def ? (uint)1 : 0;

            while (read < size)
            {
                var           index = (uint)result.Operands.Count;
                IDebugOperand operand;
                if (index == destIndex)
                {
                    operand = DebugDestinationOperand.Parse(reader, index);
                }
                else
                {
                    operand = DebugSourceOperand.Parse(reader, index);
                }
                result.Operands.Add(operand);
                read += operand.WordCount;
            }
            return(result);
        }
コード例 #2
0
        public static DebugSourceOperand Parse(DebugBytecodeReader reader, uint index)
        {
            var token  = reader.ReadUInt32($"Operand {index}");
            var result = new DebugSourceOperand();

            result.WordCount             = 1;
            result.RegisterNumber        = (token & 0x7FF);
            result.RegisterType          = (RegisterType)(((token >> 28) & 0x7) | ((token >> 8) & 0x18));
            result.IsRelativeAddressMode = (token & (1 << 13)) != 0;
            result.MinPrecision          = ((token >> 12) & 0XC);
            result.SwizzleComponents     = ((token >> 16) & 0xFF);
            result.SourceModifier        = (SourceModifier)((token >> 24) & 0xF);

            reader.AddNote("RegisterNumber", result.RegisterNumber);
            reader.AddNote("RegisterType", result.RegisterType);
            reader.AddNote("IsRelativeAddressMode", result.IsRelativeAddressMode);
            reader.AddNote("MinPrecision", result.MinPrecision);
            reader.AddNote("SwizzleComponents", result.SwizzleComponents);
            reader.AddNote("SourceModifier", result.SourceModifier);
            return(result);
        }