@@ -235,24 +235,24 @@ pub fn sliding_min_mapper_simd<const LEFT: bool>(
235
235
let pos_mask = S :: splat ( 0x0000_ffff ) ;
236
236
let max_pos = S :: splat ( ( 1 << 16 ) - 1 ) ;
237
237
let mut pos = S :: splat ( 0 ) ;
238
- let one = S :: splat ( 1 ) ;
239
238
// Sliding min is over w+k-1 characters, so chunks overlap w+k-2.
240
239
// Thus, the true length of each lane is len-(k+w-2).
241
240
//
242
241
// The k-mer starting at position 0 is done after processing the char at
243
242
// position k-1, so we compensate for that as well.
244
243
let mut pos_offset: S = from_fn ( |l| ( l * len. saturating_sub ( w - 1 ) ) as u32 ) . into ( ) ;
244
+ let delta = S :: splat ( ( 1 << 16 ) - 2 - w as u32 ) ;
245
245
246
246
#[ inline( always) ]
247
247
move |val| {
248
248
// Make sure the position does not interfere with the hash value.
249
249
if pos == max_pos {
250
250
// Slow case extracted to a function to have better inlining here.
251
- reset_positions_offsets ( w , & mut pos, & mut prefix_min, & mut pos_offset, ring_buf) ;
251
+ reset_positions_offsets ( delta , & mut pos, & mut prefix_min, & mut pos_offset, ring_buf) ;
252
252
}
253
253
// slightly faster than assigning S::splat(u32::MAX)
254
254
let elem = ( if LEFT { val } else { !val } & val_mask) | pos;
255
- pos += one ;
255
+ pos += S :: ONE ;
256
256
ring_buf. push ( elem) ;
257
257
prefix_min = simd_min :: < LEFT > ( prefix_min, elem) ;
258
258
// After a chunk has been filled, compute suffix minima.
@@ -284,13 +284,12 @@ fn suffix_minima<const LEFT: bool>(
284
284
}
285
285
286
286
fn reset_positions_offsets (
287
- w : usize ,
287
+ delta : S ,
288
288
pos : & mut S ,
289
289
prefix_min : & mut S ,
290
290
pos_offset : & mut S ,
291
291
ring_buf : & mut RingBuf < S > ,
292
292
) {
293
- let delta = S :: splat ( ( 1 << 16 ) - 2 - w as u32 ) ;
294
293
* pos -= delta;
295
294
* prefix_min -= delta;
296
295
* pos_offset += delta;
@@ -318,7 +317,6 @@ pub fn sliding_lr_min_mapper_simd(
318
317
let max_pos = S :: splat ( ( 1 << 16 ) - 1 ) ;
319
318
let mut pos = S :: splat ( 0 ) ;
320
319
let mut pos_offset: S = from_fn ( |l| ( l * len. saturating_sub ( w - 1 ) ) as u32 ) . into ( ) ;
321
- let one = S :: splat ( 1 ) ;
322
320
let delta = S :: splat ( ( 1 << 16 ) - 2 - w as u32 ) ;
323
321
324
322
#[ inline( always) ]
@@ -338,7 +336,7 @@ pub fn sliding_lr_min_mapper_simd(
338
336
let lelem = ( val & val_mask) | pos;
339
337
let relem = ( !val & val_mask) | pos;
340
338
let elem = ( lelem, relem) ;
341
- pos += one ;
339
+ pos += S :: ONE ;
342
340
ring_buf. push ( elem) ;
343
341
prefix_lr_min = simd_lr_min ( prefix_lr_min, elem) ;
344
342
// After a chunk has been filled, compute suffix minima.
0 commit comments