You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rust-rkyv/0001-Fix-generic-SIMD-for-b...

33 lines
1018 B

From 6d6a5461e42cac18707dfee42b9f41ee7d078866 Mon Sep 17 00:00:00 2001
From: David Koloski <djkoloski@gmail.com>
Date: Tue, 1 Oct 2024 11:54:40 -0400
Subject: [PATCH] Fix generic SIMD for big-endian targets
---
src/simd/generic.rs | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/simd/generic.rs b/src/simd/generic.rs
index 6f6cc56..d3b1b94 100644
--- a/src/simd/generic.rs
+++ b/src/simd/generic.rs
@@ -73,7 +73,14 @@ impl Group {
pub unsafe fn read(ptr: *const u8) -> Self {
// SAFETY: The caller has guaranteed that `ptr` is valid for reads and
// points to enough bytes for a `Word`.
- unsafe { Self(core::ptr::read_unaligned(ptr.cast())) }
+ #[cfg(target_endian = "little")]
+ unsafe {
+ Self(core::ptr::read_unaligned(ptr.cast()))
+ }
+ #[cfg(target_endian = "big")]
+ unsafe {
+ Self(core::ptr::read_unaligned(ptr.cast::<Word>()).swap_bytes())
+ }
}
#[inline]
--
2.46.1