条件分支是不是更新 ARMv8 中的标志

Posted

技术标签:

【中文标题】条件分支是不是更新 ARMv8 中的标志【英文标题】:Do conditional branches update flags in ARMv8条件分支是否更新 ARMv8 中的标志 【发布时间】:2017-04-10 22:46:48 【问题描述】:

我正在尝试实现类似于以下 C 代码的功能:

if(x<0)

    <code A>

else if(x == 0)

    <code B>

else        //x > 0

    <code C>

postIf code

所以我想知道是否可以通过在 ARMv8、AArch64 指令集中执行以下操作来做到这一点:

    cmp x_r, 0     //x_r macro for x19
    b.lt neg
    b.gt pos

    <code B>
    b postIf

neg:
    <code A>
    b postIf
pos:
    <code C>
postIf:
    <postIf Code>

这行得通吗?检查条件分支后标志是否保持设置(或不设置)?

【问题讨论】:

arm 文档表明分支不会修改标志。他们还列出了修改标志的指令。 同时尝试一个测试程序,您会看到编译器假定/知道标志不受影响。 ARMv8 中有很多条件可以帮助你。 element14.com/community/servlet/JiveServlet/previewBody/… 【参考方案1】:

是的,这应该可以正常工作。分支指令不修改标志。

【讨论】:

以上是关于条件分支是不是更新 ARMv8 中的标志的主要内容,如果未能解决你的问题,请参考以下文章

3句话,让你学会Python条件与分支,那是不可能的……

Java中的switch分支注意点

arm 中b 与bne的区别?

脚本语句介绍和练习题一

Subversion 是不是支持分支的别名

Mercurial 分支与编译标志:一个代码库——多个产品