てがみ: qatacri at protonmail.com | 統計 | 2025

202533800

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