Skip to content

Commit 361c144

Browse files
committed
Fix memcpy for big-endian targets
1 parent 33bd326 commit 361c144

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/mem/impls.rs

+6
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ unsafe fn copy_forward_misaligned_words(dest: *mut u8, src: *const u8, n: usize)
4949
while dest_usize < dest_end {
5050
src_aligned = src_aligned.add(1);
5151
let cur_word = *src_aligned;
52+
#[cfg(target_endian = "little")]
5253
let resembled = prev_word >> shift | cur_word << (WORD_SIZE * 8 - shift);
54+
#[cfg(target_endian = "big")]
55+
let resembled = prev_word << shift | cur_word >> (WORD_SIZE * 8 - shift);
5356
prev_word = cur_word;
5457

5558
*dest_usize = resembled;
@@ -125,7 +128,10 @@ unsafe fn copy_backward_misaligned_words(dest: *mut u8, src: *const u8, n: usize
125128
while dest_start < dest_usize {
126129
src_aligned = src_aligned.sub(1);
127130
let cur_word = *src_aligned;
131+
#[cfg(target_endian = "little")]
128132
let resembled = prev_word << (WORD_SIZE * 8 - shift) | cur_word >> shift;
133+
#[cfg(target_endian = "big")]
134+
let resembled = prev_word >> (WORD_SIZE * 8 - shift) | cur_word << shift;
129135
prev_word = cur_word;
130136

131137
dest_usize = dest_usize.sub(1);

0 commit comments

Comments
 (0)