diff --git a/src/engine/bsr.h b/src/engine/bsr.h index 72191f6bd..dcc865112 100644 --- a/src/engine/bsr.h +++ b/src/engine/bsr.h @@ -24,7 +24,7 @@ static inline int bsr(unsigned short v) { unsigned long idx; if (_BitScanReverse(&idx,(unsigned long)v)) { - return idx; + return idx+1; } else { return -1; @@ -34,7 +34,7 @@ static inline int bsr(unsigned short v) { static inline int bsr32(unsigned int v) { unsigned long idx; if (_BitScanReverse(&idx,(unsigned long)v)) { - return idx; + return idx+1; } else { return -1; } @@ -62,7 +62,7 @@ static inline int bsr32(unsigned int v) { static inline int bsr(unsigned short v) { unsigned short mask = 0x8000; - for (int i = 15; i >= 0; --i) { + for (int i = 16; i >= 0; --i) { if (v&mask) return i; mask>>=1; @@ -73,7 +73,7 @@ static inline int bsr(unsigned short v) { static inline int bsr32(unsigned int v) { unsigned int mask = 0x80000000; - for (int i = 31; i >= 0; --i) { + for (int i = 32; i >= 0; --i) { if (v&mask) return i; mask>>=1;