首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARMV8指令集的CSET指令

ARMV8指令集的CSET指令
EN

Stack Overflow用户
提问于 2015-08-05 10:55:26
回答 2查看 2.5K关注 0票数 3

ARM架构的CSET指令是如何工作的?它在哪些寄存器上比较标准条件检查?请帮助。

EN

回答 2

Stack Overflow用户

发布于 2015-08-05 11:20:42

根据ARMv8 ISA

CSET Wd, cond

条件集: Wd = if cond则为1否则为0。

这意味着该指令执行条件集指令。什么是条件集指令?

条件集:在0和1或-1之间有条件地选择,例如将条件标志具体化为通用寄存器中的布尔值或掩码。

您可以将其转换为一个简单的三元操作:Wd = cond ? 1 : 0。因此,如果condtrue,则为Wd = 1。否则,返回Wd = 0

什么是条件

条件-与AArch32中含义相同的标准ARM条件EQ、NE、CS|HS、CC|LO、MI、PL、VS、VC、HI、LS、GE、LT、GT、LE、AL或NV。请注意,尽管AL和NV表示不同的编码,但在AArch32中,它们都被解释为“始终为真”条件。除非声明,否则AArch64指令不设置或使用条件标志,而是那些设置所有条件标志的指令。如果在伪代码表达式中使用,此符号表示布尔值为指定条件测试的真。

票数 7
EN

Stack Overflow用户

发布于 2017-05-21 20:43:32

代码语言:javascript
复制
int yesOrNo(int value) {
    return value != 0;
}

英特尔:

代码语言:javascript
复制
   0:   31 c0                   xor    %eax,%eax
   2:   85 ff                   test   %edi,%edi
   4:   0f 95 c0                setne  %al
   7:   c3                      retq

拇指模式下的手臂:

代码语言:javascript
复制
   0:   1e43            subs    r3, r0, #1
   2:   4198            sbcs    r0, r3
   4:   4770            bx      lr

在arm模式下进行arm:

代码语言:javascript
复制
   0:   e2900000        adds    r0, r0, #0
   4:   13a00001        movne   r0, #1
   8:   e12fff1e        bx      lr

aarch64:

代码语言:javascript
复制
   0:   6b1f001f        cmp     w0, wzr
   4:   1a9f07e0        cset    w0, ne
   8:   d65f03c0        ret

它要透明得多,而且在任何情况下都比上面的任何一个都要好。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31822662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档