crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianStructuresLib/Arm/Registers/General/ArmRegisterBank.cs
changeset 0 818e61de6cd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianStructuresLib/Arm/Registers/General/ArmRegisterBank.cs	Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+*
+*/
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace SymbianStructuresLib.Arm.Registers
+{
+    public enum TArmRegisterBank
+    {
+        // Special values
+        ETypeUnknown = 0,
+        ETypeException = -1, 
+        ETypeCommon = -2,
+        ETypeCoProcessor = -3,
+        ETypeETM = -4,
+        ETypeETB = -5,
+        ETypeCoProSystemControl = -6,
+
+        // Corresponding CPSR binary values
+        ETypeUser = 0x10,           // 0b10000
+        ETypeFastInterrupt = 0x11,  // 0b10001
+        ETypeInterrupt = 0x12,      // 0b10010
+        ETypeSupervisor = 0x13,     // 0b10011
+        ETypeAbort = 0x17,          // 0b10111
+        ETypeUndefined = 0x1B,      // 0b11011
+        ETypeSystem = 0x1F          // 0b11111
+    }
+
+    public static class ArmRegisterBankUtils
+    {
+        #region API
+        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;
+        }
+
+        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;
+        }
+
+        public static TArmRegisterBank ExtractBank( ArmRegister aRegister )
+        {
+            return ExtractBank( aRegister.Value );
+        }
+
+        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;
+        }
+        #endregion
+
+        #region Internal constants
+        private const uint KBankMask = 0x1F; // 11111b
+        #endregion
+    }
+}