示例#1
0
 public ArmRegister this[TArmRegisterBank aBank, TArmRegisterType aType]
 {
     get
     {
         ArmRegisterCollection bank = this[aBank];
         return(bank[aType]);
     }
 }
示例#2
0
 public ArmRegister this[TArmRegisterBank aBank, string aName]
 {
     get
     {
         ArmRegisterCollection bank = this[aBank];
         return(bank[aName]);
     }
 }
示例#3
0
 public ArmRegisterCollection this[TArmRegisterBank aBank]
 {
     get
     {
         ArmRegisterCollection ret = iBanks[aBank];
         return(ret);
     }
 }
        /// <summary>
        /// Internal constructor called by CIRegisterListForThread which sets a thread up as a parent
        /// of the register list.
        /// </summary>
        internal CIRegisterList(CIContainer aContainer, CIElement aParent, TArmRegisterBank aBank)
            : base(aContainer, aParent)
        {
            iCollection              = new ArmRegisterCollection(aBank);
            iCollection.Tag          = this;
            iCollection.BackingStore = this;

            // Restrict children
            base.AddSupportedChildType(typeof(CIRegister));
            base.AddSupportedChildType(typeof(CrashItemLib.Crash.Messages.CIMessage));
        }
        public static string BankAsString(TArmRegisterBank aBank)
        {
            string ret = string.Empty;

            //
            switch (aBank)
            {
            default:
            case TArmRegisterBank.ETypeUnknown:
            case TArmRegisterBank.ETypeCommon:
                ret = string.Empty;
                break;

            case TArmRegisterBank.ETypeException:
                ret = "EXC";
                break;

            case TArmRegisterBank.ETypeCoProcessor:
                ret = "COP";
                break;

            case TArmRegisterBank.ETypeAbort:
                ret = "ABT";
                break;

            case TArmRegisterBank.ETypeFastInterrupt:
                ret = "FIQ";
                break;

            case TArmRegisterBank.ETypeInterrupt:
                ret = "IRQ";
                break;

            case TArmRegisterBank.ETypeSupervisor:
                ret = "SVC";
                break;

            case TArmRegisterBank.ETypeSystem:
                ret = "SYS";
                break;

            case TArmRegisterBank.ETypeUndefined:
                ret = "UND";
                break;

            case TArmRegisterBank.ETypeUser:
                ret = "USR";
                break;
            }
            //
            return(ret);
        }
        public static string BankAsStringLong(TArmRegisterBank aBank)
        {
            string ret = string.Empty;

            //
            switch (aBank)
            {
            default:
            case TArmRegisterBank.ETypeUnknown:
            case TArmRegisterBank.ETypeCommon:
                ret = string.Empty;
                break;

            case TArmRegisterBank.ETypeException:
                ret = "Exception";
                break;

            case TArmRegisterBank.ETypeCoProcessor:
                ret = "Co-processor";
                break;

            case TArmRegisterBank.ETypeAbort:
                ret = "Abort";
                break;

            case TArmRegisterBank.ETypeFastInterrupt:
                ret = "Fast Interrupt";
                break;

            case TArmRegisterBank.ETypeInterrupt:
                ret = "Interrupt";
                break;

            case TArmRegisterBank.ETypeSupervisor:
                ret = "Supervisor";
                break;

            case TArmRegisterBank.ETypeSystem:
                ret = "System";
                break;

            case TArmRegisterBank.ETypeUndefined:
                ret = "Undefined";
                break;

            case TArmRegisterBank.ETypeUser:
                ret = "User";
                break;
            }
            //
            return(ret);
        }
 public CIRegisterList this[TArmRegisterBank aType]
 {
     get { return(iRegisters[aType]); }
     set
     {
         if (iRegisters.ContainsKey(aType))
         {
             iRegisters[aType] = value;
         }
         else
         {
             Add(value);
         }
     }
 }
