11-28-2025

64 bit ARM architecture (aarch64)

ARMv8 implements aarch64. It generally also will run 32 bit ARM executables. Every chip I have seen boots up running 64 bit, but this is implementation dependent (so they say).

64 bit ARM is known as AArch64 (and correspondingly 32 bit ARM as AArch32, but you rarely see that).

AArch64 is quite different from AArch32. The obvious and expected thing is that registers are 64 bit (but you can get at them in a 32 bit fashion as well). You also get more of them (32 rather than 16). And the stack pointer is now register 31 all of the time (rather than just being r13 by convention). On top of that, register 31 serves as a zero register for most instructions. In ARM 64 (properly called AArch64) the PC is its own special thing and not one of the registers. In fact, the PC is not accessible in a general way in AArch64.
These are just a few of many differences.

Specific topics

My hardware

Clearly the 4 core A53 module is a building block many chips are built around.

For the record, by experiment I have found that the RK3399 fires up running an A53 core. The more power hungry A72 cores are left parked.

Arm Trusted Firmware (ATF)

The instruction set

Someday I will work up my own concise summary with more details, but for now here are some interesting links:

And this nice presentation: As important as the instruction set itself are the details about how compilers make use of the instruction set. In other words, the details of the ABI are important and interesting.
Feedback? Questions? Drop me a line!

Tom's Computer Info / tom@mmto.org