ppcfpopcodes: fix fmul emulation.

This commit is contained in:
Maxim Poliakovski 2021-01-24 04:51:42 +01:00
parent 2539faef7e
commit 3189876d41
3 changed files with 4 additions and 8 deletions

View File

@ -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();

View File

@ -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) {

View File

@ -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);
}