#define FLOAT_OP(name, p) void OPPROTO op_float_##name##_##p(void)
+FLOAT_OP(cvtd, s)
+{
+ FDT2 = float32_to_float64(WT0, &env->fp_status);
+ DEBUG_FPU_STATE();
+ RETURN();
+}
FLOAT_OP(cvtd, w)
{
FDT2 = int32_to_float64(WT0, &env->fp_status);
DEBUG_FPU_STATE();
RETURN();
}
+FLOAT_OP(cvts, d)
+{
+ FST2 = float64_to_float32(WT0, &env->fp_status);
+ DEBUG_FPU_STATE();
+ RETURN();
+}
FLOAT_OP(cvts, w)
{
FST2 = int32_to_float32(WT0, &env->fp_status);
GEN_STORE_FTN_FREG(fd, WT2);
opn = "ceil.w.d";
break;
+ case FOP(33, 16): /* cvt.d.s */
+ CHECK_FR(ctx, fs | fd);
+ GEN_LOAD_FREG_FTN(WT0, fs);
+ gen_op_float_cvtd_s();
+ GEN_STORE_FTN_FREG(fd, DT2);
+ opn = "cvt.d.s";
+ break;
case FOP(33, 20): /* cvt.d.w */
CHECK_FR(ctx, fs | fd);
GEN_LOAD_FREG_FTN(WT0, fs);
GEN_STORE_FTN_FREG(fd, WT2);
opn = "trunc.w.s";
break;
+ case FOP(32, 17): /* cvt.s.d */
+ CHECK_FR(ctx, fs | fd);
+ GEN_LOAD_FREG_FTN(WT0, fs);
+ gen_op_float_cvts_d();
+ GEN_STORE_FTN_FREG(fd, WT2);
+ opn = "cvt.s.d";
+ break;
case FOP(32, 20): /* cvt.s.w */
CHECK_FR(ctx, fs | fd);
GEN_LOAD_FREG_FTN(WT0, fs);