ARMV8指令集的CSET指令

ARMV8指令集的CSET指令,arm,Arm,ARM体系结构的CSET指令是如何工作的?它比较了哪些寄存器的标准条件检查?请帮助。根据: CSET Wd,cond 条件集:Wd=如果为条件,则为1,否则为0 这意味着该指令执行条件集指令。什么是条件集指令 条件集:有条件地选择0和1或-1之间的值,例如,在通用寄存器中将条件标志具体化为布尔值或掩码 您可以将其转换为一个简单的三元操作:Wd=cond?1:0。因此,如果cond为true,Wd=1。否则,Wd=0 康德是什么 cond-标准臂状态EQ、NE、CS | HS、CC | LO、MI

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

根据:

CSET Wd,cond

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

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

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

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

康德是什么

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

英特尔:

   0:   31 c0                   xor    %eax,%eax
   2:   85 ff                   test   %edi,%edi
   4:   0f 95 c0                setne  %al
   7:   c3                      retq
拇指模式下的手臂:

   0:   1e43            subs    r3, r0, #1
   2:   4198            sbcs    r0, r3
   4:   4770            bx      lr
arm模式下的arm:

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

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

哪一个条件更透明,在任何情况下都比上面任何一个条件(如LT和GT)更好?它们是在哪个寄存器上执行的?它们是在操作数上执行的吗?就像其他条件一样,该条件是根据PSTATE中的条件标志来计算的,这是由以前的比较(或其他标志设置)设置的我正在看一个从objdump反汇编的程序,它使用了大量的
csetx3,hi//hi=pmore
   0:   6b1f001f        cmp     w0, wzr
   4:   1a9f07e0        cset    w0, ne
   8:   d65f03c0        ret