陳 力*_*陳 力 1 assembly if-statement conditional-statements arm64
我知道armv7可以使用条件代码进行加载/存储,例如ldrne/streq。但A64不允许指令有条件执行。那么我怎样才能在arm64中存档这个:
ands tmp1, dstend, 7 # set nzcv flag with ands
# if not zero, ldr w6, [srcend, -4]!, str w6, [dstend, -4]!
# else, do nothing and goes on
...
Run Code Online (Sandbox Code Playgroud)
每条指令的预测是一个使高性能 ARM CPU 更难实现的功能,尤其是在乱序执行的情况下。对于 AArch64,它被有意删除。(为什么后来的ARM指令集中不存在条件执行指令?引用供应商自己的理由)
如果您需要有副作用/可能出现故障的东西(例如存储和加载)是有条件的,通常需要分支。
我能想到的唯一值得考虑的无分支选项是使用csel
指向虚拟位置(例如在堆栈上)与真实位置的指针。然后您实际上仍然加载和存储,但不是您关心的位置。这可能更糟,除非分支错误预测惩罚很高并且分支很难预测。
归档时间: |
|
查看次数: |
817 次 |
最近记录: |