diff options
author | Daniel Schadt <kingdread@gmx.de> | 2025-07-12 15:50:24 +0200 |
---|---|---|
committer | Daniel Schadt <kingdread@gmx.de> | 2025-07-12 15:50:24 +0200 |
commit | 749a79d9325a1242c9e7246352ee1930a7d5eb70 (patch) | |
tree | f9ff20441d59419e223fc9f04c65fb1a950c8fff /src/block.rs | |
parent | 37825f8cc2a942e826f674ab3f04625c94c03622 (diff) | |
download | zears-749a79d9325a1242c9e7246352ee1930a7d5eb70.tar.gz zears-749a79d9325a1242c9e7246352ee1930a7d5eb70.tar.bz2 zears-749a79d9325a1242c9e7246352ee1930a7d5eb70.zip |
unroll shift-by-one for non-simd
This brings a 3x increase for non-simd builds, getting them much closer
to the simd build in speed.
Diffstat (limited to 'src/block.rs')
-rw-r--r-- | src/block.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/block.rs b/src/block.rs index 3425242..96c3496 100644 --- a/src/block.rs +++ b/src/block.rs @@ -158,6 +158,29 @@ impl Shl<u32> for Block { return Block((self.0 << 1) | (self.0.shift_elements_left::<1>(0) >> 7)); } } + #[cfg(not(feature = "simd"))] + { + if rhs == 1 { + return Block([ + (self.0[0] << 1) | (self.0[1] >> 7), + (self.0[1] << 1) | (self.0[2] >> 7), + (self.0[2] << 1) | (self.0[3] >> 7), + (self.0[3] << 1) | (self.0[4] >> 7), + (self.0[4] << 1) | (self.0[5] >> 7), + (self.0[5] << 1) | (self.0[6] >> 7), + (self.0[6] << 1) | (self.0[7] >> 7), + (self.0[7] << 1) | (self.0[8] >> 7), + (self.0[8] << 1) | (self.0[9] >> 7), + (self.0[9] << 1) | (self.0[10] >> 7), + (self.0[10] << 1) | (self.0[11] >> 7), + (self.0[11] << 1) | (self.0[12] >> 7), + (self.0[12] << 1) | (self.0[13] >> 7), + (self.0[13] << 1) | (self.0[14] >> 7), + (self.0[14] << 1) | (self.0[15] >> 7), + (self.0[15] << 1), + ]); + } + } Block::from(self.to_int() << rhs) } } |