$NetBSD: patch-ab,v 1.4 2002/09/11 10:52:10 jlam Exp $ --- boolean.c.orig Thu May 23 10:02:28 2002 +++ boolean.c @@ -61,23 +61,49 @@ int PopCnt(register BITBOARD a) { } int FirstOne(BITBOARD arg1) { + unsigned int i, j, k; + + j = k = 0; if (arg1>>48) - return (first_one[arg1>>48]); - if ((arg1>>32)&65535) - return (first_one[(arg1>>32)&65535]+16); - if ((arg1>>16)&65535) - return (first_one[(arg1>>16)&65535]+32); - return (first_one[arg1&65535]+48); + i = ((BITBOARD)(arg1>>48)); + else if ((arg1>>32)&65535) { + i = ((arg1>>32)&65535); + j = 16; + } else if ((arg1>>16)&65535) { + i = (arg1>>16)&65535; + j = 32; + } else { + i = arg1&65535; + j = 48; + } + while (i >>= 1) + k++; + k = 16 - k; + return (j + k - 1); } int LastOne(BITBOARD arg1) { - if (arg1&65535) - return (last_one[arg1&65535]+48); - if ((arg1>>16)&65535) - return (last_one[(arg1>>16)&65535]+32); - if ((arg1>>32)&65535) - return (last_one[(arg1>>32)&65535]+16); - return (last_one[arg1>>48]); + unsigned int i,j,k; + + j = k = 0; + if (arg1&65535) { + i = arg1&65535; + j = 48; + } else if ((arg1>>16)&65535) { + i = (arg1>>16)&65535; + j = 32; + } else if ((arg1>>32)&65535) { + i = (arg1>>32)&65535; + j = 16; + } else + i = arg1>>48; + + while ((i & 0x1) == 0) { + i >>= 1; + k++; + } + k = 16 - k; + return j + k - 1; } #endif #endif