Arm用Goアセンブリのサフィックス
Arm用のGoアセンブリでは MOV 命令の末尾に .W と .P サフィックスを利用できる。プレインデックス(pre-indexed, pre-increment)とポストインデックス(post-indexed, post-increment)を意味する。
プレインデックス
Section titled “プレインデックス”MOVx.W 命令はプレインデックスを意味する。データの向きによって ldr または str 命令に置き換わる。
MOVD.W -16(RSP), R30 // ldr x30, [sp,#-16]!MOVD.W R30, -16(RSP) // str x30, [sp,#-16]!これは sp -= 16 を事前に計算して、そのアドレスに対して命令を発行する。対象となるレジスタは SP または R0 等の汎用レジスタのみ。
ポストインデックス
Section titled “ポストインデックス”MOVx.P 命令はポストインデックスを意味する。ほとんどプレインデックスと同じだが、事後にアドレスを加算する点が異なる。
MOVD.P -16(RSP), R30 // ldr x30, [sp], #-16MOVD.P R30, -16(RSP) // str x30, [sp], #-16