@@ -235,24 +235,24 @@ pub fn sliding_min_mapper_simd<const LEFT: bool>(
235235    let  pos_mask = S :: splat ( 0x0000_ffff ) ; 
236236    let  max_pos = S :: splat ( ( 1  << 16 )  - 1 ) ; 
237237    let  mut  pos = S :: splat ( 0 ) ; 
238-     let  one = S :: splat ( 1 ) ; 
239238    // Sliding min is over w+k-1 characters, so chunks overlap w+k-2. 
240239    // Thus, the true length of each lane is len-(k+w-2). 
241240    // 
242241    // The k-mer starting at position 0 is done after processing the char at 
243242    // position k-1, so we compensate for that as well. 
244243    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 ) ; 
245245
246246    #[ inline( always) ]  
247247    move  |val| { 
248248        // Make sure the position does not interfere with the hash value. 
249249        if  pos == max_pos { 
250250            // 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) ; 
252252        } 
253253        // slightly faster than assigning S::splat(u32::MAX) 
254254        let  elem = ( if  LEFT  {  val }  else  {  !val }  &  val_mask)  | pos; 
255-         pos += one ; 
255+         pos += S :: ONE ; 
256256        ring_buf. push ( elem) ; 
257257        prefix_min = simd_min :: < LEFT > ( prefix_min,  elem) ; 
258258        // After a chunk has been filled, compute suffix minima. 
@@ -284,13 +284,12 @@ fn suffix_minima<const LEFT: bool>(
284284} 
285285
286286fn  reset_positions_offsets ( 
287-     w :   usize , 
287+     delta :   S , 
288288    pos :  & mut  S , 
289289    prefix_min :  & mut  S , 
290290    pos_offset :  & mut  S , 
291291    ring_buf :  & mut  RingBuf < S > , 
292292)  { 
293-     let  delta = S :: splat ( ( 1  << 16 )  - 2  - w as  u32 ) ; 
294293    * pos -= delta; 
295294    * prefix_min -= delta; 
296295    * pos_offset += delta; 
@@ -318,7 +317,6 @@ pub fn sliding_lr_min_mapper_simd(
318317    let  max_pos = S :: splat ( ( 1  << 16 )  - 1 ) ; 
319318    let  mut  pos = S :: splat ( 0 ) ; 
320319    let  mut  pos_offset:  S  = from_fn ( |l| ( l *  len. saturating_sub ( w - 1 ) )  as  u32 ) . into ( ) ; 
321-     let  one = S :: splat ( 1 ) ; 
322320    let  delta = S :: splat ( ( 1  << 16 )  - 2  - w as  u32 ) ; 
323321
324322    #[ inline( always) ]  
@@ -338,7 +336,7 @@ pub fn sliding_lr_min_mapper_simd(
338336        let  lelem = ( val &  val_mask)  | pos; 
339337        let  relem = ( !val &  val_mask)  | pos; 
340338        let  elem = ( lelem,  relem) ; 
341-         pos += one ; 
339+         pos += S :: ONE ; 
342340        ring_buf. push ( elem) ; 
343341        prefix_lr_min = simd_lr_min ( prefix_lr_min,  elem) ; 
344342        // After a chunk has been filled, compute suffix minima. 
0 commit comments