@@ -82,14 +82,14 @@ private static void WritePrimaryConvertMethod(IndentedTextWriter writer)
8282 writer . WriteLine ( "if (typeof(TFrom) == typeof(TTo))" ) ;
8383 using ( new CurlyBrackets ( writer ) )
8484 {
85- writer . WriteLine ( "return Unsafe.As <TFrom, TTo>(ref value);" ) ;
85+ writer . WriteLine ( "return Unsafe.BitCast <TFrom, TTo>(value);" ) ;
8686 }
8787 foreach ( CSharpPrimitives . Data from in CSharpPrimitives . List )
8888 {
8989 writer . WriteLine ( $ "else if (typeof(TFrom) == typeof({ from . LangName } ))") ;
9090 using ( new CurlyBrackets ( writer ) )
9191 {
92- writer . WriteLine ( $ "return { ConvertMethodName ( from . Type ) } <TTo>(Unsafe.As <TFrom, { from . LangName } >(ref value));") ;
92+ writer . WriteLine ( $ "return { ConvertMethodName ( from . Type ) } <TTo>(Unsafe.BitCast <TFrom, { from . LangName } >(value));") ;
9393 }
9494 }
9595 writer . WriteLine ( "else" ) ;
@@ -133,32 +133,32 @@ private static void WriteConvertMethod(IndentedTextWriter writer, CSharpPrimitiv
133133 {
134134 if ( from == to )
135135 {
136- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref value);") ;
136+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(value);") ;
137137 }
138138 else if ( to . HasPointerSize ( out CSharpPrimitives . Data ? bit32To , out CSharpPrimitives . Data ? bit64To ) )
139139 {
140140 using ( new If ( writer , "IntPtr.Size == sizeof(int)" ) )
141141 {
142142 writer . WriteLine ( $ "{ to . LangName } converted = ({ to . LangName } ){ methodName } <{ bit32To . LangName } >(value);") ;
143- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
143+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
144144 }
145145 using ( new Else ( writer ) )
146146 {
147147 writer . WriteLine ( $ "{ to . LangName } converted = ({ to . LangName } ){ methodName } <{ bit64To . LangName } >(value);") ;
148- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
148+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
149149 }
150150 }
151151 else if ( to . IsSignedInteger ( out CSharpPrimitives . Data ? unsignedTo ) )
152152 {
153153 writer . WriteLine ( $ "{ to . LangName } converted = { ChangeSign } ({ methodName } <{ unsignedTo . LangName } >(value));") ;
154- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
154+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
155155 }
156156 else if ( from . IsFloatingPoint )
157157 {
158158 if ( to . IsFloatingPoint )
159159 {
160160 writer . WriteLine ( $ "{ to . LangName } converted = ({ to . LangName } )value;") ;
161- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
161+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
162162 }
163163 else
164164 {
@@ -176,7 +176,7 @@ private static void WriteConvertMethod(IndentedTextWriter writer, CSharpPrimitiv
176176 string maxValue = to . MaxValue ;
177177 writer . WriteLine ( $ "{ from . LangName } x = value * ({ from . LangName } ){ maxValue } ;") ;
178178 writer . WriteLine ( $ "{ to . LangName } converted = ({ from . LangName } ){ maxValue } < x ? { maxValue } : (x > ({ from . LangName } ){ minValue } ? ({ to . LangName } )x : { minValue } );") ;
179- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
179+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
180180 }
181181 }
182182 }
@@ -191,12 +191,12 @@ private static void WriteConvertMethod(IndentedTextWriter writer, CSharpPrimitiv
191191 writer . WriteComment ( $ "There isn't enough precision to convert from { from . LangName } to { to . LangName } , so we convert to { conversionType . LangName } first.") ;
192192 writer . WriteLine ( $ "{ conversionType . LangName } x = { methodName } <{ conversionType . LangName } >(value);") ;
193193 writer . WriteLine ( $ "{ to . LangName } converted = ({ to . LangName } )x;") ;
194- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
194+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
195195 }
196196 else
197197 {
198198 writer . WriteLine ( $ "{ to . LangName } converted = ({ to . LangName } )value / ({ to . LangName } ){ from . MaxValue } ;") ;
199- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
199+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
200200 }
201201 }
202202 else
@@ -216,7 +216,7 @@ private static void WriteConvertMethod(IndentedTextWriter writer, CSharpPrimitiv
216216 writer . Write ( $ "(({ conversionType } )value << { i * from . Size * 8 } ) | ") ;
217217 }
218218 writer . WriteLine ( "value);" ) ;
219- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
219+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
220220 }
221221 }
222222 else
@@ -227,14 +227,14 @@ private static void WriteConvertMethod(IndentedTextWriter writer, CSharpPrimitiv
227227 writer . WriteComment ( "This is a special case where we already know an optimal algorithm." ) ;
228228 writer . WriteLine ( "uint x = (value * 255u + 32895u) >> 16;" ) ;
229229 writer . WriteLine ( "byte converted = unchecked((byte)x);" ) ;
230- writer . WriteLine ( "return Unsafe.As <byte, TTo>(ref converted);" ) ;
230+ writer . WriteLine ( "return Unsafe.BitCast <byte, TTo>(converted);" ) ;
231231 }
232232 else if ( from . Size < sizeof ( double ) && to . Size < sizeof ( double ) )
233233 {
234234 writer . WriteLine ( $ "double interpolated = (double)value / (double){ from . MaxValue } ;") ;
235235 writer . WriteLine ( $ "double exact = interpolated * (double){ to . MaxValue } ;") ;
236236 writer . WriteLine ( $ "{ to . LangName } converted = ({ to . LangName } )double.Round(exact, MidpointRounding.AwayFromZero);") ;
237- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
237+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
238238 }
239239 else
240240 {
@@ -245,7 +245,7 @@ private static void WriteConvertMethod(IndentedTextWriter writer, CSharpPrimitiv
245245 {
246246 int offset = ( from . Size / to . Size - 1 ) * to . Size * 8 ;
247247 writer . WriteLine ( $ "{ to . LangName } converted = ({ to . LangName } )(({ conversionType } )value >> { offset } );") ;
248- writer . WriteLine ( $ "return Unsafe.As <{ to . LangName } , TTo>(ref converted);") ;
248+ writer . WriteLine ( $ "return Unsafe.BitCast <{ to . LangName } , TTo>(converted);") ;
249249 }
250250 }
251251 }
@@ -276,7 +276,7 @@ private static void WriteGetValueMethod(IndentedTextWriter writer, string method
276276 using ( new CurlyBrackets ( writer ) )
277277 {
278278 writer . WriteLine ( $ "{ from . LangName } value = { methodName } Safe<{ from . LangName } >();") ;
279- writer . WriteLine ( $ "return Unsafe.As <{ from . LangName } , T>(ref value);") ;
279+ writer . WriteLine ( $ "return Unsafe.BitCast <{ from . LangName } , T>(value);") ;
280280 }
281281 }
282282 writer . WriteLine ( "else" ) ;
0 commit comments