てがみ: 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

こうなる。 RV64GBZicond だと

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

こう。 cmov 系の命令にはレジスタのポート数が増えるという問題があるわけだけれど、フラグレジスタが分かれていればその問題もないのだよな。