void do_op_602_mfrom (void) { if (likely(T0 < 602)) { #ifdef USE_MFROM_ROM_TABLE #include "mfrom_table.c" T0 = mfrom_ROM_table[T0]; #else double d; /* Extremly decomposed: * -T0 / 256 * T0 = 256 * log10(10 + 1.0) + 0.5 */ d = T0; d = float64_div(d, 256, &env->fp_status); d = float64_chs(d); d = exp10(d); // XXX: use float emulation function d = float64_add(d, 1.0, &env->fp_status); d = log10(d); // XXX: use float emulation function d = float64_mul(d, 256, &env->fp_status); d = float64_add(d, 0.5, &env->fp_status); T0 = float64_round_to_int(d, &env->fp_status); #endif } else { T0 = 0; } }