Skip to content

Utilize const generics #26

@Jan-Frase

Description

@Jan-Frase

Heavily inspired by what chessbit does pretty much everywhere. (Which itself was learned this technique from Gigantua)

For example:
https://github.com/thuijbregts/chessbit/blob/boardstate_stats/chessbit/MoveGenerator.h

    template <bool side>
    ForceInline U64 pawnsAtkForward(U64 pM) {
        if constexpr (side == white) return pM >> 8;
        return pM << 8;
    }

Removes the if at runtime!
This entire functions gets compiled down to a rightshift for white and leftshift for black and nothing else (maybe a few moves).

In rust we can do the same by writing something like this:

#[inline(always)]
pub const fn pawns_atk_forward<const SIDE: bool>(pawn_mask: u64) -> u64 {
    if SIDE {
        pawn_mask >> 8  // White
    } else {
        pawn_mask << 8  // Black
    }
}

Applying this pattern all over the code base should result in incredible performance gains.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions