【发布时间】:2015-12-02 12:02:50
【问题描述】:
我对在 aarch64 汇编器上实现“switch”运算符的方式很感兴趣。 在 arm32 平台上,我使用了类似的东西
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相对地址计算”。
标签: performance assembly arm cpu-registers arm64