Я пытаюсь скомпилировать код, используя Xcode6.1.1 (я думаю с GNU ассемблер), с целью для IPad AIR2 (aarch64)Как повторить инструкцию в сборщике GNU на Xcode 6.1.1?
.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
в то время как новый код еще не выдержало компиляции, мой ожидаемый результат:
когда saving_callee_prsv_regi 19 ->
str x19,[sp,#-8]
когда saving_callee_prsv_regi 22 ->
str x19,[sp,#-8]
str x20,[sp,#-16]
str x21,[sp,#-24]
str x22,[sp,#-32]
Любое предложение? Благодаря!
спасибо за ответ, это работает! В то время как из aar64 ABI только r19 ~ r28 является зарегистрированным регистром, r29: FP r30: LR r31: регистр стека, я боюсь, что это может быть задача не для того, чтобы спасти их. Я неправильно понял, что? – charlie