trying to evalutate his speed I enabled only knight move generation.
it looks like:
Code: Select all
public void generaMosseCavallo(ref List<mossa> m,color c,bool cattura)
{
ulong cavallo;
pezzo.piece p;
ulong tempAmici;
ulong tempNemici;
if (activeColor == c)
{
tempAmici = amici;
tempNemici = nemici;
}
else
{
tempAmici = nemici;
tempNemici = amici;
}
if (c == color.white)
{
p= pezzo.piece.whiteKnights;
cavallo = whiteKnightBitBoard;
}
else {
cavallo = blackKnightBitBoard;
p= pezzo.piece.blackKnights;
}
while(cavallo!=0){
ulong bb = bitboards.getBitboardLSB1(cavallo);// ritorna bitboard dell LSB1
ulong mosse = chesslib.generaMosse.tableMosseCavallo[bitboards.bitScanForward(cavallo)];
if (cattura)
{
mosse &= tempNemici;
}
else
{
mosse &= ~caseOccupate;
}
while (mosse != 0) {
ulong bm = bitboards.getBitboardLSB1(mosse);// ritorna bitboard dell LSB1
mossa mo = new mossa(p, bb, bm, false, false);
m.Add(mo);
mosse &= mosse - 1;// resettla LSB1
}
cavallo &=cavallo-1;// resettla LSB1
}
}
I used refences everywhere it's possible.
this is a c# code!!!! so i can't use any assembler code to speedup the code.
ony my slow pc ( AMD sempron 2600+) i can only get a 300kn/s form this movegenerator. (i'm still not using any kind of hash)
am I doing some error in the programmation or do you think this will be the maximum speed i can reach with c# code? is this speed a good speed without hash?