@@ -64,7 +64,18 @@ template <bool Mix, typename ComputeHash>
6464inline void
6565hashLoopNoNulls (vector_size_t size, uint64_t * result, ComputeHash computeHash) {
6666 if constexpr (Mix) {
67- for (vector_size_t i = 0 ; i < size; ++i) {
67+ vector_size_t i{0 };
68+ for (; i + 8 <= size; i += 8 ) {
69+ result[i] = bits::hashMix (result[i], computeHash (i));
70+ result[i + 1 ] = bits::hashMix (result[i + 1 ], computeHash (i + 1 ));
71+ result[i + 2 ] = bits::hashMix (result[i + 2 ], computeHash (i + 2 ));
72+ result[i + 3 ] = bits::hashMix (result[i + 3 ], computeHash (i + 3 ));
73+ result[i + 4 ] = bits::hashMix (result[i + 4 ], computeHash (i + 4 ));
74+ result[i + 5 ] = bits::hashMix (result[i + 5 ], computeHash (i + 5 ));
75+ result[i + 6 ] = bits::hashMix (result[i + 6 ], computeHash (i + 6 ));
76+ result[i + 7 ] = bits::hashMix (result[i + 7 ], computeHash (i + 7 ));
77+ }
78+ for (; i < size; ++i) {
6879 result[i] = bits::hashMix (result[i], computeHash (i));
6980 }
7081 } else {
@@ -131,9 +142,8 @@ inline void scatterDictionaryHashesWithExtraNulls(
131142 }
132143}
133144
134- // / converts Velox’s packed boolean storage into one hash per row.
135- // / @param values: a bitmap: one bit per row, where set means true and unset
136- // / means false
145+ // Converts Velox's packed boolean storage into one hash per row. A set bit in
146+ // 'values' means true and an unset bit means false.
137147template <bool Mix>
138148inline void scatterBoolHashes (
139149 vector_size_t size,
0 commit comments