示例#1
0
 public MidInstruction(OpcodeEnum opcode, CodeLocationTag codeLocation, SsaRegister regArg, SsaRegister regArg2)
 {
     Opcode = opcode;
     CodeLocation = codeLocation;
     RegArg = regArg;
     RegArg2 = regArg2;
 }
示例#2
0
 public MidInstruction(OpcodeEnum opcode, CodeLocationTag codeLocation, SsaRegister regArg, CfgOutboundEdge[] cfgEdgesArg)
 {
     Opcode = opcode;
     CodeLocation = codeLocation;
     RegArg = regArg;
     CfgEdgesArg = cfgEdgesArg;
 }
 public AllocInstanceDelegateInstruction(CodeLocationTag codeLocation, TypeSpecTag type, HighSsaRegister dest, HighSsaRegister obj)
     : base(codeLocation)
 {
     m_type = type;
     m_dest = dest;
     m_object = obj;
 }
示例#4
0
 public PtrFieldInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister src, string field)
     : base(codeLocation)
 {
     m_dest = dest;
     m_src = src;
     m_field = field;
 }
 public BindVirtualDelegateInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister obj, MethodSpecTag methodSpec)
     : base(codeLocation)
 {
     m_dest = dest;
     m_object = obj;
     m_methodSpec = methodSpec;
 }
 public LoadValueFieldInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister src, string fieldName)
     : base(codeLocation)
 {
     m_dest = dest;
     m_src = src;
     m_fieldName = fieldName;
 }
 public NumberConvertInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister src, bool checkOverflow)
     : base(codeLocation)
 {
     m_dest = dest;
     m_src = src;
     m_checkOverflow = checkOverflow;
 }
 public GetStaticFieldAddrInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, TypeSpecTag staticType, string fieldName)
     : base(codeLocation)
 {
     m_dest = dest;
     m_staticType = staticType;
     m_fieldName = fieldName;
 }
示例#9
0
        public static HighRegion Read(TagRepository rpa, CatalogReader catalog, HighMethodBodyParseContext methodBody, CodeLocationTag baseLocation, bool haveDebugInfo, BinaryReader reader)
        {
            uint numCfgNodes = reader.ReadUInt32();

            if (numCfgNodes == 0)
                throw new Exception("Region has no CFG nodes");

            HighCfgNodeHandle[] cfgNodes = new HighCfgNodeHandle[numCfgNodes];
            for (uint i = 0; i < numCfgNodes; i++)
                cfgNodes[i] = new HighCfgNodeHandle();

            for (uint i = 0; i < numCfgNodes; i++)
                cfgNodes[i].Value = HighCfgNode.Read(rpa, catalog, methodBody, cfgNodes, baseLocation, haveDebugInfo, reader);

            RegionPhiResolver phiResolver = new RegionPhiResolver(cfgNodes);
            for (uint i = 0; i < numCfgNodes; i++)
            {
                foreach (HighPhi phi in cfgNodes[i].Value.Phis)
                    phi.Resolve(phiResolver);
            }

            HighCfgNodeHandle entryNode = cfgNodes[0];

            if (entryNode.Value.Phis.Length != 0)
                throw new RpaLoadException("Region entry node has phis");

            return new HighRegion(entryNode);
        }
示例#10
0
 public AllocArrayInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister[] sizes, TypeSpecTag targetType)
     : base(codeLocation)
 {
     m_dest = dest;
     m_sizes = sizes;
     m_type = targetType;
 }
示例#11
0
        public static HighProtectedRegion Read(TagRepository rpa, CatalogReader catalog, HighMethodBodyParseContext methodBody, CodeLocationTag baseLocation, bool haveDebugInfo, BinaryReader reader)
        {
            HighProtectedRegion region;

            RegionTypeEnum regionType = (RegionTypeEnum)reader.ReadByte();

            HighRegion tryRegion = HighRegion.Read(rpa, catalog, methodBody, baseLocation, haveDebugInfo, reader);

            switch (regionType)
            {
                case RegionTypeEnum.TryCatch:
                    region = new HighTryCatchRegion(tryRegion);
                    break;
                case RegionTypeEnum.TryFault:
                    region = new HighTryFaultRegion(tryRegion);
                    break;
                case RegionTypeEnum.TryFinally:
                    region = new HighTryFinallyRegion(tryRegion);
                    break;
                default:
                    throw new Exception("Invalid protected region type");
            }

            region.ReadHandlers(rpa, catalog, methodBody, baseLocation, haveDebugInfo, reader);

            return region;
        }
 public LoadMulticastDelegateElementInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister delegateSrc, HighSsaRegister indexSrc)
     : base(codeLocation)
 {
     m_dest = dest;
     m_delegateSrc = delegateSrc;
     m_indexSrc = indexSrc;
 }
 public GetArrayElementPtrInstruction(CodeLocationTag codeLocation, HighSsaRegister addrDestReg, HighSsaRegister arrayReg, HighSsaRegister[] indexes)
     : base(codeLocation)
 {
     m_addrDestReg = addrDestReg;
     m_arrayReg = arrayReg;
     m_indexes = indexes;
 }
示例#14
0
 public BranchRefNullInstruction(CodeLocationTag codeLocation, HighSsaRegister value, HighCfgNodeHandle isNullNode, HighCfgNodeHandle isNotNullNode)
     : base(codeLocation)
 {
     m_value = value;
     m_isNullNode = new HighCfgEdge(this, isNullNode);
     m_isNotNullNode = new HighCfgEdge(this, isNotNullNode);
 }
 public CallRloStaticMethodInstruction(CodeLocationTag codeLocation, MethodHandle methodHandle, HighSsaRegister returnDest, HighSsaRegister[] parameters)
 {
     CodeLocation = codeLocation;
     m_methodHandle = methodHandle;
     m_returnDest = returnDest;
     m_parameters = parameters;
 }
 public ConvertDelegateToMulticastInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister src, TypeSpecMulticastDelegateTag mdgSpec)
     : base(codeLocation)
 {
     m_dest = dest;
     m_src = src;
     m_mdType = mdgSpec;
 }
