dimanche 30 août 2015

Are compilers able to avoid branching instructions?

I've been reading about bit twiddling hacks and thought, are compilers able to avoid branching in the following code:

constexpr int min(const int lhs, const int rhs) noexcept {
    if (lhs < rhs) {
        return lhs;
    }
    return rhs
}

by replacing it with (explanation):

constexpr int min(const int lhs, const int rhs) noexcept {
    return y ^ ((x ^ y) & -(x < y));
}

Aucun commentaire:

Enregistrer un commentaire