@@ -58,56 +58,56 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
58
58
// Copy bytes which are multiples of 16 and leave the remainder for MCPY01 to handle.
59
59
Debug . Assert ( len > 16 && len <= 64 ) ;
60
60
#if HAS_CUSTOM_BLOCKS
61
- Unsafe . As < byte , Block16 > ( ref dest ) = Unsafe. As < byte , Block16 > ( ref src ) ; // [0,16]
61
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < Block16 > ( ref src ) ) ;
62
62
#elif TARGET_64BIT
63
- Unsafe . As < byte , long > ( ref dest ) = Unsafe. As < byte , long > ( ref src ) ;
64
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 8 ) ) ; // [0,16]
63
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < long > ( ref src ) ) ;
64
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 8 ) ) ) ;
65
65
#else
66
- Unsafe . As < byte , int > ( ref dest ) = Unsafe. As < byte , int > ( ref src ) ;
67
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 4 ) ) ;
68
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 8 ) ) ;
69
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 12 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 12 ) ) ; // [0,16]
66
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < int > ( ref src ) ) ;
67
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 4 ) ) ) ;
68
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 8 ) ) ) ;
69
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 12 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 12 ) ) ) ;
70
70
#endif
71
71
if ( len <= 32 )
72
72
goto MCPY01 ;
73
73
#if HAS_CUSTOM_BLOCKS
74
- Unsafe . As < byte , Block16 > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , Block16 > ( ref Unsafe . Add ( ref src , 16 ) ) ; // [0,32]
74
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < Block16 > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
75
75
#elif TARGET_64BIT
76
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 16 ) ) ;
77
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 24 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 24 ) ) ; // [0,32]
76
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
77
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 24 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 24 ) ) ) ;
78
78
#else
79
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 16 ) ) ;
80
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 20 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 20 ) ) ;
81
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 24 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 24 ) ) ;
82
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 28 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 28 ) ) ; // [0,32]
79
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
80
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 20 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 20 ) ) ) ;
81
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 24 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 24 ) ) ) ;
82
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 28 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 28 ) ) ) ;
83
83
#endif
84
84
if ( len <= 48 )
85
85
goto MCPY01 ;
86
86
#if HAS_CUSTOM_BLOCKS
87
- Unsafe . As < byte , Block16 > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , Block16 > ( ref Unsafe . Add ( ref src , 32 ) ) ; // [0,48]
87
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < Block16 > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
88
88
#elif TARGET_64BIT
89
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 32 ) ) ;
90
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 40 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 40 ) ) ; // [0,48]
89
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
90
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 40 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 40 ) ) ) ;
91
91
#else
92
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 32 ) ) ;
93
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 36 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 36 ) ) ;
94
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 40 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 40 ) ) ;
95
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 44 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 44 ) ) ; // [0,48]
92
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
93
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 36 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 36 ) ) ) ;
94
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 40 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 40 ) ) ) ;
95
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 44 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 44 ) ) ) ;
96
96
#endif
97
97
98
98
MCPY01 :
99
99
// Unconditionally copy the last 16 bytes using destEnd and srcEnd and return.
100
100
Debug . Assert ( len > 16 && len <= 64 ) ;
101
101
#if HAS_CUSTOM_BLOCKS
102
- Unsafe . As < byte , Block16 > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , Block16 > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
102
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < Block16 > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
103
103
#elif TARGET_64BIT
104
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
105
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
104
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
105
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
106
106
#else
107
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
108
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 12 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 12 ) ) ;
109
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
110
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ;
107
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
108
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 12 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 12 ) ) ) ;
109
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
110
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ) ;
111
111
#endif
112
112
return ;
113
113
@@ -117,13 +117,13 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
117
117
goto MCPY03 ;
118
118
Debug . Assert ( len >= 8 && len <= 16 ) ;
119
119
#if TARGET_64BIT
120
- Unsafe . As < byte , long > ( ref dest ) = Unsafe. As < byte , long > ( ref src ) ;
121
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
120
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < long > ( ref src ) ) ;
121
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
122
122
#else
123
- Unsafe . As < byte , int > ( ref dest ) = Unsafe. As < byte , int > ( ref src ) ;
124
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 4 ) ) ;
125
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
126
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ;
123
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < int > ( ref src ) ) ;
124
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 4 ) ) ) ;
125
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
126
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ) ;
127
127
#endif
128
128
return ;
129
129
@@ -132,8 +132,8 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
132
132
if ( ( len & 4 ) == 0 )
133
133
goto MCPY04 ;
134
134
Debug . Assert ( len >= 4 && len < 8 ) ;
135
- Unsafe . As < byte , int > ( ref dest ) = Unsafe. As < byte , int > ( ref src ) ;
136
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ;
135
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < int > ( ref src ) ) ;
136
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ) ;
137
137
return ;
138
138
139
139
MCPY04 :
@@ -144,7 +144,7 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
144
144
dest = src ;
145
145
if ( ( len & 2 ) == 0 )
146
146
return ;
147
- Unsafe . As < byte , short > ( ref Unsafe . Add ( ref destEnd , - 2 ) ) = Unsafe. As < byte , short > ( ref Unsafe . Add ( ref srcEnd , - 2 ) ) ;
147
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 2 ) , Unsafe . ReadUnaligned < short > ( ref Unsafe . Add ( ref srcEnd , - 2 ) ) ) ;
148
148
return ;
149
149
150
150
MCPY05 :
@@ -163,7 +163,7 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
163
163
// dest is more important to align than src because an unaligned store is more expensive
164
164
// than an unaligned load.
165
165
nuint misalignedElements = 64 - ( nuint ) Unsafe . AsPointer ( ref dest ) & 63 ;
166
- Unsafe . As < byte , Block64 > ( ref dest ) = Unsafe. As < byte , Block64 > ( ref src ) ;
166
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < Block64 > ( ref src ) ) ;
167
167
src = ref Unsafe . Add ( ref src , misalignedElements ) ;
168
168
dest = ref Unsafe . Add ( ref dest , misalignedElements ) ;
169
169
len -= misalignedElements ;
@@ -177,33 +177,33 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
177
177
178
178
MCPY06 :
179
179
#if HAS_CUSTOM_BLOCKS
180
- Unsafe . As < byte , Block64 > ( ref dest ) = Unsafe. As < byte , Block64 > ( ref src ) ;
180
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < Block64 > ( ref src ) ) ;
181
181
#elif TARGET_64BIT
182
- Unsafe . As < byte , long > ( ref dest ) = Unsafe. As < byte , long > ( ref src ) ;
183
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 8 ) ) ;
184
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 16 ) ) ;
185
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 24 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 24 ) ) ;
186
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 32 ) ) ;
187
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 40 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 40 ) ) ;
188
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 48 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 48 ) ) ;
189
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref dest , 56 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref src , 56 ) ) ;
182
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < long > ( ref src ) ) ;
183
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 8 ) ) ) ;
184
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
185
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 24 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 24 ) ) ) ;
186
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
187
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 40 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 40 ) ) ) ;
188
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 48 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 48 ) ) ) ;
189
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 56 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref src , 56 ) ) ) ;
190
190
#else
191
- Unsafe . As < byte , int > ( ref dest ) = Unsafe. As < byte , int > ( ref src ) ;
192
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 4 ) ) ;
193
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 8 ) ) ;
194
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 12 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 12 ) ) ;
195
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 16 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 16 ) ) ;
196
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 20 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 20 ) ) ;
197
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 24 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 24 ) ) ;
198
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 28 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 28 ) ) ;
199
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 32 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 32 ) ) ;
200
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 36 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 36 ) ) ;
201
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 40 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 40 ) ) ;
202
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 44 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 44 ) ) ;
203
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 48 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 48 ) ) ;
204
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 52 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 52 ) ) ;
205
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 56 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 56 ) ) ;
206
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref dest , 60 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref src , 60 ) ) ;
191
+ Unsafe . WriteUnaligned ( ref dest , Unsafe . ReadUnaligned < int > ( ref src ) ) ;
192
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 4 ) ) ) ;
193
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 8 ) ) ) ;
194
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 12 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 12 ) ) ) ;
195
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 16 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 16 ) ) ) ;
196
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 20 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 20 ) ) ) ;
197
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 24 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 24 ) ) ) ;
198
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 28 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 28 ) ) ) ;
199
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 32 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 32 ) ) ) ;
200
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 36 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 36 ) ) ) ;
201
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 40 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 40 ) ) ) ;
202
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 44 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 44 ) ) ) ;
203
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 48 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 48 ) ) ) ;
204
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 52 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 52 ) ) ) ;
205
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 56 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 56 ) ) ) ;
206
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref dest , 60 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref src , 60 ) ) ) ;
207
207
#endif
208
208
dest = ref Unsafe . Add ( ref dest , 64 ) ;
209
209
src = ref Unsafe . Add ( ref src , 64 ) ;
@@ -215,15 +215,15 @@ internal static unsafe void Memmove(ref byte dest, ref byte src, nuint len)
215
215
if ( len > 16 )
216
216
goto MCPY00 ;
217
217
#if HAS_CUSTOM_BLOCKS
218
- Unsafe . As < byte , Block16 > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , Block16 > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
218
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < Block16 > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
219
219
#elif TARGET_64BIT
220
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
221
- Unsafe . As < byte , long > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
220
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
221
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < long > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
222
222
#else
223
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 16 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ;
224
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 12 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 12 ) ) ;
225
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 8 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ;
226
- Unsafe . As < byte , int > ( ref Unsafe . Add ( ref destEnd , - 4 ) ) = Unsafe. As < byte , int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ;
223
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 16 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 16 ) ) ) ;
224
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 12 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 12 ) ) ) ;
225
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 8 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 8 ) ) ) ;
226
+ Unsafe . WriteUnaligned ( ref Unsafe . Add ( ref destEnd , - 4 ) , Unsafe . ReadUnaligned < int > ( ref Unsafe . Add ( ref srcEnd , - 4 ) ) ) ;
227
227
#endif
228
228
return ;
229
229
0 commit comments