Fix for count_leading_zeros

This commit is contained in:
Vsevolod Livinskiy
2014-12-04 19:30:30 +04:00
parent b00575e95c
commit ff9380b248

View File

@@ -2672,6 +2672,30 @@ static FORCEINLINE int64_t __count_trailing_zeros_i64(const __vec1_i64 mask) {
return _mm_tzcnt_64(mask);
}
static FORCEINLINE int32_t __count_leading_zeros_i32(__vec1_i32 mask) {
uint32_t n = 0;
if (mask == 0)
return 32;
while (1) {
if (mask < 0) break;
n ++;
mask <<= 1;
}
return n;
}
static FORCEINLINE int64_t __count_leading_zeros_i64(__vec1_i64 mask) {
uint32_t n = 0;
if (mask == 0)
return 64;
while (1) {
if (mask < 0) break;
n ++;
mask <<= 1;
}
return n;
}
///////////////////////////////////////////////////////////////////////////
// reductions
///////////////////////////////////////////////////////////////////////////