Author: Gerd Isenberg
Date: 04:48:56 12/10/02
Go up one level in this thread
>************************************************************************
>
> if (pPos->u64TorresN)
> {
> UINT64 u64Pieza = pPos->u64PeonesN;
> UINT64 u64Vacias = BB_TABLEROLLENO;
>
> u64Pieza |= (u64Pieza >> 8) & u64Vacias;
> u64Vacias &= (u64Vacias >> 8);
> u64Pieza |= (u64Pieza >> 16) & u64Vacias;
> u64Vacias &= (u64Vacias >> 16);
> u64Pieza |= (u64Pieza >> 32) & u64Vacias;
> fprintf(pFLog,"--- PI: %I64u\n",u64Pieza);
> u64Pieza = u64Pieza >> 8;
>
> u64ColumnasAbiertas = u64Pieza;
> fprintf(pFLog,"--- CA: %I64u\n",u64ColumnasAbiertas);
> u64ColumnasAbiertas = ~u64ColumnasAbiertas;
> fprintf(pFLog,"--- CA: %I64u\n",u64ColumnasAbiertas);
> u64ColumnasAbiertas &= au64FrontalReyBlanco[u32CasillaRey];
> fprintf(pFLog,"+++ CA: %I64u\n",u64ColumnasAbiertas);
> }
>
<snip>
Hi José,
that's strange. No idea so far.
The problem seems to be the final shift right:
u64Pieza = u64Pieza >> 8;
Have you tried printf before and after that statement?
Have you played with the optimization flags?
Have you tried this one:
u64Pieza >>= 8;
or this one:
u64Pieza /= 256;
May be a bug in the compilers 64bit shift intrinsics?
What kind of compiler do you use exactly (Service Pack?).
Can you post the assembler output of the release and debug version.
If nothings helps, you may try intel C++.
I don't guess a side effect from
fprintf(pFLog,"--- PI: %I64u\n",u64Pieza);
but may be you try
fprintf(pFLog,"--- PI: %04X%04X\n",
(unsigned int)(u64Pieza>>32),
(unsigned int)u64Pieza );
Cheers,
Gerd
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.