ARM64
This is just a quick reference sheet for developers.
ARM64 is not currently implemented.
- Code Alignment: 4 bytes
Registers
| Register | ARM64 (System V) | Volatile/Non-Volatile |
|---|---|---|
x0-x7 |
Parameter/Result Registers | Volatile |
x8 |
Indirect result location register | Volatile |
x9-x15 |
Local Variables | Volatile |
x16-x17 |
Intra-procedure-call scratch registers | Volatile |
x18 |
Platform register, conventionally the TLS base | Volatile |
x19-x28 |
Registers saved across function calls | Non-Volatile |
x29 |
Frame pointer | Non-Volatile |
x30 |
Link register | Volatile |
sp |
Stack pointer | Non-Volatile |
xzr |
Zero register, always reads as zero | N/A |
x31 |
Stack pointer or zero register, contextually reads as either sp or xzr |
N/A |
For floating point / SIMD registers:
| Register | ARM64 (System V) | Volatile/Non-Volatile |
|---|---|---|
v0-v7 |
Parameter/Result registers | Volatile |
v8-v15 |
Temporary registers | Volatile |
v16-v31 |
Registers saved across function calls | Non-Volatile |
Calling Convention Inference
It is recommended library users manually specify conventions in their hook functions."
When the calling convention of <your function> is not specified, wrapper libraries must insert
the appropriate default convention in their wrappers.
Rust
aarch64-unknown-linux-gnu: SystemVaarch64-pc-windows-msvc: Windows ARM64
C
Linux ARM64: SystemVWindows ARM64: Windows ARM64