Merge pull request #2079 from lioncash/tables

PowerPC: Minor cleanups.
This commit is contained in:
Pierre Bourdon 2015-02-19 22:51:34 +01:00
commit fbbbad98e9
10 changed files with 79 additions and 142 deletions

View File

@ -8,6 +8,7 @@
#include "Common/IniFile.h" #include "Common/IniFile.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/HW/SI.h" #include "Core/HW/SI.h"
#include "Core/PowerPC/PowerPC.h"
#include "DiscIO/NANDContentLoader.h" #include "DiscIO/NANDContentLoader.h"
SConfig* SConfig::m_Instance; SConfig* SConfig::m_Instance;
@ -542,13 +543,13 @@ void SConfig::LoadCoreSettings(IniFile& ini)
core->Get("HLE_BS2", &m_LocalCoreStartupParameter.bHLE_BS2, false); core->Get("HLE_BS2", &m_LocalCoreStartupParameter.bHLE_BS2, false);
#ifdef _M_X86 #ifdef _M_X86
core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, SCoreStartupParameter::CORE_JIT64); core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, PowerPC::CORE_JIT64);
#elif _M_ARM_32 #elif _M_ARM_32
core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, SCoreStartupParameter::CORE_JITARM); core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, PowerPC::CORE_JITARM);
#elif _M_ARM_64 #elif _M_ARM_64
core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, SCoreStartupParameter::CORE_JITARM64); core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, PowerPC::CORE_JITARM64);
#else #else
core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, SCoreStartupParameter::CORE_INTERPRETER); core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, PowerPC::CORE_INTERPRETER);
#endif #endif
core->Get("Fastmem", &m_LocalCoreStartupParameter.bFastmem, true); core->Get("Fastmem", &m_LocalCoreStartupParameter.bFastmem, true);
core->Get("DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true); core->Get("DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true);

View File

