ppcfpopcodes: Template mffs variants.

This commit is contained in:
joevt 2024-03-07 02:21:01 -08:00 committed by dingusdev
parent 7b4d513e22
commit e44676e491
3 changed files with 8 additions and 15 deletions

View File

@ -526,8 +526,7 @@ extern void ppc_mtfsb0();
extern void ppc_mtfsb1();
extern void ppc_mcrfs();
extern void ppc_fmr();
extern void ppc_mffs();
extern void ppc_mffs_601();
template <bool for601> extern void ppc_mffs();
extern void ppc_mtfsf();
extern void ppc_mtfsfi();

View File

@ -730,7 +730,7 @@ void initialize_ppc_opcode_tables() {
SubOpcode63Grabber[134] = ppc_mtfsfi;
SubOpcode63Grabber[136] = ppc_fnabs;
SubOpcode63Grabber[264] = ppc_fabs;
SubOpcode63Grabber[583] = ppc_mffs;
SubOpcode63Grabber[583] = ppc_mffs<false>;
SubOpcode63Grabber[711] = ppc_mtfsf;
for (int i = 0; i < 1024; i += 32) {
@ -766,12 +766,11 @@ void ppc_cpu_init(MemCtrlBase* mem_ctrl, uint32_t cpu_version, uint64_t tb_freq)
SubOpcode31Grabber[370] = ppc_illegalop; // tlbia
SubOpcode31Grabber[371] = ppc_illegalop; // mftb
SubOpcode59Grabber[24] = ppc_illegalop; // fres
SubOpcode63Grabber[26] = ppc_illegalop; // frsqrte
SubOpcode63Grabber[583] = ppc_mffs<true>;
for (int i = 0; i < 1024; i += 32) {
SubOpcode63Grabber[i + 23] = ppc_illegalop; // fsel
}
SubOpcode63Grabber[26] = ppc_illegalop; // frsqrte;
SubOpcode63Grabber[583] = ppc_mffs_601;
}
if (cpu_version != PPC_VER::MPC970MP) {
SubOpcode59Grabber[22] = ppc_illegalop; // fsqrts

View File

@ -846,23 +846,18 @@ void dppc_interpreter::ppc_fmr() {
ppc_update_cr1();
}
template <bool for601>
void dppc_interpreter::ppc_mffs() {
ppc_grab_regsda();
ppc_state.fpr[reg_d].int64_r = uint64_t(ppc_state.fpscr) | 0xFFF8000000000000ULL;
ppc_state.fpr[reg_d].int64_r = uint64_t(ppc_state.fpscr) | (for601 ? 0xFFFFFFFF00000000ULL : 0xFFF8000000000000ULL);
if (rc_flag)
ppc_update_cr1();
}
void dppc_interpreter::ppc_mffs_601() {
ppc_grab_regsda();
ppc_state.fpr[reg_d].int64_r = uint64_t(ppc_state.fpscr) | 0xFFFFFFFF00000000ULL;
if (rc_flag)
ppc_update_cr1();
}
template void dppc_interpreter::ppc_mffs<false>();
template void dppc_interpreter::ppc_mffs<true>();
void dppc_interpreter::ppc_mtfsf() {
int reg_b = (ppc_cur_instruction >> 11) & 0x1F;