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.
aarch64
only supports the newA64
instruction set, where all instructions have the fixed size of of 32 bits.aarch32
supports theA32
andT32
instruction sets. These are updated versions of thearmv7
instruction sets, kept backwards compatible allowingarmv7
programs to run onarmv8
.In
armv7
the instruction setsA32
anT32
were calledarm
andthumb
respectively.
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 -> aarch32
can only occur when switching from higher EL to lower EL.aarch32 -> aarch64
can 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.