ARMV8指令集的CSET指令
ARM体系结构的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
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