fix bsr()
now it's the same result across compilers and systems
This commit is contained in:
parent
ed007526ff
commit
04d41dc4e1
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue