Skip to content

Latest commit

 

History

History
28 lines (20 loc) · 1.9 KB

ARM64_Register.md

File metadata and controls

28 lines (20 loc) · 1.9 KB

ARM64 레지스터

$x0 = ORRXrs $xzr, $x20
BL swift_release

$xzr (zero register)로 비트 OR 연산 (ORR 명령어) 을 수행하여 레지스터 $x20 (source register) 에 있는 값을 레지스터 $x0 (destination register) 로 이동한다.

BL swift_release 는 첫번째 인자로 $x0 을 받는 듯 하다. 그래서 $x20 에 있던 포인터 (heap object 를 가리키던) 를 해제시키려면 우선 $x0 으로 옮겨야 하는 듯.

참고로 Swift 5부터 64 비트 아키텍처에 대한 호출 규칙 레지스터 할당 은 ABI 안정성 선언문 에 설명 된 Context register 및 Error return register 를 추가하여 기존 표준 을 기반으로 한다.

Register Purpose ARM64 x86_64
Context register (self) x20 r13
Error return register x21 r12
Struct return pointer x8 rax
Float call arguments v0 … v7 xmm0 … xmm7
Integer call arguments x0 … x7 rdi, rsi, rdx, rcx, r8, r9
Float return v0 … v3 xmm0 … xmm3
Integer return x0 … x3 rax, rdx, rcx, r8

출처