@@ -5,69 +5,15 @@ type c_int = i16;
5
5
#[ cfg( not( target_pointer_width = "16" ) ) ]
6
6
type c_int = i32 ;
7
7
8
+ // memcpy and friends have optimized implementations on some architectures
9
+ #[ path = "fallback.rs" ]
10
+ mod memcpy;
11
+ pub use self :: memcpy:: * ;
12
+
8
13
use core:: intrinsics:: { atomic_load_unordered, atomic_store_unordered, exact_div} ;
9
14
use core:: mem;
10
15
use core:: ops:: { BitOr , Shl } ;
11
16
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
- }
51
-
52
- #[ cfg_attr( all( feature = "mem" , not( feature = "mangled-names" ) ) , no_mangle) ]
53
- pub unsafe extern "C" fn memcmp ( s1 : * const u8 , s2 : * const u8 , n : usize ) -> i32 {
54
- let mut i = 0 ;
55
- while i < n {
56
- let a = * s1. offset ( i as isize ) ;
57
- let b = * s2. offset ( i as isize ) ;
58
- if a != b {
59
- return a as i32 - b as i32 ;
60
- }
61
- i += 1 ;
62
- }
63
- 0
64
- }
65
-
66
- #[ cfg_attr( all( feature = "mem" , not( feature = "mangled-names" ) ) , no_mangle) ]
67
- pub unsafe extern "C" fn bcmp ( s1 : * const u8 , s2 : * const u8 , n : usize ) -> i32 {
68
- memcmp ( s1, s2, n)
69
- }
70
-
71
17
// `bytes` must be a multiple of `mem::size_of::<T>()`
72
18
fn memcpy_element_unordered_atomic < T : Copy > ( dest : * mut T , src : * const T , bytes : usize ) {
73
19
unsafe {
0 commit comments