From 3d837e1cc4a0f1df56ba6645c3b6d144768b5d9d Mon Sep 17 00:00:00 2001 From: Christopher Serr Date: Fri, 23 Aug 2024 13:29:34 +0200 Subject: [PATCH] Ensure the SWAR chunks are 64-bit in more cases Various architectures have support for 64-bit integers, but there are Rust targets for those architectures where the pointer size is intentionally just 32-bit. For SWAR this smaller pointer size would negatively affect those targets, so this PR ensures the chunk size stays 64-bit on those targets. --- src/read.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/read.rs b/src/read.rs index 9a489fba3..09e1b41b9 100644 --- a/src/read.rs +++ b/src/read.rs @@ -445,7 +445,22 @@ impl<'a> SliceRead<'a> { // than a naive loop. It runs faster than equivalent two-pass memchr2+SWAR code on // benchmarks and it's cross-platform, so probably the right fit. // [1]: https://groups.google.com/forum/#!original/comp.lang.c/2HtQXvg7iKc/xOJeipH6KLMJ + + // The following architectures have native support for 64-bit integers, + // but have targets where usize is not 64-bit. + #[cfg(any( + target_arch = "aarch64", + target_arch = "x86_64", + target_arch = "wasm32", + ))] + type Chunk = u64; + #[cfg(not(any( + target_arch = "aarch64", + target_arch = "x86_64", + target_arch = "wasm32", + )))] type Chunk = usize; + const STEP: usize = mem::size_of::(); const ONE_BYTES: Chunk = Chunk::MAX / 255; // 0x0101...01