diff options
Diffstat (limited to 'target-ppc/op.c')
-rw-r--r-- | target-ppc/op.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/target-ppc/op.c b/target-ppc/op.c index f13f6f5676..068ccb53b2 100644 --- a/target-ppc/op.c +++ b/target-ppc/op.c @@ -261,10 +261,15 @@ PPC_OP(load_xer_cr) RETURN(); } -PPC_OP(clear_xer_cr) +PPC_OP(clear_xer_ov) { xer_so = 0; xer_ov = 0; + RETURN(); +} + +PPC_OP(clear_xer_ca) +{ xer_ca = 0; RETURN(); } @@ -714,6 +719,7 @@ void OPPROTO op_check_addo (void) xer_so = 1; xer_ov = 1; } + RETURN(); } #if defined(TARGET_PPC64) @@ -726,6 +732,7 @@ void OPPROTO op_check_addo_64 (void) xer_so = 1; xer_ov = 1; } + RETURN(); } #endif @@ -1643,16 +1650,24 @@ PPC_OP(fsel) /* fmadd - fmadd. */ PPC_OP(fmadd) { +#if USE_PRECISE_EMULATION + do_fmadd(); +#else FT0 = float64_mul(FT0, FT1, &env->fp_status); FT0 = float64_add(FT0, FT2, &env->fp_status); +#endif RETURN(); } /* fmsub - fmsub. */ PPC_OP(fmsub) { +#if USE_PRECISE_EMULATION + do_fmsub(); +#else FT0 = float64_mul(FT0, FT1, &env->fp_status); FT0 = float64_sub(FT0, FT2, &env->fp_status); +#endif RETURN(); } @@ -2378,6 +2393,7 @@ void OPPROTO op_store_booke_tsr (void) void OPPROTO op_splatw_T1_64 (void) { T1_64 = (T1_64 << 32) | (T1_64 & 0x00000000FFFFFFFFULL); + RETURN(); } void OPPROTO op_splatwi_T0_64 (void) @@ -2385,6 +2401,7 @@ void OPPROTO op_splatwi_T0_64 (void) uint64_t tmp = PARAM1; T0_64 = (tmp << 32) | tmp; + RETURN(); } void OPPROTO op_splatwi_T1_64 (void) @@ -2392,6 +2409,7 @@ void OPPROTO op_splatwi_T1_64 (void) uint64_t tmp = PARAM1; T1_64 = (tmp << 32) | tmp; + RETURN(); } void OPPROTO op_extsh_T1_64 (void) |