From 327f92cc46ba1c07fce0a960544c0c17d24ec174 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Viel Date: Wed, 1 Jul 2020 18:52:05 +0200 Subject: [PATCH] Precompute the divisor to ensure that no kind of compiler would process it on the fly at each call. --- modules/flann/include/opencv2/flann/dist.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/flann/include/opencv2/flann/dist.h b/modules/flann/include/opencv2/flann/dist.h index b092b531a1..4cf32d5987 100644 --- a/modules/flann/include/opencv2/flann/dist.h +++ b/modules/flann/include/opencv2/flann/dist.h @@ -506,7 +506,7 @@ struct Hamming2 const uint64_t* pa = reinterpret_cast(a); const uint64_t* pb = reinterpret_cast(b); ResultType result = 0; - size /= (sizeof(uint64_t)/sizeof(unsigned char)); + size /= long_word_size_; for(size_t i = 0; i < size; ++i ) { result += popcnt64(*pa ^ *pb); ++pa; @@ -516,7 +516,7 @@ struct Hamming2 const uint32_t* pa = reinterpret_cast(a); const uint32_t* pb = reinterpret_cast(b); ResultType result = 0; - size /= (sizeof(uint32_t)/sizeof(unsigned char)); + size /= long_word_size_; for(size_t i = 0; i < size; ++i ) { result += popcnt32(*pa ^ *pb); ++pa; @@ -525,6 +525,13 @@ struct Hamming2 #endif return result; } + +private: +#ifdef FLANN_PLATFORM_64_BIT + static const size_t long_word_size_ = sizeof(uint64_t)/sizeof(unsigned char); +#else + static const size_t long_word_size_ = sizeof(uint32_t)/sizeof(unsigned char); +#endif };