Added partial support for rest of system registers: AFR0, AFR1, DFR1, FPFR0, ISAR3, MMFR3, MMFR4, PFR2. They are read and app shows their values. So far I did not met cpu which use them.
If cpu use any of above registers then message with link to issue tracker will be shown.
Output from QEMU 'max' cpu:
ArmCpuInfo v1.3.0
ID_AA64AFR0_EL1 = 0x0000000000000000
ID_AA64AFR1_EL1 = 0x0000000000000000
ID_AA64DFR0_EL1 = 0x1000000010305609
ID_AA64DFR1_EL1 = 0x0000000000000000
ID_AA64FPFR0_EL1 = 0x0000000000000000
ID_AA64ISAR0_EL1 = 0x1221111110212120
ID_AA64ISAR1_EL1 = 0x0011111101211052
ID_AA64ISAR2_EL1 = 0x0000000000110000
ID_AA64ISAR3_EL1 = 0x0000000000000000
ID_AA64MMFR0_EL1 = 0x2100032310201126
ID_AA64MMFR1_EL1 = 0x0010011010312122
ID_AA64MMFR2_EL1 = 0x1221011112011011
ID_AA64MMFR3_EL1 = 0x0000000000000000
ID_AA64MMFR4_EL1 = 0x0000000000000000
ID_AA64PFR0_EL1 = 0x1201001121112222
ID_AA64PFR1_EL1 = 0x0000001001000121
ID_AA64PFR2_EL1 = 0x0000000000000000
ID_AA64SMFR0_EL1 = 0x80F100FD00000000
ID_AA64ZFR0_EL1 = 0x0110110100110021
Reg | Name | Bits | Value | Feature
------|--------------|-------|-------|----------------------------------------------
MMFR0 | ECV | 63:60 | 0010 | FEAT_ECV implemented with extras.
MMFR0 | FGT | 59:56 | 0001 | FEAT_FGT implemented.
MMFR0 | ExS | 47:44 | 0000 | FEAT_ExS not implemented.
MMFR0 | TGran4 | 31:28 | 0001 | 4KB granule supported for 52-bit address.
MMFR0 | TGran4_2 | 43:40 | 0011 | 4KB granule supported at stage 2 for 52-bit address.
MMFR0 | TGran16 | 23:20 | 0010 | 16KB granule supported for 52-bit address.
MMFR0 | TGran16_2 | 35:32 | 0011 | 16KB granule supported at stage 2 for 52-bit address.
MMFR0 | TGran64 | 27:24 | 0000 | 64KB granule supported.
MMFR0 | TGran64_2 | 39:36 | 0010 | 64KB granule supported at stage 2.
MMFR0 | SNSMem | 15:12 | 0001 | Supports a distinction between Secure and Non-Secure Memory.
MMFR0 | BigEnd | 11:8 | 0001 | Mixed-endian support.
MMFR0 | BigEndEL0 | 19:16 | 0000 | No mixed-endian support at EL0.
MMFR0 | ASIDBits | 7:4 | 0010 | ASID: 16 Bits
MMFR0 | PARange | 3:0 | 0110 | 52 Bits (4PB) of physical address range supported.
| | | | FEAT_LPA implemented.
------|--------------|-------|-------|----------------------------------------------
MMFR1 | ECBHB | 63:60 | 0000 | FEAT_ECBHB not implemented.
MMFR1 | CMOW | 59:56 | 0000 | FEAT_CMOW not implemented.
MMFR1 | TIDCP1 | 55:52 | 0001 | FEAT_TIDCP1 implemented
MMFR1 | nTLBPA | 51:48 | 0000 | FEAT_nTLBPA not implemented.
MMFR1 | AFP | 47:44 | 0000 | FEAT_AFP not implemented.
MMFR1 | HCX | 43:40 | 0001 | FEAT_HCX implemented.
MMFR1 | ETS | 39:36 | 0001 | FEAT_ETS implemented.
MMFR1 | TWED | 35:32 | 0000 | FEAT_TWED not implemented.
MMFR1 | XNX | 31:28 | 0001 | FEAT_XNX implemented.
MMFR1 | SpecSEI | 27:24 | 0000 | The PE never generates an SError interrupt due to an
| | | | External abort on a speculative read.
MMFR1 | PAN | 23:20 | 0011 | FEAT_PAN3 implemented.
MMFR1 | LO | 19:16 | 0001 | FEAT_LOR implemented.
MMFR1 | HPDS | 15:12 | 0010 | FEAT_HPDS2 implemented.
MMFR1 | VH | 11:8 | 0001 | FEAT_VHE implemented.
MMFR1 | VMIDBits | 7:4 | 0010 | FEAT_VMID16 implemented.
MMFR1 | HAFDBS | 3:0 | 0010 | FEAT_HAFDBS implemented with dirty status support.
------|--------------|-------|-------|----------------------------------------------
MMFR2 | E0PD | 63:60 | 0001 | FEAT_E0PD implemented.
MMFR2 | EVT | 59:56 | 0010 | FEAT_EVT: HCR_EL2.{TTLBOS, TTLSBIS, TOCU, TICAB, TID4}
| | | | traps.
MMFR2 | BBM | 55:52 | 0010 | FEAT_BBM: Level 2 support for changing block size.
MMFR2 | TTL | 51:48 | 0001 | FEAT_TTL implemented.
MMFR2 | FWB | 43:40 | 0001 | FEAT_S2FWB implemented.
MMFR2 | IDS | 39:36 | 0001 | FEAT_IDST implemented.
MMFR2 | AT | 35:32 | 0001 | FEAT_LSE2 implemented.
MMFR2 | ST | 31:28 | 0001 | FEAT_TTST implemented.
MMFR2 | NV | 27:24 | 0010 | FEAT_NV2 implemented.
MMFR2 | CCIDX | 23:20 | 0000 | FEAT_CCIDX not implemented.
MMFR2 | VARange | 19:16 | 0001 | FEAT_LVA implemented.
MMFR2 | IESB | 15:12 | 0001 | FEAT_IESB implemented.
MMFR2 | LSM | 11:8 | 0000 | FEAT_LSMAOC not implemented.
MMFR2 | UAO | 7:4 | 0001 | FEAT_UAO implemented.
MMFR2 | CnP | 3:0 | 0001 | FEAT_TTCNP implemented.
------|--------------|-------|-------|----------------------------------------------
PFR0 | CSV3 | 63:60 | 0001 | FEAT_CSV3 implemented.
PFR0 | CSV2 | 59:56 | 0010 | FEAT_CSV2_2 implemented.
PFR0 | RME | 55:52 | 0000 | FEAT_RME not implemented
PFR0 | DIT | 51:48 | 0001 | FEAT_DIT implemented.
PFR0 | AMU | 47:44 | 0000 | FEAT_AMU not implemented.
PFR0 | MPAM | 43:40 | 0000 | FEAT_MPAM not implemented.
PFR0 | SEL2 | 39:36 | 0001 | Secure EL2 implemented.
PFR0 | SVE | 35:32 | 0001 | FEAT_SVE implemented.
PFR0 | RAS | 31:28 | 0010 | FEAT_RASv1p1 implemented. FEAT_DoubleFault implemented.
PFR0 | GIC | 27:24 | 0001 | System registers to versions 3.0/4.0 of GIC CPU implemented.
PFR0 | AdvSIMD | 23:20 | 0001 | Advanced SIMD with half precision support (FEAT_FP16).
PFR0 | FP | 19:16 | 0001 | Floating-point with half-precision support (FEAT_FP16).
PFR0 | EL3 | 15:12 | 0010 | EL3 in AArch64 and AArch32
PFR0 | EL2 | 11:8 | 0010 | EL2 in AArch64 and AArch32
PFR0 | EL1 | 7:4 | 0010 | EL1 in AArch64 and AArch32
PFR0 | EL0 | 3:0 | 0010 | EL0 in AArch64 and AArch32
------|--------------|-------|-------|----------------------------------------------
PFR1 | PFAR | 63:60 | 0000 | FEAT_PFAR not implemented.
PFR1 | DF2 | 59:56 | 0000 | FEAT_DoubleFault2 not implemented.
PFR1 | MTEX | 55:52 | 0000 | Canonical Tag checking and Memory tagging with Address
| | | | tagging disabled are not supported.
PFR1 | THE | 51:48 | 0000 | FEAT_THE not implemented.
PFR1 | GCS | 47:44 | 0000 | FEAT_GCS not implemented.
PFR1 | MTE_frac | 43:40 | 0000 | FEAT_MTE_ASYNC implemented.
PFR1 | NMI | 39:36 | 0001 | FEAT_NMI implemented.
PFR1 | RNDR_trap | 31:28 | 0000 | FEAT_RNG_TRAP not implemented.
PFR1 | SME | 27:24 | 0001 | FEAT_SME implemented.
PFR1 | MTE | 11:8 | 0001 | FEAT_MTE implemented.
PFR1 | SSBS | 7:4 | 0010 | FEAT_SSBS2 implemented.
PFR1 | BT | 3:0 | 0001 | FEAT_BTI implemented.
------|--------------|-------|-------|----------------------------------------------
ISAR0 | RNDR | 63:60 | 0001 | FEAT_RNG implemented.
ISAR0 | TLB | 59:56 | 0010 | FEAT_TLBIRANGE implemented.
ISAR0 | TS | 55:52 | 0010 | FEAT_FlagM2 implemented.
ISAR0 | FHM | 51:48 | 0001 | FEAT_FHM implemented.
ISAR0 | DP | 47:44 | 0001 | FEAT_DotProd implemented.
ISAR0 | SM4 | 43:40 | 0001 | FEAT_SM4 implemented.
ISAR0 | SM3 | 39:36 | 0001 | FEAT_SM3 implemented.
ISAR0 | SHA3 | 35:32 | 0001 | FEAT_SHA3 implemented.
ISAR0 | RDM | 31:28 | 0001 | FEAT_RDM implemented.
ISAR0 | TME | 27:24 | 0000 | TME instructions not implemented.
ISAR0 | Atomic | 23:20 | 0010 | FEAT_LSE implemented.
ISAR0 | CRC32 | 19:16 | 0001 | CRC32 instructions implemented.
ISAR0 | SHA2 | 15:12 | 0010 | FEAT_SHA512 implemented.
ISAR0 | SHA1 | 11:8 | 0001 | FEAT_SHA1 implemented.
ISAR0 | AES | 7:4 | 0010 | FEAT_AES and FEAT_PMULL implemented.
------|--------------|-------|-------|----------------------------------------------
ISAR1 | LS64 | 63:60 | 0000 | FEAT_LS64 not implemented.
ISAR1 | XS | 59:56 | 0000 | FEAT_XS not implemented.
ISAR1 | I8MM | 55:52 | 0001 | FEAT_I8MM implemented.
ISAR1 | DGH | 51:48 | 0001 | FEAT_DGH implemented.
ISAR1 | BF16 | 47:44 | 0001 | FEAT_BF16 implemented.
ISAR1 | SPECRES | 43:40 | 0001 | FEAT_SPECRES implemented.
ISAR1 | SB | 39:36 | 0001 | FEAT_SB implemented.
ISAR1 | FRINTTS | 35:32 | 0001 | FEAT_FRINTTS implemented.
ISAR1 | GPI | 31:28 | 0000 | FEAT_PACIMP not implemented.
ISAR1 | GPA | 27:24 | 0001 | FEAT_PACQARMA5 implemented.
ISAR1 | LRCPC | 23:20 | 0010 | FEAT_LRCPC2 implemented.
ISAR1 | FCMA | 19:16 | 0001 | FEAT_FCMA implemented.
ISAR1 | JSCVT | 15:12 | 0001 | FEAT_JSCVT implemented.
ISAR1 | API | 11:8 | 0000 | Address Authentication (API) not implemented.
ISAR1 | APA | 7:4 | 0101 | FEAT_FPACCOMBINE implemented.
| | | | FEAT_PACQARMA5 implemented.
ISAR1 | DPB | 3:0 | 0010 | FEAT_DPB2 implemented.
------|--------------|-------|-------|----------------------------------------------
ISAR2 | ATS1A | 63:60 | 0000 | Address Translate Stage 1 instructions without Permissions
| | | | Checks are not implemented.
ISAR2 | LUT | 59:56 | 0000 | FEAT_LUT not implemented.
ISAR2 | CSSC | 55:52 | 0000 | FEAT_CSSC not implemented.
ISAR2 | RPRFM | 51:48 | 0000 | FEAT_RPRFM not implemented.
ISAR2 | PRFMSLC | 43:40 | 0000 | FEAT_PRFMSLC not implemented.
ISAR2 | SYSINSTR_128 | 39:36 | 0000 | FEAT_SYSINSTR128 not implemented.
ISAR2 | SYSREG_128 | 35:32 | 0000 | FEAT_SYSREG128 not implemented.
ISAR2 | CLRBHB | 31:28 | 0000 | FEAT_CLRBHB not implemented.
ISAR2 | PAC_frac | 27:24 | 0000 | FEAT_CONSTPACFIELD not implemented.
ISAR2 | BC | 23:20 | 0001 | FEAT_HBC implemented.
ISAR2 | MOPS | 19:16 | 0001 | FEAT_MOPS implemented.
ISAR2 | APA3 | 15:12 | 0000 | Address Authentication (APA3) not implemented.
ISAR2 | GPA3 | 11:8 | 0000 | FEAT_PACQARMA3 not implemented.
ISAR2 | RPRES | 7:4 | 0000 | FEAT_RPRES not implemented.
ISAR2 | WFxT | 3:0 | 0000 | FEAT_WFxT not implemented.
------|--------------|-------|-------|----------------------------------------------
DFR0 | HPMN0 | 63:60 | 0001 | FEAT_HPMN0 implemented.
DFR0 | ExtTrcBuff | 59:56 | 0000 | Trace Buffer External Mode not implemented.
DFR0 | BRBE | 55:52 | 0000 | FEAT_BRBE not implemented.
DFR0 | MTPMU | 51:48 | 0000 | FEAT_MTPMU not implemented.
DFR0 | TraceBuffer | 47:44 | 0000 | FEAT_TRBE not implemented.
DFR0 | TraceFilt | 43:40 | 0000 | FEAT_TRF not implemented.
DFR0 | DoubleLock | 39:36 | 0000 | FEAT_DoubleLock implemented.
DFR0 | PMSVer | 35:32 | 0000 | FEAT_SPE not implemented.
DFR0 | CTX_CMPs | 31:28 | 0001 | Number of breakpoints that are context-aware, minus 1.
DFR0 | SEBEP | 27:24 | 0000 | FEAT_SEBEP not implemented.
DFR0 | WRPs | 23:20 | 0011 | Number of watchpoints, minus 1.
DFR0 | PMSS | 19:16 | 0000 | FEAT_PMUv2_SS not implemented.
DFR0 | BRPs | 15:12 | 0101 | Number of breakpoints, minus 1.
DFR0 | PMUVer | 11:8 | 0110 | FEAT_PMUv3p5 implemented.
DFR0 | TraceVer | 7:4 | 0000 | Trace unit System registers not implemented.
DFR0 | DebugVer | 3:0 | 1001 | FEAT_Debugv8p4 implemented.
------|--------------|-------|-------|----------------------------------------------
ZFR0 | F64MM | 59:56 | 0001 | FEAT_F64MM SVE implemented
ZFR0 | F32MM | 55:52 | 0001 | FEAT_F32MM SVE implemented
ZFR0 | I8MM | 47:44 | 0001 | FEAT_I8MM SVE implemented.
ZFR0 | SM4 | 43:40 | 0001 | FEAT_SVE_SM4 implemented.
ZFR0 | SHA3 | 35:32 | 0001 | FEAT_SVE_SHA3 implemented.
ZFR0 | B16B16 | 27:24 | 0000 | FEAT_SVE_B16B16 not implemented.
ZFR0 | BF16 | 23:20 | 0001 | FEAT_BF16 SVE implemented.
ZFR0 | BitPerm | 19:16 | 0001 | FEAT_SVE_BitPerm implemented.
ZFR0 | AES | 7:4 | 0010 | FEAT_SVE_AES and FEAT_SVE_PMULL128 implemented.
ZFR0 | SVEver | 3:0 | 0001 | FEAT_SVE2 implemented.
------|--------------|-------|-------|----------------------------------------------
SMFR0 | FA64 | 63 | 0001 | FEAT_SME_FA64 implemented.
SMFR0 | LUTv2 | 60 | 0000 | FEAT_SME_LUTv2 not implemented.
SMFR0 | SMEver | 59:56 | 0000 | Mandatory SME instructions are implemented.
SMFR0 | I16I64 | 55:52 | 1111 | FEAT_SME_I16I64 implemented
SMFR0 | F64F64 | 48 | 0001 | FEAT_SME_F64F64 implemented.
SMFR0 | I16I32 | 47:44 | 0000 | SME2 I16I32 not implemented.
SMFR0 | B16B16 | 43 | 0000 | FEAT_SME_B16B16 not implemented.
SMFR0 | F16F16 | 42 | 0000 | FEAT_SME_F16F16 not implemented.
SMFR0 | F8F16 | 41 | 0000 | FEAT_SME_F8F16 not implemented.
SMFR0 | F8F32 | 40 | 0000 | FEAT_SME_F8F32 not implemented.
SMFR0 | I8I32 | 40 | 1111 | SME I8I32 implemented.
SMFR0 | F16F32 | 35 | 0001 | SME F16F32 implemented.
SMFR0 | B16F32 | 34 | 0001 | SME B16F32 implemented.
SMFR0 | BI32I32 | 33 | 0000 | SME BI32I32 not implemented.
SMFR0 | F32F32 | 32 | 0001 | SME F32F32 implemented.
SMFR0 | SF8FMA | 30 | 0000 | FEAT_SSVE_FP8FMA not implemented.
SMFR0 | SF8DP4 | 29 | 0000 | FEAT_SSVE_FP8DOT4 not implemented.
SMFR0 | SF8DP2 | 28 | 0000 | FEAT_SSVE_FP8DOT2 not implemented.
------|--------------|-------|-------|----------------------------------------------
Full Changelog: v1.2.0...v1.3.0