stego.git

attack.c

espurr
/* 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];
}