Page MenuHomeFreeBSD

D47121.id144906.diff
No OneTemporary

D47121.id144906.diff

diff --git a/sys/arm64/arm64/identcpu.c b/sys/arm64/arm64/identcpu.c
--- a/sys/arm64/arm64/identcpu.c
+++ b/sys/arm64/arm64/identcpu.c
@@ -290,8 +290,6 @@
};
#define MRS_TYPE_MASK 0xf
-#define MRS_TYPE_FBSD_SHIFT 0
-#define MRS_TYPE_LNX_SHIFT 8
#define MRS_INVALID 0
#define MRS_EXACT 1
#define MRS_LOWER 2
@@ -299,6 +297,9 @@
#define MRS_SAFE_MASK (0xfu << MRS_SAFE_SHIFT)
#define MRS_SAFE(x) (((x) << MRS_SAFE_SHIFT) & MRS_SAFE_MASK)
#define MRS_SAFE_VAL(x) (((x) & MRS_SAFE_MASK) >> MRS_SAFE_SHIFT)
+#define MRS_FREEBSD (1u << 8)
+#define MRS_LINUX (1u << 9)
+#define MRS_USERSPACE (MRS_FREEBSD | MRS_LINUX)
struct mrs_field_value {
uint64_t value;
@@ -361,13 +362,12 @@
u_int shift;
};
-#define MRS_FIELD_HWCAP_SPLIT(_register, _name, _sign, _fbsd_type, \
- _lnx_type, _values, _hwcap) \
+#define MRS_FIELD_HWCAP(_register, _name, _sign, _type, _visibility, \
+ _values, _hwcap) \
{ \
.name = #_name, \
.sign = (_sign), \
- .type = ((_fbsd_type) << MRS_TYPE_FBSD_SHIFT) | \
- ((_lnx_type) << MRS_TYPE_LNX_SHIFT), \
+ .type = ((_type) | (_visibility)), \
.width = _register ## _ ## _name ## _WIDTH, \
.shift = _register ## _ ## _name ## _SHIFT, \
.mask = _register ## _ ## _name ## _MASK, \
@@ -375,15 +375,13 @@
.hwcaps = (_hwcap), \
}
-#define MRS_FIELD_HWCAP(_register, _name, _sign, _type, _values, _hwcap) \
- MRS_FIELD_HWCAP_SPLIT(_register, _name, _sign, _type, _type, \
- _values, _hwcap)
-
-#define MRS_FIELD(_register, _name, _sign, _type, _values) \
- MRS_FIELD_HWCAP(_register, _name, _sign, _type, _values, NULL)
+#define MRS_FIELD(_register, _name, _sign, _type, _visibility, _values) \
+ MRS_FIELD_HWCAP(_register, _name, _sign, _type, _visibility, \
+ _values, NULL)
#define MRS_FIELD_END { .type = MRS_INVALID, }
+
/* ID_AA64AFR0_EL1 */
static const struct mrs_field id_aa64afr0_fields[] = {
MRS_FIELD_END,
@@ -483,24 +481,26 @@
};
static const struct mrs_field id_aa64dfr0_fields[] = {
- MRS_FIELD(ID_AA64DFR0, HPMN0, false, MRS_EXACT, id_aa64dfr0_hpmn0),
- MRS_FIELD(ID_AA64DFR0, BRBE, false, MRS_EXACT, id_aa64dfr0_brbe),
- MRS_FIELD(ID_AA64DFR0, MTPMU, true, MRS_EXACT, id_aa64dfr0_mtpmu),
- MRS_FIELD(ID_AA64DFR0, TraceBuffer, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64DFR0, HPMN0, false, MRS_LOWER, 0, id_aa64dfr0_hpmn0),
+ MRS_FIELD(ID_AA64DFR0, BRBE, false, MRS_LOWER, 0, id_aa64dfr0_brbe),
+ MRS_FIELD(ID_AA64DFR0, MTPMU, true, MRS_LOWER, 0, id_aa64dfr0_mtpmu),
+ MRS_FIELD(ID_AA64DFR0, TraceBuffer, false, MRS_LOWER, 0,
id_aa64dfr0_tracebuffer),
- MRS_FIELD(ID_AA64DFR0, TraceFilt, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64DFR0, TraceFilt, false, MRS_LOWER, 0,
id_aa64dfr0_tracefilt),
- MRS_FIELD(ID_AA64DFR0, DoubleLock, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64DFR0, DoubleLock, false, MRS_LOWER, 0,
id_aa64dfr0_doublelock),
- MRS_FIELD(ID_AA64DFR0, PMSVer, false, MRS_EXACT, id_aa64dfr0_pmsver),
- MRS_FIELD(ID_AA64DFR0, CTX_CMPs, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64DFR0, PMSVer, false, MRS_LOWER, 0, id_aa64dfr0_pmsver),
+ MRS_FIELD(ID_AA64DFR0, CTX_CMPs, false, MRS_LOWER, 0,
id_aa64dfr0_ctx_cmps),
- MRS_FIELD(ID_AA64DFR0, WRPs, false, MRS_LOWER, id_aa64dfr0_wrps),
- MRS_FIELD(ID_AA64DFR0, BRPs, false, MRS_LOWER, id_aa64dfr0_brps),
- MRS_FIELD(ID_AA64DFR0, PMUVer, false, MRS_EXACT, id_aa64dfr0_pmuver),
- MRS_FIELD(ID_AA64DFR0, TraceVer, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64DFR0, WRPs, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64dfr0_wrps),
+ MRS_FIELD(ID_AA64DFR0, BRPs, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64dfr0_brps),
+ MRS_FIELD(ID_AA64DFR0, PMUVer, false, MRS_LOWER, 0, id_aa64dfr0_pmuver),
+ MRS_FIELD(ID_AA64DFR0, TraceVer, false, MRS_LOWER, 0,
id_aa64dfr0_tracever),
- MRS_FIELD(ID_AA64DFR0, DebugVer, false, MRS_EXACT | MRS_SAFE(0x6),
+ MRS_FIELD(ID_AA64DFR0, DebugVer, false, MRS_LOWER | MRS_SAFE(0x6), 0,
id_aa64dfr0_debugver),
MRS_FIELD_END,
};
@@ -664,34 +664,34 @@
};
static const struct mrs_field id_aa64isar0_fields[] = {
- MRS_FIELD_HWCAP(ID_AA64ISAR0, RNDR, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, RNDR, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar0_rndr, id_aa64isar0_rndr_caps),
- MRS_FIELD(ID_AA64ISAR0, TLB, false, MRS_EXACT, id_aa64isar0_tlb),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, TS, false, MRS_LOWER, id_aa64isar0_ts,
- id_aa64isar0_ts_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, FHM, false, MRS_LOWER, id_aa64isar0_fhm,
- id_aa64isar0_fhm_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, DP, false, MRS_LOWER, id_aa64isar0_dp,
- id_aa64isar0_dp_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, SM4, false, MRS_LOWER, id_aa64isar0_sm4,
- id_aa64isar0_sm4_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, SM3, false, MRS_LOWER, id_aa64isar0_sm3,
- id_aa64isar0_sm3_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, SHA3, false, MRS_LOWER, id_aa64isar0_sha3,
- id_aa64isar0_sha3_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, RDM, false, MRS_LOWER, id_aa64isar0_rdm,
- id_aa64isar0_rdm_caps),
- MRS_FIELD(ID_AA64ISAR0, TME, false, MRS_EXACT, id_aa64isar0_tme),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, Atomic, false, MRS_LOWER,
+ MRS_FIELD(ID_AA64ISAR0, TLB, false, MRS_LOWER, 0, id_aa64isar0_tlb),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, TS, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_ts, id_aa64isar0_ts_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, FHM, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_fhm, id_aa64isar0_fhm_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, DP, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_dp, id_aa64isar0_dp_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, SM4, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_sm4, id_aa64isar0_sm4_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, SM3, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_sm3, id_aa64isar0_sm3_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, SHA3, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_sha3, id_aa64isar0_sha3_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, RDM, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_rdm, id_aa64isar0_rdm_caps),
+ MRS_FIELD(ID_AA64ISAR0, TME, false, MRS_LOWER, 0, id_aa64isar0_tme),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, Atomic, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar0_atomic, id_aa64isar0_atomic_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, CRC32, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, CRC32, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar0_crc32, id_aa64isar0_crc32_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, SHA2, false, MRS_LOWER, id_aa64isar0_sha2,
- id_aa64isar0_sha2_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, SHA1, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, SHA2, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_sha2, id_aa64isar0_sha2_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, SHA1, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar0_sha1, id_aa64isar0_sha1_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR0, AES, false, MRS_LOWER, id_aa64isar0_aes,
- id_aa64isar0_aes_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR0, AES, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar0_aes, id_aa64isar0_aes_caps),
MRS_FIELD_END,
};
@@ -865,36 +865,36 @@
};
static const struct mrs_field id_aa64isar1_fields[] = {
- MRS_FIELD(ID_AA64ISAR1, LS64, false, MRS_EXACT, id_aa64isar1_ls64),
- MRS_FIELD(ID_AA64ISAR1, XS, false, MRS_EXACT, id_aa64isar1_xs),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, I8MM, false, MRS_LOWER,
+ MRS_FIELD(ID_AA64ISAR1, LS64, false, MRS_LOWER, 0, id_aa64isar1_ls64),
+ MRS_FIELD(ID_AA64ISAR1, XS, false, MRS_LOWER, 0, id_aa64isar1_xs),
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, I8MM, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar1_i8mm, id_aa64isar1_i8mm_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, DGH, false, MRS_LOWER, id_aa64isar1_dgh,
- id_aa64isar1_dgh_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, BF16, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, DGH, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar1_dgh, id_aa64isar1_dgh_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, BF16, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar1_bf16, id_aa64isar1_bf16_caps),
- MRS_FIELD(ID_AA64ISAR1, SPECRES, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64ISAR1, SPECRES, false, MRS_LOWER, 0,
id_aa64isar1_specres),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, SB, false, MRS_LOWER, id_aa64isar1_sb,
- id_aa64isar1_sb_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, FRINTTS, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, SB, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar1_sb, id_aa64isar1_sb_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, FRINTTS, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar1_frintts, id_aa64isar1_frintts_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, GPI, false, MRS_EXACT, id_aa64isar1_gpi,
- id_aa64isar1_gpi_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, GPA, false, MRS_EXACT, id_aa64isar1_gpa,
- id_aa64isar1_gpa_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, LRCPC, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, GPI, false, MRS_LOWER, 0,
+ id_aa64isar1_gpi, id_aa64isar1_gpi_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, GPA, false, MRS_LOWER, 0,
+ id_aa64isar1_gpa, id_aa64isar1_gpa_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, LRCPC, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar1_lrcpc, id_aa64isar1_lrcpc_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, FCMA, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, FCMA, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar1_fcma, id_aa64isar1_fcma_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, JSCVT, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, JSCVT, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar1_jscvt, id_aa64isar1_jscvt_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, API, false, MRS_EXACT, id_aa64isar1_api,
- id_aa64isar1_api_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, APA, false, MRS_EXACT, id_aa64isar1_apa,
- id_aa64isar1_apa_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR1, DPB, false, MRS_LOWER, id_aa64isar1_dpb,
- id_aa64isar1_dpb_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, API, false, MRS_LOWER, 0,
+ id_aa64isar1_api, id_aa64isar1_api_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, APA, false, MRS_LOWER, 0,
+ id_aa64isar1_apa, id_aa64isar1_apa_caps),
+ MRS_FIELD_HWCAP(ID_AA64ISAR1, DPB, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64isar1_dpb, id_aa64isar1_dpb_caps),
MRS_FIELD_END,
};
@@ -957,17 +957,17 @@
};
static const struct mrs_field id_aa64isar2_fields[] = {
- MRS_FIELD(ID_AA64ISAR2, PAC_frac, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64ISAR2, PAC_frac, false, MRS_LOWER, 0,
id_aa64isar2_pac_frac),
- MRS_FIELD(ID_AA64ISAR2, BC, false, MRS_EXACT, id_aa64isar2_bc),
- MRS_FIELD(ID_AA64ISAR2, MOPS, false, MRS_EXACT, id_aa64isar2_mops),
- MRS_FIELD_HWCAP(ID_AA64ISAR2, APA3, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64ISAR2, BC, false, MRS_LOWER, 0, id_aa64isar2_bc),
+ MRS_FIELD(ID_AA64ISAR2, MOPS, false, MRS_LOWER, 0, id_aa64isar2_mops),
+ MRS_FIELD_HWCAP(ID_AA64ISAR2, APA3, false, MRS_LOWER, 0,
id_aa64isar2_apa3, id_aa64isar2_apa3_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR2, GPA3, false, MRS_EXACT,
+ MRS_FIELD_HWCAP(ID_AA64ISAR2, GPA3, false, MRS_LOWER, 0,
id_aa64isar2_gpa3, id_aa64isar2_gpa3_caps),
- MRS_FIELD_HWCAP(ID_AA64ISAR2, RPRES, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ISAR2, RPRES, false, MRS_LOWER, MRS_USERSPACE,
id_aa64isar2_rpres, id_aa64isar2_rpres_caps),
- MRS_FIELD(ID_AA64ISAR2, WFxT, false, MRS_EXACT, id_aa64isar2_wfxt),
+ MRS_FIELD(ID_AA64ISAR2, WFxT, false, MRS_LOWER, 0, id_aa64isar2_wfxt),
MRS_FIELD_END,
};
@@ -1062,27 +1062,30 @@
};
static const struct mrs_field id_aa64mmfr0_fields[] = {
- MRS_FIELD(ID_AA64MMFR0, ECV, false, MRS_EXACT, id_aa64mmfr0_ecv),
- MRS_FIELD(ID_AA64MMFR0, FGT, false, MRS_EXACT, id_aa64mmfr0_fgt),
- MRS_FIELD(ID_AA64MMFR0, ExS, false, MRS_EXACT, id_aa64mmfr0_exs),
- MRS_FIELD(ID_AA64MMFR0, TGran4_2, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR0, ECV, false, MRS_LOWER, 0, id_aa64mmfr0_ecv),
+ MRS_FIELD(ID_AA64MMFR0, FGT, false, MRS_LOWER, 0, id_aa64mmfr0_fgt),
+ MRS_FIELD(ID_AA64MMFR0, ExS, false, MRS_LOWER, 0, id_aa64mmfr0_exs),
+ MRS_FIELD(ID_AA64MMFR0, TGran4_2, false, MRS_LOWER, 0,
id_aa64mmfr0_tgran4_2),
- MRS_FIELD(ID_AA64MMFR0, TGran64_2, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR0, TGran64_2, false, MRS_LOWER, 0,
id_aa64mmfr0_tgran64_2),
- MRS_FIELD(ID_AA64MMFR0, TGran16_2, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR0, TGran16_2, false, MRS_LOWER, 0,
id_aa64mmfr0_tgran16_2),
- MRS_FIELD(ID_AA64MMFR0, TGran4, false, MRS_EXACT, id_aa64mmfr0_tgran4),
- MRS_FIELD(ID_AA64MMFR0, TGran64, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR0, TGran4, false, MRS_LOWER, 0,
+ id_aa64mmfr0_tgran4),
+ MRS_FIELD(ID_AA64MMFR0, TGran64, false, MRS_LOWER, 0,
id_aa64mmfr0_tgran64),
- MRS_FIELD(ID_AA64MMFR0, TGran16, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR0, TGran16, false, MRS_LOWER, 0,
id_aa64mmfr0_tgran16),
- MRS_FIELD(ID_AA64MMFR0, BigEndEL0, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR0, BigEndEL0, false, MRS_LOWER, 0,
id_aa64mmfr0_bigendel0),
- MRS_FIELD(ID_AA64MMFR0, SNSMem, false, MRS_EXACT, id_aa64mmfr0_snsmem),
- MRS_FIELD(ID_AA64MMFR0, BigEnd, false, MRS_EXACT, id_aa64mmfr0_bigend),
- MRS_FIELD(ID_AA64MMFR0, ASIDBits, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR0, SNSMem, false, MRS_LOWER, 0,
+ id_aa64mmfr0_snsmem),
+ MRS_FIELD(ID_AA64MMFR0, BigEnd, false, MRS_LOWER, 0,
+ id_aa64mmfr0_bigend),
+ MRS_FIELD(ID_AA64MMFR0, ASIDBits, false, MRS_LOWER, 0,
id_aa64mmfr0_asidbits),
- MRS_FIELD(ID_AA64MMFR0, PARange, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR0, PARange, false, MRS_LOWER, 0,
id_aa64mmfr0_parange),
MRS_FIELD_END,
};
@@ -1177,24 +1180,26 @@
};
static const struct mrs_field id_aa64mmfr1_fields[] = {
- MRS_FIELD(ID_AA64MMFR1, CMOVW, false, MRS_EXACT, id_aa64mmfr1_cmovw),
- MRS_FIELD(ID_AA64MMFR1, TIDCP1, false, MRS_EXACT, id_aa64mmfr1_tidcp1),
- MRS_FIELD(ID_AA64MMFR1, nTLBPA, false, MRS_EXACT, id_aa64mmfr1_ntlbpa),
- MRS_FIELD_HWCAP(ID_AA64MMFR1, AFP, false, MRS_LOWER, id_aa64mmfr1_afp,
- id_aa64mmfr1_afp_caps),
- MRS_FIELD(ID_AA64MMFR1, HCX, false, MRS_EXACT, id_aa64mmfr1_hcx),
- MRS_FIELD(ID_AA64MMFR1, ETS, false, MRS_EXACT, id_aa64mmfr1_ets),
- MRS_FIELD(ID_AA64MMFR1, TWED, false, MRS_EXACT, id_aa64mmfr1_twed),
- MRS_FIELD(ID_AA64MMFR1, XNX, false, MRS_EXACT, id_aa64mmfr1_xnx),
- MRS_FIELD(ID_AA64MMFR1, SpecSEI, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR1, CMOVW, false, MRS_LOWER, 0, id_aa64mmfr1_cmovw),
+ MRS_FIELD(ID_AA64MMFR1, TIDCP1, false, MRS_LOWER, 0,
+ id_aa64mmfr1_tidcp1),
+ MRS_FIELD(ID_AA64MMFR1, nTLBPA, false, MRS_LOWER, 0,
+ id_aa64mmfr1_ntlbpa),
+ MRS_FIELD_HWCAP(ID_AA64MMFR1, AFP, false, MRS_LOWER, 0,
+ id_aa64mmfr1_afp, id_aa64mmfr1_afp_caps),
+ MRS_FIELD(ID_AA64MMFR1, HCX, false, MRS_LOWER, 0, id_aa64mmfr1_hcx),
+ MRS_FIELD(ID_AA64MMFR1, ETS, false, MRS_LOWER, 0, id_aa64mmfr1_ets),
+ MRS_FIELD(ID_AA64MMFR1, TWED, false, MRS_LOWER, 0, id_aa64mmfr1_twed),
+ MRS_FIELD(ID_AA64MMFR1, XNX, false, MRS_LOWER, 0, id_aa64mmfr1_xnx),
+ MRS_FIELD(ID_AA64MMFR1, SpecSEI, false, MRS_LOWER, 0,
id_aa64mmfr1_specsei),
- MRS_FIELD(ID_AA64MMFR1, PAN, false, MRS_EXACT, id_aa64mmfr1_pan),
- MRS_FIELD(ID_AA64MMFR1, LO, false, MRS_EXACT, id_aa64mmfr1_lo),
- MRS_FIELD(ID_AA64MMFR1, HPDS, false, MRS_EXACT, id_aa64mmfr1_hpds),
- MRS_FIELD(ID_AA64MMFR1, VH, false, MRS_EXACT, id_aa64mmfr1_vh),
- MRS_FIELD(ID_AA64MMFR1, VMIDBits, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR1, PAN, false, MRS_LOWER, 0, id_aa64mmfr1_pan),
+ MRS_FIELD(ID_AA64MMFR1, LO, false, MRS_LOWER, 0, id_aa64mmfr1_lo),
+ MRS_FIELD(ID_AA64MMFR1, HPDS, false, MRS_LOWER, 0, id_aa64mmfr1_hpds),
+ MRS_FIELD(ID_AA64MMFR1, VH, false, MRS_LOWER, 0, id_aa64mmfr1_vh),
+ MRS_FIELD(ID_AA64MMFR1, VMIDBits, false, MRS_LOWER, 0,
id_aa64mmfr1_vmidbits),
- MRS_FIELD(ID_AA64MMFR1, HAFDBS, false, MRS_EXACT, id_aa64mmfr1_hafdbs),
+ MRS_FIELD(ID_AA64MMFR1, HAFDBS, false, MRS_LOWER, 0, id_aa64mmfr1_hafdbs),
MRS_FIELD_END,
};
@@ -1288,23 +1293,23 @@
};
static const struct mrs_field id_aa64mmfr2_fields[] = {
- MRS_FIELD(ID_AA64MMFR2, E0PD, false, MRS_EXACT, id_aa64mmfr2_e0pd),
- MRS_FIELD(ID_AA64MMFR2, EVT, false, MRS_EXACT, id_aa64mmfr2_evt),
- MRS_FIELD(ID_AA64MMFR2, BBM, false, MRS_EXACT, id_aa64mmfr2_bbm),
- MRS_FIELD(ID_AA64MMFR2, TTL, false, MRS_EXACT, id_aa64mmfr2_ttl),
- MRS_FIELD(ID_AA64MMFR2, FWB, false, MRS_EXACT, id_aa64mmfr2_fwb),
- MRS_FIELD(ID_AA64MMFR2, IDS, false, MRS_EXACT, id_aa64mmfr2_ids),
- MRS_FIELD_HWCAP(ID_AA64MMFR2, AT, false, MRS_LOWER, id_aa64mmfr2_at,
- id_aa64mmfr2_at_caps),
- MRS_FIELD(ID_AA64MMFR2, ST, false, MRS_EXACT, id_aa64mmfr2_st),
- MRS_FIELD(ID_AA64MMFR2, NV, false, MRS_EXACT, id_aa64mmfr2_nv),
- MRS_FIELD(ID_AA64MMFR2, CCIDX, false, MRS_EXACT, id_aa64mmfr2_ccidx),
- MRS_FIELD(ID_AA64MMFR2, VARange, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR2, E0PD, false, MRS_LOWER, 0, id_aa64mmfr2_e0pd),
+ MRS_FIELD(ID_AA64MMFR2, EVT, false, MRS_LOWER, 0, id_aa64mmfr2_evt),
+ MRS_FIELD(ID_AA64MMFR2, BBM, false, MRS_LOWER, 0, id_aa64mmfr2_bbm),
+ MRS_FIELD(ID_AA64MMFR2, TTL, false, MRS_LOWER, 0, id_aa64mmfr2_ttl),
+ MRS_FIELD(ID_AA64MMFR2, FWB, false, MRS_LOWER, 0, id_aa64mmfr2_fwb),
+ MRS_FIELD(ID_AA64MMFR2, IDS, false, MRS_LOWER, 0, id_aa64mmfr2_ids),
+ MRS_FIELD_HWCAP(ID_AA64MMFR2, AT, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64mmfr2_at, id_aa64mmfr2_at_caps),
+ MRS_FIELD(ID_AA64MMFR2, ST, false, MRS_LOWER, 0, id_aa64mmfr2_st),
+ MRS_FIELD(ID_AA64MMFR2, NV, false, MRS_LOWER, 0, id_aa64mmfr2_nv),
+ MRS_FIELD(ID_AA64MMFR2, CCIDX, false, MRS_LOWER, 0, id_aa64mmfr2_ccidx),
+ MRS_FIELD(ID_AA64MMFR2, VARange, false, MRS_LOWER, 0,
id_aa64mmfr2_varange),
- MRS_FIELD(ID_AA64MMFR2, IESB, false, MRS_EXACT, id_aa64mmfr2_iesb),
- MRS_FIELD(ID_AA64MMFR2, LSM, false, MRS_EXACT, id_aa64mmfr2_lsm),
- MRS_FIELD(ID_AA64MMFR2, UAO, false, MRS_EXACT, id_aa64mmfr2_uao),
- MRS_FIELD(ID_AA64MMFR2, CnP, false, MRS_EXACT, id_aa64mmfr2_cnp),
+ MRS_FIELD(ID_AA64MMFR2, IESB, false, MRS_LOWER, 0, id_aa64mmfr2_iesb),
+ MRS_FIELD(ID_AA64MMFR2, LSM, false, MRS_LOWER, 0, id_aa64mmfr2_lsm),
+ MRS_FIELD(ID_AA64MMFR2, UAO, false, MRS_LOWER, 0, id_aa64mmfr2_uao),
+ MRS_FIELD(ID_AA64MMFR2, CnP, false, MRS_LOWER, 0, id_aa64mmfr2_cnp),
MRS_FIELD_END,
};
@@ -1331,11 +1336,12 @@
};
static const struct mrs_field id_aa64mmfr3_fields[] = {
- MRS_FIELD(ID_AA64MMFR3, Spec_FPACC, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64MMFR3, Spec_FPACC, false, MRS_LOWER, 0,
id_aa64mmfr3_spec_fpacc),
- MRS_FIELD(ID_AA64MMFR3, MEC, false, MRS_EXACT, id_aa64mmfr3_mec),
- MRS_FIELD(ID_AA64MMFR3, SCTLRX, false, MRS_EXACT, id_aa64mmfr3_sctlrx),
- MRS_FIELD(ID_AA64MMFR3, TCRX, false, MRS_EXACT, id_aa64mmfr3_tcrx),
+ MRS_FIELD(ID_AA64MMFR3, MEC, false, MRS_LOWER, 0, id_aa64mmfr3_mec),
+ MRS_FIELD(ID_AA64MMFR3, SCTLRX, false, MRS_LOWER, 0,
+ id_aa64mmfr3_sctlrx),
+ MRS_FIELD(ID_AA64MMFR3, TCRX, false, MRS_LOWER, 0, id_aa64mmfr3_tcrx),
MRS_FIELD_END,
};
@@ -1468,26 +1474,28 @@
};
static const struct mrs_field id_aa64pfr0_fields[] = {
- MRS_FIELD(ID_AA64PFR0, CSV3, false, MRS_EXACT, id_aa64pfr0_csv3),
- MRS_FIELD(ID_AA64PFR0, CSV2, false, MRS_EXACT, id_aa64pfr0_csv2),
- MRS_FIELD(ID_AA64PFR0, RME, false, MRS_EXACT, id_aa64pfr0_rme),
- MRS_FIELD_HWCAP(ID_AA64PFR0, DIT, false, MRS_LOWER, id_aa64pfr0_dit,
- id_aa64pfr0_dit_caps),
- MRS_FIELD(ID_AA64PFR0, AMU, false, MRS_EXACT, id_aa64pfr0_amu),
- MRS_FIELD(ID_AA64PFR0, MPAM, false, MRS_EXACT, id_aa64pfr0_mpam),
- MRS_FIELD(ID_AA64PFR0, SEL2, false, MRS_EXACT, id_aa64pfr0_sel2),
- MRS_FIELD_HWCAP_SPLIT(ID_AA64PFR0, SVE, false, MRS_LOWER, MRS_EXACT,
- id_aa64pfr0_sve, id_aa64pfr0_sve_caps),
- MRS_FIELD(ID_AA64PFR0, RAS, false, MRS_EXACT, id_aa64pfr0_ras),
- MRS_FIELD(ID_AA64PFR0, GIC, false, MRS_EXACT, id_aa64pfr0_gic),
- MRS_FIELD_HWCAP(ID_AA64PFR0, AdvSIMD, true, MRS_LOWER,
+ MRS_FIELD(ID_AA64PFR0, CSV3, false, MRS_LOWER, 0, id_aa64pfr0_csv3),
+ MRS_FIELD(ID_AA64PFR0, CSV2, false, MRS_LOWER, 0, id_aa64pfr0_csv2),
+ MRS_FIELD(ID_AA64PFR0, RME, false, MRS_LOWER, 0, id_aa64pfr0_rme),
+ MRS_FIELD_HWCAP(ID_AA64PFR0, DIT, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64pfr0_dit, id_aa64pfr0_dit_caps),
+ MRS_FIELD(ID_AA64PFR0, AMU, false, MRS_LOWER, 0, id_aa64pfr0_amu),
+ MRS_FIELD(ID_AA64PFR0, MPAM, false, MRS_LOWER, 0, id_aa64pfr0_mpam),
+ MRS_FIELD(ID_AA64PFR0, SEL2, false, MRS_LOWER, 0, id_aa64pfr0_sel2),
+ MRS_FIELD_HWCAP(ID_AA64PFR0, SVE, false, MRS_LOWER,
+ MRS_FREEBSD, id_aa64pfr0_sve, id_aa64pfr0_sve_caps),
+ MRS_FIELD(ID_AA64PFR0, RAS, false, MRS_LOWER, 0, id_aa64pfr0_ras),
+ MRS_FIELD(ID_AA64PFR0, GIC, false, MRS_LOWER, 0, id_aa64pfr0_gic),
+ MRS_FIELD_HWCAP(ID_AA64PFR0, AdvSIMD, true, MRS_LOWER, MRS_USERSPACE,
id_aa64pfr0_advsimd, id_aa64pfr0_advsimd_caps),
- MRS_FIELD_HWCAP(ID_AA64PFR0, FP, true, MRS_LOWER, id_aa64pfr0_fp,
- id_aa64pfr0_fp_caps),
- MRS_FIELD(ID_AA64PFR0, EL3, false, MRS_EXACT, id_aa64pfr0_el3),
- MRS_FIELD(ID_AA64PFR0, EL2, false, MRS_EXACT, id_aa64pfr0_el2),
- MRS_FIELD(ID_AA64PFR0, EL1, false, MRS_LOWER, id_aa64pfr0_el1),
- MRS_FIELD(ID_AA64PFR0, EL0, false, MRS_LOWER, id_aa64pfr0_el0),
+ MRS_FIELD_HWCAP(ID_AA64PFR0, FP, true, MRS_LOWER, MRS_USERSPACE,
+ id_aa64pfr0_fp, id_aa64pfr0_fp_caps),
+ MRS_FIELD(ID_AA64PFR0, EL3, false, MRS_LOWER, 0, id_aa64pfr0_el3),
+ MRS_FIELD(ID_AA64PFR0, EL2, false, MRS_LOWER, 0, id_aa64pfr0_el2),
+ MRS_FIELD(ID_AA64PFR0, EL1, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64pfr0_el1),
+ MRS_FIELD(ID_AA64PFR0, EL0, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64pfr0_el0),
MRS_FIELD_END,
};
@@ -1561,21 +1569,21 @@
};
static const struct mrs_field id_aa64pfr1_fields[] = {
- MRS_FIELD(ID_AA64PFR1, NMI, false, MRS_EXACT, id_aa64pfr1_nmi),
- MRS_FIELD(ID_AA64PFR1, CSV2_frac, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64PFR1, NMI, false, MRS_LOWER, 0, id_aa64pfr1_nmi),
+ MRS_FIELD(ID_AA64PFR1, CSV2_frac, false, MRS_LOWER, 0,
id_aa64pfr1_csv2_frac),
- MRS_FIELD(ID_AA64PFR1, RNDR_trap, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64PFR1, RNDR_trap, false, MRS_LOWER, 0,
id_aa64pfr1_rndr_trap),
- MRS_FIELD(ID_AA64PFR1, SME, false, MRS_EXACT, id_aa64pfr1_sme),
- MRS_FIELD(ID_AA64PFR1, MPAM_frac, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64PFR1, SME, false, MRS_LOWER, 0, id_aa64pfr1_sme),
+ MRS_FIELD(ID_AA64PFR1, MPAM_frac, false, MRS_LOWER, 0,
id_aa64pfr1_mpam_frac),
- MRS_FIELD(ID_AA64PFR1, RAS_frac, false, MRS_EXACT,
+ MRS_FIELD(ID_AA64PFR1, RAS_frac, false, MRS_LOWER, 0,
id_aa64pfr1_ras_frac),
- MRS_FIELD(ID_AA64PFR1, MTE, false, MRS_EXACT, id_aa64pfr1_mte),
- MRS_FIELD_HWCAP(ID_AA64PFR1, SSBS, false, MRS_LOWER, id_aa64pfr1_ssbs,
- id_aa64pfr1_ssbs_caps),
- MRS_FIELD_HWCAP_SPLIT(ID_AA64PFR1, BT, false, MRS_LOWER, MRS_EXACT,
- id_aa64pfr1_bt, id_aa64pfr1_bt_caps),
+ MRS_FIELD(ID_AA64PFR1, MTE, false, MRS_LOWER, 0, id_aa64pfr1_mte),
+ MRS_FIELD_HWCAP(ID_AA64PFR1, SSBS, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64pfr1_ssbs, id_aa64pfr1_ssbs_caps),
+ MRS_FIELD_HWCAP(ID_AA64PFR1, BT, false, MRS_LOWER,
+ MRS_FREEBSD, id_aa64pfr1_bt, id_aa64pfr1_bt_caps),
MRS_FIELD_END,
};
@@ -1685,23 +1693,23 @@
};
static const struct mrs_field id_aa64zfr0_fields[] = {
- MRS_FIELD_HWCAP(ID_AA64ZFR0, F64MM, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, F64MM, false, MRS_LOWER, MRS_USERSPACE,
id_aa64zfr0_f64mm, id_aa64zfr0_f64mm_caps),
- MRS_FIELD_HWCAP(ID_AA64ZFR0, F32MM, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, F32MM, false, MRS_LOWER, MRS_USERSPACE,
id_aa64zfr0_f32mm, id_aa64zfr0_f32mm_caps),
- MRS_FIELD_HWCAP(ID_AA64ZFR0, I8MM, false, MRS_LOWER, id_aa64zfr0_i8mm,
- id_aa64zfr0_i8mm_caps),
- MRS_FIELD_HWCAP(ID_AA64ZFR0, SM4, false, MRS_LOWER, id_aa64zfr0_sm4,
- id_aa64zfr0_sm4_caps),
- MRS_FIELD_HWCAP(ID_AA64ZFR0, SHA3, false, MRS_LOWER, id_aa64zfr0_sha3,
- id_aa64zfr0_sha3_caps),
- MRS_FIELD_HWCAP(ID_AA64ZFR0, BF16, false, MRS_LOWER, id_aa64zfr0_bf16,
- id_aa64zfr0_bf16_caps),
- MRS_FIELD_HWCAP(ID_AA64ZFR0, BitPerm, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, I8MM, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64zfr0_i8mm, id_aa64zfr0_i8mm_caps),
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, SM4, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64zfr0_sm4, id_aa64zfr0_sm4_caps),
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, SHA3, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64zfr0_sha3, id_aa64zfr0_sha3_caps),
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, BF16, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64zfr0_bf16, id_aa64zfr0_bf16_caps),
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, BitPerm, false, MRS_LOWER, MRS_USERSPACE,
id_aa64zfr0_bitperm, id_aa64zfr0_bitperm_caps),
- MRS_FIELD_HWCAP(ID_AA64ZFR0, AES, false, MRS_LOWER, id_aa64zfr0_aes,
- id_aa64zfr0_aes_caps),
- MRS_FIELD_HWCAP(ID_AA64ZFR0, SVEver, false, MRS_LOWER,
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, AES, false, MRS_LOWER, MRS_USERSPACE,
+ id_aa64zfr0_aes, id_aa64zfr0_aes_caps),
+ MRS_FIELD_HWCAP(ID_AA64ZFR0, SVEver, false, MRS_LOWER, MRS_USERSPACE,
id_aa64zfr0_svever, id_aa64zfr0_svever_caps),
MRS_FIELD_END,
};
@@ -1767,17 +1775,19 @@
};
static const struct mrs_field id_isar5_fields[] = {
- MRS_FIELD(ID_ISAR5, VCMA, false, MRS_LOWER, id_isar5_vcma),
- MRS_FIELD(ID_ISAR5, RDM, false, MRS_LOWER, id_isar5_rdm),
- MRS_FIELD_HWCAP(ID_ISAR5, CRC32, false, MRS_LOWER, id_isar5_crc32,
- id_isar5_crc32_caps),
- MRS_FIELD_HWCAP(ID_ISAR5, SHA2, false, MRS_LOWER, id_isar5_sha2,
- id_isar5_sha2_caps),
- MRS_FIELD_HWCAP(ID_ISAR5, SHA1, false, MRS_LOWER, id_isar5_sha1,
- id_isar5_sha1_caps),
- MRS_FIELD_HWCAP(ID_ISAR5, AES, false, MRS_LOWER, id_isar5_aes,
- id_isar5_aes_caps),
- MRS_FIELD(ID_ISAR5, SEVL, false, MRS_LOWER, id_isar5_sevl),
+ MRS_FIELD(ID_ISAR5, VCMA, false, MRS_LOWER,MRS_USERSPACE,
+ id_isar5_vcma),
+ MRS_FIELD(ID_ISAR5, RDM, false, MRS_LOWER, MRS_USERSPACE, id_isar5_rdm),
+ MRS_FIELD_HWCAP(ID_ISAR5, CRC32, false, MRS_LOWER, MRS_USERSPACE,
+ id_isar5_crc32, id_isar5_crc32_caps),
+ MRS_FIELD_HWCAP(ID_ISAR5, SHA2, false, MRS_LOWER, MRS_USERSPACE,
+ id_isar5_sha2, id_isar5_sha2_caps),
+ MRS_FIELD_HWCAP(ID_ISAR5, SHA1, false, MRS_LOWER, MRS_USERSPACE,
+ id_isar5_sha1, id_isar5_sha1_caps),
+ MRS_FIELD_HWCAP(ID_ISAR5, AES, false, MRS_LOWER, MRS_USERSPACE,
+ id_isar5_aes, id_isar5_aes_caps),
+ MRS_FIELD(ID_ISAR5, SEVL, false, MRS_LOWER, MRS_USERSPACE,
+ id_isar5_sevl),
MRS_FIELD_END,
};
@@ -1830,14 +1840,19 @@
};
static const struct mrs_field mvfr0_fields[] = {
- MRS_FIELD(MVFR0, FPRound, false, MRS_LOWER, mvfr0_fpround),
- MRS_FIELD(MVFR0, FPSqrt, false, MRS_LOWER, mvfr0_fpsqrt),
- MRS_FIELD(MVFR0, FPDivide, false, MRS_LOWER, mvfr0_fpdivide),
- MRS_FIELD(MVFR0, FPTrap, false, MRS_LOWER, mvfr0_fptrap),
- MRS_FIELD_HWCAP(MVFR0, FPDP, false, MRS_LOWER, mvfr0_fpdp,
- mvfr0_fpdp_caps),
- MRS_FIELD(MVFR0, FPSP, false, MRS_LOWER, mvfr0_fpsp),
- MRS_FIELD(MVFR0, SIMDReg, false, MRS_LOWER, mvfr0_simdreg),
+ MRS_FIELD(MVFR0, FPRound, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr0_fpround),
+ MRS_FIELD(MVFR0, FPSqrt, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr0_fpsqrt),
+ MRS_FIELD(MVFR0, FPDivide, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr0_fpdivide),
+ MRS_FIELD(MVFR0, FPTrap, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr0_fptrap),
+ MRS_FIELD_HWCAP(MVFR0, FPDP, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr0_fpdp, mvfr0_fpdp_caps),
+ MRS_FIELD(MVFR0, FPSP, false, MRS_LOWER, MRS_USERSPACE, mvfr0_fpsp),
+ MRS_FIELD(MVFR0, SIMDReg, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr0_simdreg),
MRS_FIELD_END,
};
@@ -1898,16 +1913,19 @@
};
static const struct mrs_field mvfr1_fields[] = {
- MRS_FIELD_HWCAP(MVFR1, SIMDFMAC, false, MRS_LOWER, mvfr1_simdfmac,
- mvfr1_simdfmac_caps),
- MRS_FIELD(MVFR1, FPHP, false, MRS_LOWER, mvfr1_fphp),
- MRS_FIELD(MVFR1, SIMDHP, false, MRS_LOWER, mvfr1_simdhp),
- MRS_FIELD(MVFR1, SIMDSP, false, MRS_LOWER, mvfr1_simdsp),
- MRS_FIELD(MVFR1, SIMDInt, false, MRS_LOWER, mvfr1_simdint),
- MRS_FIELD_HWCAP(MVFR1, SIMDLS, false, MRS_LOWER, mvfr1_simdls,
- mvfr1_simdls_caps),
- MRS_FIELD(MVFR1, FPDNaN, false, MRS_LOWER, mvfr1_fpdnan),
- MRS_FIELD(MVFR1, FPFtZ, false, MRS_LOWER, mvfr1_fpftz),
+ MRS_FIELD_HWCAP(MVFR1, SIMDFMAC, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr1_simdfmac, mvfr1_simdfmac_caps),
+ MRS_FIELD(MVFR1, FPHP, false, MRS_LOWER, MRS_USERSPACE, mvfr1_fphp),
+ MRS_FIELD(MVFR1, SIMDHP, false, MRS_LOWER, MRS_USERSPACE, mvfr1_simdhp),
+ MRS_FIELD(MVFR1, SIMDSP, false, MRS_LOWER, MRS_USERSPACE, mvfr1_simdsp),
+ MRS_FIELD(MVFR1, SIMDInt, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr1_simdint),
+ MRS_FIELD_HWCAP(MVFR1, SIMDLS, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr1_simdls, mvfr1_simdls_caps),
+ MRS_FIELD(MVFR1, FPDNaN, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr1_fpdnan),
+ MRS_FIELD(MVFR1, FPFtZ, false, MRS_LOWER, MRS_USERSPACE,
+ mvfr1_fpftz),
MRS_FIELD_END,
};
#endif /* COMPAT_FREEBSD32 */
@@ -2208,15 +2226,23 @@
fields = user_regs[i].fields;
for (j = 0; fields[j].type != 0; j++) {
+ u_int type;
+
/* Update the FreeBSD userspace ID register view */
+ type = ((fields[j].type & MRS_FREEBSD) != 0) ?
+ fields[j].type :
+ (MRS_EXACT | (fields[j].type & MRS_SAFE_MASK));
user_reg = update_special_reg_field(user_reg,
- fields[j].type >> MRS_TYPE_FBSD_SHIFT, value,
- fields[j].width, fields[j].shift, fields[j].sign);
+ type, value, fields[j].width, fields[j].shift,
+ fields[j].sign);
/* Update the Linux userspace ID register view */
+ type = ((fields[j].type & MRS_LINUX) != 0) ?
+ fields[j].type :
+ (MRS_EXACT | (fields[j].type & MRS_SAFE_MASK));
l_user_reg = update_special_reg_field(l_user_reg,
- fields[j].type >> MRS_TYPE_LNX_SHIFT, value,
- fields[j].width, fields[j].shift, fields[j].sign);
+ type, value, fields[j].width, fields[j].shift,
+ fields[j].sign);
/* Update the kernel ID register view */
kern_reg = update_lower_register(kern_reg, value,

File Metadata

Mime Type
text/plain
Expires
Tue, Nov 4, 7:21 PM (3 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24771513
Default Alt Text
D47121.id144906.diff (29 KB)

Event Timeline