ghc-9.14.1: MachRegs/arm64.h
#pragma once
/* -----------------------------------------------------------------------------
The ARMv8/AArch64 ABI register mapping
The AArch64 provides 31 64-bit general purpose registers
and 32 128-bit SIMD/floating point registers.
General purpose registers (see Chapter 5.1.1 in ARM IHI 0055B)
Register | Special | Role in the procedure call standard
---------+---------+------------------------------------
SP | | The Stack Pointer
r30 | LR | The Link Register
r29 | FP | The Frame Pointer
r19-r28 | | Callee-saved registers
r18 | | The Platform Register, if needed;
| | or temporary register
r17 | IP1 | The second intra-procedure-call temporary register
r16 | IP0 | The first intra-procedure-call scratch register
r9-r15 | | Temporary registers
r8 | | Indirect result location register
r0-r7 | | Parameter/result registers
FPU/SIMD registers
s/d/q/v0-v7 Argument / result/ scratch registers
s/d/q/v8-v15 callee-saved registers (must be preserved across subroutine calls,
but only bottom 64-bit value needs to be preserved)
s/d/q/v16-v31 temporary registers
----------------------------------------------------------------------------- */
#define REG(x) __asm__(#x)
#define REG_Base r19
#define REG_Sp r20
#define REG_Hp r21
#define REG_R1 r22
#define REG_R2 r23
#define REG_R3 r24
#define REG_R4 r25
#define REG_R5 r26
#define REG_R6 r27
#define REG_SpLim r28
#define REG_F1 s8
#define REG_F2 s9
#define REG_F3 s10
#define REG_F4 s11
#define REG_D1 d12
#define REG_D2 d13
#define REG_D3 d14
#define REG_D4 d15
#define REG_XMM1 q4
#define REG_XMM2 q5
#define CALLER_SAVES_XMM1
#define CALLER_SAVES_XMM2