aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-01-24 11:16:18 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-01-24 11:16:18 +0000
commit4f94dad8ae0811bd0da6ff6c05c6e17e5049d5c1 (patch)
tree81d2877bb404b1e7b75b720e8cb72a8f33fe6068 /searchlib
parent7de3db5a1548ce595f76a4f817206b0bc663c2e7 (diff)
Unroll tight loop.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/common/bitvector.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/searchlib/src/vespa/searchlib/common/bitvector.cpp b/searchlib/src/vespa/searchlib/common/bitvector.cpp
index 7296842f2c1..bd6e677f8d4 100644
--- a/searchlib/src/vespa/searchlib/common/bitvector.cpp
+++ b/searchlib/src/vespa/searchlib/common/bitvector.cpp
@@ -139,7 +139,14 @@ BitVector::Index
BitVector::internalCount(const Word *tarr, size_t sz)
{
Index count(0);
- for (size_t i(0); i < sz; i++) {
+ size_t i(0);
+ for (; (i + 3) < sz; i += 4) {
+ count += Optimized::popCount(tarr[i + 0]) +
+ Optimized::popCount(tarr[i + 1]) +
+ Optimized::popCount(tarr[i + 2]) +
+ Optimized::popCount(tarr[i + 3]);
+ }
+ for (; i < sz; i++) {
count += Optimized::popCount(tarr[i]);
}
return count;