From 3189876d41b0707c10a8606a07d9f84a8261b826 Mon Sep 17 00:00:00 2001 From: Maxim Poliakovski Date: Sun, 24 Jan 2021 04:51:42 +0100 Subject: [PATCH] ppcfpopcodes: fix fmul emulation. --- cpu/ppc/ppcemu.h | 2 +- cpu/ppc/ppcexec.cpp | 2 +- cpu/ppc/ppcfpopcodes.cpp | 8 ++------ 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/cpu/ppc/ppcemu.h b/cpu/ppc/ppcemu.h index 0107519..d64ee5c 100644 --- a/cpu/ppc/ppcemu.h +++ b/cpu/ppc/ppcemu.h @@ -490,7 +490,7 @@ extern void ppc_stfdux(); extern void ppc_fadd(); extern void ppc_fsub(); -extern void ppc_fmult(); +extern void ppc_fmul(); extern void ppc_fdiv(); extern void ppc_fadds(); extern void ppc_fsubs(); diff --git a/cpu/ppc/ppcexec.cpp b/cpu/ppc/ppcexec.cpp index 38fb6a2..df7d166 100644 --- a/cpu/ppc/ppcexec.cpp +++ b/cpu/ppc/ppcexec.cpp @@ -656,7 +656,7 @@ void initialize_ppc_opcode_tables() { } for (int i = 25; i < 1024; i += 32) { - SubOpcode63Grabber[i] = ppc_fmult; + SubOpcode63Grabber[i] = ppc_fmul; } for (int i = 28; i < 1024; i += 32) { diff --git a/cpu/ppc/ppcfpopcodes.cpp b/cpu/ppc/ppcfpopcodes.cpp index d4c4a93..e016f4d 100644 --- a/cpu/ppc/ppcfpopcodes.cpp +++ b/cpu/ppc/ppcfpopcodes.cpp @@ -61,20 +61,16 @@ uint64_t fp_return_uint64(uint32_t reg) { void ppc_store_sfpresult(bool int_rep) { if (int_rep) { ppc_state.fpr[reg_d].int64_r = ppc_result64_d; - ppc_state.fpr[reg_d].dbl64_r = *(double*)&ppc_result64_d; } else { ppc_state.fpr[reg_d].dbl64_r = ppc_dblresult64_d; - ppc_state.fpr[reg_d].int64_r = *(uint64_t*)&ppc_dblresult64_d; } } void ppc_store_dfpresult(bool int_rep) { if (int_rep) { ppc_state.fpr[reg_d].int64_r = ppc_result64_d; - ppc_state.fpr[reg_d].dbl64_r = *(double*)&ppc_result64_d; } else { ppc_state.fpr[reg_d].dbl64_r = ppc_dblresult64_d; - ppc_state.fpr[reg_d].int64_r = *(uint64_t*)&ppc_dblresult64_d; } } @@ -407,11 +403,11 @@ void dppc_interpreter::ppc_fdiv() { ppc_changecrf1(); } -void dppc_interpreter::ppc_fmult() { +void dppc_interpreter::ppc_fmul() { ppc_grab_regsfpdac(false); if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 50)) { - ppc_dblresult64_d = ppc_dblresult64_a * ppc_dblresult64_b; + ppc_dblresult64_d = ppc_dblresult64_a * ppc_dblresult64_c; ppc_store_dfpresult(false); }