From 749a79d9325a1242c9e7246352ee1930a7d5eb70 Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Sat, 12 Jul 2025 15:50:24 +0200 Subject: 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. --- src/block.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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 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) } } -- cgit v1.2.3