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
};