armv8
keywords: aarch64, arm64, A64, aarch32, A32, T32, abi
The armv8 architecture introduces support for 64-bit and defines two
execution states aarch64 and aarch32.
Implementations are not required to implement all execution states for all
exception levels (EL). For example the coretex-a32 only
implements aarch32, while the coretex-a34 only implements
aarch64.
The execution states support different instruction sets.
aarch64only supports the newA64instruction set, where all instructions have the fixed size of of 32 bits.aarch32supports theA32andT32instruction sets. These are updated versions of thearmv7instruction sets, kept backwards compatible allowingarmv7programs to run onarmv8.In
armv7the instruction setsA32anT32were calledarmandthumbrespectively.
A program always runs in either the aarch64 or the aarch32 execution
state, but never in a mixture of both. Transitions between execution states
only occur when raising or lowering the exception level.
aarch64 -> aarch32can only occur when switching from higher EL to lower EL.aarch32 -> aarch64can only occur when switching from lower EL to higher EL.
The following figure depicts which execution state Transitions are allowed.
(user) EL0 ^ |
(os) EL1 | 32->64
(hypervisor) EL2 64->32 |
(secure) EL3 | v
This means for example, an os running in aarch32 can only support aarch32
user applications, while an os running in aarch64 can support
aarch32 / aarch64 user applications.