@@ -835,6 +835,8 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
835835 case ILOpcode . conv_u2 :
836836 case ILOpcode . conv_u4 :
837837 case ILOpcode . conv_u8 :
838+ case ILOpcode . conv_r4 :
839+ case ILOpcode . conv_r8 :
838840 {
839841 StackEntry popped = stack . Pop ( ) ;
840842 if ( popped . ValueKind . WithNormalizedNativeInt ( context ) == StackValueKind . Int32 )
@@ -874,6 +876,12 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
874876 case ILOpcode . conv_u8 :
875877 stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( ( uint ) val ) ) ;
876878 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 ;
877885 default :
878886 return Status . Fail ( methodIL . OwningMethod , opcode ) ;
879887 }
@@ -912,6 +920,12 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
912920 case ILOpcode . conv_u8 :
913921 stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( val ) ) ;
914922 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 ;
915929 default :
916930 return Status . Fail ( methodIL . OwningMethod , opcode ) ;
917931 }
@@ -921,9 +935,41 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
921935 double val = popped . Value . AsDouble ( ) ;
922936 switch ( opcode )
923937 {
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 ;
924952 case ILOpcode . conv_i8 :
925953 stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( ( long ) val ) ) ;
926954 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 ;
927973 default :
928974 return Status . Fail ( methodIL . OwningMethod , opcode ) ;
929975 }
0 commit comments