+2010-04-01 Zoltan Varga <vargaz@gmail.com>
+
+ * decompose.c (mono_decompose_opcode): Set the cfg exception if the unsupported
+ float conv.ovf.un opcodes are encountered, instead of asserting later.
+ Fixes #566296.
+
2010-04-01 Zoltan Varga <vargaz@gmail.com>
* decompose.c (mono_decompose_opcode): Add OP_ICONV_TO_U4_UN as a no-op.
* Returns a MonoInst which represents the result of the decomposition, and can
* be pushed on the IL stack. This is needed because the original instruction is
* nullified.
+ * Sets the cfg exception if an opcode is not supported.
*/
MonoInst*
mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins)
ins->opcode = OP_FMOVE;
break;
+ case OP_FCONV_TO_OVF_I1_UN:
+ case OP_FCONV_TO_OVF_I2_UN:
+ case OP_FCONV_TO_OVF_I4_UN:
+ case OP_FCONV_TO_OVF_I8_UN:
+ case OP_FCONV_TO_OVF_U1_UN:
+ case OP_FCONV_TO_OVF_U2_UN:
+ case OP_FCONV_TO_OVF_U4_UN:
+ case OP_FCONV_TO_OVF_U8_UN:
+ case OP_FCONV_TO_OVF_I_UN:
+ case OP_FCONV_TO_OVF_U_UN:
+ cfg->exception_type = MONO_EXCEPTION_INVALID_PROGRAM;
+ cfg->exception_message = g_strdup_printf ("float conv.ovf.un opcodes not supported.");
+ break;
+
/* Long opcodes on 64 bit machines */
#if SIZEOF_REGISTER == 8
case OP_LCONV_TO_I4: