ip += 4;
MINT_IN_BREAK;
}
- MINT_IN_CASE(MINT_CONV_OVF_I4_UN_R8) {
- double val = LOCAL_VAR (ip [2], double);
- if (val < 0 || val > G_MAXINT32)
- THROW_EX (mono_get_exception_overflow (), ip);
- LOCAL_VAR (ip [1], gint32) = (gint32)val;
- ip += 3;
- MINT_IN_BREAK;
- }
MINT_IN_CASE(MINT_CONV_OVF_U8_I4) {
gint32 val = LOCAL_VAR (ip [2], gint32);
if (val < 0)
ip += 3;
MINT_IN_BREAK;
}
- MINT_IN_CASE(MINT_CONV_OVF_I8_UN_R8) {
- double val = LOCAL_VAR (ip [2], double);
- if (val < 0 || mono_isnan (val) || mono_trunc (val) != (gint64)val)
- THROW_EX (mono_get_exception_overflow (), ip);
- LOCAL_VAR (ip [1], gint64) = (gint64)val;
- ip += 3;
- MINT_IN_BREAK;
- }
- MINT_IN_CASE(MINT_CONV_OVF_I8_UN_R4) {
- float val = LOCAL_VAR (ip [2], float);
- if (val < 0 || mono_isnan (val) || mono_trunc (val) != (gint64)val)
- THROW_EX (mono_get_exception_overflow (), ip);
- LOCAL_VAR (ip [1], gint64) = (gint64)val;
- ip += 3;
- MINT_IN_BREAK;
- }
MINT_IN_CASE(MINT_CONV_OVF_I8_R4) {
float val = LOCAL_VAR (ip [2], float);
if (mono_isnan (val) || mono_trunc (val) != (gint64)val)
ip += 3;
MINT_IN_BREAK;
}
- MINT_IN_CASE(MINT_CONV_OVF_I2_UN_R4) {
- float val = LOCAL_VAR (ip [2], float);
- if (val < 0 || val > G_MAXINT16 || isnan (val))
- THROW_EX (mono_get_exception_overflow (), ip);
- LOCAL_VAR (ip [1], gint32) = (gint16) val;
- ip += 3;
- MINT_IN_BREAK;
- }
- MINT_IN_CASE(MINT_CONV_OVF_I2_UN_R8) {
- double val = LOCAL_VAR (ip [2], double);
- if (val < 0 || val > G_MAXINT16 || isnan (val))
- THROW_EX (mono_get_exception_overflow (), ip);
- LOCAL_VAR (ip [1], gint32) = (gint16) val;
- MINT_IN_BREAK;
- }
MINT_IN_CASE(MINT_CONV_OVF_U2_I4) {
gint32 val = LOCAL_VAR (ip [2], gint32);
if (val < 0 || val > G_MAXUINT16)
ip += 3;
MINT_IN_BREAK;
}
- MINT_IN_CASE(MINT_CONV_OVF_I1_UN_R4) {
- float val = LOCAL_VAR (ip [2], float);
- if (val < 0 || val > G_MAXINT8 || isnan (val))
- THROW_EX (mono_get_exception_overflow (), ip);
- LOCAL_VAR (ip [1], gint32) = (gint8) val;
- ip += 3;
- MINT_IN_BREAK;
- }
- MINT_IN_CASE(MINT_CONV_OVF_I1_UN_R8) {
- double val = LOCAL_VAR (ip [2], double);
- if (val < 0 || val > G_MAXINT8 || isnan (val))
- THROW_EX (mono_get_exception_overflow (), ip);
- LOCAL_VAR (ip [1], gint32) = (gint8) val;
- ip += 3;
- MINT_IN_BREAK;
- }
MINT_IN_CASE(MINT_CONV_OVF_U1_I4) {
gint32 val = LOCAL_VAR (ip [2], gint32);
if (val < 0 || val > G_MAXUINT8)
OPDEF(MINT_CONV_OVF_I1_U4, "conv.ovf.i1.u4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_I1_U8, "conv.ovf.i1.u8", 3, 1, 1, MintOpNoArgs)
-OPDEF(MINT_CONV_OVF_I1_UN_R4, "conv.ovf.i1.un.r4", 3, 1, 1, MintOpNoArgs)
-OPDEF(MINT_CONV_OVF_I1_UN_R8, "conv.ovf.i1.un.r8", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_U1_I4, "conv.ovf.u1.i4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_U1_I8, "conv.ovf.u1.i8", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_I2_U4, "conv.ovf.i2.u4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_I2_U8, "conv.ovf.i2.u8", 3, 1, 1, MintOpNoArgs)
-OPDEF(MINT_CONV_OVF_I2_UN_R4, "conv.ovf.i2.un.r4", 3, 1, 1, MintOpNoArgs)
-OPDEF(MINT_CONV_OVF_I2_UN_R8, "conv.ovf.i2.un.r8", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_U2_I4, "conv.ovf.u2.i4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_U2_I8, "conv.ovf.u2.i8", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_I4_R4, "conv.ovf.i4.r4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_I4_R8, "conv.ovf.i4.r8", 3, 1, 1, MintOpNoArgs)
-OPDEF(MINT_CONV_OVF_I4_UN_R8, "conv.ovf.i4.un.r8", 3, 1, 1, MintOpNoArgs)
-
OPDEF(MINT_CONV_OVF_U4_I4, "conv.ovf.u4.i4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_U4_I8, "conv.ovf.u4.i8", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_U4_R4, "conv.ovf.u4.r4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_I8_R4, "conv.ovf.i8.r4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_I8_R8, "conv.ovf.i8.r8", 3, 1, 1, MintOpNoArgs)
-OPDEF(MINT_CONV_OVF_I8_UN_R8, "conv.ovf.i8.un.r8", 3, 1, 1, MintOpNoArgs)
-OPDEF(MINT_CONV_OVF_I8_UN_R4, "conv.ovf.i8.un.r4", 3, 1, 1, MintOpNoArgs)
-
OPDEF(MINT_CONV_OVF_U8_I4, "conv.ovf.u8.i4", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_U8_I8, "conv.ovf.u8.i8", 3, 1, 1, MintOpNoArgs)
OPDEF(MINT_CONV_OVF_U8_R4, "conv.ovf.u8.r4", 3, 1, 1, MintOpNoArgs)
}
#if SIZEOF_VOID_P == 8
case CEE_CONV_OVF_I_UN:
- case CEE_CONV_OVF_U_UN:
#endif
case CEE_CONV_OVF_I8_UN:
- case CEE_CONV_OVF_U8_UN:
CHECK_STACK (td, 1);
switch (td->sp [-1].type) {
+ case STACK_TYPE_R4:
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_OVF_I8_R4);
+ break;
case STACK_TYPE_R8:
- interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_OVF_I8_UN_R8);
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_OVF_I8_R8);
+ break;
+ case STACK_TYPE_I4:
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_I8_U4);
break;
case STACK_TYPE_I8:
- if (*td->ip == CEE_CONV_OVF_I8_UN || *td->ip == CEE_CONV_OVF_I_UN)
- interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_OVF_I8_U8);
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_OVF_I8_U8);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ ++td->ip;
+ break;
+#if SIZEOF_VOID_P == 8
+ case CEE_CONV_OVF_U_UN:
+#endif
+ case CEE_CONV_OVF_U8_UN:
+ CHECK_STACK (td, 1);
+ switch (td->sp [-1].type) {
+ case STACK_TYPE_R4:
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_OVF_U8_R4);
+ break;
+ case STACK_TYPE_R8:
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_OVF_U8_R8);
break;
case STACK_TYPE_I4:
interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_I8_U4);
break;
- case STACK_TYPE_R4:
- interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I8, MINT_CONV_OVF_I8_UN_R4);
+ case STACK_TYPE_I8:
break;
default:
g_assert_not_reached ();
CHECK_STACK (td, 1);
switch (td->sp [-1].type) {
case STACK_TYPE_R4:
- interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, is_un ? MINT_CONV_OVF_I1_UN_R4 : MINT_CONV_OVF_I1_R4);
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, MINT_CONV_OVF_I1_R4);
break;
case STACK_TYPE_R8:
- interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, is_un ? MINT_CONV_OVF_I1_UN_R8 : MINT_CONV_OVF_I1_R8);
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, MINT_CONV_OVF_I1_R8);
break;
case STACK_TYPE_I4:
interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, is_un ? MINT_CONV_OVF_I1_U4 : MINT_CONV_OVF_I1_I4);
CHECK_STACK (td, 1);
switch (td->sp [-1].type) {
case STACK_TYPE_R4:
- interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, is_un ? MINT_CONV_OVF_I2_UN_R4 : MINT_CONV_OVF_I2_R4);
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, MINT_CONV_OVF_I2_R4);
break;
case STACK_TYPE_R8:
- interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, is_un ? MINT_CONV_OVF_I2_UN_R8 : MINT_CONV_OVF_I2_R8);
+ interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, MINT_CONV_OVF_I2_R8);
break;
case STACK_TYPE_I4:
interp_add_conv (td, td->sp - 1, NULL, STACK_TYPE_I4, is_un ? MINT_CONV_OVF_I2_U4 : MINT_CONV_OVF_I2_I4);
if (sp [-1]->type == STACK_R8 || sp [-1]->type == STACK_R4) {
/* floats are always signed, _UN has no effect */
ADD_UNOP (CEE_CONV_OVF_I8);
- ADD_UNOP (il_op);
+ if (il_op == MONO_CEE_CONV_OVF_I1_UN)
+ ADD_UNOP (MONO_CEE_CONV_OVF_I1);
+ else if (il_op == MONO_CEE_CONV_OVF_I2_UN)
+ ADD_UNOP (MONO_CEE_CONV_OVF_I2);
+ else if (il_op == MONO_CEE_CONV_OVF_I4_UN)
+ ADD_UNOP (MONO_CEE_CONV_OVF_I4);
+ else if (il_op == MONO_CEE_CONV_OVF_I8_UN)
+ ;
+ else
+ ADD_UNOP (il_op);
} else {
ADD_UNOP (il_op);
}
<ExcludeList Include = "$(XunitTestBinBase)/JIT/Directed/debugging/poison/**">
<Issue>Tests coreclr JIT's debug poisoning of address taken variables</Issue>
</ExcludeList>
- <ExcludeList Include = "$(XunitTestBinBase)/JIT/IL_Conformance/TestConvertFromIntegral/**">
- <Issue>https://github.com/dotnet/runtime/issues/56784</Issue>
- </ExcludeList>
</ItemGroup>
<!-- Known failures for mono runtime on *all* architectures/operating systems in interpreter runtime mode -->