【发布时间】:2015-03-01 07:44:03
【问题描述】:
我正在尝试使用 Xcode6.1.1(我猜是 GNU 汇编器)编译代码,目标是 iPad air2(aarch64)
.macro saving_callee_prsv_regi used_regi_index
.if \used_regi_index >= 19
i = 19
.rept \used_regi_index - 19
str x\i,[sp,#-8*(\i-18)] // fail here: x\i
i = i + 1
.endr
.endif
.endm
但是上面的代码编译失败。我意识到“i”是符号而不是值,我找到“.irp symbol,values”并编写了一个新版本。
.macro saving_callee_prsv_regi_2 used_regi_index
.if \used_regi_index >= 19
i = 19
.rept \used_regi_index - 19
.irp idx, i // fail here, "i" is expression not value?!
str x\idx,[sp,#-8*(\idx-18)]
i = i + 1
.endr
.endif
.endm
虽然新代码仍然无法通过编译,但我的预期结果是:
当 save_callee_prsv_regi 19 -->
str x19,[sp,#-8]
当 save_callee_prsv_regi 22 -->
str x19,[sp,#-8]
str x20,[sp,#-16]
str x21,[sp,#-24]
str x22,[sp,#-32]
有什么建议吗?谢谢!
【问题讨论】:
标签: xcode assembly gnu-assembler