stego.git
attack.c

/* stego - chess engine
* Copyright (C) 2025 ArcNyxx <me@arcnyxx.net>
* see LICENCE file for licensing information */
#include "attack.h"
#include "bits.h"
#include "stego.h"
#include "table.h"
u64
atk_king(sq_t sq)
{
return kitab[sq];
}
u64
atk_rook(sq_t sq, u64 occ)
{
occ |= 1 | 1ULL << 63;
const sq_t no = msb(nobtab[sq] & occ);
const sq_t ea = lsb(eabtab[sq] & occ);
const sq_t so = lsb(sobtab[sq] & occ);
const sq_t we = msb(webtab[sq] & occ);
return rotab[sq] ^ notab[no] ^ eatab[ea] ^ sotab[so] ^
wetab[we];
}
u64
atk_bishop(sq_t sq, u64 occ)
{
occ |= 1 | 1ULL << 63;
const sq_t ne = msb(nebtab[sq] & occ);
const sq_t se = lsb(sebtab[sq] & occ);
const sq_t sw = lsb(swbtab[sq] & occ);
const sq_t nw = msb(nwbtab[sq] & occ);
return bitab[sq] ^ netab[ne] ^ setab[se] ^ swtab[sw] ^
nwtab[nw];
}
u64
atk_knight(sq_t sq)
{
return kntab[sq];
}
u64
atk_wpawn(sq_t sq)
{
return wctab[sq];
}
u64
atk_bpawn(sq_t sq)
{
return bctab[sq];
}