-
Notifications
You must be signed in to change notification settings - Fork 17
aarch64memo
tyfkda edited this page Jun 23, 2024
·
14 revisions
- Reference: Arm Architecture Reference Manual for A-profile architecture
- Releases · ARM-software/abi-aa
- Writing ARM64 Code for Apple Platforms | Apple Developer Documentation Mac向け
- 日本語:Arm64(ARMv8) Assembly Programming (00)
-
mov dst, src
: dst <- src -
ldr dst, src
: dst <- src -
str src, dst
: src -> dst -
add dst, opr1, opr2
: dst <- opr1 + opr2
-
X0
~X30
-
X31
=SP
orXZR
(Zero register) -
X30
= Procedure link register (Return address) -
X29
= Frame Pointer
Calling convention # ARM(A64) - Wikipedia
Regs. | Purpose |
---|---|
X0 ~X7
|
Function parameters |
X9 ~X15
|
Local variables: (Caller save) |
X18 |
Platform Reserved |
X19 ~X29
|
Callee save |
X29 |
Frame pointer (FP ) |
X30 |
Procedure link register (LR ) |
X31 |
Stack pointer (SP ) |
X16, X17 はそれぞれ IP0 (1st intro-procedure-call scrach register), IP1 と呼ばれていて、 リンカによって使用されることがある。 すなわち、サブルーチンコールやbranch命令の前後で値がダイナミックリンカによって値が変更される場合がある。 それ以外の場合はtemporal registerとして使っても構わない。(Arm64のbranch 命令は前後1MByteの範囲しか直接飛べない)
X18
: Platform Reserved, do not use!
- Writing ARM64 code for Apple platforms | Apple Developer Documentation
- assembly - Consequence of violating macOS's ARM64 calling convention - Stack Overflow
- 構造体が格納されているアドレスをレジスタで渡してるっぽい
-
x8
に格納先アドレスを渡してるっぽい
Variaic function parameters: 常にスタック経由で渡される。
Addressing Architectural Differences in Your macOS Code | Apple Developer Documentation
Don’t Redeclare a Function to Have Variable Parameters
... On arm64, the compiler always places variadic parameters on the stack, regardless of whether registers are available.
- pdf: ELF for the ARM® 64-bit Architecture (AArch64)
- aaelf64/aaelf64.rst: ELF for the Arm® 64-bit Architecture (AArch64)
//