blob: ece55243943971bfa080bfa29d4b5c1cbe6b71da [file] [log] [blame]
/*
* Copyright (c) 2010-2013, 2015-2017 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
* not be construed as granting a license to any other intellectual
* property including but not limited to intellectual property relating
* to a hardware implementation of the functionality of the software
* licensed hereunder. You may use the software subject to the license
* terms below provided that you ensure that this notice is replicated
* unmodified and in its entirety in all distributions of the software,
* modified or unmodified, in source code or in binary form.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met: redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer;
* redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution;
* neither the name of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Authors: Gabe Black
* Ali Saidi
* Giacomo Gabrielli
*/
#include "arch/arm/miscregs.hh"
#include <tuple>
#include "arch/arm/isa.hh"
#include "base/logging.hh"
#include "cpu/thread_context.hh"
#include "sim/full_system.hh"
namespace ArmISA
{
MiscRegIndex
decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
{
switch(crn) {
case 0:
switch (opc1) {
case 0:
switch (opc2) {
case 0:
switch (crm) {
case 0:
return MISCREG_DBGDIDR;
case 1:
return MISCREG_DBGDSCRint;
}
break;
}
break;
case 7:
switch (opc2) {
case 0:
switch (crm) {
case 0:
return MISCREG_JIDR;
}
break;
}
break;
}
break;
case 1:
switch (opc1) {
case 6:
switch (crm) {
case 0:
switch (opc2) {
case 0:
return MISCREG_TEEHBR;
}
break;
}
break;
case 7:
switch (crm) {
case 0:
switch (opc2) {
case 0:
return MISCREG_JOSCR;
}
break;
}
break;
}
break;
case 2:
switch (opc1) {
case 7:
switch (crm) {
case 0:
switch (opc2) {
case 0:
return MISCREG_JMCR;
}
break;
}
break;
}
break;
}
// If we get here then it must be a register that we haven't implemented
warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
crn, opc1, crm, opc2);
return MISCREG_CP14_UNIMPL;
}
using namespace std;
bitset<NUM_MISCREG_INFOS> miscRegInfo[NUM_MISCREGS] = {
// MISCREG_CPSR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR_FIQ
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR_IRQ
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR_SVC
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR_MON
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR_ABT
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR_HYP
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR_UND
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_ELR_HYP
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_FPSID
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_FPSCR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_MVFR1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_MVFR0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_FPEXC
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// Helper registers
// MISCREG_CPSR_MODE
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CPSR_Q
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_FPSCR_Q
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_FPSCR_EXC
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_LOCKADDR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_LOCKFLAG
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PRRR_MAIR0
bitset<NUM_MISCREG_INFOS>(string("00000000000000011001")),
// MISCREG_PRRR_MAIR0_NS
bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
// MISCREG_PRRR_MAIR0_S
bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
// MISCREG_NMRR_MAIR1
bitset<NUM_MISCREG_INFOS>(string("00000000000000011001")),
// MISCREG_NMRR_MAIR1_NS
bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
// MISCREG_NMRR_MAIR1_S
bitset<NUM_MISCREG_INFOS>(string("00000000000000101001")),
// MISCREG_PMXEVTYPER_PMCCFILTR
bitset<NUM_MISCREG_INFOS>(string("00000000000000001001")),
// MISCREG_SCTLR_RST
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SEV_MAILBOX
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// AArch32 CP14 registers
// MISCREG_DBGDIDR
bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
// MISCREG_DBGDSCRint
bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
// MISCREG_DBGDCCINT
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGDTRTXint
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGDTRRXint
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWFAR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGVCR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGDTRRXext
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGDSCRext
bitset<NUM_MISCREG_INFOS>(string("11111111111111000100")),
// MISCREG_DBGDTRTXext
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGOSECCR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBVR0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBVR1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBVR2
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBVR3
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBVR4
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBVR5
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBCR0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBCR1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBCR2
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBCR3
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBCR4
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBCR5
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWVR0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWVR1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWVR2
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWVR3
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWCR0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWCR1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWCR2
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGWCR3
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGDRAR
bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
// MISCREG_DBGBXVR4
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGBXVR5
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGOSLAR
bitset<NUM_MISCREG_INFOS>(string("10101111111111000000")),
// MISCREG_DBGOSLSR
bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
// MISCREG_DBGOSDLR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGPRCR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGDSAR
bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
// MISCREG_DBGCLAIMSET
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGCLAIMCLR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_DBGAUTHSTATUS
bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
// MISCREG_DBGDEVID2
bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
// MISCREG_DBGDEVID1
bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
// MISCREG_DBGDEVID0
bitset<NUM_MISCREG_INFOS>(string("01011111111111000000")),
// MISCREG_TEECR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_JIDR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_TEEHBR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_JOSCR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_JMCR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// AArch32 CP15 registers
// MISCREG_MIDR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CTR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_TCMTR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_TLBTR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_MPIDR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_REVIDR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000100")),
// MISCREG_ID_PFR0
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_PFR1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_DFR0
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AFR0
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_MMFR0
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_MMFR1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_MMFR2
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_MMFR3
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR0
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR2
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR3
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR4
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR5
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CCSIDR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CLIDR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_AIDR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CSSELR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_CSSELR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_CSSELR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_VPIDR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_VMPIDR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_SCTLR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_SCTLR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_SCTLR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_ACTLR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_ACTLR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_ACTLR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_CPACR
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_SCR
bitset<NUM_MISCREG_INFOS>(string("11110011000000000001")),
// MISCREG_SDER
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_NSACR
bitset<NUM_MISCREG_INFOS>(string("11110111010000000001")),
// MISCREG_HSCTLR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HACTLR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HCR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HDCR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HCPTR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HSTR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HACR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
// MISCREG_TTBR0
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_TTBR0_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_TTBR0_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_TTBR1
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_TTBR1_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_TTBR1_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_TTBCR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_TTBCR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_TTBCR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_HTCR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_VTCR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_DACR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_DACR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_DACR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_DFSR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_DFSR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_DFSR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_IFSR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_IFSR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_IFSR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_ADFSR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010100")),
// MISCREG_ADFSR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100100")),
// MISCREG_ADFSR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100100")),
// MISCREG_AIFSR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010100")),
// MISCREG_AIFSR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100100")),
// MISCREG_AIFSR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100100")),
// MISCREG_HADFSR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HAIFSR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HSR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_DFAR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_DFAR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_DFAR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_IFAR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_IFAR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_IFAR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_HDFAR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HIFAR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HPFAR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_ICIALLUIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_BPIALLIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_PAR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_PAR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_PAR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_ICIALLU
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_ICIMVAU
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_CP15ISB
bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
// MISCREG_BPIALL
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_BPIMVA
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_DCIMVAC
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_DCISW
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_ATS1CPR
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_ATS1CPW
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_ATS1CUR
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_ATS1CUW
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_ATS12NSOPR
bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
// MISCREG_ATS12NSOPW
bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
// MISCREG_ATS12NSOUR
bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
// MISCREG_ATS12NSOUW
bitset<NUM_MISCREG_INFOS>(string("10101010000000000001")),
// MISCREG_DCCMVAC
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_DCCSW
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_CP15DSB
bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
// MISCREG_CP15DMB
bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
// MISCREG_DCCMVAU
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_DCCIMVAC
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_DCCISW
bitset<NUM_MISCREG_INFOS>(string("10101010100000000100")),
// MISCREG_ATS1HR
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_ATS1HW
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBIALLIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIMVAIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIASIDIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIMVAAIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIMVALIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
// MISCREG_TLBIMVAALIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
// MISCREG_ITLBIALL
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_ITLBIMVA
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_ITLBIASID
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_DTLBIALL
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_DTLBIMVA
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_DTLBIASID
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIALL
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIMVA
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIASID
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIMVAA
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBIMVAL
bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
// MISCREG_TLBIMVAAL
bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
// MISCREG_TLBIIPAS2IS
bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
// MISCREG_TLBIIPAS2LIS
bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
// MISCREG_TLBIALLHIS
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBIMVAHIS
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBIALLNSNHIS
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBIMVALHIS
bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
// MISCREG_TLBIIPAS2
bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
// MISCREG_TLBIIPAS2L
bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
// MISCREG_TLBIALLH
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBIMVAH
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBIALLNSNH
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBIMVALH
bitset<NUM_MISCREG_INFOS>(string("10001000000000000000")),
// MISCREG_PMCR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCNTENSET
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCNTENCLR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMOVSR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMSWINC
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMSELR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCEID0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCEID1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCCNTR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMXEVTYPER
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCCFILTR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMXEVCNTR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMUSERENR
bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
// MISCREG_PMINTENSET
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_PMINTENCLR
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_PMOVSSET
bitset<NUM_MISCREG_INFOS>(string("11111111111111000000")),
// MISCREG_L2CTLR
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_L2ECTLR
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_PRRR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_PRRR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_PRRR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_MAIR0
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_MAIR0_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_MAIR0_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_NMRR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_NMRR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_NMRR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_MAIR1
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_MAIR1_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_MAIR1_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_AMAIR0
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_AMAIR0_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_AMAIR0_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_AMAIR1
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_AMAIR1_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_AMAIR1_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_HMAIR0
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HMAIR1
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_HAMAIR0
bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
// MISCREG_HAMAIR1
bitset<NUM_MISCREG_INFOS>(string("11001100000000000100")),
// MISCREG_VBAR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_VBAR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_VBAR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_MVBAR
bitset<NUM_MISCREG_INFOS>(string("11110011000000000001")),
// MISCREG_RMR
bitset<NUM_MISCREG_INFOS>(string("11110011000000000000")),
// MISCREG_ISR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_HVBAR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_FCSEIDR
bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
// MISCREG_CONTEXTIDR
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_CONTEXTIDR_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_CONTEXTIDR_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_TPIDRURW
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_TPIDRURW_NS
bitset<NUM_MISCREG_INFOS>(string("11001111111111100001")),
// MISCREG_TPIDRURW_S
bitset<NUM_MISCREG_INFOS>(string("00110011001100100001")),
// MISCREG_TPIDRURO
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_TPIDRURO_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110101100001")),
// MISCREG_TPIDRURO_S
bitset<NUM_MISCREG_INFOS>(string("00110011000100100001")),
// MISCREG_TPIDRPRW
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_TPIDRPRW_NS
bitset<NUM_MISCREG_INFOS>(string("11001111110000100001")),
// MISCREG_TPIDRPRW_S
bitset<NUM_MISCREG_INFOS>(string("00110011000000100001")),
// MISCREG_HTPIDR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_CNTFRQ
bitset<NUM_MISCREG_INFOS>(string("11110101010101000011")),
// MISCREG_CNTKCTL
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_CNTP_TVAL
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_CNTP_TVAL_NS
bitset<NUM_MISCREG_INFOS>(string("11001111111111100001")),
// MISCREG_CNTP_TVAL_S
bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
// MISCREG_CNTP_CTL
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_CNTP_CTL_NS
bitset<NUM_MISCREG_INFOS>(string("11001111111111100001")),
// MISCREG_CNTP_CTL_S
bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
// MISCREG_CNTV_TVAL
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTV_CTL
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTHCTL
bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
// MISCREG_CNTHP_TVAL
bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
// MISCREG_CNTHP_CTL
bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
// MISCREG_IL1DATA0
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_IL1DATA1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_IL1DATA2
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_IL1DATA3
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_DL1DATA0
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_DL1DATA1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_DL1DATA2
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_DL1DATA3
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_DL1DATA4
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_RAMINDEX
bitset<NUM_MISCREG_INFOS>(string("10101010100000000000")),
// MISCREG_L2ACTLR
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_CBAR
bitset<NUM_MISCREG_INFOS>(string("01010101010000000000")),
// MISCREG_HTTBR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_VTTBR
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_CNTPCT
bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
// MISCREG_CNTVCT
bitset<NUM_MISCREG_INFOS>(string("01010101010101000011")),
// MISCREG_CNTP_CVAL
bitset<NUM_MISCREG_INFOS>(string("00000000000000010001")),
// MISCREG_CNTP_CVAL_NS
bitset<NUM_MISCREG_INFOS>(string("11001111111111100001")),
// MISCREG_CNTP_CVAL_S
bitset<NUM_MISCREG_INFOS>(string("00110011001111100000")),
// MISCREG_CNTV_CVAL
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTVOFF
bitset<NUM_MISCREG_INFOS>(string("11001100000000000001")),
// MISCREG_CNTHP_CVAL
bitset<NUM_MISCREG_INFOS>(string("01001000000000000000")),
// MISCREG_CPUMERRSR
bitset<NUM_MISCREG_INFOS>(string("11111111110000000000")),
// MISCREG_L2MERRSR
bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
// AArch64 registers (Op0=2)
// MISCREG_MDCCINT_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_OSDTRRX_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_MDSCR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_OSDTRTX_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_OSECCR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBVR0_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBVR1_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBVR2_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBVR3_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBVR4_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBVR5_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBCR0_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBCR1_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBCR2_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBCR3_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBCR4_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGBCR5_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGWVR0_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGWVR1_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGWVR2_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGWVR3_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGWCR0_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGWCR1_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGWCR2_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGWCR3_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_MDCCSR_EL0
bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
// MISCREG_MDDTR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_MDDTRTX_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_MDDTRRX_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGVCR32_EL2
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_MDRAR_EL1
bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
// MISCREG_OSLAR_EL1
bitset<NUM_MISCREG_INFOS>(string("10101111111111000001")),
// MISCREG_OSLSR_EL1
bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
// MISCREG_OSDLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGPRCR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGCLAIMSET_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGCLAIMCLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DBGAUTHSTATUS_EL1
bitset<NUM_MISCREG_INFOS>(string("01011111111111000001")),
// MISCREG_TEECR32_EL1
bitset<NUM_MISCREG_INFOS>(string("00000000000000000001")),
// MISCREG_TEEHBR32_EL1
bitset<NUM_MISCREG_INFOS>(string("00000000000000000001")),
// AArch64 registers (Op0=1,3)
// MISCREG_MIDR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_MPIDR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_REVIDR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_PFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_PFR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_DFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_MMFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_MMFR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_MMFR2_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_MMFR3_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR2_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR3_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR4_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_ISAR5_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_MVFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_MVFR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_MVFR2_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64PFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64PFR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64DFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64DFR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64AFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64AFR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64ISAR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64ISAR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64MMFR0_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ID_AA64MMFR1_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CCSIDR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CLIDR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_AIDR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CSSELR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_CTR_EL0
bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
// MISCREG_DCZID_EL0
bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
// MISCREG_VPIDR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_VMPIDR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SCTLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_ACTLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_CPACR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_SCTLR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_ACTLR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_HCR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_MDCR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_CPTR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_HSTR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_HACR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SCTLR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_ACTLR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_SCR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_SDER32_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_CPTR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_MDCR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_TTBR0_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_TTBR1_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_TCR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_TTBR0_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_TCR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_VTTBR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_VTCR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_TTBR0_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_TCR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_DACR32_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SPSR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_ELR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_SP_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_SPSEL
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_CURRENTEL
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_NZCV
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DAIF
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_FPCR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_FPSR
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DSPSR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_DLR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_SPSR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_ELR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SP_EL1
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SPSR_IRQ_AA64
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SPSR_ABT_AA64
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SPSR_UND_AA64
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SPSR_FIQ_AA64
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_SPSR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_ELR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_SP_EL2
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_AFSR0_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_AFSR1_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_ESR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_IFSR32_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_AFSR0_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_AFSR1_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_ESR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_FPEXC32_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_AFSR0_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_AFSR1_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_ESR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_FAR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_FAR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_HPFAR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_FAR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_IC_IALLUIS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
// MISCREG_PAR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_IC_IALLU
bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
// MISCREG_DC_IVAC_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
// MISCREG_DC_ISW_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
// MISCREG_AT_S1E1R_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_AT_S1E1W_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_AT_S1E0R_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_AT_S1E0W_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_DC_CSW_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
// MISCREG_DC_CISW_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000101")),
// MISCREG_DC_ZVA_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100010000101")),
// MISCREG_IC_IVAU_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010101010000001")),
// MISCREG_DC_CVAC_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
// MISCREG_DC_CVAU_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
// MISCREG_DC_CIVAC_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010101010000101")),
// MISCREG_AT_S1E2R_Xt
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_AT_S1E2W_Xt
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_AT_S12E1R_Xt
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_AT_S12E1W_Xt
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_AT_S12E0R_Xt
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_AT_S12E0W_Xt
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_AT_S1E3R_Xt
bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
// MISCREG_AT_S1E3W_Xt
bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
// MISCREG_TLBI_VMALLE1IS
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VAE1IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_ASIDE1IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VAAE1IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VALE1IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VAALE1IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VMALLE1
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VAE1_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_ASIDE1_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VAAE1_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VALE1_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_VAALE1_Xt
bitset<NUM_MISCREG_INFOS>(string("10101010100000000001")),
// MISCREG_TLBI_IPAS2E1IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_TLBI_IPAS2LE1IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_TLBI_ALLE2IS
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBI_VAE2IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBI_ALLE1IS
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_TLBI_VALE2IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBI_VMALLS12E1IS
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_TLBI_IPAS2E1_Xt
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_TLBI_IPAS2LE1_Xt
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_TLBI_ALLE2
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBI_VAE2_Xt
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBI_ALLE1
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_TLBI_VALE2_Xt
bitset<NUM_MISCREG_INFOS>(string("10001000000000000001")),
// MISCREG_TLBI_VMALLS12E1
bitset<NUM_MISCREG_INFOS>(string("10101000000000000001")),
// MISCREG_TLBI_ALLE3IS
bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
// MISCREG_TLBI_VAE3IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
// MISCREG_TLBI_VALE3IS_Xt
bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
// MISCREG_TLBI_ALLE3
bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
// MISCREG_TLBI_VAE3_Xt
bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
// MISCREG_TLBI_VALE3_Xt
bitset<NUM_MISCREG_INFOS>(string("10100000000000000001")),
// MISCREG_PMINTENSET_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_PMINTENCLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_PMCR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCNTENSET_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCNTENCLR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMOVSCLR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMSWINC_EL0
bitset<NUM_MISCREG_INFOS>(string("10101010101111000001")),
// MISCREG_PMSELR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCEID0_EL0
bitset<NUM_MISCREG_INFOS>(string("01010101011111000001")),
// MISCREG_PMCEID1_EL0
bitset<NUM_MISCREG_INFOS>(string("01010101011111000001")),
// MISCREG_PMCCNTR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMXEVTYPER_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMCCFILTR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMXEVCNTR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMUSERENR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
// MISCREG_PMOVSSET_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_MAIR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_AMAIR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_MAIR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_AMAIR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_MAIR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_AMAIR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_L2CTLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_L2ECTLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_VBAR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_RVBAR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_ISR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_VBAR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_RVBAR_EL2
bitset<NUM_MISCREG_INFOS>(string("01010100000000000001")),
// MISCREG_VBAR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_RVBAR_EL3
bitset<NUM_MISCREG_INFOS>(string("01010000000000000001")),
// MISCREG_RMR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_CONTEXTIDR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_TPIDR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_TPIDR_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_TPIDRRO_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111110101000001")),
// MISCREG_TPIDR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_TPIDR_EL3
bitset<NUM_MISCREG_INFOS>(string("11110000000000000001")),
// MISCREG_CNTKCTL_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_CNTFRQ_EL0
bitset<NUM_MISCREG_INFOS>(string("11110101010101000001")),
// MISCREG_CNTPCT_EL0
bitset<NUM_MISCREG_INFOS>(string("01010101010101000001")),
// MISCREG_CNTVCT_EL0
bitset<NUM_MISCREG_INFOS>(string("01010101010101000011")),
// MISCREG_CNTP_TVAL_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTP_CTL_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTP_CVAL_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTV_TVAL_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTV_CTL_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTV_CVAL_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVCNTR0_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVCNTR1_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVCNTR2_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVCNTR3_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVCNTR4_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVCNTR5_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVTYPER0_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVTYPER1_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVTYPER2_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVTYPER3_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVTYPER4_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_PMEVTYPER5_EL0
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_CNTVOFF_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// MISCREG_CNTHCTL_EL2
bitset<NUM_MISCREG_INFOS>(string("01111000000000000100")),
// MISCREG_CNTHP_TVAL_EL2
bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
// MISCREG_CNTHP_CTL_EL2
bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
// MISCREG_CNTHP_CVAL_EL2
bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
// MISCREG_CNTPS_TVAL_EL1
bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
// MISCREG_CNTPS_CTL_EL1
bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
// MISCREG_CNTPS_CVAL_EL1
bitset<NUM_MISCREG_INFOS>(string("01111000000000000000")),
// MISCREG_IL1DATA0_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_IL1DATA1_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_IL1DATA2_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_IL1DATA3_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_DL1DATA0_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_DL1DATA1_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_DL1DATA2_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_DL1DATA3_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_DL1DATA4_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_L2ACTLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_CPUACTLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_CPUECTLR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_CPUMERRSR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000001")),
// MISCREG_L2MERRSR_EL1
bitset<NUM_MISCREG_INFOS>(string("11111111110000000100")),
// MISCREG_CBAR_EL1
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CONTEXTIDR_EL2
bitset<NUM_MISCREG_INFOS>(string("11111100000000000001")),
// Dummy registers
// MISCREG_NOP
bitset<NUM_MISCREG_INFOS>(string("11111111111111000001")),
// MISCREG_RAZ
bitset<NUM_MISCREG_INFOS>(string("01010101010000000001")),
// MISCREG_CP14_UNIMPL
bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
// MISCREG_CP15_UNIMPL
bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
// MISCREG_A64_UNIMPL
bitset<NUM_MISCREG_INFOS>(string("00000000000000000100")),
// MISCREG_UNKNOWN
bitset<NUM_MISCREG_INFOS>(string("00000000000000000001"))
};
MiscRegIndex
decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
{
switch (crn) {
case 0:
switch (opc1) {
case 0:
switch (crm) {
case 0:
switch (opc2) {
case 1:
return MISCREG_CTR;
case 2:
return MISCREG_TCMTR;
case 3:
return MISCREG_TLBTR;
case 5:
return MISCREG_MPIDR;
case 6:
return MISCREG_REVIDR;
default:
return MISCREG_MIDR;
}
break;
case 1:
switch (opc2) {
case 0:
return MISCREG_ID_PFR0;
case 1:
return MISCREG_ID_PFR1;
case 2:
return MISCREG_ID_DFR0;
case 3:
return MISCREG_ID_AFR0;
case 4:
return MISCREG_ID_MMFR0;
case 5:
return MISCREG_ID_MMFR1;
case 6:
return MISCREG_ID_MMFR2;
case 7:
return MISCREG_ID_MMFR3;
}
break;
case 2:
switch (opc2) {
case 0:
return MISCREG_ID_ISAR0;
case 1:
return MISCREG_ID_ISAR1;
case 2:
return MISCREG_ID_ISAR2;
case 3:
return MISCREG_ID_ISAR3;
case 4:
return MISCREG_ID_ISAR4;
case 5:
return MISCREG_ID_ISAR5;
case 6:
case 7:
return MISCREG_RAZ; // read as zero
}
break;
default:
return MISCREG_RAZ; // read as zero
}
break;
case 1:
if (crm == 0) {
switch (opc2) {
case 0:
return MISCREG_CCSIDR;
case 1:
return MISCREG_CLIDR;
case 7:
return MISCREG_AIDR;
}
}
break;
case 2:
if (crm == 0 && opc2 == 0) {
return MISCREG_CSSELR;
}
break;
case 4:
if (crm == 0) {
if (opc2 == 0)
return MISCREG_VPIDR;
else if (opc2 == 5)
return MISCREG_VMPIDR;
}
break;
}
break;
case 1:
if (opc1 == 0) {
if (crm == 0) {
switch (opc2) {
case 0:
return MISCREG_SCTLR;
case 1:
return MISCREG_ACTLR;
case 0x2:
return MISCREG_CPACR;
}
} else if (crm == 1) {
switch (opc2) {
case 0:
return MISCREG_SCR;
case 1:
return MISCREG_SDER;
case 2:
return MISCREG_NSACR;
}
}
} else if (opc1 == 4) {
if (crm == 0) {
if (opc2 == 0)
return MISCREG_HSCTLR;
else if (opc2 == 1)
return MISCREG_HACTLR;
} else if (crm == 1) {
switch (opc2) {
case 0:
return MISCREG_HCR;
case 1:
return MISCREG_HDCR;
case 2:
return MISCREG_HCPTR;
case 3:
return MISCREG_HSTR;
case 7:
return MISCREG_HACR;
}
}
}
break;
case 2:
if (opc1 == 0 && crm == 0) {
switch (opc2) {
case 0:
return MISCREG_TTBR0;
case 1:
return MISCREG_TTBR1;
case 2:
return MISCREG_TTBCR;
}
} else if (opc1 == 4) {
if (crm == 0 && opc2 == 2)
return MISCREG_HTCR;
else if (crm == 1 && opc2 == 2)
return MISCREG_VTCR;
}
break;
case 3:
if (opc1 == 0 && crm == 0 && opc2 == 0) {
return MISCREG_DACR;
}
break;
case 5:
if (opc1 == 0) {
if (crm == 0) {
if (opc2 == 0) {
return MISCREG_DFSR;
} else if (opc2 == 1) {
return MISCREG_IFSR;
}
} else if (crm == 1) {
if (opc2 == 0) {
return MISCREG_ADFSR;
} else if (opc2 == 1) {
return MISCREG_AIFSR;
}
}
} else if (opc1 == 4) {
if (crm == 1) {
if (opc2 == 0)
return MISCREG_HADFSR;
else if (opc2 == 1)
return MISCREG_HAIFSR;
} else if (crm == 2 && opc2 == 0) {
return MISCREG_HSR;
}
}
break;
case 6:
if (opc1 == 0 && crm == 0) {
switch (opc2) {
case 0:
return MISCREG_DFAR;
case 2:
return MISCREG_IFAR;
}
} else if (opc1 == 4 && crm == 0) {
switch (opc2) {
case 0:
return MISCREG_HDFAR;
case 2:
return MISCREG_HIFAR;
case 4:
return MISCREG_HPFAR;
}
}
break;
case 7:
if (opc1 == 0) {
switch (crm) {
case 0:
if (opc2 == 4) {
return MISCREG_NOP;
}
break;
case 1:
switch (opc2) {
case 0:
return MISCREG_ICIALLUIS;
case 6:
return MISCREG_BPIALLIS;
}
break;
case 4:
if (opc2 == 0) {
return MISCREG_PAR;
}
break;
case 5:
switch (opc2) {
case 0:
return MISCREG_ICIALLU;
case 1:
return MISCREG_ICIMVAU;
case 4:
return MISCREG_CP15ISB;
case 6:
return MISCREG_BPIALL;
case 7:
return MISCREG_BPIMVA;
}
break;
case 6:
if (opc2 == 1) {
return MISCREG_DCIMVAC;
} else if (opc2 == 2) {
return MISCREG_DCISW;
}
break;
case 8:
switch (opc2) {
case 0:
return MISCREG_ATS1CPR;
case 1:
return MISCREG_ATS1CPW;
case 2:
return MISCREG_ATS1CUR;
case 3:
return MISCREG_ATS1CUW;
case 4:
return MISCREG_ATS12NSOPR;
case 5:
return MISCREG_ATS12NSOPW;
case 6:
return MISCREG_ATS12NSOUR;
case 7:
return MISCREG_ATS12NSOUW;
}
break;
case 10:
switch (opc2) {
case 1:
return MISCREG_DCCMVAC;
case 2:
return MISCREG_DCCSW;
case 4:
return MISCREG_CP15DSB;
case 5:
return MISCREG_CP15DMB;
}
break;
case 11:
if (opc2 == 1) {
return MISCREG_DCCMVAU;
}
break;
case 13:
if (opc2 == 1) {
return MISCREG_NOP;
}
break;
case 14:
if (opc2 == 1) {
return MISCREG_DCCIMVAC;
} else if (opc2 == 2) {
return MISCREG_DCCISW;
}
break;
}
} else if (opc1 == 4 && crm == 8) {
if (opc2 == 0)
return MISCREG_ATS1HR;
else if (opc2 == 1)
return MISCREG_ATS1HW;
}
break;
case 8:
if (opc1 == 0) {
switch (crm) {
case 3:
switch (opc2) {
case 0:
return MISCREG_TLBIALLIS;
case 1:
return MISCREG_TLBIMVAIS;
case 2:
return MISCREG_TLBIASIDIS;
case 3:
return MISCREG_TLBIMVAAIS;
}
break;
case 5:
switch (opc2) {
case 0:
return MISCREG_ITLBIALL;
case 1:
return MISCREG_ITLBIMVA;
case 2:
return MISCREG_ITLBIASID;
}
break;
case 6:
switch (opc2) {
case 0:
return MISCREG_DTLBIALL;
case 1:
return MISCREG_DTLBIMVA;
case 2:
return MISCREG_DTLBIASID;
}
break;
case 7:
switch (opc2) {
case 0:
return MISCREG_TLBIALL;
case 1:
return MISCREG_TLBIMVA;
case 2:
return MISCREG_TLBIASID;
case 3:
return MISCREG_TLBIMVAA;
}
break;
}
} else if (opc1 == 4) {
if (crm == 3) {
switch (opc2) {
case 0:
return MISCREG_TLBIALLHIS;
case 1:
return MISCREG_TLBIMVAHIS;
case 4:
return MISCREG_TLBIALLNSNHIS;
}
} else if (crm == 7) {
switch (opc2) {
case 0:
return MISCREG_TLBIALLH;
case 1:
return MISCREG_TLBIMVAH;
case 4:
return MISCREG_TLBIALLNSNH;
}
}
}
break;
case 9:
if (opc1 == 0) {
switch (crm) {
case 12:
switch (opc2) {
case 0:
return MISCREG_PMCR;
case 1:
return MISCREG_PMCNTENSET;
case 2:
return MISCREG_PMCNTENCLR;
case 3:
return MISCREG_PMOVSR;
case 4:
return MISCREG_PMSWINC;
case 5:
return MISCREG_PMSELR;
case 6:
return MISCREG_PMCEID0;
case 7:
return MISCREG_PMCEID1;
}
break;
case 13:
switch (opc2) {
case 0:
return MISCREG_PMCCNTR;
case 1:
// Selector is PMSELR.SEL
return MISCREG_PMXEVTYPER_PMCCFILTR;
case 2:
return MISCREG_PMXEVCNTR;
}
break;
case 14:
switch (opc2) {
case 0:
return MISCREG_PMUSERENR;
case 1:
return MISCREG_PMINTENSET;
case 2:
return MISCREG_PMINTENCLR;
case 3:
return MISCREG_PMOVSSET;
}
break;
}
} else if (opc1 == 1) {
switch (crm) {
case 0:
switch (opc2) {
case 2: // L2CTLR, L2 Control Register
return MISCREG_L2CTLR;
case 3:
return MISCREG_L2ECTLR;
}
break;
break;
}
}
break;
case 10:
if (opc1 == 0) {
// crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
if (crm == 2) { // TEX Remap Registers
if (opc2 == 0) {
// Selector is TTBCR.EAE
return MISCREG_PRRR_MAIR0;
} else if (opc2 == 1) {
// Selector is TTBCR.EAE
return MISCREG_NMRR_MAIR1;
}
} else if (crm == 3) {
if (opc2 == 0) {
return MISCREG_AMAIR0;
} else if (opc2 == 1) {
return MISCREG_AMAIR1;
}
}
} else if (opc1 == 4) {
// crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
if (crm == 2) {
if (opc2 == 0)
return MISCREG_HMAIR0;
else if (opc2 == 1)
return MISCREG_HMAIR1;
} else if (crm == 3) {
if (opc2 == 0)
return MISCREG_HAMAIR0;
else if (opc2 == 1)
return MISCREG_HAMAIR1;
}
}
break;
case 11:
if (opc1 <=7) {
switch (crm) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 15:
// Reserved for DMA operations for TCM access
break;
}
}
break;
case 12:
if (opc1 == 0) {
if (crm == 0) {
if (opc2 == 0) {
return MISCREG_VBAR;
} else if (opc2 == 1) {
return MISCREG_MVBAR;
}
} else if (crm == 1) {
if (opc2 == 0) {
return MISCREG_ISR;
}
}
} else if (opc1 == 4) {
if (crm == 0 && opc2 == 0)
return MISCREG_HVBAR;
}
break;
case 13:
if (opc1 == 0) {
if (crm == 0) {
switch (opc2) {
case 0:
return MISCREG_FCSEIDR;
case 1:
return MISCREG_CONTEXTIDR;
case 2:
return MISCREG_TPIDRURW;
case 3:
return MISCREG_TPIDRURO;
case 4:
return MISCREG_TPIDRPRW;
}
}
} else if (opc1 == 4) {
if (crm == 0 && opc2 == 2)
return MISCREG_HTPIDR;
}
break;
case 14:
if (opc1 == 0) {
switch (crm) {
case 0:
if (opc2 == 0)
return MISCREG_CNTFRQ;
break;
case 1:
if (opc2 == 0)
return MISCREG_CNTKCTL;
break;
case 2:
if (opc2 == 0)
return MISCREG_CNTP_TVAL;
else if (opc2 == 1)
return MISCREG_CNTP_CTL;
break;
case 3:
if (opc2 == 0)
return MISCREG_CNTV_TVAL;
else if (opc2 == 1)
return MISCREG_CNTV_CTL;
break;
}
} else if (opc1 == 4) {
if (crm == 1 && opc2 == 0) {
return MISCREG_CNTHCTL;
} else if (crm == 2) {
if (opc2 == 0)
return MISCREG_CNTHP_TVAL;
else if (opc2 == 1)
return MISCREG_CNTHP_CTL;
}
}
break;
case 15:
// Implementation defined
return MISCREG_CP15_UNIMPL;
}
// Unrecognized register
return MISCREG_CP15_UNIMPL;
}
MiscRegIndex
decodeCP15Reg64(unsigned crm, unsigned opc1)
{
switch (crm) {
case 2:
switch (opc1) {
case 0:
return MISCREG_TTBR0;
case 1:
return MISCREG_TTBR1;
case 4:
return MISCREG_HTTBR;
case 6:
return MISCREG_VTTBR;
}
break;
case 7:
if (opc1 == 0)
return MISCREG_PAR;
break;
case 14:
switch (opc1) {
case 0:
return MISCREG_CNTPCT;
case 1:
return MISCREG_CNTVCT;
case 2:
return MISCREG_CNTP_CVAL;
case 3:
return MISCREG_CNTV_CVAL;
case 4:
return MISCREG_CNTVOFF;
case 6:
return MISCREG_CNTHP_CVAL;
}
break;
case 15:
if (opc1 == 0)
return MISCREG_CPUMERRSR;
else if (opc1 == 1)
return MISCREG_L2MERRSR;
break;
}
// Unrecognized register
return MISCREG_CP15_UNIMPL;
}
std::tuple<bool, bool>
canReadCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr)
{
bool secure = !scr.ns;
bool canRead = false;
bool undefined = false;
switch (cpsr.mode) {
case MODE_USER:
canRead = secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
miscRegInfo[reg][MISCREG_USR_NS_RD];
break;
case MODE_FIQ:
case MODE_IRQ:
case MODE_SVC:
case MODE_ABORT:
case MODE_UNDEFINED:
case MODE_SYSTEM:
canRead = secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
miscRegInfo[reg][MISCREG_PRI_NS_RD];
break;
case MODE_MON:
canRead = secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
miscRegInfo[reg][MISCREG_MON_NS1_RD];
break;
case MODE_HYP:
canRead = miscRegInfo[reg][MISCREG_HYP_RD];
break;
default:
undefined = true;
}
// can't do permissions checkes on the root of a banked pair of regs
assert(!miscRegInfo[reg][MISCREG_BANKED]);
return std::make_tuple(canRead, undefined);
}
std::tuple<bool, bool>
canWriteCoprocReg(MiscRegIndex reg, SCR scr, CPSR cpsr)
{
bool secure = !scr.ns;
bool canWrite = false;
bool undefined = false;
switch (cpsr.mode) {
case MODE_USER:
canWrite = secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
miscRegInfo[reg][MISCREG_USR_NS_WR];
break;
case MODE_FIQ:
case MODE_IRQ:
case MODE_SVC:
case MODE_ABORT:
case MODE_UNDEFINED:
case MODE_SYSTEM:
canWrite = secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
miscRegInfo[reg][MISCREG_PRI_NS_WR];
break;
case MODE_MON:
canWrite = secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
miscRegInfo[reg][MISCREG_MON_NS1_WR];
break;
case MODE_HYP:
canWrite = miscRegInfo[reg][MISCREG_HYP_WR];
break;
default:
undefined = true;
}
// can't do permissions checkes on the root of a banked pair of regs
assert(!miscRegInfo[reg][MISCREG_BANKED]);
return std::make_tuple(canWrite, undefined);
}
int
flattenMiscRegNsBanked(MiscRegIndex reg, ThreadContext *tc)
{
SCR scr = tc->readMiscReg(MISCREG_SCR);
return flattenMiscRegNsBanked(reg, tc, scr.ns);
}
int
flattenMiscRegNsBanked(MiscRegIndex reg, ThreadContext *tc, bool ns)
{
int reg_as_int = static_cast<int>(reg);
if (miscRegInfo[reg][MISCREG_BANKED]) {
reg_as_int += (ArmSystem::haveSecurity(tc) &&
!ArmSystem::highestELIs64(tc) && !ns) ? 2 : 1;
}
return reg_as_int;
}
/**
* If the reg is a child reg of a banked set, then the parent is the last
* banked one in the list. This is messy, and the wish is to eventually have
* the bitmap replaced with a better data structure. the preUnflatten function
* initializes a lookup table to speed up the search for these banked
* registers.
*/
int unflattenResultMiscReg[NUM_MISCREGS];
void
preUnflattenMiscReg()
{
int reg = -1;
for (int i = 0 ; i < NUM_MISCREGS; i++){
if (miscRegInfo[i][MISCREG_BANKED])
reg = i;
if (miscRegInfo[i][MISCREG_BANKED_CHILD])
unflattenResultMiscReg[i] = reg;
else
unflattenResultMiscReg[i] = i;
// if this assert fails, no parent was found, and something is broken
assert(unflattenResultMiscReg[i] > -1);
}
}
int
unflattenMiscReg(int reg)
{
return unflattenResultMiscReg[reg];
}
bool
canReadAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
{
// Check for SP_EL0 access while SPSEL == 0
if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
return false;
// Check for RVBAR access
if (reg == MISCREG_RVBAR_EL1) {
ExceptionLevel highest_el = ArmSystem::highestEL(tc);
if (highest_el == EL2 || highest_el == EL3)
return false;
}
if (reg == MISCREG_RVBAR_EL2) {
ExceptionLevel highest_el = ArmSystem::highestEL(tc);
if (highest_el == EL3)
return false;
}
bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
switch (opModeToEL((OperatingMode) (uint8_t) cpsr.mode)) {
case EL0:
return secure ? miscRegInfo[reg][MISCREG_USR_S_RD] :
miscRegInfo[reg][MISCREG_USR_NS_RD];
case EL1:
return secure ? miscRegInfo[reg][MISCREG_PRI_S_RD] :
miscRegInfo[reg][MISCREG_PRI_NS_RD];
case EL2:
return miscRegInfo[reg][MISCREG_HYP_RD];
case EL3:
return secure ? miscRegInfo[reg][MISCREG_MON_NS0_RD] :
miscRegInfo[reg][MISCREG_MON_NS1_RD];
default:
panic("Invalid exception level");
}
}
bool
canWriteAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
{
// Check for SP_EL0 access while SPSEL == 0
if ((reg == MISCREG_SP_EL0) && (tc->readMiscReg(MISCREG_SPSEL) == 0))
return false;
ExceptionLevel el = opModeToEL((OperatingMode) (uint8_t) cpsr.mode);
if (reg == MISCREG_DAIF) {
SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
if (el == EL0 && !sctlr.uma)
return false;
}
if (FullSystem && reg == MISCREG_DC_ZVA_Xt) {
// In syscall-emulation mode, this test is skipped and DCZVA is always
// allowed at EL0
SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
if (el == EL0 && !sctlr.dze)
return false;
}
if (reg == MISCREG_DC_CVAC_Xt || reg == MISCREG_DC_CIVAC_Xt ||
reg == MISCREG_DC_IVAC_Xt) {
SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
if (el == EL0 && !sctlr.uci)
return false;
}
bool secure = ArmSystem::haveSecurity(tc) && !scr.ns;
switch (el) {
case EL0:
return secure ? miscRegInfo[reg][MISCREG_USR_S_WR] :
miscRegInfo[reg][MISCREG_USR_NS_WR];
case EL1:
return secure ? miscRegInfo[reg][MISCREG_PRI_S_WR] :
miscRegInfo[reg][MISCREG_PRI_NS_WR];
case EL2:
return miscRegInfo[reg][MISCREG_HYP_WR];
case EL3:
return secure ? miscRegInfo[reg][MISCREG_MON_NS0_WR] :
miscRegInfo[reg][MISCREG_MON_NS1_WR];
default:
panic("Invalid exception level");
}
}
MiscRegIndex
decodeAArch64SysReg(unsigned op0, unsigned op1,
unsigned crn, unsigned crm,
unsigned op2)
{
switch (op0) {
case 1:
switch (crn) {
case 7:
switch (op1) {
case 0:
switch (crm) {
case 1:
switch (op2) {
case 0:
return MISCREG_IC_IALLUIS;
}
break;
case 5:
switch (op2) {
case 0:
return MISCREG_IC_IALLU;
}
break;
case 6:
switch (op2) {
case 1:
return MISCREG_DC_IVAC_Xt;
case 2:
return MISCREG_DC_ISW_Xt;
}
break;
case 8:
switch (op2) {
case 0:
return MISCREG_AT_S1E1R_Xt;
case 1:
return MISCREG_AT_S1E1W_Xt;
case 2:
return MISCREG_AT_S1E0R_Xt;
case 3:
return MISCREG_AT_S1E0W_Xt;
}
break;
case 10:
switch (op2) {
case 2:
return MISCREG_DC_CSW_Xt;
}
break;
case 14:
switch (op2) {
case 2:
return MISCREG_DC_CISW_Xt;
}
break;
}
break;
case 3:
switch (crm) {
case 4:
switch (op2) {
case 1:
return MISCREG_DC_ZVA_Xt;
}
break;
case 5:
switch (op2) {
case 1:
return MISCREG_IC_IVAU_Xt;
}
break;
case 10:
switch (op2) {
case 1:
return MISCREG_DC_CVAC_Xt;
}
break;
case 11:
switch (op2) {
case 1:
return MISCREG_DC_CVAU_Xt;
}
break;
case 14:
switch (op2) {
case 1:
return MISCREG_DC_CIVAC_Xt;
}
break;
}
break;
case 4:
switch (crm) {
case 8:
switch (op2) {
case 0:
return MISCREG_AT_S1E2R_Xt;
case 1:
return MISCREG_AT_S1E2W_Xt;
case 4:
return MISCREG_AT_S12E1R_Xt;
case 5:
return MISCREG_AT_S12E1W_Xt;
case 6:
return MISCREG_AT_S12E0R_Xt;
case 7:
return MISCREG_AT_S12E0W_Xt;
}
break;
}
break;
case 6:
switch (crm) {
case 8:
switch (op2) {
case 0:
return MISCREG_AT_S1E3R_Xt;
case 1:
return MISCREG_AT_S1E3W_Xt;
}
break;
}
break;
}
break;
case 8:
switch (op1) {
case 0:
switch (crm) {
case 3:
switch (op2) {
case 0:
return MISCREG_TLBI_VMALLE1IS;
case 1:
return MISCREG_TLBI_VAE1IS_Xt;
case 2:
return MISCREG_TLBI_ASIDE1IS_Xt;
case 3:
return MISCREG_TLBI_VAAE1IS_Xt;
case 5:
return MISCREG_TLBI_VALE1IS_Xt;
case 7:
return MISCREG_TLBI_VAALE1IS_Xt;
}
break;
case 7:
switch (op2) {
case 0:
return MISCREG_TLBI_VMALLE1;
case 1:
return MISCREG_TLBI_VAE1_Xt;
case 2:
return MISCREG_TLBI_ASIDE1_Xt;
case 3:
return MISCREG_TLBI_VAAE1_Xt;
case 5:
return MISCREG_TLBI_VALE1_Xt;
case 7:
return MISCREG_TLBI_VAALE1_Xt;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 1:
return MISCREG_TLBI_IPAS2E1IS_Xt;
case 5:
return MISCREG_TLBI_IPAS2LE1IS_Xt;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_TLBI_ALLE2IS;
case 1:
return MISCREG_TLBI_VAE2IS_Xt;
case 4:
return MISCREG_TLBI_ALLE1IS;
case 5:
return MISCREG_TLBI_VALE2IS_Xt;
case 6:
return MISCREG_TLBI_VMALLS12E1IS;
}
break;
case 4:
switch (op2) {
case 1:
return MISCREG_TLBI_IPAS2E1_Xt;
case 5:
return MISCREG_TLBI_IPAS2LE1_Xt;
}
break;
case 7:
switch (op2) {
case 0:
return MISCREG_TLBI_ALLE2;
case 1:
return MISCREG_TLBI_VAE2_Xt;
case 4:
return MISCREG_TLBI_ALLE1;
case 5:
return MISCREG_TLBI_VALE2_Xt;
case 6:
return MISCREG_TLBI_VMALLS12E1;
}
break;
}
break;
case 6:
switch (crm) {
case 3:
switch (op2) {
case 0:
return MISCREG_TLBI_ALLE3IS;
case 1:
return MISCREG_TLBI_VAE3IS_Xt;
case 5:
return MISCREG_TLBI_VALE3IS_Xt;
}
break;
case 7:
switch (op2) {
case 0:
return MISCREG_TLBI_ALLE3;
case 1:
return MISCREG_TLBI_VAE3_Xt;
case 5:
return MISCREG_TLBI_VALE3_Xt;
}
break;
}
break;
}
break;
}
break;
case 2:
switch (crn) {
case 0:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 2:
return MISCREG_OSDTRRX_EL1;
case 4:
return MISCREG_DBGBVR0_EL1;
case 5:
return MISCREG_DBGBCR0_EL1;
case 6:
return MISCREG_DBGWVR0_EL1;
case 7:
return MISCREG_DBGWCR0_EL1;
}
break;
case 1:
switch (op2) {
case 4:
return MISCREG_DBGBVR1_EL1;
case 5:
return MISCREG_DBGBCR1_EL1;
case 6:
return MISCREG_DBGWVR1_EL1;
case 7:
return MISCREG_DBGWCR1_EL1;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_MDCCINT_EL1;
case 2:
return MISCREG_MDSCR_EL1;
case 4:
return MISCREG_DBGBVR2_EL1;
case 5:
return MISCREG_DBGBCR2_EL1;
case 6:
return MISCREG_DBGWVR2_EL1;
case 7:
return MISCREG_DBGWCR2_EL1;
}
break;
case 3:
switch (op2) {
case 2:
return MISCREG_OSDTRTX_EL1;
case 4:
return MISCREG_DBGBVR3_EL1;
case 5:
return MISCREG_DBGBCR3_EL1;
case 6:
return MISCREG_DBGWVR3_EL1;
case 7:
return MISCREG_DBGWCR3_EL1;
}
break;
case 4:
switch (op2) {
case 4:
return MISCREG_DBGBVR4_EL1;
case 5:
return MISCREG_DBGBCR4_EL1;
}
break;
case 5:
switch (op2) {
case 4:
return MISCREG_DBGBVR5_EL1;
case 5:
return MISCREG_DBGBCR5_EL1;
}
break;
case 6:
switch (op2) {
case 2:
return MISCREG_OSECCR_EL1;
}
break;
}
break;
case 2:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_TEECR32_EL1;
}
break;
}
break;
case 3:
switch (crm) {
case 1:
switch (op2) {
case 0:
return MISCREG_MDCCSR_EL0;
}
break;
case 4:
switch (op2) {
case 0:
return MISCREG_MDDTR_EL0;
}
break;
case 5:
switch (op2) {
case 0:
return MISCREG_MDDTRRX_EL0;
}
break;
}
break;
case 4:
switch (crm) {
case 7:
switch (op2) {
case 0:
return MISCREG_DBGVCR32_EL2;
}
break;
}
break;
}
break;
case 1:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_MDRAR_EL1;
case 4:
return MISCREG_OSLAR_EL1;
}
break;
case 1:
switch (op2) {
case 4:
return MISCREG_OSLSR_EL1;
}
break;
case 3:
switch (op2) {
case 4:
return MISCREG_OSDLR_EL1;
}
break;
case 4:
switch (op2) {
case 4:
return MISCREG_DBGPRCR_EL1;
}
break;
}
break;
case 2:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_TEEHBR32_EL1;
}
break;
}
break;
}
break;
case 7:
switch (op1) {
case 0:
switch (crm) {
case 8:
switch (op2) {
case 6:
return MISCREG_DBGCLAIMSET_EL1;
}
break;
case 9:
switch (op2) {
case 6:
return MISCREG_DBGCLAIMCLR_EL1;
}
break;
case 14:
switch (op2) {
case 6:
return MISCREG_DBGAUTHSTATUS_EL1;
}
break;
}
break;
}
break;
}
break;
case 3:
switch (crn) {
case 0:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_MIDR_EL1;
case 5:
return MISCREG_MPIDR_EL1;
case 6:
return MISCREG_REVIDR_EL1;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_ID_PFR0_EL1;
case 1:
return MISCREG_ID_PFR1_EL1;
case 2:
return MISCREG_ID_DFR0_EL1;
case 3:
return MISCREG_ID_AFR0_EL1;
case 4:
return MISCREG_ID_MMFR0_EL1;
case 5:
return MISCREG_ID_MMFR1_EL1;
case 6:
return MISCREG_ID_MMFR2_EL1;
case 7:
return MISCREG_ID_MMFR3_EL1;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_ID_ISAR0_EL1;
case 1:
return MISCREG_ID_ISAR1_EL1;
case 2:
return MISCREG_ID_ISAR2_EL1;
case 3:
return MISCREG_ID_ISAR3_EL1;
case 4:
return MISCREG_ID_ISAR4_EL1;
case 5:
return MISCREG_ID_ISAR5_EL1;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_MVFR0_EL1;
case 1:
return MISCREG_MVFR1_EL1;
case 2:
return MISCREG_MVFR2_EL1;
case 3 ... 7:
return MISCREG_RAZ;
}
break;
case 4:
switch (op2) {
case 0:
return MISCREG_ID_AA64PFR0_EL1;
case 1:
return MISCREG_ID_AA64PFR1_EL1;
case 2 ... 7:
return MISCREG_RAZ;
}
break;
case 5:
switch (op2) {
case 0:
return MISCREG_ID_AA64DFR0_EL1;
case 1:
return MISCREG_ID_AA64DFR1_EL1;
case 4:
return MISCREG_ID_AA64AFR0_EL1;
case 5:
return MISCREG_ID_AA64AFR1_EL1;
case 2:
case 3:
case 6:
case 7:
return MISCREG_RAZ;
}
break;
case 6:
switch (op2) {
case 0:
return MISCREG_ID_AA64ISAR0_EL1;
case 1:
return MISCREG_ID_AA64ISAR1_EL1;
case 2 ... 7:
return MISCREG_RAZ;
}
break;
case 7:
switch (op2) {
case 0:
return MISCREG_ID_AA64MMFR0_EL1;
case 1:
return MISCREG_ID_AA64MMFR1_EL1;
case 2 ... 7:
return MISCREG_RAZ;
}
break;
}
break;
case 1:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_CCSIDR_EL1;
case 1:
return MISCREG_CLIDR_EL1;
case 7:
return MISCREG_AIDR_EL1;
}
break;
}
break;
case 2:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_CSSELR_EL1;
}
break;
}
break;
case 3:
switch (crm) {
case 0:
switch (op2) {
case 1:
return MISCREG_CTR_EL0;
case 7:
return MISCREG_DCZID_EL0;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_VPIDR_EL2;
case 5:
return MISCREG_VMPIDR_EL2;
}
break;
}
break;
}
break;
case 1:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_SCTLR_EL1;
case 1:
return MISCREG_ACTLR_EL1;
case 2:
return MISCREG_CPACR_EL1;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_SCTLR_EL2;
case 1:
return MISCREG_ACTLR_EL2;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_HCR_EL2;
case 1:
return MISCREG_MDCR_EL2;
case 2:
return MISCREG_CPTR_EL2;
case 3:
return MISCREG_HSTR_EL2;
case 7:
return MISCREG_HACR_EL2;
}
break;
}
break;
case 6:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_SCTLR_EL3;
case 1:
return MISCREG_ACTLR_EL3;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_SCR_EL3;
case 1:
return MISCREG_SDER32_EL3;
case 2:
return MISCREG_CPTR_EL3;
}
break;
case 3:
switch (op2) {
case 1:
return MISCREG_MDCR_EL3;
}
break;
}
break;
}
break;
case 2:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_TTBR0_EL1;
case 1:
return MISCREG_TTBR1_EL1;
case 2:
return MISCREG_TCR_EL1;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_TTBR0_EL2;
case 2:
return MISCREG_TCR_EL2;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_VTTBR_EL2;
case 2:
return MISCREG_VTCR_EL2;
}
break;
}
break;
case 6:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_TTBR0_EL3;
case 2:
return MISCREG_TCR_EL3;
}
break;
}
break;
}
break;
case 3:
switch (op1) {
case 4:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_DACR32_EL2;
}
break;
}
break;
}
break;
case 4:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_SPSR_EL1;
case 1:
return MISCREG_ELR_EL1;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_SP_EL0;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_SPSEL;
case 2:
return MISCREG_CURRENTEL;
}
break;
}
break;
case 3:
switch (crm) {
case 2:
switch (op2) {
case 0:
return MISCREG_NZCV;
case 1:
return MISCREG_DAIF;
}
break;
case 4:
switch (op2) {
case 0:
return MISCREG_FPCR;
case 1:
return MISCREG_FPSR;
}
break;
case 5:
switch (op2) {
case 0:
return MISCREG_DSPSR_EL0;
case 1:
return MISCREG_DLR_EL0;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_SPSR_EL2;
case 1:
return MISCREG_ELR_EL2;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_SP_EL1;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_SPSR_IRQ_AA64;
case 1:
return MISCREG_SPSR_ABT_AA64;
case 2:
return MISCREG_SPSR_UND_AA64;
case 3:
return MISCREG_SPSR_FIQ_AA64;
}
break;
}
break;
case 6:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_SPSR_EL3;
case 1:
return MISCREG_ELR_EL3;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_SP_EL2;
}
break;
}
break;
}
break;
case 5:
switch (op1) {
case 0:
switch (crm) {
case 1:
switch (op2) {
case 0:
return MISCREG_AFSR0_EL1;
case 1:
return MISCREG_AFSR1_EL1;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_ESR_EL1;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 1:
return MISCREG_IFSR32_EL2;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_AFSR0_EL2;
case 1:
return MISCREG_AFSR1_EL2;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_ESR_EL2;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_FPEXC32_EL2;
}
break;
}
break;
case 6:
switch (crm) {
case 1:
switch (op2) {
case 0:
return MISCREG_AFSR0_EL3;
case 1:
return MISCREG_AFSR1_EL3;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_ESR_EL3;
}
break;
}
break;
}
break;
case 6:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_FAR_EL1;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_FAR_EL2;
case 4:
return MISCREG_HPFAR_EL2;
}
break;
}
break;
case 6:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_FAR_EL3;
}
break;
}
break;
}
break;
case 7:
switch (op1) {
case 0:
switch (crm) {
case 4:
switch (op2) {
case 0:
return MISCREG_PAR_EL1;
}
break;
}
break;
}
break;
case 9:
switch (op1) {
case 0:
switch (crm) {
case 14:
switch (op2) {
case 1:
return MISCREG_PMINTENSET_EL1;
case 2:
return MISCREG_PMINTENCLR_EL1;
}
break;
}
break;
case 3:
switch (crm) {
case 12:
switch (op2) {
case 0:
return MISCREG_PMCR_EL0;
case 1:
return MISCREG_PMCNTENSET_EL0;
case 2:
return MISCREG_PMCNTENCLR_EL0;
case 3:
return MISCREG_PMOVSCLR_EL0;
case 4:
return MISCREG_PMSWINC_EL0;
case 5:
return MISCREG_PMSELR_EL0;
case 6:
return MISCREG_PMCEID0_EL0;
case 7:
return MISCREG_PMCEID1_EL0;
}
break;
case 13:
switch (op2) {
case 0:
return MISCREG_PMCCNTR_EL0;
case 1:
return MISCREG_PMXEVTYPER_EL0;
case 2:
return MISCREG_PMXEVCNTR_EL0;
}
break;
case 14:
switch (op2) {
case 0:
return MISCREG_PMUSERENR_EL0;
case 3:
return MISCREG_PMOVSSET_EL0;
}
break;
}
break;
}
break;
case 10:
switch (op1) {
case 0:
switch (crm) {
case 2:
switch (op2) {
case 0:
return MISCREG_MAIR_EL1;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_AMAIR_EL1;
}
break;
}
break;
case 4:
switch (crm) {
case 2:
switch (op2) {
case 0:
return MISCREG_MAIR_EL2;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_AMAIR_EL2;
}
break;
}
break;
case 6:
switch (crm) {
case 2:
switch (op2) {
case 0:
return MISCREG_MAIR_EL3;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_AMAIR_EL3;
}
break;
}
break;
}
break;
case 11:
switch (op1) {
case 1:
switch (crm) {
case 0:
switch (op2) {
case 2:
return MISCREG_L2CTLR_EL1;
case 3:
return MISCREG_L2ECTLR_EL1;
}
break;
}
break;
}
break;
case 12:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_VBAR_EL1;
case 1:
return MISCREG_RVBAR_EL1;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_ISR_EL1;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_VBAR_EL2;
case 1:
return MISCREG_RVBAR_EL2;
}
break;
}
break;
case 6:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_VBAR_EL3;
case 1:
return MISCREG_RVBAR_EL3;
case 2:
return MISCREG_RMR_EL3;
}
break;
}
break;
}
break;
case 13:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 1:
return MISCREG_CONTEXTIDR_EL1;
case 4:
return MISCREG_TPIDR_EL1;
}
break;
}
break;
case 3:
switch (crm) {
case 0:
switch (op2) {
case 2:
return MISCREG_TPIDR_EL0;
case 3:
return MISCREG_TPIDRRO_EL0;
}
break;
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 1:
return MISCREG_CONTEXTIDR_EL2;
case 2:
return MISCREG_TPIDR_EL2;
}
break;
}
break;
case 6:
switch (crm) {
case 0:
switch (op2) {
case 2:
return MISCREG_TPIDR_EL3;
}
break;
}
break;
}
break;
case 14:
switch (op1) {
case 0:
switch (crm) {
case 1:
switch (op2) {
case 0:
return MISCREG_CNTKCTL_EL1;
}
break;
}
break;
case 3:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_CNTFRQ_EL0;
case 1:
return MISCREG_CNTPCT_EL0;
case 2:
return MISCREG_CNTVCT_EL0;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_CNTP_TVAL_EL0;
case 1:
return MISCREG_CNTP_CTL_EL0;
case 2:
return MISCREG_CNTP_CVAL_EL0;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_CNTV_TVAL_EL0;
case 1:
return MISCREG_CNTV_CTL_EL0;
case 2:
return MISCREG_CNTV_CVAL_EL0;
}
break;
case 8:
switch (op2) {
case 0:
return MISCREG_PMEVCNTR0_EL0;
case 1:
return MISCREG_PMEVCNTR1_EL0;
case 2:
return MISCREG_PMEVCNTR2_EL0;
case 3:
return MISCREG_PMEVCNTR3_EL0;
case 4:
return MISCREG_PMEVCNTR4_EL0;
case 5:
return MISCREG_PMEVCNTR5_EL0;
}
break;
case 12:
switch (op2) {
case 0:
return MISCREG_PMEVTYPER0_EL0;
case 1:
return MISCREG_PMEVTYPER1_EL0;
case 2:
return MISCREG_PMEVTYPER2_EL0;
case 3:
return MISCREG_PMEVTYPER3_EL0;
case 4:
return MISCREG_PMEVTYPER4_EL0;
case 5:
return MISCREG_PMEVTYPER5_EL0;
}
break;
case 15:
switch (op2) {
case 7:
return MISCREG_PMCCFILTR_EL0;
}
}
break;
case 4:
switch (crm) {
case 0:
switch (op2) {
case 3:
return MISCREG_CNTVOFF_EL2;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_CNTHCTL_EL2;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_CNTHP_TVAL_EL2;
case 1:
return MISCREG_CNTHP_CTL_EL2;
case 2:
return MISCREG_CNTHP_CVAL_EL2;
}
break;
}
break;
case 7:
switch (crm) {
case 2:
switch (op2) {
case 0:
return MISCREG_CNTPS_TVAL_EL1;
case 1:
return MISCREG_CNTPS_CTL_EL1;
case 2:
return MISCREG_CNTPS_CVAL_EL1;
}
break;
}
break;
}
break;
case 15:
switch (op1) {
case 0:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_IL1DATA0_EL1;
case 1:
return MISCREG_IL1DATA1_EL1;
case 2:
return MISCREG_IL1DATA2_EL1;
case 3:
return MISCREG_IL1DATA3_EL1;
}
break;
case 1:
switch (op2) {
case 0:
return MISCREG_DL1DATA0_EL1;
case 1:
return MISCREG_DL1DATA1_EL1;
case 2:
return MISCREG_DL1DATA2_EL1;
case 3:
return MISCREG_DL1DATA3_EL1;
case 4:
return MISCREG_DL1DATA4_EL1;
}
break;
}
break;
case 1:
switch (crm) {
case 0:
switch (op2) {
case 0:
return MISCREG_L2ACTLR_EL1;
}
break;
case 2:
switch (op2) {
case 0:
return MISCREG_CPUACTLR_EL1;
case 1:
return MISCREG_CPUECTLR_EL1;
case 2:
return MISCREG_CPUMERRSR_EL1;
case 3:
return MISCREG_L2MERRSR_EL1;
}
break;
case 3:
switch (op2) {
case 0:
return MISCREG_CBAR_EL1;
}
break;
}
break;
}
break;
}
break;
}
return MISCREG_UNKNOWN;
}
} // namespace ArmISA