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) {
|
static inline int bsr(unsigned short v) {
|
||||||
unsigned long idx;
|
unsigned long idx;
|
||||||
if (_BitScanReverse(&idx,(unsigned long)v)) {
|
if (_BitScanReverse(&idx,(unsigned long)v)) {
|
||||||
return idx;
|
return idx+1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -34,7 +34,7 @@ static inline int bsr(unsigned short v) {
|
||||||
static inline int bsr32(unsigned int v) {
|
static inline int bsr32(unsigned int v) {
|
||||||
unsigned long idx;
|
unsigned long idx;
|
||||||
if (_BitScanReverse(&idx,(unsigned long)v)) {
|
if (_BitScanReverse(&idx,(unsigned long)v)) {
|
||||||
return idx;
|
return idx+1;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ static inline int bsr32(unsigned int v) {
|
||||||
|
|
||||||
static inline int bsr(unsigned short v) {
|
static inline int bsr(unsigned short v) {
|
||||||
unsigned short mask = 0x8000;
|
unsigned short mask = 0x8000;
|
||||||
for (int i = 15; i >= 0; --i) {
|
for (int i = 16; i >= 0; --i) {
|
||||||
if (v&mask)
|
if (v&mask)
|
||||||
return i;
|
return i;
|
||||||
mask>>=1;
|
mask>>=1;
|
||||||
|
@ -73,7 +73,7 @@ static inline int bsr(unsigned short v) {
|
||||||
|
|
||||||
static inline int bsr32(unsigned int v) {
|
static inline int bsr32(unsigned int v) {
|
||||||
unsigned int mask = 0x80000000;
|
unsigned int mask = 0x80000000;
|
||||||
for (int i = 31; i >= 0; --i) {
|
for (int i = 32; i >= 0; --i) {
|
||||||
if (v&mask)
|
if (v&mask)
|
||||||
return i;
|
return i;
|
||||||
mask>>=1;
|
mask>>=1;
|
||||||
|
|
Loading…
Reference in a new issue