From ff9380b248e6f7448132225ed1860f2672bedb33 Mon Sep 17 00:00:00 2001 From: Vsevolod Livinskiy Date: Thu, 4 Dec 2014 19:30:30 +0400 Subject: [PATCH] Fix for count_leading_zeros --- examples/intrinsics/knc.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/examples/intrinsics/knc.h b/examples/intrinsics/knc.h index afc935ed..42a97c45 100644 --- a/examples/intrinsics/knc.h +++ b/examples/intrinsics/knc.h @@ -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 ///////////////////////////////////////////////////////////////////////////