Skip to content

Commit 80b7c01

Browse files
committed
memcpy: Create separate memcpy.rs file
Signed-off-by: Joe Richey <[email protected]>
1 parent c6c7621 commit 80b7c01

File tree

2 files changed

+44
-39
lines changed

2 files changed

+44
-39
lines changed

src/mem/memcpy.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
use super::c_int;
2+
3+
#[cfg_attr(all(feature = "mem", not(feature = "mangled-names")), no_mangle)]
4+
pub unsafe extern "C" fn memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 {
5+
let mut i = 0;
6+
while i < n {
7+
*dest.offset(i as isize) = *src.offset(i as isize);
8+
i += 1;
9+
}
10+
dest
11+
}
12+
13+
#[cfg_attr(all(feature = "mem", not(feature = "mangled-names")), no_mangle)]
14+
pub unsafe extern "C" fn memmove(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 {
15+
if src < dest as *const u8 {
16+
// copy from end
17+
let mut i = n;
18+
while i != 0 {
19+
i -= 1;
20+
*dest.offset(i as isize) = *src.offset(i as isize);
21+
}
22+
} else {
23+
// copy from beginning
24+
let mut i = 0;
25+
while i < n {
26+
*dest.offset(i as isize) = *src.offset(i as isize);
27+
i += 1;
28+
}
29+
}
30+
dest
31+
}
32+
33+
#[cfg_attr(all(feature = "mem", not(feature = "mangled-names")), no_mangle)]
34+
pub unsafe extern "C" fn memset(s: *mut u8, c: c_int, n: usize) -> *mut u8 {
35+
let mut i = 0;
36+
while i < n {
37+
*s.offset(i as isize) = c as u8;
38+
i += 1;
39+
}
40+
s
41+
}

src/mem/mod.rs

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,45 +9,9 @@ use core::intrinsics::{atomic_load_unordered, atomic_store_unordered, exact_div}
99
use core::mem;
1010
use core::ops::{BitOr, Shl};
1111

12-
#[cfg_attr(all(feature = "mem", not(feature = "mangled-names")), no_mangle)]
13-
pub unsafe extern "C" fn memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 {
14-
let mut i = 0;
15-
while i < n {
16-
*dest.offset(i as isize) = *src.offset(i as isize);
17-
i += 1;
18-
}
19-
dest
20-
}
21-
22-
#[cfg_attr(all(feature = "mem", not(feature = "mangled-names")), no_mangle)]
23-
pub unsafe extern "C" fn memmove(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 {
24-
if src < dest as *const u8 {
25-
// copy from end
26-
let mut i = n;
27-
while i != 0 {
28-
i -= 1;
29-
*dest.offset(i as isize) = *src.offset(i as isize);
30-
}
31-
} else {
32-
// copy from beginning
33-
let mut i = 0;
34-
while i < n {
35-
*dest.offset(i as isize) = *src.offset(i as isize);
36-
i += 1;
37-
}
38-
}
39-
dest
40-
}
41-
42-
#[cfg_attr(all(feature = "mem", not(feature = "mangled-names")), no_mangle)]
43-
pub unsafe extern "C" fn memset(s: *mut u8, c: c_int, n: usize) -> *mut u8 {
44-
let mut i = 0;
45-
while i < n {
46-
*s.offset(i as isize) = c as u8;
47-
i += 1;
48-
}
49-
s
50-
}
12+
// memcpy/memmove/memset have optimized implementations on some architectures
13+
mod memcpy;
14+
pub use self::memcpy::*;
5115

5216
#[cfg_attr(all(feature = "mem", not(feature = "mangled-names")), no_mangle)]
5317
pub unsafe extern "C" fn memcmp(s1: *const u8, s2: *const u8, n: usize) -> i32 {

0 commit comments

Comments
 (0)