@ -395,7 +395,7 @@ void EmuThread()
CBoot::BootUp(); CBoot::BootUp();
// Setup our core, but can't use dynarec if we are compare server // Setup our core, but can't use dynarec if we are compare server
if (core_parameter.iCPUCore != SCoreStartupParameter::CORE_INTERPRETER if (core_parameter.iCPUCore != PowerPC::CORE_INTERPRETER
&& (!core_parameter.bRunCompareServer || core_parameter.bRunCompareClient)) && (!core_parameter.bRunCompareServer || core_parameter.bRunCompareClient))
{ {
PowerPC::SetMode(PowerPC::MODE_JIT); PowerPC::SetMode(PowerPC::MODE_JIT);

View File

@ -17,6 +17,7 @@
#include "Core/Boot/Boot.h" #include "Core/Boot/Boot.h"
#include "Core/Boot/Boot_DOL.h" #include "Core/Boot/Boot_DOL.h"
#include "Core/FifoPlayer/FifoDataFile.h" #include "Core/FifoPlayer/FifoDataFile.h"
#include "Core/PowerPC/PowerPC.h"
#include "DiscIO/NANDContentLoader.h" #include "DiscIO/NANDContentLoader.h"
#include "DiscIO/VolumeCreator.h" #include "DiscIO/VolumeCreator.h"
@ -66,7 +67,7 @@ void SCoreStartupParameter::LoadDefaults()
iGDBPort = -1; iGDBPort = -1;
#endif #endif
iCPUCore = CORE_JIT64; iCPUCore = PowerPC::CORE_JIT64;
bCPUThread = false; bCPUThread = false;
bSkipIdle = false; bSkipIdle = false;
bSyncGPUOnSkipIdleHack = true; bSyncGPUOnSkipIdleHack = true;

View File

@ -136,14 +136,6 @@ struct SCoreStartupParameter
bool bAutomaticStart; bool bAutomaticStart;
bool bBootToPause; bool bBootToPause;
enum
{
CORE_INTERPRETER,
CORE_JIT64,
CORE_JITIL64,
CORE_JITARM,
CORE_JITARM64
};
int iCPUCore; int iCPUCore;
// JIT (shared between JIT and JITIL) // JIT (shared between JIT and JITIL)

View File

@ -15,6 +15,7 @@
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/HW/Memmap.h" #include "Core/HW/Memmap.h"
#include "Core/PowerPC/JitInterface.h" #include "Core/PowerPC/JitInterface.h"
#include "Core/PowerPC/PowerPC.h"
#include "Core/PowerPC/PPCSymbolDB.h" #include "Core/PowerPC/PPCSymbolDB.h"
#include "Core/PowerPC/Profiler.h" #include "Core/PowerPC/Profiler.h"
#include "Core/PowerPC/JitCommon/JitBase.h" #include "Core/PowerPC/JitCommon/JitBase.h"
@ -54,38 +55,28 @@ namespace JitInterface
CPUCoreBase *ptr = nullptr; CPUCoreBase *ptr = nullptr;
switch (core) switch (core)
{ {
#if _M_X86 #if _M_X86
case 1: case PowerPC::CORE_JIT64:
{ ptr = new Jit64();
ptr = new Jit64(); break;
break; case PowerPC::CORE_JITIL64:
} ptr = new JitIL();
case 2: break;
{ #endif
ptr = new JitIL(); #if _M_ARM_32
break; case PowerPC::CORE_JITARM:
} ptr = new JitArm();
#endif break;
#if _M_ARM_32 #endif
case 3: #if _M_ARM_64
{ case PowerPC::CORE_JITARM64:
ptr = new JitArm(); ptr = new JitArm64();
break; break;
} #endif
#endif default:
#if _M_ARM_64 PanicAlert("Unrecognizable cpu_core: %d", core);
case 4: jit = nullptr;
{ return nullptr;
ptr = new JitArm64();
break;
}
#endif
default:
{
PanicAlert("Unrecognizable cpu_core: %d", core);
jit = nullptr;
return nullptr;
}
} }
jit = static_cast<JitBase*>(ptr); jit = static_cast<JitBase*>(ptr);
jit->Init(); jit->Init();
@ -95,37 +86,27 @@ namespace JitInterface
{ {
switch (core) switch (core)
{ {
#if _M_X86 #if _M_X86
case 1: case PowerPC::CORE_JIT64:
{ Jit64Tables::InitTables();
Jit64Tables::InitTables(); break;
break; case PowerPC::CORE_JITIL64:
} JitILTables::InitTables();
case 2: break;
{ #endif
JitILTables::InitTables(); #if _M_ARM_32
break; case PowerPC::CORE_JITARM:
} JitArmTables::InitTables();
#endif break;
#if _M_ARM_32 #endif
case 3: #if _M_ARM_64
{ case PowerPC::CORE_JITARM64:
JitArmTables::InitTables(); JitArm64Tables::InitTables();
break; break;
} #endif
#endif default:
#if _M_ARM_64 PanicAlert("Unrecognizable cpu_core: %d", core);
case 4: break;
{
JitArm64Tables::InitTables();
break;
}
#endif
default:
{
PanicAlert("Unrecognizable cpu_core: %d", core);
break;
}
} }
} }
CPUCoreBase *GetCore() CPUCoreBase *GetCore()

View File

@ -11,6 +11,7 @@
#include "Common/StringUtil.h" #include "Common/StringUtil.h"
#include "Core/PowerPC/JitInterface.h" #include "Core/PowerPC/JitInterface.h"
#include "Core/PowerPC/PowerPC.h"
#include "Core/PowerPC/PPCTables.h" #include "Core/PowerPC/PPCTables.h"
#include "Core/PowerPC/Interpreter/Interpreter.h" #include "Core/PowerPC/Interpreter/Interpreter.h"
#include "Core/PowerPC/Interpreter/Interpreter_Tables.h" #include "Core/PowerPC/Interpreter/Interpreter_Tables.h"
@ -93,68 +94,20 @@ Interpreter::_interpreterInstruction GetInterpreterOp(UGeckoInstruction _inst)
namespace PPCTables namespace PPCTables
{ {
bool UsesFPU(UGeckoInstruction _inst) bool UsesFPU(UGeckoInstruction inst)
{ {
switch (_inst.OPCD) GekkoOPInfo* const info = GetOpInfo(inst);
{
case 04: // PS
return _inst.SUBOP10 != 1014;
case 48: // lfs return (info->flags & FL_USE_FPU) != 0;
case 49: // lfsu
case 50: // lfd
case 51: // lfdu
case 52: // stfs
case 53: // stfsu
case 54: // stfd
case 55: // stfdu
case 56: // psq_l
case 57: // psq_lu
case 59: // FPU-sgl
case 60: // psq_st
case 61: // psq_stu
case 63: // FPU-dbl
return true;
case 31:
switch (_inst.SUBOP10)
{
case 535:
case 567:
case 599:
case 631:
case 663:
case 695:
case 727:
case 759:
case 983:
return true;
default:
return false;
}
default:
return false;
}
} }
void InitTables(int cpu_core) void InitTables(int cpu_core)
{ {
// Interpreter ALWAYS needs to be initialized // Interpreter ALWAYS needs to be initialized
InterpreterTables::InitTables(); InterpreterTables::InitTables();
switch (cpu_core)
{ if (cpu_core != PowerPC::CORE_INTERPRETER)
case 0: JitInterface::InitTables(cpu_core);
{
// Interpreter
break;
}
default:
{
JitInterface::InitTables(cpu_core);
break;
}
}
} }
#define OPLOG #define OPLOG

View File

@ -143,18 +143,17 @@ void Init(int cpu_core)
switch (cpu_core) switch (cpu_core)
{ {
case 0: case PowerPC::CORE_INTERPRETER:
cpu_core_base = interpreter;
break;
default:
cpu_core_base = JitInterface::InitJitCore(cpu_core);
if (!cpu_core_base) // Handle Situations where JIT core isn't available
{ {
WARN_LOG(POWERPC, "Jit core %d not available. Defaulting to interpreter.", cpu_core);
cpu_core_base = interpreter; cpu_core_base = interpreter;
break;
} }
default:
cpu_core_base = JitInterface::InitJitCore(cpu_core);
if (!cpu_core_base) // Handle Situations where JIT core isn't available
{
WARN_LOG(POWERPC, "Jit core %d not available. Defaulting to interpreter.", cpu_core);
cpu_core_base = interpreter;
}
break; break;
} }

View File

@ -21,6 +21,15 @@ extern CPUCoreBase *cpu_core_base;
namespace PowerPC namespace PowerPC
{ {
enum
{
CORE_INTERPRETER,
CORE_JIT64,
CORE_JITIL64,
CORE_JITARM,
CORE_JITARM64
};
enum CoreMode enum CoreMode
{ {
MODE_INTERPRETER, MODE_INTERPRETER,

View File

@ -41,6 +41,7 @@
#include "Core/HW/DSPHLE/DSPHLE.h" #include "Core/HW/DSPHLE/DSPHLE.h"
#include "Core/HW/DSPLLE/DSPLLE.h" #include "Core/HW/DSPLLE/DSPLLE.h"
#include "Core/IPC_HLE/WII_IPC_HLE.h" #include "Core/IPC_HLE/WII_IPC_HLE.h"
#include "Core/PowerPC/PowerPC.h"
#include "DiscIO/NANDContentLoader.h" #include "DiscIO/NANDContentLoader.h"
@ -884,7 +885,7 @@ void CConfigMain::CoreSettingsChanged(wxCommandEvent& event)
startup_params.iCPUCore = CPUCores[CPUEngine->GetSelection()].CPUid; startup_params.iCPUCore = CPUCores[CPUEngine->GetSelection()].CPUid;
if (main_frame->g_pCodeWindow) if (main_frame->g_pCodeWindow)
{ {
bool using_interp = (startup_params.iCPUCore == SCoreStartupParameter::CORE_INTERPRETER); bool using_interp = (startup_params.iCPUCore == PowerPC::CORE_INTERPRETER);
main_frame->g_pCodeWindow->GetMenuBar()->Check(IDM_INTERPRETER, using_interp); main_frame->g_pCodeWindow->GetMenuBar()->Check(IDM_INTERPRETER, using_interp);
} }
break; break;

View File

@ -436,7 +436,7 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& core_startup_parameter
" and stepping to work as explained in the Developer Documentation. But it can be very" " and stepping to work as explained in the Developer Documentation. But it can be very"
" slow, perhaps slower than 1 fps."), " slow, perhaps slower than 1 fps."),
wxITEM_CHECK); wxITEM_CHECK);
interpreter->Check(core_startup_parameter.iCPUCore == SCoreStartupParameter::CORE_INTERPRETER); interpreter->Check(core_startup_parameter.iCPUCore == PowerPC::CORE_INTERPRETER);
pCoreMenu->AppendSeparator(); pCoreMenu->AppendSeparator();
pCoreMenu->Append(IDM_JIT_NO_BLOCK_LINKING, _("&JIT Block Linking off"), pCoreMenu->Append(IDM_JIT_NO_BLOCK_LINKING, _("&JIT Block Linking off"),