示例#17
0
 public DynamicCastInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister src, TypeSpecTag type)
     : base(codeLocation)
 {
     m_dest = dest;
     m_src = src;
     m_type = type;
 }
示例#18
0
 public CfgOutboundEdge(CodeLocationTag codeLocation, CfgNode successorNode, CfgOutboundEdgePrototype outboundEdgeProto)
 {
     CodeLocation = codeLocation;
     SurvivingRegs = outboundEdgeProto.OutboundRegs;
     OutputValueTypes = outboundEdgeProto.OutboundTypes;
     SuccessorNode = successorNode;
 }
 public LoadValueRloFieldInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister src, uint fieldIndex)
     : base(codeLocation)
 {
     m_dest = dest;
     m_src = src;
     m_fieldIndex = fieldIndex;
 }
 public CallRloInterfaceMethodInstruction(CodeLocationTag codeLocation, uint vtableSlotIndex, HighSsaRegister returnDest, HighSsaRegister instanceSrc, HighSsaRegister[] parameters)
 {
     CodeLocation = codeLocation;
     m_vtableSlotIndex = vtableSlotIndex;
     m_returnDest = returnDest;
     m_instanceSrc = instanceSrc;
     m_parameters = parameters;
 }
 public CallRloInstanceMethodInstruction(CodeLocationTag codeLocation, MethodHandle methodHandle, HighSsaRegister returnDest, HighSsaRegister instanceSrc, HighSsaRegister[] parameters)
 {
     this.CodeLocation = codeLocation;
     m_methodHandle = methodHandle;
     m_instanceSrc = instanceSrc;
     m_parameters = parameters;
     m_returnDest = returnDest;
 }
 public CallInstanceMethodInstruction(CodeLocationTag codeLocation, HighSsaRegister returnDestReg, MethodSpecTag methodSpec, HighSsaRegister instanceReg, HighSsaRegister[] parameters)
     : base(codeLocation)
 {
     m_returnDestReg = returnDestReg;
     m_methodSpec = methodSpec;
     m_instanceReg = instanceReg;
     m_parameters = parameters;
 }
示例#23
0
 public GetRloFieldInfoInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, TypeSpecTag type, uint fieldIndex, bool isStatic)
     : base(codeLocation)
 {
     m_dest = dest;
     m_type = type;
     m_fieldIndex = fieldIndex;
     m_isStatic = isStatic;
 }
示例#24
0
 public RefFieldInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister src, string field, TypeSpecTag type)
     : base(codeLocation)
 {
     m_dest = dest;
     m_src = src;
     m_field = field;
     m_type = type;
 }
示例#25
0
 public GetFieldInfoInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, TypeSpecTag type, string fieldName, bool isStatic)
     : base(codeLocation)
 {
     m_dest = dest;
     m_type = type;
     m_fieldName = fieldName;
     m_isStatic = isStatic;
 }
 public CallRloVirtualMethodInstruction(CodeLocationTag codeLocation, uint vtableSlotIndex, HighSsaRegister returnDest, HighSsaRegister instanceSrc, HighSsaRegister[] parameters)
     : base(codeLocation)
 {
     m_vtableSlotIndex = vtableSlotIndex;
     m_returnDest = returnDest;
     m_instanceSrc = instanceSrc;
     m_parameters = parameters;
 }
 public BranchCompareRefsInstruction(CodeLocationTag codeLocation, HighSsaRegister regA, HighSsaRegister regB, HighCfgNodeHandle equalNode, HighCfgNodeHandle notEqualNode)
     : base(codeLocation)
 {
     m_regA = regA;
     m_regB = regB;
     m_equalNode = new HighCfgEdge(this, equalNode);
     m_notEqualNode = new HighCfgEdge(this, notEqualNode);
 }
示例#28
0
 public UnaryArithInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, NumberUnaryArithOp arithOp, NumberArithType arithType, HighSsaRegister src)
     : base(codeLocation)
 {
     m_dest = dest;
     m_arithOp = arithOp;
     m_arithType = arithType;
     m_src = src;
 }
 public RloConvertNumberInstruction(CodeLocationTag codeLocation, HighSsaRegister dest, HighSsaRegister src, NumConversionType conversionType, uint destPrecision, uint sourcePrecision)
     : base(codeLocation)
 {
     m_conversionType = conversionType;
     m_dest = dest;
     m_src = src;
     m_destPrecision = destPrecision;
     m_sourcePrecision = sourcePrecision;
 }
示例#30
0
 public override void ReadHeader(TagRepository rpa, CatalogReader catalog, HighMethodBodyParseContext methodBody, HighCfgNodeHandle[] cfgNodes, List<HighSsaRegister> ssaRegisters, CodeLocationTag baseLocation, bool haveDebugInfo, BinaryReader reader)
 {
     m_arithOp = (NumberUnaryArithOp)reader.ReadByte();
     if (m_arithOp < 0 || m_arithOp >= NumberUnaryArithOp.NumHighUnaryArithOpTypes)
         throw new Exception("Invalid unary arithmetic op");
     m_arithType = (NumberArithType)reader.ReadByte();
     if (m_arithType < 0 || m_arithType >= NumberArithType.NumHighArithTypes)
         throw new Exception("Invalid arith type");
 }