Skip to content

Arm用Goアセンブリのサフィックス

Arm用のGoアセンブリでは MOV 命令の末尾に .W.P サフィックスを利用できる。プレインデックス(pre-indexed, pre-increment)とポストインデックス(post-indexed, post-increment)を意味する。

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 等の汎用レジスタのみ。

MOVx.P 命令はポストインデックスを意味する。ほとんどプレインデックスと同じだが、事後にアドレスを加算する点が異なる。

MOVD.P -16(RSP), R30 // ldr x30, [sp], #-16
MOVD.P R30, -16(RSP) // str x30, [sp], #-16