ARM架构的CSET指令是如何工作的?它在哪些寄存器上比较标准条件检查?请帮助。
发布于 2015-08-05 11:20:42
根据ARMv8 ISA
CSET Wd, cond
条件集: Wd = if cond则为1否则为0。
这意味着该指令执行条件集指令。什么是条件集指令?
条件集:在0和1或-1之间有条件地选择,例如将条件标志具体化为通用寄存器中的布尔值或掩码。
您可以将其转换为一个简单的三元操作:Wd = cond ? 1 : 0。因此,如果cond为true,则为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指令不设置或使用条件标志,而是那些设置所有条件标志的指令。如果在伪代码表达式中使用,此符号表示布尔值为指定条件测试的真。
发布于 2017-05-21 20:43:32
int yesOrNo(int value) {
return value != 0;
}英特尔:
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 lraarch64:
0: 6b1f001f cmp w0, wzr
4: 1a9f07e0 cset w0, ne
8: d65f03c0 ret它要透明得多,而且在任何情况下都比上面的任何一个都要好。
https://stackoverflow.com/questions/31822662
复制相似问题