aboutsummaryrefslogtreecommitdiff
path: root/src/block.rs
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2025-07-12 15:50:24 +0200
committerDaniel Schadt <kingdread@gmx.de>2025-07-12 15:50:24 +0200
commit749a79d9325a1242c9e7246352ee1930a7d5eb70 (patch)
treef9ff20441d59419e223fc9f04c65fb1a950c8fff /src/block.rs
parent37825f8cc2a942e826f674ab3f04625c94c03622 (diff)
downloadzears-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.rs23
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)
}
}