How CCMP reduce the pressure of branch predictor on aarch64 – 属于CYY自己的世界
ARM64 にこんな命令があるんだ。
int foo(int a, int b, int c, int d) {
if (a <= b && c == d) {
return a + c;
}
else {
return b + d;
}
}
これが clang で
cmp w2, w3
add w8, w2, w0
add w9, w3, w1
ccmp w0, w1, #0, eq
csel w0, w8, w9, le
ret
こうなる。 RV64GB_zicond だと
slt a4, a1, a0
xor a5, a2, a3
addw a0, a2, a0
addw a1, a3, a1
seqz a2, a5
andn a2, a2, a4
czero.nez a1, a1, a2
czero.eqz a0, a0, a2
or a0, a0, a1
ret