ARMV8指令集的CSET指令

时间:2015-08-05 02:55:26

标签: arm

ARM体系结构的CSET指令如何工作?它比较了哪些寄存器的标准条件检查?请帮忙。

2 个答案:

答案 0 :(得分:2)

根据ARMv8 ISA

  

CSET Wd, cond

     

条件集:Wd =如果cond则为1,否则为0。

表示指令执行条件集指令。什么是条件集指令?

  

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

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

什么是 cond

  

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

答案 1 :(得分:2)

int yesOrNo(int value){返回值!= 0; }

英特尔:

   0:   1e43            subs    r3, r0, #1
   2:   4198            sbcs    r0, r3
   4:   4770            bx      lr

手臂拇指模式:

   0:   e2900000        adds    r0, r0, #0
   4:   13a00001        movne   r0, #1
   8:   e12fff1e        bx      lr

手臂模式:

   0:   6b1f001f        cmp     w0, wzr
   4:   1a9f07e0        cset    w0, ne
   8:   d65f03c0        ret

aarch64:

try:
    obj.a = data['a']
    obj.b = data['b']
    obj.c = data['c']
except KeyError: 
    #Oops our data didn't have all we needed.

这是一个非常透明,在任何情况下都比上述任何一个更好的

相关问题