@@ -8,10 +8,6 @@ type c_int = i16;
8
8
#[ cfg( not( target_pointer_width = "16" ) ) ]
9
9
type c_int = i32 ;
10
10
11
- use core:: intrinsics:: { atomic_load_unordered, atomic_store_unordered, exact_div} ;
12
- use core:: mem;
13
- use core:: ops:: { BitOr , Shl } ;
14
-
15
11
// memcpy/memmove/memset have optimized implementations on some architectures
16
12
#[ cfg_attr(
17
13
all( not( feature = "no-asm" ) , target_arch = "x86_64" ) ,
@@ -60,131 +56,3 @@ intrinsics! {
60
56
impls:: c_string_length( s)
61
57
}
62
58
}
63
-
64
- // `bytes` must be a multiple of `mem::size_of::<T>()`
65
- #[ cfg_attr( not( target_has_atomic_load_store = "8" ) , allow( dead_code) ) ]
66
- fn memcpy_element_unordered_atomic < T : Copy > ( dest : * mut T , src : * const T , bytes : usize ) {
67
- unsafe {
68
- let n = exact_div ( bytes, mem:: size_of :: < T > ( ) ) ;
69
- let mut i = 0 ;
70
- while i < n {
71
- atomic_store_unordered ( dest. add ( i) , atomic_load_unordered ( src. add ( i) ) ) ;
72
- i += 1 ;
73
- }
74
- }
75
- }
76
-
77
- // `bytes` must be a multiple of `mem::size_of::<T>()`
78
- #[ cfg_attr( not( target_has_atomic_load_store = "8" ) , allow( dead_code) ) ]
79
- fn memmove_element_unordered_atomic < T : Copy > ( dest : * mut T , src : * const T , bytes : usize ) {
80
- unsafe {
81
- let n = exact_div ( bytes, mem:: size_of :: < T > ( ) ) ;
82
- if src < dest as * const T {
83
- // copy from end
84
- let mut i = n;
85
- while i != 0 {
86
- i -= 1 ;
87
- atomic_store_unordered ( dest. add ( i) , atomic_load_unordered ( src. add ( i) ) ) ;
88
- }
89
- } else {
90
- // copy from beginning
91
- let mut i = 0 ;
92
- while i < n {
93
- atomic_store_unordered ( dest. add ( i) , atomic_load_unordered ( src. add ( i) ) ) ;
94
- i += 1 ;
95
- }
96
- }
97
- }
98
- }
99
-
100
- // `T` must be a primitive integer type, and `bytes` must be a multiple of `mem::size_of::<T>()`
101
- #[ cfg_attr( not( target_has_atomic_load_store = "8" ) , allow( dead_code) ) ]
102
- fn memset_element_unordered_atomic < T > ( s : * mut T , c : u8 , bytes : usize )
103
- where
104
- T : Copy + From < u8 > + Shl < u32 , Output = T > + BitOr < T , Output = T > ,
105
- {
106
- unsafe {
107
- let n = exact_div ( bytes, mem:: size_of :: < T > ( ) ) ;
108
-
109
- // Construct a value of type `T` consisting of repeated `c`
110
- // bytes, to let us ensure we write each `T` atomically.
111
- let mut x = T :: from ( c) ;
112
- let mut i = 1 ;
113
- while i < mem:: size_of :: < T > ( ) {
114
- x = ( x << 8 ) | T :: from ( c) ;
115
- i += 1 ;
116
- }
117
-
118
- // Write it to `s`
119
- let mut i = 0 ;
120
- while i < n {
121
- atomic_store_unordered ( s. add ( i) , x) ;
122
- i += 1 ;
123
- }
124
- }
125
- }
126
-
127
- intrinsics ! {
128
- #[ cfg( target_has_atomic_load_store = "8" ) ]
129
- pub unsafe extern "C" fn __llvm_memcpy_element_unordered_atomic_1( dest: * mut u8 , src: * const u8 , bytes: usize ) -> ( ) {
130
- memcpy_element_unordered_atomic( dest, src, bytes) ;
131
- }
132
- #[ cfg( target_has_atomic_load_store = "16" ) ]
133
- pub unsafe extern "C" fn __llvm_memcpy_element_unordered_atomic_2( dest: * mut u16 , src: * const u16 , bytes: usize ) -> ( ) {
134
- memcpy_element_unordered_atomic( dest, src, bytes) ;
135
- }
136
- #[ cfg( target_has_atomic_load_store = "32" ) ]
137
- pub unsafe extern "C" fn __llvm_memcpy_element_unordered_atomic_4( dest: * mut u32 , src: * const u32 , bytes: usize ) -> ( ) {
138
- memcpy_element_unordered_atomic( dest, src, bytes) ;
139
- }
140
- #[ cfg( target_has_atomic_load_store = "64" ) ]
141
- pub unsafe extern "C" fn __llvm_memcpy_element_unordered_atomic_8( dest: * mut u64 , src: * const u64 , bytes: usize ) -> ( ) {
142
- memcpy_element_unordered_atomic( dest, src, bytes) ;
143
- }
144
- #[ cfg( target_has_atomic_load_store = "128" ) ]
145
- pub unsafe extern "C" fn __llvm_memcpy_element_unordered_atomic_16( dest: * mut u128 , src: * const u128 , bytes: usize ) -> ( ) {
146
- memcpy_element_unordered_atomic( dest, src, bytes) ;
147
- }
148
-
149
- #[ cfg( target_has_atomic_load_store = "8" ) ]
150
- pub unsafe extern "C" fn __llvm_memmove_element_unordered_atomic_1( dest: * mut u8 , src: * const u8 , bytes: usize ) -> ( ) {
151
- memmove_element_unordered_atomic( dest, src, bytes) ;
152
- }
153
- #[ cfg( target_has_atomic_load_store = "16" ) ]
154
- pub unsafe extern "C" fn __llvm_memmove_element_unordered_atomic_2( dest: * mut u16 , src: * const u16 , bytes: usize ) -> ( ) {
155
- memmove_element_unordered_atomic( dest, src, bytes) ;
156
- }
157
- #[ cfg( target_has_atomic_load_store = "32" ) ]
158
- pub unsafe extern "C" fn __llvm_memmove_element_unordered_atomic_4( dest: * mut u32 , src: * const u32 , bytes: usize ) -> ( ) {
159
- memmove_element_unordered_atomic( dest, src, bytes) ;
160
- }
161
- #[ cfg( target_has_atomic_load_store = "64" ) ]
162
- pub unsafe extern "C" fn __llvm_memmove_element_unordered_atomic_8( dest: * mut u64 , src: * const u64 , bytes: usize ) -> ( ) {
163
- memmove_element_unordered_atomic( dest, src, bytes) ;
164
- }
165
- #[ cfg( target_has_atomic_load_store = "128" ) ]
166
- pub unsafe extern "C" fn __llvm_memmove_element_unordered_atomic_16( dest: * mut u128 , src: * const u128 , bytes: usize ) -> ( ) {
167
- memmove_element_unordered_atomic( dest, src, bytes) ;
168
- }
169
-
170
- #[ cfg( target_has_atomic_load_store = "8" ) ]
171
- pub unsafe extern "C" fn __llvm_memset_element_unordered_atomic_1( s: * mut u8 , c: u8 , bytes: usize ) -> ( ) {
172
- memset_element_unordered_atomic( s, c, bytes) ;
173
- }
174
- #[ cfg( target_has_atomic_load_store = "16" ) ]
175
- pub unsafe extern "C" fn __llvm_memset_element_unordered_atomic_2( s: * mut u16 , c: u8 , bytes: usize ) -> ( ) {
176
- memset_element_unordered_atomic( s, c, bytes) ;
177
- }
178
- #[ cfg( target_has_atomic_load_store = "32" ) ]
179
- pub unsafe extern "C" fn __llvm_memset_element_unordered_atomic_4( s: * mut u32 , c: u8 , bytes: usize ) -> ( ) {
180
- memset_element_unordered_atomic( s, c, bytes) ;
181
- }
182
- #[ cfg( target_has_atomic_load_store = "64" ) ]
183
- pub unsafe extern "C" fn __llvm_memset_element_unordered_atomic_8( s: * mut u64 , c: u8 , bytes: usize ) -> ( ) {
184
- memset_element_unordered_atomic( s, c, bytes) ;
185
- }
186
- #[ cfg( target_has_atomic_load_store = "128" ) ]
187
- pub unsafe extern "C" fn __llvm_memset_element_unordered_atomic_16( s: * mut u128 , c: u8 , bytes: usize ) -> ( ) {
188
- memset_element_unordered_atomic( s, c, bytes) ;
189
- }
190
- }
0 commit comments