Author: Matthias Gemuh
Date: 04:55:47 10/25/02
Hi Experts,
I tried to floodfill attacks with the knowledge+code discussed in this forum.
Is this resulting code wrong ? (seems to work fine).
Very slow ! Any speed-up ideas ? Gerd Isenberg's asm was not fully
accepted by my Borland C++ Builder 5. Thanks.
/Matthias.
#define SHIFTDOWN(b) ((b)>>8)
#define SHIFTUP(b) ((b)<<8)
#define SHIFTRIGHT(b) ((((b)<<1)&0xFEFEFEFEFEFEFEFE))
#define SHIFTLEFT(b) ((((b)>>1)&0x7F7F7F7F7F7F7F7F))
#define SHIFTLEFTUP(b) ((((b)<<7)&0x7F7F7F7F7F7F7F7F))
#define SHIFTRIGHTUP(b) ((((b)<<9)&0xFEFEFEFEFEFEFEFE))
#define SHIFTLEFTDOWN(b) ((((b)>>9)&0x7F7F7F7F7F7F7F7F))
#define SHIFTRIGHTDOWN(b) ((((b)>>7)&0xFEFEFEFEFEFEFEFE))
BITBOARD getBishopAttacks(BITBOARD bishops, BITBOARD freeSquares)
{
BITBOARD attck = 0;
BITBOARD rightup = SHIFTRIGHTUP(bishops);
BITBOARD rightdown = SHIFTRIGHTDOWN(bishops);
BITBOARD leftup = SHIFTLEFTUP(bishops);
BITBOARD leftdown = SHIFTLEFTDOWN(bishops);
attck |= rightup|rightdown|leftup|leftdown;
for (int i=0; i<7; i++) {
rightup = SHIFTRIGHTUP(rightup&freeSquares);
rightdown = SHIFTRIGHTDOWN(rightdown&freeSquares);
leftup = SHIFTLEFTUP(leftup&freeSquares);
leftdown = SHIFTLEFTDOWN(leftdown&freeSquares);
attck |= rightup|rightdown|leftup|leftdown;
}
return (attck);
}
BITBOARD getRookAttacks(BITBOARD rooks, BITBOARD freeSquares)
{
BITBOARD attck = 0;
BITBOARD left = SHIFTLEFT(rooks);
BITBOARD right = SHIFTRIGHT(rooks);
BITBOARD up = SHIFTUP(rooks);
BITBOARD down = SHIFTDOWN(rooks);
attck |= left|right|up|down;
for (int i=0; i<7; i++) {
left = SHIFTLEFT(left&freeSquares);
right = SHIFTRIGHT(right&freeSquares);
up = SHIFTUP(up&freeSquares);
down = SHIFTDOWN(down&freeSquares);
attck |= left|right|up|down;
}
return (attck);
}
BITBOARD getQueenAttacks(BITBOARD queens, BITBOARD freeSquares)
{
BITBOARD attck = 0;
BITBOARD rightup = SHIFTRIGHTUP(queens);
BITBOARD rightdown = SHIFTRIGHTDOWN(queens);
BITBOARD leftup = SHIFTLEFTUP(queens);
BITBOARD leftdown = SHIFTLEFTDOWN(queens);
BITBOARD left = SHIFTLEFT(queens);
BITBOARD right = SHIFTRIGHT(queens);
BITBOARD up = SHIFTUP(queens);
BITBOARD down = SHIFTDOWN(queens);
attck |= rightup|rightdown|leftup|leftdown|left|right|up|down;
for (int i=0; i<7; i++) {
rightup = SHIFTRIGHTUP(rightup&freeSquares);
rightdown = SHIFTRIGHTDOWN(rightdown&freeSquares);
leftup = SHIFTLEFTUP(leftup&freeSquares);
leftdown = SHIFTLEFTDOWN(leftdown&freeSquares);
left = SHIFTLEFT(left&freeSquares);
right = SHIFTRIGHT(right&freeSquares);
up = SHIFTUP(up&freeSquares);
down = SHIFTDOWN(down&freeSquares);
attck |= rightup|rightdown|leftup|leftdown|left|right|up|down;
}
return (attck);
}
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.