【发布时间】: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/…