我对在aarch64汇编器上实现'switch'操作符的方式感兴趣。 在ARM32平台,我用类似切换执行;臂;汇编; aarch64; arm64
ldr pc, [pc, ta, LSL#2]
nop // alignment
.int .L.case1
.int .L.case2
...
.int .L.caseN
但由于64位版本有“PC”有很多限制的寄存器使用,这样的实现不工作了。
看来,最简单的方法是使用对比较和分支操作,如
cmp ta, #1
b.eq .L.case1
cmp ta, #2
b.eq .L.case2
...
但有时也有长达十几例,它到达最后一个“的情况下才将导致显著延迟”。
请您分享一下您的想法如何在aarch64上实现快速切换。
谢谢:)
ADR/ADRP可用于“PC-相对地址计算“。 – auselen