示例#8
0
        private ArmRegisterCollection CreateCollection(TArmRegisterBank aBank, ArmRegisterCollection aLinkedWith)
        {
            ArmRegisterCollection ret = null;

            //
            if (iBackingStore != null)
            {
                ret = iBackingStore.ARMBSCreate(aBank, aLinkedWith);
            }
            else
            {
                ret = new ArmRegisterCollection(aBank, aLinkedWith);
            }
            //
            return(ret);
        }
示例#9
0
        private ArmRegisterCollection AddBank(TArmRegisterBank aBank, ArmRegisterCollection aLinkedWith, params TArmRegisterType[] aExtraRegs)
        {
            ArmRegisterCollection regSet = CreateCollection(aBank, aLinkedWith);

            iBanks.Add(aBank, regSet);

            // Create bank specific registers
            string bankName = ArmRegisterBankUtils.BankAsString(aBank);

            regSet.Add("R13_" + bankName, 0);
            regSet.Add("R14_" + bankName, 0);
            regSet.Add("SPSR_" + bankName, 0);

            // Create custom registers
            foreach (TArmRegisterType custom in aExtraRegs)
            {
                string name = ArmRegister.GetTypeName(custom) + "_" + bankName;
                regSet.Add(name, 0);
            }

            return(regSet);
        }
示例#10
0
        public static uint MakeStatusRegisterValue(TArmRegisterBank aBank)
        {
            uint val = 0;

            //
            switch (aBank)
            {
            case TArmRegisterBank.ETypeUser:
            case TArmRegisterBank.ETypeFastInterrupt:
            case TArmRegisterBank.ETypeInterrupt:
            case TArmRegisterBank.ETypeSupervisor:
            case TArmRegisterBank.ETypeAbort:
            case TArmRegisterBank.ETypeUndefined:
            case TArmRegisterBank.ETypeSystem:
                val = (uint)aBank;
                break;

            default:
                break;
            }
            //
            return(val);
        }
示例#11
0
        public static TArmRegisterBank ExtractBank(uint aValue)
        {
            uint             val  = aValue & KBankMask;
            TArmRegisterBank bank = (TArmRegisterBank)val;

            //
            switch (bank)
            {
            case TArmRegisterBank.ETypeUser:
            case TArmRegisterBank.ETypeFastInterrupt:
            case TArmRegisterBank.ETypeInterrupt:
            case TArmRegisterBank.ETypeSupervisor:
            case TArmRegisterBank.ETypeAbort:
            case TArmRegisterBank.ETypeUndefined:
            case TArmRegisterBank.ETypeSystem:
                break;

            default:
                bank = TArmRegisterBank.ETypeUndefined;
                break;
            }
            //
            return(bank);
        }
示例#12
0
 private ArmRegisterCollection AddBank(TArmRegisterBank aBank)
 {
     return(AddBank(aBank, null));
 }
 public ArmRegisterCollection(TArmRegisterBank aBank)
     : this(aBank, null)
 {
 }
 public bool Contains(TArmRegisterBank aType)
 {
     return(iRegisters.ContainsKey(aType));
 }
 public void Add(TArmRegisterBank aType)
 {
     this[aType] = new CIRegisterList(Container, aType);
 }
示例#16
0
 private ArmRegisterCollection AddBank(TArmRegisterBank aBank, ArmRegisterCollection aLinkedWith)
 {
     TArmRegisterType[] empty = new TArmRegisterType[] { };
     return(AddBank(aBank, aLinkedWith, empty));
 }
 protected ArmETRegisterCollection(TArmRegisterBank aBank)
     : base(aBank)
 {
     AddDefaults();
 }
示例#18
0
 private ArmRegisterCollection CreateCollection(TArmRegisterBank aBank)
 {
     return(CreateCollection(aBank, null));
 }
 public ArmRegisterCollection(TArmRegisterBank aBank, ArmRegisterCollection aLinkedWith)
 {
     iBank       = aBank;
     iLinkedWith = aLinkedWith;
 }
示例#20
0
        public bool Available(TArmRegisterBank aType)
        {
            bool ret = iBanks.ContainsKey(aType);

            return(ret);
        }