Revision 5b7141a1

b/target-sh4/helper.h
35 35
DEF_HELPER_2(fdiv_DT, i64, i64, i64)
36 36
DEF_HELPER_1(float_FT, i32, i32)
37 37
DEF_HELPER_1(float_DT, i64, i32)
38
DEF_HELPER_3(fmac_FT, i32, i32, i32, i32)
38 39
DEF_HELPER_2(fmul_FT, i32, i32, i32)
39 40
DEF_HELPER_2(fmul_DT, i64, i64, i64)
40 41
DEF_HELPER_1(fneg_T, i32, i32)
b/target-sh4/op_helper.c
531 531
    return d.ll;
532 532
}
533 533

  
534
uint32_t helper_fmac_FT(uint32_t t0, uint32_t t1, uint32_t t2)
535
{
536
    CPU_FloatU f0, f1, f2;
537
    f0.l = t0;
538
    f1.l = t1;
539
    f2.l = t2;
540
    f0.f = float32_mul(f0.f, f1.f, &env->fp_status);
541
    f0.f = float32_add(f0.f, f2.f, &env->fp_status);
542
    return f0.l;
543
}
544

  
534 545
uint32_t helper_fmul_FT(uint32_t t0, uint32_t t1)
535 546
{
536 547
    CPU_FloatU f0, f1;
b/target-sh4/translate.c
1176 1176
	    }
1177 1177
	}
1178 1178
	return;
1179
    case 0xf00e: /* fmac FR0,RM,Rn */
1180
        {
1181
            CHECK_FPU_ENABLED
1182
            if (ctx->fpscr & FPSCR_PR) {
1183
                break; /* illegal instruction */
1184
            } else {
1185
                gen_helper_fmac_FT(cpu_fregs[FREG(B11_8)],
1186
                                   cpu_fregs[FREG(0)], cpu_fregs[FREG(B7_4)], cpu_fregs[FREG(B11_8)]);
1187
                return;
1188
            }
1189
        }
1179 1190
    }
1180 1191

  
1181 1192
    switch (ctx->opcode & 0xff00) {

Also available in: Unified diff