Skip to content

Commit

Permalink
Ensure the SWAR chunks are 64-bit in more cases
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
CryZe committed Aug 23, 2024
1 parent 50c4328 commit 3d837e1
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/read.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::<Chunk>();
const ONE_BYTES: Chunk = Chunk::MAX / 255; // 0x0101...01

Expand Down

0 comments on commit 3d837e1

Please sign in to comment.