@@ -835,6 +835,8 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
835
835
case ILOpcode . conv_u2 :
836
836
case ILOpcode . conv_u4 :
837
837
case ILOpcode . conv_u8 :
838
+ case ILOpcode . conv_r4 :
839
+ case ILOpcode . conv_r8 :
838
840
{
839
841
StackEntry popped = stack . Pop ( ) ;
840
842
if ( popped . ValueKind . WithNormalizedNativeInt ( context ) == StackValueKind . Int32 )
@@ -874,6 +876,12 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
874
876
case ILOpcode . conv_u8 :
875
877
stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( ( uint ) val ) ) ;
876
878
break ;
879
+ case ILOpcode . conv_r4 :
880
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromSingle ( ( float ) val ) ) ;
881
+ break ;
882
+ case ILOpcode . conv_r8 :
883
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromDouble ( ( double ) val ) ) ;
884
+ break ;
877
885
default :
878
886
return Status . Fail ( methodIL . OwningMethod , opcode ) ;
879
887
}
@@ -912,6 +920,12 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
912
920
case ILOpcode . conv_u8 :
913
921
stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( val ) ) ;
914
922
break ;
923
+ case ILOpcode . conv_r4 :
924
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromSingle ( ( float ) val ) ) ;
925
+ break ;
926
+ case ILOpcode . conv_r8 :
927
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromDouble ( ( double ) val ) ) ;
928
+ break ;
915
929
default :
916
930
return Status . Fail ( methodIL . OwningMethod , opcode ) ;
917
931
}
@@ -921,9 +935,41 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
921
935
double val = popped . Value . AsDouble ( ) ;
922
936
switch ( opcode )
923
937
{
938
+ case ILOpcode . conv_i :
939
+ case ILOpcode . conv_u :
940
+ stack . Push ( StackValueKind . NativeInt ,
941
+ context . Target . PointerSize == 8 ? ValueTypeValue . FromInt64 ( ( long ) val ) : ValueTypeValue . FromInt32 ( ( int ) val ) ) ;
942
+ break ;
943
+ case ILOpcode . conv_i1 :
944
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( sbyte ) val ) ) ;
945
+ break ;
946
+ case ILOpcode . conv_i2 :
947
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( short ) val ) ) ;
948
+ break ;
949
+ case ILOpcode . conv_i4 :
950
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( int ) val ) ) ;
951
+ break ;
924
952
case ILOpcode . conv_i8 :
925
953
stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( ( long ) val ) ) ;
926
954
break ;
955
+ case ILOpcode . conv_u1 :
956
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( byte ) val ) ) ;
957
+ break ;
958
+ case ILOpcode . conv_u2 :
959
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( ushort ) val ) ) ;
960
+ break ;
961
+ case ILOpcode . conv_u4 :
962
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( int ) val ) ) ;
963
+ break ;
964
+ case ILOpcode . conv_u8 :
965
+ stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( ( long ) val ) ) ;
966
+ break ;
967
+ case ILOpcode . conv_r4 :
968
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromSingle ( ( float ) val ) ) ;
969
+ break ;
970
+ case ILOpcode . conv_r8 :
971
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromDouble ( val ) ) ;
972
+ break ;
927
973
default :
928
974
return Status . Fail ( methodIL . OwningMethod , opcode ) ;
929
975
}
0 commit comments