@@ -151,56 +151,56 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
151
151
// Copy bytes which are multiples of 16 and leave the remainder for MCPY01 to handle.
152
152
Debug . Assert ( len > 16 && len <= 64 ) ;
153
153
#if HAS_CUSTOM_BLOCKS
154
- Unsafe . As < byte , Block16 > ( ref dest ) = Unsafe. As < byte , Block16 > ( ref src ) ; // [0,16]
154
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < Block16 > ( ref src ) ) ; // [0,16]
155
155
#elif TARGET_64BIT
156
- Unsafe . As < byte , long > ( ref dest ) = Unsafe. As < byte , long > ( ref src ) ;
157
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 8 ) ) ; // [0,16]
156
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < long > ( ref src ) ) ;
157
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 8 ) ) ) ; // [0,16]
158
158
#else
159
- Unsafe . As < byte , int > ( ref dest ) = Unsafe. As < byte , int > ( ref src ) ;
160
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 4 ) ) ;
161
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 8 ) ) ;
162
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 12 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 12 ) ) ; // [0,16]
159
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < int > ( ref src ) ) ;
160
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 4 ) ) ) ;
161
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 8 ) ) ) ;
162
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 12 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 12 ) ) ) ; // [0,16]
163
163
#endif
164
164
if ( len <= 32 )
165
165
goto MCPY01 ;
166
166
#if HAS_CUSTOM_BLOCKS
167
- Unsafe . As < byte , Block16 > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , Block16 > ( ref Unsafe . Add ( ref src , 16 ) ) ; // [0,32]
167
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < Block16 > ( ref Unsafe . Add ( ref src , 16 ) ) ) ; // [0,32]
168
168
#elif TARGET_64BIT
169
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 16 ) ) ;
170
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 24 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 24 ) ) ; // [0,32]
169
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
170
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 24 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 24 ) ) ) ; // [0,32]
171
171
#else
172
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 16 ) ) ;
173
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 20 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 20 ) ) ;
174
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 24 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 24 ) ) ;
175
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 28 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 28 ) ) ; // [0,32]
172
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
173
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 20 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 20 ) ) ) ;
174
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 24 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 24 ) ) ) ;
175
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 28 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 28 ) ) ) ; // [0,32]
176
176
#endif
177
177
if ( len <= 48 )
178
178
goto MCPY01 ;
179
179
#if HAS_CUSTOM_BLOCKS
180
- Unsafe . As < byte , Block16 > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , Block16 > ( ref Unsafe . Add ( ref src , 32 ) ) ; // [0,48]
180
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < Block16 > ( ref Unsafe . Add ( ref src , 32 ) ) ) ; // [0,48]
181
181
#elif TARGET_64BIT
182
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 32 ) ) ;
183
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 40 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 40 ) ) ; // [0,48]
182
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
183
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 40 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 40 ) ) ) ; // [0,48]
184
184
#else
185
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 32 ) ) ;
186
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 36 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 36 ) ) ;
187
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 40 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 40 ) ) ;
188
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 44 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 44 ) ) ; // [0,48]
185
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
186
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 36 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 36 ) ) ) ;
187
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 40 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 40 ) ) ) ;
188
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 44 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 44 ) ) ) ; // [0,48]
189
189
#endif
190
190
191
191
MCPY01 :
192
192
// Unconditionally copy the last 16 bytes using destEnd and srcEnd and return.
193
193
Debug . Assert ( len > 16 && len <= 64 ) ;
194
194
#if HAS_CUSTOM_BLOCKS
195
- Unsafe . As < byte , Block16 > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , Block16 > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
195
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < Block16 > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
196
196
#elif TARGET_64BIT
197
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
198
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
197
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
198
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
199
199
#else
200
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
201
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 12 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 12 ) ) ;
202
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
203
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ;
200
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
201
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 12 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 12 ) ) ) ;
202
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
203
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ) ;
204
204
#endif
205
205
return ;
206
206
@@ -210,13 +210,13 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
210
210
goto MCPY03 ;
211
211
Debug . Assert ( len >= 8 && len <= 16 ) ;
212
212
#if TARGET_64BIT
213
- Unsafe . As < byte , long > ( ref dest ) = Unsafe. As < byte , long > ( ref src ) ;
214
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
213
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < long > ( ref src ) ) ;
214
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
215
215
#else
216
- Unsafe . As < byte , int > ( ref dest ) = Unsafe. As < byte , int > ( ref src ) ;
217
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 4 ) ) ;
218
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
219
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ;
216
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < int > ( ref src ) ) ;
217
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 4 ) ) ) ;
218
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
219
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ) ;
220
220
#endif
221
221
return ;
222
222
@@ -225,8 +225,8 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
225
225
if ( ( len & 4 ) == 0 )
226
226
goto MCPY04 ;
227
227
Debug . Assert ( len >= 4 && len < 8 ) ;
228
- Unsafe . As < byte , int > ( ref dest ) = Unsafe. As < byte , int > ( ref src ) ;
229
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ;
228
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < int > ( ref src ) ) ;
229
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ) ;
230
230
return ;
231
231
232
232
MCPY04 :
@@ -237,7 +237,7 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
237
237
dest = src ;
238
238
if ( ( len & 2 ) == 0 )
239
239
return ;
240
- Unsafe . As < byte , short > ( ref Unsafe . Add ( ref destEnd , - 2 ) ) = Unsafe. As < byte , short > ( ref Unsafe . Add ( ref srcEnd , - 2 ) ) ;
240
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 2 ) , Unsafe . ReadUnaligned < short > ( ref Unsafe . Add ( ref srcEnd , - 2 ) ) ) ;
241
241
return ;
242
242
243
243
MCPY05 :
@@ -256,7 +256,7 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
256
256
// dest is more important to align than src because an unaligned store is more expensive
257
257
// than an unaligned load.
258
258
nuint misalignedElements = 64 - ( nuint ) Unsafe . AsPointer ( ref dest ) & 63 ;
259
- Unsafe . As < byte , Block64 > ( ref dest ) = Unsafe. As < byte , Block64 > ( ref src ) ;
259
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < Block64 > ( ref src ) ) ;
260
260
src = ref Unsafe . Add ( ref src , misalignedElements ) ;
261
261
dest = ref Unsafe . Add ( ref dest , misalignedElements ) ;
262
262
len -= misalignedElements ;
@@ -270,33 +270,33 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
270
270
271
271
MCPY06 :
272
272
#if HAS_CUSTOM_BLOCKS
273
- Unsafe . As < byte , Block64 > ( ref dest ) = Unsafe. As < byte , Block64 > ( ref src ) ;
273
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < Block64 > ( ref src ) ) ;
274
274
#elif TARGET_64BIT
275
- Unsafe . As < byte , long > ( ref dest ) = Unsafe. As < byte , long > ( ref src ) ;
276
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 8 ) ) ;
277
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 16 ) ) ;
278
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 24 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 24 ) ) ;
279
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 32 ) ) ;
280
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 40 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 40 ) ) ;
281
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 48 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 48 ) ) ;
282
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 56 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 56 ) ) ;
275
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < long > ( ref src ) ) ;
276
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 8 ) ) ) ;
277
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
278
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 24 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 24 ) ) ) ;
279
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
280
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 40 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 40 ) ) ) ;
281
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 48 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 48 ) ) ) ;
282
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 56 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 56 ) ) ) ;
283
283
#else
284
- Unsafe . As < byte , int > ( ref dest ) = Unsafe. As < byte , int > ( ref src ) ;
285
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 4 ) ) ;
286
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 8 ) ) ;
287
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 12 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 12 ) ) ;
288
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 16 ) ) ;
289
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 20 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 20 ) ) ;
290
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 24 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 24 ) ) ;
291
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 28 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 28 ) ) ;
292
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 32 ) ) ;
293
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 36 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 36 ) ) ;
294
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 40 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 40 ) ) ;
295
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 44 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 44 ) ) ;
296
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 48 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 48 ) ) ;
297
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 52 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 52 ) ) ;
298
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 56 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 56 ) ) ;
299
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 60 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 60 ) ) ;
284
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < int > ( ref src ) ) ;
285
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 4 ) ) ) ;
286
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 8 ) ) ) ;
287
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 12 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 12 ) ) ) ;
288
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
289
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 20 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 20 ) ) ) ;
290
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 24 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 24 ) ) ) ;
291
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 28 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 28 ) ) ) ;
292
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
293
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 36 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 36 ) ) ) ;
294
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 40 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 40 ) ) ) ;
295
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 44 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 44 ) ) ) ;
296
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 48 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 48 ) ) ) ;
297
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 52 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 52 ) ) ) ;
298
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 56 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 56 ) ) ) ;
299
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 60 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 60 ) ) ) ;
300
300
#endif
301
301
dest = ref Unsafe . Add ( ref dest , 64 ) ;
302
302
src = ref Unsafe . Add ( ref src , 64 ) ;
@@ -308,15 +308,15 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
308
308
if ( len > 16 )
309
309
goto MCPY00 ;
310
310
#if HAS_CUSTOM_BLOCKS
311
- Unsafe . As < byte , Block16 > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , Block16 > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
311
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < Block16 > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
312
312
#elif TARGET_64BIT
313
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
314
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
313
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
314
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
315
315
#else
316
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
317
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 12 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 12 ) ) ;
318
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
319
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ;
316
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
317
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 12 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 12 ) ) ) ;
318
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
319
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ) ;
320
320
#endif
321
321
return ;
322
322
0 commit comments