On Sat, 2 Jul 2022 at 15:19, Richard Henderson <richard.hender...@linaro.org> wrote: > > On 7/1/22 01:11, Peter Maydell wrote: > > +static inline bool isar_feature_any_doublelock(const ARMISARegisters *id) > > +{ > > + /* > > + * We can't just OR together the aa32 and aa64 checks, because > > + * if there is no AArch64 support the aa64 function will default > > + * to returning true for a zero id_aa64dfr0. > > + * We use "is id_aa64pfr0 non-zero" as a proxy for "do we have > > + * the AArch64 ID register values in id", because it's always the > > + * case that ID_AA64PFR0_EL1.EL0 at least will be non-zero. > > + */ > > + if (id->id_aa64pfr0) { > > + return isar_feature_aa64_doublelock(id); > > + } > > + return isar_feature_aa32_doublelock(id); > > +} > > If you're going to rely on this, you need to clear this register for -cpu > aarch64=off.
Why? The AArch32 version of the CPU is going to either implement or not implement DoubleLock the same as the AArch64 version: the answer will be the same in both ID registers. We only need to avoid looking at the AA64 ID value if we don't have it at all. thanks -- PMM