Мне интересно, как реализовать оператор «switch» на ассемблере aarch64. На arm32 платформах я использовал что-то вродереализация коммутатора; рука; ассемблер; aarch64; arm64
ldr pc, [pc, ta, LSL#2]
nop // alignment
.int .L.case1
.int .L.case2
...
.int .L.caseN
Но с 64-битной версии есть много ограничений на «ПК» регистр использования, такая реализация не работает больше.
Кажется, что самый простой способ заключается в использовании пары сравнения и отраслевых операции, как
cmp ta, #1
b.eq .L.case1
cmp ta, #2
b.eq .L.case2
...
Но иногда бывает до десятков случаев, и это приведет к значительной задержке до достижения последних «дел ».
Не могли бы вы поделиться своими идеями о том, как быстро включить коммутатор на aarch64.
Спасибо :)
адр/adrp может быть использован для «PC- вычисление относительного адреса ". – auselen