On 5/13/26 6:33 PM, Shaju Abraham wrote:
> Add a declarative description of every architecturally defined field in the
> Arm64 ID registers in cpu-idregs.h.inc file. This file will be included
> multiple times with different definitions to build the per-field arch values,
> per-register field descriptor arrays, arm-idregs table etc. The architecturely
> defined values for each ID register field is extracted from kernel's
> arch/arm64/tools/sysreg file. The safe-value tags and default values are
> derived from the kernel's ftr_bits array. Aarch32 ID registers are added
> with dummy field so they can be defaulted to 0 by later commits.
>
> X-macro structure:
> IDREG_START(REG)
> IDREG_FIELD_START(REG, FIELD, SHIFT, LENGTH, SAFE_RULE, DEFAULT_VAL)
> IDREG_FIELD_ARCH_VAL(VALUE, NAME)
> ...
> IDREG_FIELD_END(REG, FIELD)
> ...
> IDREG_END(REG)
Overall I prefer this representation to the one laid out inĀ 

target/arm/cpu-sysreg-properties.c ([PATCH v4 07/17] 
target/arm/cpu-sysreg-properties.c: Generate code with new script)
all the more so it allows the replace FIELD descriptions in cpu-features.h 
(what you do in [RFC PATCH v1 05/13] target/arm: named_cpu_model: replace FIELD 
macro with IDREG_FIELD)

Thanks

Eric


