64bit ARMアセンブラのHello worldのソースコードをマクロを使って少し書き直してみた。
.global main .text .align 4 .macro adrl reg,label adrp \reg,\label add \reg,\reg,:lo12:\label .endm main: sub sp,sp,16 str x30,[sp] adrl x0,message bl puts ldr x30,[sp] add sp,sp,16 mov w0,0 ret message: .string "Hello world.\n"
文字列”Hello world”のアドレスmessageをx0レジスタに入れるのに
adrp x0,message add x0,x0,#:lo12:message
と書いていたが、これをadrl疑似命令で記述したかった。
しかし、adrl疑似命令はNDKのアセンブラではサポートされていないので、アセンブラのマクロ機能を使って記述してみた。
.macro adrl reg,label adrp \reg,\label add \reg,\reg,:lo12:\label .endm
と、adrl疑似命令をマクロで定義して、
adrl x0,message
このように書くことで、adrp命令とadd命令で2行書いていた部分を簡潔に1行で記述することができる。