The ARMv8 Architecture Reference Manual lists miles of special registers, some of which allow the programmer to detect the availability of CPU features at runtime.
Is there such a register telling the programmer if the AArch32 execution state is supported? One thing I found is ID_PFR0_EL1
which tells what variants of the AArch32 instruction set are supported, but it does not seem to say if the instruction set is supported at all.
What register or other thing am I looking for?
You're looking for
ID_AA64PFR0_EL1
.From the manual, page D13-3253:
And yes, there are ARMv8 CPUs that do not support AArch32 at all. Apple's A11 and later is an example.