Skip to content

Commit 533c29a

Browse files
make simd_b and simd_char_mask proper constants to avoid broadcast
1 parent d4c3462 commit 533c29a

1 file changed

Lines changed: 14 additions & 21 deletions

File tree

src/packed_seq.rs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ where
160160
{
161161
/// lowest B bits are 1.
162162
const CHAR_MASK: u64 = (1 << B) - 1;
163+
const SIMD_B: S = S::new([B as u32; 8]);
164+
const SIMD_CHAR_MASK: S = S::new([(1 << B) - 1; 8]);
163165
/// Chars per byte
164166
const C8: usize = 8 / B;
165167
/// Chars per u32
@@ -642,9 +644,6 @@ where
642644
let offsets: [usize; 8] = from_fn(|l| l * bytes_per_chunk);
643645
let mut cur = S::ZERO;
644646

645-
let simd_char_mask: u32x8 = S::splat(Self::CHAR_MASK as u32);
646-
let simd_b: u32x8 = S::splat(B as u32);
647-
648647
let par_len = if num_kmers == 0 {
649648
0
650649
} else {
@@ -676,9 +675,9 @@ where
676675
cur = buf[(i % Self::C256) / Self::C32];
677676
}
678677
// Extract the last 2 bits of each character.
679-
let chars = cur & simd_char_mask;
678+
let chars = cur & Self::SIMD_CHAR_MASK;
680679
// Shift remaining characters to the right.
681-
cur = cur >> simd_b;
680+
cur = cur >> Self::SIMD_B;
682681
chars
683682
},
684683
)
@@ -764,9 +763,6 @@ where
764763
// happen before the delay is actually reached.
765764
let mut read_idx = (buf_len - delay / Self::C32) % buf_len;
766765

767-
let simd_char_mask: u32x8 = S::splat(Self::CHAR_MASK as u32);
768-
let simd_b: u32x8 = S::splat(B as u32);
769-
770766
let par_len = if num_kmers == 0 {
771767
0
772768
} else {
@@ -817,11 +813,11 @@ where
817813
read_idx &= buf_mask;
818814
}
819815
// Extract the last 2 bits of each character.
820-
let chars = upcoming & simd_char_mask;
821-
let chars_d = upcoming_d & simd_char_mask;
816+
let chars = upcoming & Self::SIMD_CHAR_MASK;
817+
let chars_d = upcoming_d & Self::SIMD_CHAR_MASK;
822818
// Shift remaining characters to the right.
823-
upcoming = upcoming >> simd_b;
824-
upcoming_d = upcoming_d >> simd_b;
819+
upcoming = upcoming >> Self::SIMD_B;
820+
upcoming_d = upcoming_d >> Self::SIMD_B;
825821
(chars, chars_d)
826822
},
827823
)
@@ -915,9 +911,6 @@ where
915911
let mut read_idx1 = (buf_len - delay1 / Self::C32) % buf_len;
916912
let mut read_idx2 = (buf_len - delay2 / Self::C32) % buf_len;
917913

918-
let simd_char_mask: u32x8 = S::splat(Self::CHAR_MASK as u32);
919-
let simd_b: u32x8 = S::splat(B as u32);
920-
921914
let par_len = if num_kmers == 0 {
922915
0
923916
} else {
@@ -975,13 +968,13 @@ where
975968
read_idx2 &= buf_mask;
976969
}
977970
// Extract the last 2 bits of each character.
978-
let chars = upcoming & simd_char_mask;
979-
let chars_d1 = upcoming_d1 & simd_char_mask;
980-
let chars_d2 = upcoming_d2 & simd_char_mask;
971+
let chars = upcoming & Self::SIMD_CHAR_MASK;
972+
let chars_d1 = upcoming_d1 & Self::SIMD_CHAR_MASK;
973+
let chars_d2 = upcoming_d2 & Self::SIMD_CHAR_MASK;
981974
// Shift remaining characters to the right.
982-
upcoming = upcoming >> simd_b;
983-
upcoming_d1 = upcoming_d1 >> simd_b;
984-
upcoming_d2 = upcoming_d2 >> simd_b;
975+
upcoming = upcoming >> Self::SIMD_B;
976+
upcoming_d1 = upcoming_d1 >> Self::SIMD_B;
977+
upcoming_d2 = upcoming_d2 >> Self::SIMD_B;
985978
(chars, chars_d1, chars_d2)
986979
},
987980
)

0 commit comments

Comments
 (0)