@@ -144,12 +144,12 @@ bool vqf_is_present(vqf_filter * restrict filter, uint64_t h) {
144144 vqf_metadata * restrict metadata = & filter -> metadata ;
145145 //vqf_block * restrict blocks = filter->blocks;
146146 uint64_t range = metadata -> range ;
147-
147+ uint64_t h2 = rotateLeft ( h , 32 );
148148 __uint128_t x = (__uint128_t )h * (__uint128_t )range ;
149149 uint64_t block_index = (uint64_t )(x >> 64 );
150- __uint128_t y = (__uint128_t )rotateLeft ( h , 32 ) * (__uint128_t )range ;
150+ __uint128_t y = (__uint128_t )h2 * (__uint128_t )range ;
151151 uint64_t alt_block_index = (uint64_t )(y >> 64 );
152- uint64_t tag = h & TAG_MASK ;
152+ uint64_t tag = ( h ^ h2 ) & TAG_MASK ;
153153
154154 __builtin_prefetch (& filter -> blocks [alt_block_index / QUQU_BUCKETS_PER_BLOCK ]);
155155
@@ -166,12 +166,12 @@ bool vqf_insert(vqf_filter * restrict filter, uint64_t h) {
166166 vqf_metadata * restrict metadata = & filter -> metadata ;
167167 vqf_block * restrict blocks = filter -> blocks ;
168168 uint64_t range = metadata -> range ;
169-
169+ uint64_t h2 = rotateLeft ( h , 32 );
170170 __uint128_t x = (__uint128_t )h * (__uint128_t )range ;
171171 uint64_t block_index = (uint64_t )(x >> 64 );
172- __uint128_t y = (__uint128_t )rotateLeft ( h , 32 ) * (__uint128_t )range ;
172+ __uint128_t y = (__uint128_t )h2 * (__uint128_t )range ;
173173 uint64_t alt_block_index = (uint64_t )(y >> 64 );
174- uint64_t tag = h & TAG_MASK ;
174+ uint64_t tag = ( h ^ h2 ) & TAG_MASK ;
175175
176176 uint64_t * block_md = blocks [block_index /QUQU_BUCKETS_PER_BLOCK ].md ;
177177 uint64_t block_free = get_block_free_space (block_md );
0 commit comments