对于64位ARM,为A64(来自ARM 64位体系结构的过程调用标准)
A64指令集可见31个64位通用(整数)寄存器。 这些标记为r0-r30。 在64位环境中,通常使用名称x0-x30来引用这些寄存器。 在32位环境中,寄存器是使用w0-w30指定的。 此外,堆栈指针寄存器SP可以与数量有限的指令一起使用。
SP堆栈指针
r30 LR链接寄存器
r29 FP框架指针
r19…r28被调用者保存的寄存器
r18平台寄存器(如果需要); 否则为临时寄存器。
r17 IP1第二个过程内调用临时寄存器(可以使用通过呼叫单板和PLT代码); 在其他时间可用作临时注册。
r16 IP0第一个过程内调用暂存寄存器(可由调用使用单板和PLT代码); 在其他时间可用作临时注册。
r9…r15临时寄存器
r8间接结果位置寄存器
r0…r7参数/结果寄存器
前八个寄存器r0-r7用于将参数值传递到子例程中并从函数返回结果值。 它们还可以用于在例程中保留中间值(但通常仅在子例程调用之间)。
链接程序可以将寄存器r16(IP0)和r17(IP1)用作例程与其调用的任何子例程之间的暂存寄存器。 它们也可以在例程中使用,以保存子例程调用之间的中间值。
寄存器r18的作用是特定于平台的。 如果平台ABI需要专用的通用寄存器来承载过程间状态(例如,线程上下文),则应为此目的使用该寄存器。 如果平台ABI没有此类要求,则应使用r18作为附加的临时寄存器。 平台ABI规范必须记录该寄存器的用法。
SIMD
ARM 64位体系结构还具有另外32个寄存器v0-v31,可由SIMD和浮点运算使用。 寄存器的确切名称将更改,表明访问的大小。
注意:与AArch32不同,在AArch64中,SIMD和浮点寄存器的128位和64位视图在较窄的视图中不与多个寄存器重叠,因此q1,d1和s1都引用该寄存器中的同一条目 银行。
前八个寄存器v0-v7用于将参数值传递到子例程中并从函数返回结果值。 它们还可以用于在例程中保留中间值(但通常仅在子例程调用之间)。
被调用者必须在子例程调用之间保留v8-v15寄存器。 其余的寄存器(v0-v7,v16-v31)不需要保留(或应由调用方保留)。 此外,仅需要保留v8-v15中存储的每个值的最低64位; 调用方有责任保留较大的值。