crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianStructuresLib/Arm/Registers/General/ArmRegisterBank.cs
--- /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
+ }
+}