mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-22 10:06:26 +08:00
ARM lsb/msb assembly
Implement lsb/msb using armv7 assembly instructions. msb is the easiest one, using a gcc intrinsic that generates code using the ARM's clz instruction. lsb is also using this clz instruction, but with the help of ARM's 'rbit' (bit reversing) instruction. This leads to a >2% speed gain. I also renamed 'arm-32' to the more meaningfull 'armv7' in the Makefile No functional change.
This commit is contained in:
committed by
Marco Costalba
parent
4e7da9be3d
commit
7f9ebf8e86
@@ -247,6 +247,21 @@ FORCE_INLINE Square msb(Bitboard b) {
|
||||
return (Square) index;
|
||||
}
|
||||
|
||||
# elif defined(__arm__)
|
||||
|
||||
FORCE_INLINE int lsb32(uint32_t v) {
|
||||
__asm__("rbit %0, %1" : "=r"(v) : "r"(v));
|
||||
return __builtin_clz(v);
|
||||
}
|
||||
|
||||
FORCE_INLINE Square msb(Bitboard b) {
|
||||
return (Square) (63 - __builtin_clzll(b));
|
||||
}
|
||||
|
||||
FORCE_INLINE Square lsb(Bitboard b) {
|
||||
return (Square) (uint32_t(b) ? lsb32(uint32_t(b)) : 32 + lsb32(uint32_t(b >> 32)));
|
||||
}
|
||||
|
||||
# else
|
||||
|
||||
FORCE_INLINE Square lsb(Bitboard b) { // Assembly code by Heinz van Saanen
|
||||
|
||||
Reference in New Issue
Block a user