>
> Co-authored-by: Khushit Shah <[email protected]>
> Signed-off-by: Shaju Abraham <[email protected]>
> ---
>  target/arm/cpu-idregs.h.inc | 1724 +++++++++++++++++++++++++++++++++++
>  1 file changed, 1724 insertions(+)
>  create mode 100644 target/arm/cpu-idregs.h.inc
>
> diff --git a/target/arm/cpu-idregs.h.inc b/target/arm/cpu-idregs.h.inc
> new file mode 100644
> index 0000000000..5a627631c9
> --- /dev/null
> +++ b/target/arm/cpu-idregs.h.inc
> @@ -0,0 +1,1724 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +
> +/* ID_AA64ISAR0_EL1 */
> +IDREG_START(ID_AA64ISAR0_EL1)
> +IDREG_FIELD_START(ID_AA64ISAR0, RES0_0,   0,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64ISAR0, RES0_0)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, AES,      4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "aes")
> +IDREG_FIELD_ARCH_VAL(0b0010, "pmull")
> +IDREG_FIELD_END(ID_AA64ISAR0, AES)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, SHA1,     8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, SHA1)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, SHA2,    12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "sha256")
> +IDREG_FIELD_ARCH_VAL(0b0010, "sha512")
> +IDREG_FIELD_END(ID_AA64ISAR0, SHA2)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, CRC32,   16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, CRC32)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, ATOMIC,  20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0010, "on")
> +IDREG_FIELD_ARCH_VAL(0b0011, "LSE128")
> +IDREG_FIELD_END(ID_AA64ISAR0, ATOMIC)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, RES0_24, 24,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64ISAR0, RES0_24)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, RDM,     28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, RDM)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, SHA3,    32,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, SHA3)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, SM3,     36,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, SM3)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, SM4,     40,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, SM4)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, DP,      44,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, DP)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, FHM,     48,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, FHM)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, TS,      52,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "flagm")
> +IDREG_FIELD_ARCH_VAL(0b0010, "flagm2")
> +IDREG_FIELD_END(ID_AA64ISAR0, TS)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, TLB,     56,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "os")
> +IDREG_FIELD_ARCH_VAL(0b0010, "range")
> +IDREG_FIELD_END(ID_AA64ISAR0, TLB)
> +
> +IDREG_FIELD_START(ID_AA64ISAR0, RNDR,    60,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR0, RNDR)
> +
> +IDREG_END(ID_AA64ISAR0_EL1)
> +
> +/* ID_AA64ISAR1_EL1 */
> +IDREG_START(ID_AA64ISAR1_EL1)
> +IDREG_FIELD_START(ID_AA64ISAR1, DPB,      0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "dpb2")
> +IDREG_FIELD_END(ID_AA64ISAR1, DPB)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, APA,      4,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "pauth")
> +IDREG_FIELD_ARCH_VAL(0b0010, "epac")
> +IDREG_FIELD_ARCH_VAL(0b0011, "pauth2")
> +IDREG_FIELD_ARCH_VAL(0b0100, "fpac")
> +IDREG_FIELD_ARCH_VAL(0b0101, "fpaccombine")
> +IDREG_FIELD_ARCH_VAL(0b0110, "pauth_lr")
> +IDREG_FIELD_END(ID_AA64ISAR1, APA)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, API,      8,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "pauth")
> +IDREG_FIELD_ARCH_VAL(0b0010, "epac")
> +IDREG_FIELD_ARCH_VAL(0b0011, "pauth2")
> +IDREG_FIELD_ARCH_VAL(0b0100, "fpac")
> +IDREG_FIELD_ARCH_VAL(0b0101, "fpaccombine")
> +IDREG_FIELD_ARCH_VAL(0b0110, "pauth_lr")
> +IDREG_FIELD_END(ID_AA64ISAR1, API)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, JSCVT,   12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, JSCVT)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, FCMA,    16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, FCMA)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, LRCPC,   20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "lrcpc2")
> +IDREG_FIELD_ARCH_VAL(0b0011, "lrcpc3")
> +IDREG_FIELD_END(ID_AA64ISAR1, LRCPC)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, GPA,     24,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, GPA)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, GPI,     28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, GPI)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, FRINTTS, 32,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, FRINTTS)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, SB,      36,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, SB)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, SPECRES, 40,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "cosp_rctx")
> +IDREG_FIELD_END(ID_AA64ISAR1, SPECRES)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, BF16,    44,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ebf16")
> +IDREG_FIELD_END(ID_AA64ISAR1, BF16)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, DGH,     48,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, DGH)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, I8MM,    52,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, I8MM)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, XS,      56,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR1, XS)
> +
> +IDREG_FIELD_START(ID_AA64ISAR1, LS64,    60,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "ls64")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ls64_v")
> +IDREG_FIELD_ARCH_VAL(0b0011, "ls64_accdata")
> +IDREG_FIELD_ARCH_VAL(0b0100, "ls64wb")
> +IDREG_FIELD_END(ID_AA64ISAR1, LS64)
> +
> +IDREG_END(ID_AA64ISAR1_EL1)
> +
> +/*  ID_AA64ISAR2_EL1  */
> +IDREG_START(ID_AA64ISAR2_EL1)
> +IDREG_FIELD_START(ID_AA64ISAR2, WFXT,          0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0010, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, WFXT)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, RPRES,         4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, RPRES)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, GPA3,          8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, GPA3)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, APA3,         12,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "pauth")
> +IDREG_FIELD_ARCH_VAL(0b0010, "epac")
> +IDREG_FIELD_ARCH_VAL(0b0011, "pauth2")
> +IDREG_FIELD_ARCH_VAL(0b0100, "fpac")
> +IDREG_FIELD_ARCH_VAL(0b0101, "fpaccombine")
> +IDREG_FIELD_ARCH_VAL(0b0110, "pauth_lr")
> +IDREG_FIELD_END(ID_AA64ISAR2, APA3)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, MOPS,         16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, MOPS)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, BC,           20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, BC)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, PAC_FRAC,     24,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, PAC_FRAC)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, CLRBHB,       28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, CLRBHB)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, SYSREG_128,   32,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, SYSREG_128)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, SYSINSTR_128, 36,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, SYSINSTR_128)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, PRFMSLC,      40,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, PRFMSLC)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, PCDPHINT,     44,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, PCDPHINT)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, RPRFM,        48,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, RPRFM)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, CSSC,         52,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "cmpbr")
> +IDREG_FIELD_END(ID_AA64ISAR2, CSSC)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, LUT,          56,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, LUT)
> +
> +IDREG_FIELD_START(ID_AA64ISAR2, ATS1A,        60,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR2, ATS1A)
> +
> +IDREG_END(ID_AA64ISAR2_EL1)
> +
> +/*  ID_AA64PFR0_EL1  */
> +IDREG_START(ID_AA64PFR0_EL1)
> +IDREG_FIELD_START(ID_AA64PFR0, EL0,     0,  4, LOWER,  0b0001)
> +IDREG_FIELD_ARCH_VAL(0b0001, "aarch64")
> +IDREG_FIELD_ARCH_VAL(0b0010, "aarch32")
> +IDREG_FIELD_END(ID_AA64PFR0, EL0)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, EL1,     4,  4, LOWER,  0b0001)
> +IDREG_FIELD_ARCH_VAL(0b0001, "aarch64")
> +IDREG_FIELD_ARCH_VAL(0b0010, "aarch32")
> +IDREG_FIELD_END(ID_AA64PFR0, EL1)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, EL2,     8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "aarch64")
> +IDREG_FIELD_ARCH_VAL(0b0010, "aarch32")
> +IDREG_FIELD_END(ID_AA64PFR0, EL2)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, EL3,    12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "aarch64")
> +IDREG_FIELD_ARCH_VAL(0b0010, "aarch32")
> +IDREG_FIELD_END(ID_AA64PFR0, EL3)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, FP,     16,  4, SIGNED_LOWER,  0b1111)
> +IDREG_FIELD_ARCH_VAL(0b0000, "on")
> +IDREG_FIELD_ARCH_VAL(0b0001, "fp16")
> +IDREG_FIELD_ARCH_VAL(0b1111, "off")
> +IDREG_FIELD_END(ID_AA64PFR0, FP)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, ADVSIMD,20,  4, SIGNED_LOWER,  0b1111)
> +IDREG_FIELD_ARCH_VAL(0b0000, "on")
> +IDREG_FIELD_ARCH_VAL(0b0001, "fp16")
> +IDREG_FIELD_ARCH_VAL(0b1111, "off")
> +IDREG_FIELD_END(ID_AA64PFR0, ADVSIMD)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, GIC,    24,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0011, "v4p1")
> +IDREG_FIELD_END(ID_AA64PFR0, GIC)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, RAS,    28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "v1p1")
> +IDREG_FIELD_ARCH_VAL(0b0011, "v2")
> +IDREG_FIELD_END(ID_AA64PFR0, RAS)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, SVE,    32,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR0, SVE)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, SEL2,   36,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR0, SEL2)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, MPAM,   40,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "0")
> +IDREG_FIELD_ARCH_VAL(0b0001, "1")
> +IDREG_FIELD_END(ID_AA64PFR0, MPAM)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, AMU,    44,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "v1p1")
> +IDREG_FIELD_END(ID_AA64PFR0, AMU)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, DIT,    48,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR0, DIT)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, RME,    52,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR0, RME)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, CSV2,   56,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "csv2_2")
> +IDREG_FIELD_ARCH_VAL(0b0011, "csv2_3")
> +IDREG_FIELD_END(ID_AA64PFR0, CSV2)
> +
> +IDREG_FIELD_START(ID_AA64PFR0, CSV3,   60,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR0, CSV3)
> +
> +IDREG_END(ID_AA64PFR0_EL1)
> +
> +/*  ID_AA64PFR1_EL1  */
> +IDREG_START(ID_AA64PFR1_EL1)
> +IDREG_FIELD_START(ID_AA64PFR1, BT,        0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR1, BT)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, SSBS,      4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ssbs2")
> +IDREG_FIELD_END(ID_AA64PFR1, SSBS)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, MTE,       8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "mte2")
> +IDREG_FIELD_ARCH_VAL(0b0011, "mte3")
> +IDREG_FIELD_END(ID_AA64PFR1, MTE)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, RAS_FRAC, 12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "rasv1p1")
> +IDREG_FIELD_END(ID_AA64PFR1, RAS_FRAC)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, MPAM_FRAC,16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "minor_0")
> +IDREG_FIELD_ARCH_VAL(0b0001, "minor_1")
> +IDREG_FIELD_END(ID_AA64PFR1, MPAM_FRAC)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, RES0_20,  20,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64PFR1, RES0_20)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, SME,      24,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "sme2")
> +IDREG_FIELD_END(ID_AA64PFR1, SME)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, RNDR_TRAP,28,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR1, RNDR_TRAP)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, CSV2_FRAC,32,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "csv2_1p1")
> +IDREG_FIELD_ARCH_VAL(0b0010, "csv2_1p2")
> +IDREG_FIELD_END(ID_AA64PFR1, CSV2_FRAC)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, NMI,      36,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR1, NMI)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, MTE_FRAC, 40,  4, SIGNED_LOWER,  0b1111)
> +IDREG_FIELD_ARCH_VAL(0b0000, "async")
> +IDREG_FIELD_ARCH_VAL(0b1111, "off")
> +IDREG_FIELD_END(ID_AA64PFR1, MTE_FRAC)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, GCS,      44,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR1, GCS)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, THE,      48,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR1, THE)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, MTEX,     52,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "mte")
> +IDREG_FIELD_ARCH_VAL(0b0001, "mte4")
> +IDREG_FIELD_END(ID_AA64PFR1, MTEX)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, DF2,      56,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR1, DF2)
> +
> +IDREG_FIELD_START(ID_AA64PFR1, PFAR,     60,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR1, PFAR)
> +
> +IDREG_END(ID_AA64PFR1_EL1)
> +
> +/*  ID_AA64MMFR0_EL1 */
> +IDREG_START(ID_AA64MMFR0_EL1)
> +IDREG_FIELD_START(ID_AA64MMFR0, PARANGE,    0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "32")
> +IDREG_FIELD_ARCH_VAL(0b0001, "36")
> +IDREG_FIELD_ARCH_VAL(0b0010, "40")
> +IDREG_FIELD_ARCH_VAL(0b0011, "42")
> +IDREG_FIELD_ARCH_VAL(0b0100, "44")
> +IDREG_FIELD_ARCH_VAL(0b0101, "48")
> +IDREG_FIELD_ARCH_VAL(0b0110, "52")
> +IDREG_FIELD_ARCH_VAL(0b0111, "56")
> +IDREG_FIELD_END(ID_AA64MMFR0, PARANGE)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, ASIDBITS,   4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "8")
> +IDREG_FIELD_ARCH_VAL(0b0010, "16")
> +IDREG_FIELD_END(ID_AA64MMFR0, ASIDBITS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, BIGEND,     8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR0, BIGEND)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, SNSMEM,    12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR0, SNSMEM)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, BIGENDEL0, 16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR0, BIGENDEL0)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, TGRAN16,   20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "52_bit")
> +IDREG_FIELD_END(ID_AA64MMFR0, TGRAN16)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, TGRAN64,   24,  4, SIGNED_LOWER,  0b1111)
> +IDREG_FIELD_ARCH_VAL(0b0000, "on")
> +IDREG_FIELD_ARCH_VAL(0b1111, "off")
> +IDREG_FIELD_END(ID_AA64MMFR0, TGRAN64)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, TGRAN4,    28,  4, SIGNED_LOWER,  0b1111)
> +IDREG_FIELD_ARCH_VAL(0b0000, "on")
> +IDREG_FIELD_ARCH_VAL(0b0001, "52_bit")
> +IDREG_FIELD_ARCH_VAL(0b1111, "off")
> +IDREG_FIELD_END(ID_AA64MMFR0, TGRAN4)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, TGRAN16_2, 32,  4, EXACT,  0b0001)
> +IDREG_FIELD_ARCH_VAL(0b0000, "tgran16")
> +IDREG_FIELD_ARCH_VAL(0b0001, "off")
> +IDREG_FIELD_ARCH_VAL(0b0010, "on")
> +IDREG_FIELD_ARCH_VAL(0b0011, "52_bit")
> +IDREG_FIELD_END(ID_AA64MMFR0, TGRAN16_2)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, TGRAN64_2, 36,  4, EXACT,  0b0001)
> +IDREG_FIELD_ARCH_VAL(0b0000, "tgran64")
> +IDREG_FIELD_ARCH_VAL(0b0001, "off")
> +IDREG_FIELD_ARCH_VAL(0b0010, "on")
> +IDREG_FIELD_END(ID_AA64MMFR0, TGRAN64_2)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, TGRAN4_2,  40,  4, EXACT,  0b0001)
> +IDREG_FIELD_ARCH_VAL(0b0000, "tgran4")
> +IDREG_FIELD_ARCH_VAL(0b0001, "off")
> +IDREG_FIELD_ARCH_VAL(0b0010, "on")
> +IDREG_FIELD_ARCH_VAL(0b0011, "52_bit")
> +IDREG_FIELD_END(ID_AA64MMFR0, TGRAN4_2)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, EXS,       44,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR0, EXS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, RES0_48,   48,  8, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64MMFR0, RES0_48)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, FGT,       56,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "fgt2")
> +IDREG_FIELD_END(ID_AA64MMFR0, FGT)
> +
> +IDREG_FIELD_START(ID_AA64MMFR0, ECV,       60,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "cntpoff")
> +IDREG_FIELD_END(ID_AA64MMFR0, ECV)
> +
> +IDREG_END(ID_AA64MMFR0_EL1)
> +
> +/*  ID_AA64MMFR1_EL1  */
> +IDREG_START(ID_AA64MMFR1_EL1)
> +IDREG_FIELD_START(ID_AA64MMFR1, HAFDBS,    0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "af")
> +IDREG_FIELD_ARCH_VAL(0b0010, "dbm")
> +IDREG_FIELD_ARCH_VAL(0b0011, "haft")
> +IDREG_FIELD_ARCH_VAL(0b0100, "hdbss")
> +IDREG_FIELD_END(ID_AA64MMFR1, HAFDBS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, VMIDBITS,  4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "8")
> +IDREG_FIELD_ARCH_VAL(0b0010, "16")
> +IDREG_FIELD_END(ID_AA64MMFR1, VMIDBITS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, VH,        8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, VH)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, HPDS,     12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "hpds2")
> +IDREG_FIELD_END(ID_AA64MMFR1, HPDS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, LO,       16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, LO)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, PAN,      20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "pan2")
> +IDREG_FIELD_ARCH_VAL(0b0011, "pan3")
> +IDREG_FIELD_END(ID_AA64MMFR1, PAN)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, SPECSEI,  24,  4, HIGHER, 0b0001)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, SPECSEI)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, XNX,      28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, XNX)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, TWED,     32,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, TWED)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, ETS,      36,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ets2")
> +IDREG_FIELD_ARCH_VAL(0b0011, "ets3")
> +IDREG_FIELD_END(ID_AA64MMFR1, ETS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, HCX,      40,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, HCX)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, AFP,      44,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, AFP)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, NTLBPA,   48,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, NTLBPA)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, TIDCP1,   52,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, TIDCP1)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, CMOW,     56,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, CMOW)
> +
> +IDREG_FIELD_START(ID_AA64MMFR1, ECBHB,    60,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR1, ECBHB)
> +
> +IDREG_END(ID_AA64MMFR1_EL1)
> +
> +/*  ID_AA64MMFR2_EL1  */
> +IDREG_START(ID_AA64MMFR2_EL1)
> +IDREG_FIELD_START(ID_AA64MMFR2, CNP,      0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR2, CNP)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, UAO,      4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR2, UAO)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, LSM,      8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR2, LSM)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, IESB,    12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR2, IESB)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, VARANGE, 16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "48")
> +IDREG_FIELD_ARCH_VAL(0b0001, "52")
> +IDREG_FIELD_END(ID_AA64MMFR2, VARANGE)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, CCIDX,   20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "32")
> +IDREG_FIELD_ARCH_VAL(0b0001, "64")
> +IDREG_FIELD_END(ID_AA64MMFR2, CCIDX)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, NV,      24,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "nv2")
> +IDREG_FIELD_END(ID_AA64MMFR2, NV)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, ST,      28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "39")
> +IDREG_FIELD_ARCH_VAL(0b0001, "48_47")
> +IDREG_FIELD_END(ID_AA64MMFR2, ST)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, AT,      32,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR2, AT)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, IDS,     36,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "0x0")
> +IDREG_FIELD_ARCH_VAL(0b0001, "0x18")
> +IDREG_FIELD_END(ID_AA64MMFR2, IDS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, FWB,     40,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR2, FWB)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, RES0_44, 44,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64MMFR2, RES0_44)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, TTL,     48,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR2, TTL)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, BBM,     52,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "0")
> +IDREG_FIELD_ARCH_VAL(0b0001, "1")
> +IDREG_FIELD_ARCH_VAL(0b0010, "2")
> +IDREG_FIELD_END(ID_AA64MMFR2, BBM)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, EVT,     56,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ttlbxs")
> +IDREG_FIELD_END(ID_AA64MMFR2, EVT)
> +
> +IDREG_FIELD_START(ID_AA64MMFR2, E0PD,    60,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR2, E0PD)
> +
> +IDREG_END(ID_AA64MMFR2_EL1)
> +
> +/* ID_AA64MMFR3_EL1  */
> +IDREG_START(ID_AA64MMFR3_EL1)
> +IDREG_FIELD_START(ID_AA64MMFR3, TCRX,       0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, TCRX)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, SCTLRX,     4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, SCTLRX)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, S1PIE,      8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, S1PIE)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, S2PIE,     12,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, S2PIE)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, S1POE,     16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, S1POE)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, S2POE,     20,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, S2POE)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, AIE,       24,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, AIE)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, MEC,       28,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, MEC)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, D128,      32,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, D128)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, D128_2,    36,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, D128_2)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, SNERR,     40,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "sync")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ANERR")
> +IDREG_FIELD_ARCH_VAL(0b0011, "ANERR_IND")
> +IDREG_FIELD_END(ID_AA64MMFR3, SNERR)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, ANERR,     44,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "async")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ANERR")
> +IDREG_FIELD_ARCH_VAL(0b0011, "ANERR_IND")
> +IDREG_FIELD_END(ID_AA64MMFR3, ANERR)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, RES0_48,   48,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64MMFR3, RES0_48)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, SDERR,     52,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "dev_sync")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ADERR")
> +IDREG_FIELD_ARCH_VAL(0b0011, "ADERR_IND")
> +IDREG_FIELD_END(ID_AA64MMFR3, SDERR)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, ADERR,     56,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "dev_async")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ADERR")
> +IDREG_FIELD_ARCH_VAL(0b0011, "ADERR_IND")
> +IDREG_FIELD_END(ID_AA64MMFR3, ADERR)
> +
> +IDREG_FIELD_START(ID_AA64MMFR3, SPEC_FPACC,60,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR3, SPEC_FPACC)
> +
> +IDREG_END(ID_AA64MMFR3_EL1)
> +
> +/* ID_AA64DFR0_EL1 */
> +IDREG_START(ID_AA64DFR0_EL1)
> +IDREG_FIELD_START(ID_AA64DFR0, DEBUGVER,    0,  4, LOWER,  0x6)
> +IDREG_FIELD_ARCH_VAL(0b0110, "on")
> +IDREG_FIELD_ARCH_VAL(0b0111, "vhe")
> +IDREG_FIELD_ARCH_VAL(0b1000, "v8p2")
> +IDREG_FIELD_ARCH_VAL(0b1001, "v8p4")
> +IDREG_FIELD_ARCH_VAL(0b1010, "v8p8")
> +IDREG_FIELD_ARCH_VAL(0b1011, "v8p9")
> +IDREG_FIELD_END(ID_AA64DFR0, DEBUGVER)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, TRACEVER,    4,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR0, TRACEVER)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, PMUVER,      8,  4, SIGNED_LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0100, "v3p1")
> +IDREG_FIELD_ARCH_VAL(0b0101, "v3p4")
> +IDREG_FIELD_ARCH_VAL(0b0110, "v3p5")
> +IDREG_FIELD_ARCH_VAL(0b0111, "v3p7")
> +IDREG_FIELD_ARCH_VAL(0b1000, "v3p8")
> +IDREG_FIELD_ARCH_VAL(0b1001, "v3p9")
> +IDREG_FIELD_ARCH_VAL(0b1111, "imp_def")
> +IDREG_FIELD_END(ID_AA64DFR0, PMUVER)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, BRPS,       12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(ID_AA64DFR0, BRPS)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, PMSS,       16,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR0, PMSS)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, WRPS,       20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(ID_AA64DFR0, WRPS)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, SEBEP,      24,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR0, SEBEP)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, CTX_CMPS,   28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(ID_AA64DFR0, CTX_CMPS)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, PMSVER,     32,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "v1p1")
> +IDREG_FIELD_ARCH_VAL(0b0011, "v1p2")
> +IDREG_FIELD_ARCH_VAL(0b0100, "v1p3")
> +IDREG_FIELD_ARCH_VAL(0b0101, "v1p4")
> +IDREG_FIELD_ARCH_VAL(0b0110, "v1p5")
> +IDREG_FIELD_END(ID_AA64DFR0, PMSVER)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, DOUBLELOCK, 36,  4, SIGNED_LOWER,  0b1111)
> +IDREG_FIELD_ARCH_VAL(0b0000, "on")
> +IDREG_FIELD_ARCH_VAL(0b1111, "off")
> +IDREG_FIELD_END(ID_AA64DFR0, DOUBLELOCK)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, TRACEFILT,  40,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR0, TRACEFILT)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, TRACEBUFFER,44,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "trbe_v1p1")
> +IDREG_FIELD_END(ID_AA64DFR0, TRACEBUFFER)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, MTPMU,      48,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "ni_impdef")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b1111, "off")
> +IDREG_FIELD_END(ID_AA64DFR0, MTPMU)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, BRBE,       52,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "brbe_v1p1")
> +IDREG_FIELD_END(ID_AA64DFR0, BRBE)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, EXTTRCBUFF, 56,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR0, EXTTRCBUFF)
> +
> +IDREG_FIELD_START(ID_AA64DFR0, HPMN0,      60,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "unpredictable")
> +IDREG_FIELD_ARCH_VAL(0b0001, "def")
> +IDREG_FIELD_END(ID_AA64DFR0, HPMN0)
> +
> +IDREG_END(ID_AA64DFR0_EL1)
> +
> +/*  ID_AA64ZFR0_EL1  */
> +IDREG_START(ID_AA64ZFR0_EL1)
> +IDREG_FIELD_START(ID_AA64ZFR0, SVEVER,      0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "on")
> +IDREG_FIELD_ARCH_VAL(0b0001, "sve2")
> +IDREG_FIELD_ARCH_VAL(0b0010, "sve2p1")
> +IDREG_FIELD_ARCH_VAL(0b0011, "sve2p2")
> +IDREG_FIELD_END(ID_AA64ZFR0, SVEVER)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, AES,         4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "pmull128")
> +IDREG_FIELD_ARCH_VAL(0b0011, "aes2")
> +IDREG_FIELD_END(ID_AA64ZFR0, AES)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, RES0_8,      8,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64ZFR0, RES0_8)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, ELTPERM,    12,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ZFR0, ELTPERM)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, BITPERM,    16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ZFR0, BITPERM)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, BFLOAT16,   20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "ebf16")
> +IDREG_FIELD_END(ID_AA64ZFR0, BFLOAT16)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, B16B16,     24,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "bfscale")
> +IDREG_FIELD_END(ID_AA64ZFR0, B16B16)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, RES0_28,    28,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64ZFR0, RES0_28)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, SHA3,       32,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ZFR0, SHA3)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, RES0_36,    36,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64ZFR0, RES0_36)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, SM4,        40,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ZFR0, SM4)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, I8MM,       44,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ZFR0, I8MM)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, F16MM,      48,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ZFR0, F16MM)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, F32MM,      52,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ZFR0, F32MM)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, F64MM,      56,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ZFR0, F64MM)
> +
> +IDREG_FIELD_START(ID_AA64ZFR0, RES0_60,    60,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64ZFR0, RES0_60)
> +
> +IDREG_END(ID_AA64ZFR0_EL1)
> +
> +/*  ID_AA64SMFR0_EL1  */
> +IDREG_START(ID_AA64SMFR0_EL1)
> +IDREG_FIELD_START(ID_AA64SMFR0, SMOP4,      0,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, SMOP4)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, RES0_1,     1, 15, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64SMFR0, RES0_1)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, STMOP,     16,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, STMOP)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, RES0_17,   17,  6, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64SMFR0, RES0_17)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, SFEXPA,    23,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, SFEXPA)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, AES,       24,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, AES)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, SBITPERM,  25,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, SBITPERM)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, RES0_26,   26,  2, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64SMFR0, RES0_26)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, SF8DP2,    28,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, SF8DP2)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, SF8DP4,    29,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, SF8DP4)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, SF8FMA,    30,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, SF8FMA)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, RES0_31,   31,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64SMFR0, RES0_31)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, F32F32,    32,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, F32F32)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, BI32I32,   33,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, BI32I32)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, B16F32,    34,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, B16F32)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, F16F32,    35,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, F16F32)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, I8I32,     36,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b1111, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, I8I32)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, F8F32,     40,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, F8F32)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, F8F16,     41,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, F8F16)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, F16F16,    42,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, F16F16)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, B16B16,    43,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, B16B16)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, I16I32,    44,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0101, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, I16I32)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, F64F64,    48,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, F64F64)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, RES0_49,   49,  3, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64SMFR0, RES0_49)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, I16I64,    52,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b1111, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, I16I64)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, SMEVER,    56,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "sme")
> +IDREG_FIELD_ARCH_VAL(0b0001, "sme2")
> +IDREG_FIELD_ARCH_VAL(0b0010, "sme2p1")
> +IDREG_FIELD_ARCH_VAL(0b0011, "sme2p2")
> +IDREG_FIELD_END(ID_AA64SMFR0, SMEVER)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, LUTV2,     60,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, LUTV2)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, RES0_61,   61,  2, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64SMFR0, RES0_61)
> +
> +IDREG_FIELD_START(ID_AA64SMFR0, FA64,      63,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64SMFR0, FA64)
> +
> +IDREG_END(ID_AA64SMFR0_EL1)
> +
> +/* CTR_EL0 */
> +IDREG_START(CTR_EL0)
> +IDREG_FIELD_START(CTR_EL0, IMINLINE,    0,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(CTR_EL0, IMINLINE)
> +
> +IDREG_FIELD_START(CTR_EL0, RES0_4,      4, 10, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(CTR_EL0, RES0_4)
> +
> +IDREG_FIELD_START(CTR_EL0, L1IP,       14,  2, EXACT,  0b10)
> +IDREG_FIELD_ARCH_VAL(0b00, "reserved_vpipt")
> +IDREG_FIELD_ARCH_VAL(0b01, "reserved_aivivt")
> +IDREG_FIELD_ARCH_VAL(0b10, "vipt")
> +IDREG_FIELD_ARCH_VAL(0b11, "pipt")
> +IDREG_FIELD_END(CTR_EL0, L1IP)
> +
> +IDREG_FIELD_START(CTR_EL0, DMINLINE,   16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(CTR_EL0, DMINLINE)
> +
> +IDREG_FIELD_START(CTR_EL0, ERG,        20,  4, HIGHER_OR_ZERO,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(CTR_EL0, ERG)
> +
> +IDREG_FIELD_START(CTR_EL0, CWG,        24,  4, HIGHER_OR_ZERO,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(CTR_EL0, CWG)
> +
> +IDREG_FIELD_START(CTR_EL0, IDC,        28,  1, LOWER,  0b1)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(CTR_EL0, IDC)
> +
> +IDREG_FIELD_START(CTR_EL0, DIC,        29,  1, LOWER,  0b1)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(CTR_EL0, DIC)
> +
> +IDREG_FIELD_START(CTR_EL0, RES0_30,    30,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(CTR_EL0, RES0_30)
> +
> +IDREG_FIELD_START(CTR_EL0, RES1_31,    31,  1, EXACT,  1)
> +IDREG_FIELD_ARCH_VAL(1, NULL)
> +IDREG_FIELD_END(CTR_EL0, RES1_31)
> +
> +IDREG_FIELD_START(CTR_EL0, TMINLINE,   32,  6, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(CTR_EL0, TMINLINE)
> +
> +IDREG_FIELD_START(CTR_EL0, RES0_38,    38, 26, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(CTR_EL0, RES0_38)
> +
> +IDREG_END(CTR_EL0)
> +
> +/* ID_AA64ISAR3_EL1 */
> +IDREG_START(ID_AA64ISAR3_EL1)
> +IDREG_FIELD_START(ID_AA64ISAR3, CPA,       0,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "cpa2")
> +IDREG_FIELD_END(ID_AA64ISAR3, CPA)
> +
> +IDREG_FIELD_START(ID_AA64ISAR3, FAMINMAX,  4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR3, FAMINMAX)
> +
> +IDREG_FIELD_START(ID_AA64ISAR3, TLBIW,     8,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR3, TLBIW)
> +
> +IDREG_FIELD_START(ID_AA64ISAR3, PACM,     12,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "trivial_imp")
> +IDREG_FIELD_ARCH_VAL(0b0010, "full_imp")
> +IDREG_FIELD_END(ID_AA64ISAR3, PACM)
> +
> +IDREG_FIELD_START(ID_AA64ISAR3, LSFE,     16,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR3, LSFE)
> +
> +IDREG_FIELD_START(ID_AA64ISAR3, OCCMO,    20,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR3, OCCMO)
> +
> +IDREG_FIELD_START(ID_AA64ISAR3, LSUI,     24,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR3, LSUI)
> +
> +IDREG_FIELD_START(ID_AA64ISAR3, FPRCVT,   28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64ISAR3, FPRCVT)
> +
> +IDREG_FIELD_START(ID_AA64ISAR3, RES0_32,  32, 32, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64ISAR3, RES0_32)
> +
> +IDREG_END(ID_AA64ISAR3_EL1)
> +
> +/* ID_AA64PFR2_EL1 */
> +IDREG_START(ID_AA64PFR2_EL1)
> +IDREG_FIELD_START(ID_AA64PFR2, MTEPERM,       0,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR2, MTEPERM)
> +
> +IDREG_FIELD_START(ID_AA64PFR2, MTESTOREONLY,  4,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR2, MTESTOREONLY)
> +
> +IDREG_FIELD_START(ID_AA64PFR2, MTEFAR,        8,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR2, MTEFAR)
> +
> +IDREG_FIELD_START(ID_AA64PFR2, GCIE,         12,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR2, GCIE)
> +
> +IDREG_FIELD_START(ID_AA64PFR2, UINJ,         16,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR2, UINJ)
> +
> +IDREG_FIELD_START(ID_AA64PFR2, RES0_20,      20, 12, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64PFR2, RES0_20)
> +
> +IDREG_FIELD_START(ID_AA64PFR2, FPMR,         32,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64PFR2, FPMR)
> +
> +IDREG_FIELD_START(ID_AA64PFR2, RES0_36,      36, 28, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64PFR2, RES0_36)
> +
> +IDREG_END(ID_AA64PFR2_EL1)
> +
> +/*  ID_AA64FPFR0_EL1  */
> +IDREG_START(ID_AA64FPFR0_EL1)
> +IDREG_FIELD_START(ID_AA64FPFR0, F8E5M2,    0,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64FPFR0, F8E5M2)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, F8E4M3,    1,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64FPFR0, F8E4M3)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, RES0_2,    2, 24, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64FPFR0, RES0_2)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, F8MM4,    26,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64FPFR0, F8MM4)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, F8MM8,    27,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64FPFR0, F8MM8)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, F8DP2,    28,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64FPFR0, F8DP2)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, F8DP4,    29,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64FPFR0, F8DP4)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, F8FMA,    30,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64FPFR0, F8FMA)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, F8CVT,    31,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0, "off")
> +IDREG_FIELD_ARCH_VAL(0b1, "on")
> +IDREG_FIELD_END(ID_AA64FPFR0, F8CVT)
> +
> +IDREG_FIELD_START(ID_AA64FPFR0, RES0_32,  32, 32, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64FPFR0, RES0_32)
> +
> +IDREG_END(ID_AA64FPFR0_EL1)
> +
> +
> +/*  ID_AA64MMFR4_EL1  */
> +IDREG_START(ID_AA64MMFR4_EL1)
> +IDREG_FIELD_START(ID_AA64MMFR4, POPS,      0,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR4, POPS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, EIESB,     4,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "toel3")
> +IDREG_FIELD_ARCH_VAL(0b0010, "toelx")
> +IDREG_FIELD_ARCH_VAL(0b1111, "any")
> +IDREG_FIELD_END(ID_AA64MMFR4, EIESB)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, ASID2,     8,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR4, ASID2)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, HACDBS,   12,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR4, HACDBS)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, FGWTE3,   16,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR4, FGWTE3)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, NV_FRAC,  20,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "nv_nv2")
> +IDREG_FIELD_ARCH_VAL(0b0001, "nv2_only")
> +IDREG_FIELD_ARCH_VAL(0b0010, "nv2p1")
> +IDREG_FIELD_END(ID_AA64MMFR4, NV_FRAC)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, E2H0,     24,  4, SIGNED_LOWER,  0b1111)
> +IDREG_FIELD_ARCH_VAL(0b0000, "on")
> +IDREG_FIELD_ARCH_VAL(0b1110, "ni_nv1")
> +IDREG_FIELD_ARCH_VAL(0b1111, "off")
> +IDREG_FIELD_END(ID_AA64MMFR4, E2H0)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, RMEGDI,   28,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR4, RMEGDI)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, RES0_32,  32,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64MMFR4, RES0_32)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, E3DSE,    36,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR4, E3DSE)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, RES0_40,  40,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64MMFR4, RES0_40)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, SRMASK,   44,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64MMFR4, SRMASK)
> +
> +IDREG_FIELD_START(ID_AA64MMFR4, RES0_48,  48, 16, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_AA64MMFR4, RES0_48)
> +
> +IDREG_END(ID_AA64MMFR4_EL1)
> +
> +/*  ID_AA64DFR1_EL1  */
> +IDREG_START(ID_AA64DFR1_EL1)
> +IDREG_FIELD_START(ID_AA64DFR1, SYSPMUID,    0,  8, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(ID_AA64DFR1, SYSPMUID)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, BRPS,        8,  8, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(ID_AA64DFR1, BRPS)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, WRPS,       16,  8, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(ID_AA64DFR1, WRPS)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, CTX_CMPS,   24,  8, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(ID_AA64DFR1, CTX_CMPS)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, SPMU,       32,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_ARCH_VAL(0b0010, "imp_spmzr")
> +IDREG_FIELD_END(ID_AA64DFR1, SPMU)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, PMICNTR,    36,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR1, PMICNTR)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, ABLE,       40,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR1, ABLE)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, ITE,        44,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR1, ITE)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, EBEP,       48,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "on")
> +IDREG_FIELD_END(ID_AA64DFR1, EBEP)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, DPFZS,      52,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "ignr")
> +IDREG_FIELD_ARCH_VAL(0b0001, "frzn")
> +IDREG_FIELD_END(ID_AA64DFR1, DPFZS)
> +
> +IDREG_FIELD_START(ID_AA64DFR1, ABL_CMPS,   56,  8, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(ID_AA64DFR1, ABL_CMPS)
> +
> +IDREG_END(ID_AA64DFR1_EL1)
> +
> +/*  MIDR_EL1  */
> +IDREG_START(MIDR_EL1)
> +IDREG_FIELD_START(MIDR, REVISION,       0,  4, ANY,  0)
> +IDREG_FIELD_END(MIDR, REVISION)
> +
> +IDREG_FIELD_START(MIDR, PARTNUM,        4, 12, ANY,  0)
> +IDREG_FIELD_END(MIDR, PARTNUM)
> +
> +IDREG_FIELD_START(MIDR, ARCHITECTURE,  16,  4, ANY,  0)
> +IDREG_FIELD_END(MIDR, ARCHITECTURE)
> +
> +IDREG_FIELD_START(MIDR, VARIANT,       20,  4, ANY,  0)
> +IDREG_FIELD_END(MIDR, VARIANT)
> +
> +IDREG_FIELD_START(MIDR, IMPLEMENTER,   24,  8, ANY,  0)
> +IDREG_FIELD_END(MIDR, IMPLEMENTER)
> +
> +IDREG_FIELD_START(MIDR, RES0_32,       32, 32, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(MIDR, RES0_32)
> +
> +IDREG_END(MIDR_EL1)
> +
> +/* REVIDR_EL1  */
> +IDREG_START(REVIDR_EL1)
> +IDREG_FIELD_START(REVIDR, VAL,  0, 64, ANY,  0)
> +IDREG_FIELD_END(REVIDR, VAL)
> +
> +IDREG_END(REVIDR_EL1)
> +
> +/* AIDR_EL1  */
> +IDREG_START(AIDR_EL1)
> +IDREG_FIELD_START(AIDR, VAL,  0, 64, ANY,  0)
> +IDREG_FIELD_END(AIDR, VAL)
> +
> +IDREG_END(AIDR_EL1)
> +
> +/* DCZID_EL0 */
> +IDREG_START(DCZID_EL0)
> +IDREG_FIELD_START(DCZID_EL0, BS,       0,  4, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(DCZID_EL0, BS)
> +
> +IDREG_FIELD_START(DCZID_EL0, DZP,      4,  1, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL_ANY
> +IDREG_FIELD_END(DCZID_EL0, DZP)
> +
> +IDREG_FIELD_START(DCZID_EL0, RES0_5,   5, 59, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(DCZID_EL0, RES0_5)
> +
> +IDREG_END(DCZID_EL0)
> +
> +
> +/*  ID_AA64AFR0_EL1  */
> +IDREG_START(ID_AA64AFR0_EL1)
> +IDREG_FIELD_START(ID_AA64AFR0, VAL,  0, 64, EXACT,  0)
> +IDREG_FIELD_END(ID_AA64AFR0, VAL)
> +
> +IDREG_END(ID_AA64AFR0_EL1)
> +
> +/*  ID_AA64AFR1_EL1  */
> +IDREG_START(ID_AA64AFR1_EL1)
> +IDREG_FIELD_START(ID_AA64AFR1, VAL,  0, 64, EXACT,  0)
> +IDREG_FIELD_END(ID_AA64AFR1, VAL)
> +
> +IDREG_END(ID_AA64AFR1_EL1)
> +
> + /* AArch32 ID registers */
> +
> +/*  ID_PFR0_EL1  */
> +IDREG_START(ID_PFR0_EL1)
> +IDREG_FIELD_START(ID_PFR0, VAL,  0, 64, EXACT,  0)
> +IDREG_FIELD_END(ID_PFR0, VAL)
> +
> +IDREG_END(ID_PFR0_EL1)
> +
> +/*  ID_PFR1_EL1  */
> +IDREG_START(ID_PFR1_EL1)
> +IDREG_FIELD_START(ID_PFR1, VAL_LO,    0, 28, EXACT,  0)
> +IDREG_FIELD_END(ID_PFR1, VAL_LO)
> +
> +IDREG_FIELD_START(ID_PFR1, GIC,      28,  4, LOWER,  0)
> +IDREG_FIELD_ARCH_VAL(0b0000, "off")
> +IDREG_FIELD_ARCH_VAL(0b0001, "gicv3")
> +IDREG_FIELD_ARCH_VAL(0b0011, "gicv4p1")
> +IDREG_FIELD_END(ID_PFR1, GIC)
> +
> +IDREG_FIELD_START(ID_PFR1, RES0_HI, 32, 32, EXACT,  0)
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_PFR1, RES0_HI)
> +
> +IDREG_END(ID_PFR1_EL1)
> +
> +/* ID_DFR0_EL1  */
> +IDREG_START(ID_DFR0_EL1)
> +IDREG_FIELD_START(ID_DFR0, VAL_LO,    0, 24, EXACT,  0 )
> +IDREG_FIELD_END(ID_DFR0, VAL_LO)
> +
> +IDREG_FIELD_START(ID_DFR0, PMU,      24,  4, LOWER,  0 )
> +IDREG_FIELD_END(ID_DFR0, PMU)
> +
> +IDREG_FIELD_START(ID_DFR0, VAL_HI,   28,  4, EXACT,  0 )
> +IDREG_FIELD_END(ID_DFR0, VAL_HI)
> +
> +IDREG_FIELD_START(ID_DFR0, RES0_HI, 32, 32, EXACT,  0 )
> +IDREG_FIELD_ARCH_VAL(0, NULL)
> +IDREG_FIELD_END(ID_DFR0, RES0_HI)
> +
> +IDREG_END(ID_DFR0_EL1)
> +
> +/*  ID_AFR0_EL1  */
> +IDREG_START(ID_AFR0_EL1)
> +IDREG_FIELD_START(ID_AFR0, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_AFR0, VAL)
> +
> +IDREG_END(ID_AFR0_EL1)
> +
> +/* ID_MMFR0_EL1  */
> +IDREG_START(ID_MMFR0_EL1)
> +IDREG_FIELD_START(ID_MMFR0, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_MMFR0, VAL)
> +
> +IDREG_END(ID_MMFR0_EL1)
> +
> +/* ID_MMFR1_EL1  */
> +IDREG_START(ID_MMFR1_EL1)
> +IDREG_FIELD_START(ID_MMFR1, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_MMFR1, VAL)
> +
> +IDREG_END(ID_MMFR1_EL1)
> +
> +/* ID_MMFR2_EL1 */
> +IDREG_START(ID_MMFR2_EL1)
> +IDREG_FIELD_START(ID_MMFR2, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_MMFR2, VAL)
> +
> +IDREG_END(ID_MMFR2_EL1)
> +
> +/* ID_MMFR3_EL1  */
> +IDREG_START(ID_MMFR3_EL1)
> +IDREG_FIELD_START(ID_MMFR3, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_MMFR3, VAL)
> +
> +IDREG_END(ID_MMFR3_EL1)
> +
> +/*  ID_MMFR4_EL1  */
> +IDREG_START(ID_MMFR4_EL1)
> +IDREG_FIELD_START(ID_MMFR4, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_MMFR4, VAL)
> +
> +IDREG_END(ID_MMFR4_EL1)
> +
> +/* ID_MMFR5_EL1  */
> +IDREG_START(ID_MMFR5_EL1)
> +IDREG_FIELD_START(ID_MMFR5, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_MMFR5, VAL)
> +
> +IDREG_END(ID_MMFR5_EL1)
> +
> +/* ID_ISAR0_EL1  */
> +IDREG_START(ID_ISAR0_EL1)
> +IDREG_FIELD_START(ID_ISAR0, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_ISAR0, VAL)
> +
> +IDREG_END(ID_ISAR0_EL1)
> +
> +/*  ID_ISAR1_EL1  */
> +IDREG_START(ID_ISAR1_EL1)
> +IDREG_FIELD_START(ID_ISAR1, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_ISAR1, VAL)
> +
> +IDREG_END(ID_ISAR1_EL1)
> +
> +/*  ID_ISAR2_EL1  */
> +IDREG_START(ID_ISAR2_EL1)
> +IDREG_FIELD_START(ID_ISAR2, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_ISAR2, VAL)
> +
> +IDREG_END(ID_ISAR2_EL1)
> +
> +/*  ID_ISAR3_EL1  */
> +IDREG_START(ID_ISAR3_EL1)
> +IDREG_FIELD_START(ID_ISAR3, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_ISAR3, VAL)
> +
> +IDREG_END(ID_ISAR3_EL1)
> +
> +/*  ID_ISAR4_EL1  */
> +IDREG_START(ID_ISAR4_EL1)
> +IDREG_FIELD_START(ID_ISAR4, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_ISAR4, VAL)
> +
> +IDREG_END(ID_ISAR4_EL1)
> +
> +/* ID_ISAR5_EL1  */
> +IDREG_START(ID_ISAR5_EL1)
> +IDREG_FIELD_START(ID_ISAR5, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_ISAR5, VAL)
> +
> +IDREG_END(ID_ISAR5_EL1)
> +
> +/*  ID_ISAR6_EL1  */
> +IDREG_START(ID_ISAR6_EL1)
> +IDREG_FIELD_START(ID_ISAR6, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_ISAR6, VAL)
> +
> +IDREG_END(ID_ISAR6_EL1)
> +
> +/*  ID_PFR2_EL1  */
> +IDREG_START(ID_PFR2_EL1)
> +IDREG_FIELD_START(ID_PFR2, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_PFR2, VAL)
> +
> +IDREG_END(ID_PFR2_EL1)
> +
> +/*  ID_DFR1_EL1 */
> +IDREG_START(ID_DFR1_EL1)
> +IDREG_FIELD_START(ID_DFR1, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(ID_DFR1, VAL)
> +
> +IDREG_END(ID_DFR1_EL1)
> +
> +/*  MVFR0_EL1  */
> +IDREG_START(MVFR0_EL1)
> +IDREG_FIELD_START(MVFR0, VAL,  0, 64, EXACT,  0)
> +IDREG_FIELD_END(MVFR0, VAL)
> +
> +IDREG_END(MVFR0_EL1)
> +
> +/*  MVFR1_EL1  */
> +IDREG_START(MVFR1_EL1)
> +IDREG_FIELD_START(MVFR1, VAL,  0, 64, EXACT,  0 )
> +IDREG_FIELD_END(MVFR1, VAL)
> +
> +IDREG_END(MVFR1_EL1)
> +
> +/* MVFR2_EL1  */
> +IDREG_START(MVFR2_EL1)
> +IDREG_FIELD_START(MVFR2, VAL,  0, 64, EXACT,  0)
> +IDREG_FIELD_END(MVFR2, VAL)
> +
> +IDREG_END(MVFR2_EL1)


Reply via email to