|
|
@@ -497,13 +497,10 @@ stackval_from_data (MonoType *type_, stackval *result, void *data, gboolean pinv
|
|
|
case MONO_TYPE_U4:
|
|
|
result->data.i = *(guint32*)data;
|
|
|
return;
|
|
|
- case MONO_TYPE_R4: {
|
|
|
- float tmp;
|
|
|
+ case MONO_TYPE_R4:
|
|
|
/* memmove handles unaligned case */
|
|
|
- memmove (&tmp, data, sizeof (float));
|
|
|
- result->data.f = tmp;
|
|
|
+ memmove (&result->data.f_r4, data, sizeof (float));
|
|
|
return;
|
|
|
- }
|
|
|
case MONO_TYPE_I8:
|
|
|
case MONO_TYPE_U8:
|
|
|
memmove (&result->data.l, data, sizeof (gint64));
|
|
|
@@ -597,9 +594,8 @@ stackval_to_data (MonoType *type_, stackval *val, void *data, gboolean pinvoke)
|
|
|
return;
|
|
|
}
|
|
|
case MONO_TYPE_R4: {
|
|
|
- float tmp = (float)val->data.f;
|
|
|
/* memmove handles unaligned case */
|
|
|
- memmove (data, &tmp, sizeof (float));
|
|
|
+ memmove (data, &val->data.f_r4, sizeof (float));
|
|
|
return;
|
|
|
}
|
|
|
case MONO_TYPE_R8: {
|
|
|
@@ -673,6 +669,7 @@ stackval_to_data_addr (MonoType *type_, stackval *val)
|
|
|
case MONO_TYPE_U8:
|
|
|
return &val->data.l;
|
|
|
case MONO_TYPE_R4:
|
|
|
+ return &val->data.f_r4;
|
|
|
case MONO_TYPE_R8:
|
|
|
return &val->data.f;
|
|
|
case MONO_TYPE_STRING:
|
|
|
@@ -1066,7 +1063,7 @@ static InterpMethodArguments* build_args_from_sig (MonoMethodSignature *sig, Int
|
|
|
case MONO_TYPE_R4:
|
|
|
case MONO_TYPE_R8:
|
|
|
if (ptype == MONO_TYPE_R4)
|
|
|
- * (float *) &(margs->fargs [int_f]) = (float) frame->stack_args [i].data.f;
|
|
|
+ * (float *) &(margs->fargs [int_f]) = frame->stack_args [i].data.f_r4;
|
|
|
else
|
|
|
margs->fargs [int_f] = frame->stack_args [i].data.f;
|
|
|
#if DEBUG_INTERP
|
|
|
@@ -1399,6 +1396,8 @@ dump_stackval (GString *str, stackval *s, MonoType *type)
|
|
|
g_string_append_printf (str, "[vt:%p] ", s->data.p);
|
|
|
break;
|
|
|
case MONO_TYPE_R4:
|
|
|
+ g_string_append_printf (str, "[%g] ", s->data.f_r4);
|
|
|
+ break;
|
|
|
case MONO_TYPE_R8:
|
|
|
g_string_append_printf (str, "[%g] ", s->data.f);
|
|
|
break;
|
|
|
@@ -1988,12 +1987,9 @@ do_jit_call (stackval *sp, unsigned char *vt_sp, ThreadContext *context, InterpF
|
|
|
case MONO_TYPE_U8:
|
|
|
args [pindex ++] = &sval->data.l;
|
|
|
break;
|
|
|
- case MONO_TYPE_R4: {
|
|
|
- float tmp = (float)sval->data.f;
|
|
|
- sval->data.i = *(int*)&tmp;
|
|
|
- args [pindex ++] = &sval->data.i;
|
|
|
+ case MONO_TYPE_R4:
|
|
|
+ args [pindex ++] = &sval->data.f_r4;
|
|
|
break;
|
|
|
- }
|
|
|
case MONO_TYPE_R8:
|
|
|
args [pindex ++] = &sval->data.f;
|
|
|
break;
|
|
|
@@ -2115,7 +2111,7 @@ do_jit_call (stackval *sp, unsigned char *vt_sp, ThreadContext *context, InterpF
|
|
|
sp->data.l = *(guint64*)res_buf;
|
|
|
break;
|
|
|
case MONO_TYPE_R4:
|
|
|
- sp->data.f = *(float*)res_buf;
|
|
|
+ sp->data.f_r4 = *(float*)res_buf;
|
|
|
break;
|
|
|
case MONO_TYPE_R8:
|
|
|
sp->data.f = *(double*)res_buf;
|
|
|
@@ -2775,7 +2771,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
guint32 val;
|
|
|
++ip;
|
|
|
val = READ32(ip);
|
|
|
- sp->data.f = * (float *)&val;
|
|
|
+ sp->data.f_r4 = * (float *)&val;
|
|
|
ip += 2;
|
|
|
++sp;
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3134,6 +3130,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BRFALSE_I8_S)
|
|
|
ZEROP_S(l, ==);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BRFALSE_R4_S)
|
|
|
+ ZEROP_S(f_r4, ==);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BRFALSE_R8_S)
|
|
|
ZEROP_S(f, ==);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3143,6 +3142,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BRFALSE_I8)
|
|
|
ZEROP(l, ==);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BRFALSE_R4)
|
|
|
+ ZEROP_S(f_r4, ==);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BRFALSE_R8)
|
|
|
ZEROP_S(f, ==);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3152,6 +3154,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BRTRUE_I8_S)
|
|
|
ZEROP_S(l, !=);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BRTRUE_R4_S)
|
|
|
+ ZEROP_S(f_r4, !=);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BRTRUE_R8_S)
|
|
|
ZEROP_S(f, !=);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3161,6 +3166,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BRTRUE_I8)
|
|
|
ZEROP(l, !=);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BRTRUE_R4)
|
|
|
+ ZEROP(f_r4, !=);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BRTRUE_R8)
|
|
|
ZEROP(f, !=);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3189,6 +3197,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BEQ_I8_S)
|
|
|
BRELOP_S(l, ==)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BEQ_R4_S)
|
|
|
+ CONDBR_S(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 == sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BEQ_R8_S)
|
|
|
CONDBR_S(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f == sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3198,6 +3209,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BEQ_I8)
|
|
|
BRELOP(l, ==)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BEQ_R4)
|
|
|
+ CONDBR(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 == sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BEQ_R8)
|
|
|
CONDBR(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f == sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3207,6 +3221,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BGE_I8_S)
|
|
|
BRELOP_S(l, >=)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BGE_R4_S)
|
|
|
+ CONDBR_S(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 >= sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BGE_R8_S)
|
|
|
CONDBR_S(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f >= sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3216,6 +3233,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BGE_I8)
|
|
|
BRELOP(l, >=)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BGE_R4)
|
|
|
+ CONDBR(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 >= sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BGE_R8)
|
|
|
CONDBR(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f >= sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3225,6 +3245,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BGT_I8_S)
|
|
|
BRELOP_S(l, >)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BGT_R4_S)
|
|
|
+ CONDBR_S(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 > sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BGT_R8_S)
|
|
|
CONDBR_S(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f > sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3234,6 +3257,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BGT_I8)
|
|
|
BRELOP(l, >)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BGT_R4)
|
|
|
+ CONDBR(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 > sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BGT_R8)
|
|
|
CONDBR(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f > sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3243,6 +3269,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BLT_I8_S)
|
|
|
BRELOP_S(l, <)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BLT_R4_S)
|
|
|
+ CONDBR_S(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 < sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BLT_R8_S)
|
|
|
CONDBR_S(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f < sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3252,6 +3281,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BLT_I8)
|
|
|
BRELOP(l, <)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BLT_R4)
|
|
|
+ CONDBR(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 < sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BLT_R8)
|
|
|
CONDBR(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f < sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3261,6 +3293,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BLE_I8_S)
|
|
|
BRELOP_S(l, <=)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BLE_R4_S)
|
|
|
+ CONDBR_S(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 <= sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BLE_R8_S)
|
|
|
CONDBR_S(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f <= sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3270,6 +3305,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BLE_I8)
|
|
|
BRELOP(l, <=)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BLE_R4)
|
|
|
+ CONDBR(!isunordered (sp [0].data.f_r4, sp [1].data.f_r4) && sp[0].data.f_r4 <= sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BLE_R8)
|
|
|
CONDBR(!mono_isunordered (sp [0].data.f, sp [1].data.f) && sp[0].data.f <= sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3279,6 +3317,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BNE_UN_I8_S)
|
|
|
BRELOP_S(l, !=)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BNE_UN_R4_S)
|
|
|
+ CONDBR_S(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 != sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BNE_UN_R8_S)
|
|
|
CONDBR_S(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f != sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3288,6 +3329,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BNE_UN_I8)
|
|
|
BRELOP(l, !=)
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BNE_UN_R4)
|
|
|
+ CONDBR(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 != sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BNE_UN_R8)
|
|
|
CONDBR(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f != sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3312,6 +3356,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BGE_UN_I8_S)
|
|
|
BRELOP_S_CAST(l, >=, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BGE_UN_R4_S)
|
|
|
+ CONDBR_S(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 >= sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BGE_UN_R8_S)
|
|
|
CONDBR_S(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f >= sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3321,6 +3368,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BGE_UN_I8)
|
|
|
BRELOP_CAST(l, >=, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BGE_UN_R4)
|
|
|
+ CONDBR(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 >= sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BGE_UN_R8)
|
|
|
CONDBR(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f >= sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3330,6 +3380,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BGT_UN_I8_S)
|
|
|
BRELOP_S_CAST(l, >, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BGT_UN_R4_S)
|
|
|
+ CONDBR_S(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 > sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BGT_UN_R8_S)
|
|
|
CONDBR_S(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f > sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3339,6 +3392,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BGT_UN_I8)
|
|
|
BRELOP_CAST(l, >, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BGT_UN_R4)
|
|
|
+ CONDBR(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 > sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BGT_UN_R8)
|
|
|
CONDBR(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f > sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3348,6 +3404,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BLE_UN_I8_S)
|
|
|
BRELOP_S_CAST(l, <=, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BLE_UN_R4_S)
|
|
|
+ CONDBR_S(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 <= sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BLE_UN_R8_S)
|
|
|
CONDBR_S(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f <= sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3357,6 +3416,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BLE_UN_I8)
|
|
|
BRELOP_CAST(l, <=, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BLE_UN_R4)
|
|
|
+ CONDBR(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 <= sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BLE_UN_R8)
|
|
|
CONDBR(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f <= sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3366,6 +3428,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BLT_UN_I8_S)
|
|
|
BRELOP_S_CAST(l, <, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BLT_UN_R4_S)
|
|
|
+ CONDBR_S(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 < sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BLT_UN_R8_S)
|
|
|
CONDBR_S(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f < sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3375,6 +3440,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_BLT_UN_I8)
|
|
|
BRELOP_CAST(l, <, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_BLT_UN_R4)
|
|
|
+ CONDBR(isunordered (sp [0].data.f_r4, sp [1].data.f_r4) || sp[0].data.f_r4 < sp[1].data.f_r4)
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_BLT_UN_R8)
|
|
|
CONDBR(mono_isunordered (sp [0].data.f, sp [1].data.f) || sp[0].data.f < sp[1].data.f)
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3444,7 +3512,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
if (!sp[-1].data.p)
|
|
|
THROW_EX (mono_get_exception_null_reference (), ip);
|
|
|
++ip;
|
|
|
- sp[-1].data.f = *(gfloat*)sp[-1].data.p;
|
|
|
+ sp[-1].data.f_r4 = *(gfloat*)sp[-1].data.p;
|
|
|
MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDIND_R8_CHECK)
|
|
|
if (!sp[-1].data.p)
|
|
|
@@ -3489,7 +3557,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_STIND_R4)
|
|
|
++ip;
|
|
|
sp -= 2;
|
|
|
- * (float *) sp->data.p = (gfloat)sp[1].data.f;
|
|
|
+ * (float *) sp->data.p = sp[1].data.f_r4;
|
|
|
MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STIND_R8)
|
|
|
++ip;
|
|
|
@@ -3511,6 +3579,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_ADD_I8)
|
|
|
BINOP(l, +);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_ADD_R4)
|
|
|
+ BINOP(f_r4, +);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_ADD_R8)
|
|
|
BINOP(f, +);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3528,6 +3599,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_SUB_I8)
|
|
|
BINOP(l, -);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_SUB_R4)
|
|
|
+ BINOP(f_r4, -);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_SUB_R8)
|
|
|
BINOP(f, -);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3545,6 +3619,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_MUL_I8)
|
|
|
BINOP(l, *);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_MUL_R4)
|
|
|
+ BINOP(f_r4, *);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_MUL_R8)
|
|
|
BINOP(f, *);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3562,6 +3639,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
BINOP(l, /);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_DIV_R4)
|
|
|
+ BINOP(f_r4, /);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_DIV_R8)
|
|
|
BINOP(f, /);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -3594,6 +3674,12 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
BINOP(l, %);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_REM_R4)
|
|
|
+ /* FIXME: what do we actually do here? */
|
|
|
+ --sp;
|
|
|
+ sp [-1].data.f_r4 = fmodf (sp [-1].data.f_r4, sp [0].data.f_r4);
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_REM_R8)
|
|
|
/* FIXME: what do we actually do here? */
|
|
|
--sp;
|
|
|
@@ -3664,6 +3750,10 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.l = - sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_NEG_R4)
|
|
|
+ sp [-1].data.f_r4 = - sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_NEG_R8)
|
|
|
sp [-1].data.f = - sp [-1].data.f;
|
|
|
++ip;
|
|
|
@@ -3684,6 +3774,10 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.i = (gint8)sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_I1_R4)
|
|
|
+ sp [-1].data.i = (gint8) (gint32) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_I1_R8)
|
|
|
/* without gint32 cast, C compiler is allowed to use undefined
|
|
|
* behaviour if data.f is bigger than >255. See conv.fpint section
|
|
|
@@ -3703,6 +3797,10 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.i = (guint8)sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_U1_R4)
|
|
|
+ sp [-1].data.i = (guint8) (guint32) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_U1_R8)
|
|
|
sp [-1].data.i = (guint8) (guint32) sp [-1].data.f;
|
|
|
++ip;
|
|
|
@@ -3715,6 +3813,10 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.i = (gint16)sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_I2_R4)
|
|
|
+ sp [-1].data.i = (gint16) (gint32) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_I2_R8)
|
|
|
sp [-1].data.i = (gint16) (gint32) sp [-1].data.f;
|
|
|
++ip;
|
|
|
@@ -3727,10 +3829,18 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.i = (guint16)sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_U2_R4)
|
|
|
+ sp [-1].data.i = (guint16) (guint32) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_U2_R8)
|
|
|
sp [-1].data.i = (guint16) (guint32) sp [-1].data.f;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_I4_R4)
|
|
|
+ sp [-1].data.i = (gint32) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_I4_R8)
|
|
|
sp [-1].data.i = (gint32)sp [-1].data.f;
|
|
|
++ip;
|
|
|
@@ -3744,6 +3854,17 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-2].data.i = (gint32)sp [-2].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_U4_R4)
|
|
|
+ /* needed on arm64 */
|
|
|
+ if (isinf (sp [-1].data.f_r4))
|
|
|
+ sp [-1].data.i = 0;
|
|
|
+ /* needed by wasm */
|
|
|
+ else if (isnan (sp [-1].data.f_r4))
|
|
|
+ sp [-1].data.i = 0;
|
|
|
+ else
|
|
|
+ sp [-1].data.i = (guint32) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_U4_R8)
|
|
|
/* needed on arm64 */
|
|
|
if (mono_isinf (sp [-1].data.f))
|
|
|
@@ -3767,20 +3888,24 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.l = (guint32)sp [-1].data.i;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_I8_R4)
|
|
|
+ sp [-1].data.l = (gint64) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_I8_R8)
|
|
|
sp [-1].data.l = (gint64)sp [-1].data.f;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_R4_I4)
|
|
|
- sp [-1].data.f = (float)sp [-1].data.i;
|
|
|
+ sp [-1].data.f_r4 = (float)sp [-1].data.i;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_R4_I8)
|
|
|
- sp [-1].data.f = (float)sp [-1].data.l;
|
|
|
+ sp [-1].data.f_r4 = (float)sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_R4_R8)
|
|
|
- sp [-1].data.f = (float)sp [-1].data.f;
|
|
|
+ sp [-1].data.f_r4 = (float)sp [-1].data.f;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_R8_I4)
|
|
|
@@ -3791,10 +3916,22 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.f = (double)sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_R8_R4)
|
|
|
+ sp [-1].data.f = (double) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_R8_R4_SP)
|
|
|
+ sp [-2].data.f = (double) sp [-2].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_U8_I4)
|
|
|
sp [-1].data.l = sp [-1].data.i & 0xffffffff;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_U8_R4)
|
|
|
+ sp [-1].data.l = (guint64) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_U8_R8)
|
|
|
sp [-1].data.l = (guint64)sp [-1].data.f;
|
|
|
++ip;
|
|
|
@@ -4159,7 +4296,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_LDFLD_U2) LDFLD(i, guint16); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDFLD_I4) LDFLD(i, gint32); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDFLD_I8) LDFLD(l, gint64); MINT_IN_BREAK;
|
|
|
- MINT_IN_CASE(MINT_LDFLD_R4) LDFLD(f, float); MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_LDFLD_R4) LDFLD(f_r4, float); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDFLD_R8) LDFLD(f, double); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDFLD_O) LDFLD(p, gpointer); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDFLD_P) LDFLD(p, gpointer); MINT_IN_BREAK;
|
|
|
@@ -4248,7 +4385,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_STFLD_U2) STFLD(i, guint16); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STFLD_I4) STFLD(i, gint32); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STFLD_I8) STFLD(l, gint64); MINT_IN_BREAK;
|
|
|
- MINT_IN_CASE(MINT_STFLD_R4) STFLD(f, float); MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_STFLD_R4) STFLD(f_r4, float); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STFLD_R8) STFLD(f, double); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STFLD_P) STFLD(p, gpointer); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STFLD_O)
|
|
|
@@ -4419,6 +4556,12 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_OVF_U8_R4)
|
|
|
+ if (sp [-1].data.f_r4 < 0 || sp [-1].data.f_r4 > G_MAXUINT64)
|
|
|
+ THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
+ sp [-1].data.l = (guint64)sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_OVF_U8_R8)
|
|
|
if (sp [-1].data.f < 0 || sp [-1].data.f > G_MAXUINT64)
|
|
|
THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
@@ -4431,6 +4574,12 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.l = (gint64)sp [-1].data.f;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_OVF_I8_R4)
|
|
|
+ if (sp [-1].data.f_r4 < G_MININT64 || sp [-1].data.f_r4 > G_MAXINT64)
|
|
|
+ THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
+ sp [-1].data.l = (gint64)sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_OVF_I8_R8)
|
|
|
if (sp [-1].data.f < G_MININT64 || sp [-1].data.f > G_MAXINT64)
|
|
|
THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
@@ -4613,7 +4762,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [0].data.l = mono_array_get_fast (o, guint64, aindex);
|
|
|
break;
|
|
|
case MINT_LDELEM_R4:
|
|
|
- sp [0].data.f = mono_array_get_fast (o, float, aindex);
|
|
|
+ sp [0].data.f_r4 = mono_array_get_fast (o, float, aindex);
|
|
|
break;
|
|
|
case MINT_LDELEM_R8:
|
|
|
sp [0].data.f = mono_array_get_fast (o, double, aindex);
|
|
|
@@ -4685,7 +4834,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
mono_array_set_fast ((MonoArray *)o, gint64, aindex, sp [2].data.l);
|
|
|
break;
|
|
|
case MINT_STELEM_R4:
|
|
|
- mono_array_set_fast ((MonoArray *)o, float, aindex, sp [2].data.f);
|
|
|
+ mono_array_set_fast ((MonoArray *)o, float, aindex, sp [2].data.f_r4);
|
|
|
break;
|
|
|
case MINT_STELEM_R8:
|
|
|
mono_array_set_fast ((MonoArray *)o, double, aindex, sp [2].data.f);
|
|
|
@@ -4732,6 +4881,12 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.i = (gint32) sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_OVF_I4_R4)
|
|
|
+ if (sp [-1].data.f_r4 < G_MININT32 || sp [-1].data.f_r4 > G_MAXINT32)
|
|
|
+ THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
+ sp [-1].data.i = (gint32) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_OVF_I4_R8)
|
|
|
if (sp [-1].data.f < G_MININT32 || sp [-1].data.f > G_MAXINT32)
|
|
|
THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
@@ -4749,6 +4904,12 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
sp [-1].data.i = (guint32) sp [-1].data.l;
|
|
|
++ip;
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CONV_OVF_U4_R4)
|
|
|
+ if (sp [-1].data.f_r4 < 0 || sp [-1].data.f_r4 > G_MAXUINT32)
|
|
|
+ THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
+ sp [-1].data.i = (guint32) sp [-1].data.f_r4;
|
|
|
+ ++ip;
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CONV_OVF_U4_R8)
|
|
|
if (sp [-1].data.f < 0 || sp [-1].data.f > G_MAXUINT32)
|
|
|
THROW_EX (mono_get_exception_overflow (), ip);
|
|
|
@@ -5208,6 +5369,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_CEQ_I8)
|
|
|
RELOP(l, ==);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CEQ_R4)
|
|
|
+ RELOP_FP(f_r4, ==, 0);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CEQ_R8)
|
|
|
RELOP_FP(f, ==, 0);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -5217,6 +5381,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_CNE_I8)
|
|
|
RELOP(l, !=);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CNE_R4)
|
|
|
+ RELOP_FP(f_r4, !=, 1);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CNE_R8)
|
|
|
RELOP_FP(f, !=, 1);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -5226,6 +5393,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_CGT_I8)
|
|
|
RELOP(l, >);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CGT_R4)
|
|
|
+ RELOP_FP(f_r4, >, 0);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CGT_R8)
|
|
|
RELOP_FP(f, >, 0);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -5235,6 +5405,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_CGE_I8)
|
|
|
RELOP(l, >=);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CGE_R4)
|
|
|
+ RELOP_FP(f_r4, >=, 0);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CGE_R8)
|
|
|
RELOP_FP(f, >=, 0);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -5257,6 +5430,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_CGT_UN_I8)
|
|
|
RELOP_CAST(l, >, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CGT_UN_R4)
|
|
|
+ RELOP_FP(f_r4, >, 1);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CGT_UN_R8)
|
|
|
RELOP_FP(f, >, 1);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -5266,6 +5442,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_CLT_I8)
|
|
|
RELOP(l, <);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CLT_R4)
|
|
|
+ RELOP_FP(f_r4, <, 0);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CLT_R8)
|
|
|
RELOP_FP(f, <, 0);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -5275,6 +5454,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_CLT_UN_I8)
|
|
|
RELOP_CAST(l, <, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CLT_UN_R4)
|
|
|
+ RELOP_FP(f_r4, <, 1);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CLT_UN_R8)
|
|
|
RELOP_FP(f, <, 1);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -5290,6 +5472,9 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_CLE_UN_I8)
|
|
|
RELOP_CAST(l, <=, guint64);
|
|
|
MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_CLE_R4)
|
|
|
+ RELOP_FP(f_r4, <=, 0);
|
|
|
+ MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_CLE_R8)
|
|
|
RELOP_FP(f, <=, 0);
|
|
|
MINT_IN_BREAK;
|
|
|
@@ -5327,7 +5512,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_LDARG_U2) LDARG(i, guint16); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDARG_I4) LDARG(i, gint32); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDARG_I8) LDARG(l, gint64); MINT_IN_BREAK;
|
|
|
- MINT_IN_CASE(MINT_LDARG_R4) LDARG(f, float); MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_LDARG_R4) LDARG(f_r4, float); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDARG_R8) LDARG(f, double); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDARG_O) LDARG(p, gpointer); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDARG_P) LDARG(p, gpointer); MINT_IN_BREAK;
|
|
|
@@ -5352,7 +5537,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_STARG_U2) STARG(i, guint16); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STARG_I4) STARG(i, gint32); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STARG_I8) STARG(l, gint64); MINT_IN_BREAK;
|
|
|
- MINT_IN_CASE(MINT_STARG_R4) STARG(f, float); MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_STARG_R4) STARG(f_r4, float); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STARG_R8) STARG(f, double); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STARG_O) STARG(p, gpointer); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STARG_P) STARG(p, gpointer); MINT_IN_BREAK;
|
|
|
@@ -5378,7 +5563,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_STINARG_U2) STINARG(i, guint16); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STINARG_I4) STINARG(i, gint32); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STINARG_I8) STINARG(l, gint64); MINT_IN_BREAK;
|
|
|
- MINT_IN_CASE(MINT_STINARG_R4) STINARG(f, float); MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_STINARG_R4) STINARG(f_r4, float); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STINARG_R8) STINARG(f, double); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STINARG_O) STINARG(p, gpointer); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STINARG_P) STINARG(p, gpointer); MINT_IN_BREAK;
|
|
|
@@ -5428,7 +5613,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_LDLOC_U2) LDLOC(i, guint16); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDLOC_I4) LDLOC(i, gint32); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDLOC_I8) LDLOC(l, gint64); MINT_IN_BREAK;
|
|
|
- MINT_IN_CASE(MINT_LDLOC_R4) LDLOC(f, float); MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_LDLOC_R4) LDLOC(f_r4, float); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDLOC_R8) LDLOC(f, double); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDLOC_O) LDLOC(p, gpointer); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_LDLOC_P) LDLOC(p, gpointer); MINT_IN_BREAK;
|
|
|
@@ -5459,7 +5644,7 @@ interp_exec_method_full (InterpFrame *frame, ThreadContext *context, guint16 *st
|
|
|
MINT_IN_CASE(MINT_STLOC_U2) STLOC(i, guint16); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STLOC_I4) STLOC(i, gint32); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STLOC_I8) STLOC(l, gint64); MINT_IN_BREAK;
|
|
|
- MINT_IN_CASE(MINT_STLOC_R4) STLOC(f, float); MINT_IN_BREAK;
|
|
|
+ MINT_IN_CASE(MINT_STLOC_R4) STLOC(f_r4, float); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STLOC_R8) STLOC(f, double); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STLOC_O) STLOC(p, gpointer); MINT_IN_BREAK;
|
|
|
MINT_IN_CASE(MINT_STLOC_P) STLOC(p, gpointer); MINT_IN_BREAK;
|