From 8a116ce6910529457a2b82dfa8606cce36415852 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Tue, 10 Nov 2009 08:55:52 +0100 Subject: [PATCH] Small update to pop_1st_bit() Avoid a 64 bit load using a pointer. It saves a couple of push/pop instructions so advantage is only theorical, but anyway we use pop_1st_bit() as a reference implementation for 32 bit systems so we keep it more for documentation purposes then for other reasons. Idea of pointer is of Eric Mullins. No functional change. Signed-off-by: Marco Costalba --- src/bitboard.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/bitboard.cpp b/src/bitboard.cpp index e0ce4d2d..6f156925 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -348,21 +348,19 @@ union b_union { Square pop_1st_bit(Bitboard* bb) { - b_union u; + b_union* u; Square ret; - u.b = *bb; + u = (b_union*)bb; - if (u.dw.l) + if (u->dw.l) { - ret = Square(BitTable[((u.dw.l ^ (u.dw.l - 1)) * 0x783a9b23) >> 26]); - u.dw.l &= (u.dw.l - 1); - *bb = u.b; + ret = Square(BitTable[((u->dw.l ^ (u->dw.l - 1)) * 0x783a9b23) >> 26]); + u->dw.l &= (u->dw.l - 1); return ret; } - ret = Square(BitTable[((~(u.dw.h ^ (u.dw.h - 1))) * 0x783a9b23) >> 26]); - u.dw.h &= (u.dw.h - 1); - *bb = u.b; + ret = Square(BitTable[((~(u->dw.h ^ (u->dw.h - 1))) * 0x783a9b23) >> 26]); + u->dw.h &= (u->dw.h - 1); return ret; } -- 2.39.2