Merge pull request #4862 from lioncash/compile

CPU Backends: Make instruction table initialization private
This commit is contained in:
Mat M 2017-02-15 11:44:37 -05:00 committed by GitHub
commit 6f272b3a4c
23 changed files with 109 additions and 229 deletions

View File

@ -463,13 +463,10 @@
<ClInclude Include="PowerPC\CachedInterpreter\InterpreterBlockCache.h" />
<ClInclude Include="PowerPC\Interpreter\Interpreter.h" />
<ClInclude Include="PowerPC\Interpreter\Interpreter_FPUtils.h" />
<ClInclude Include="PowerPC\Interpreter\Interpreter_Tables.h" />
<ClInclude Include="PowerPC\Jit64IL\JitIL.h" />
<ClInclude Include="PowerPC\Jit64IL\JitIL_Tables.h" />
<ClInclude Include="PowerPC\Jit64\FPURegCache.h" />
<ClInclude Include="PowerPC\Jit64\GPRRegCache.h" />
<ClInclude Include="PowerPC\Jit64\Jit.h" />
<ClInclude Include="PowerPC\Jit64\Jit64_Tables.h" />
<ClInclude Include="PowerPC\Jit64\JitAsm.h" />
<ClInclude Include="PowerPC\Jit64\JitRegCache.h" />
<ClInclude Include="PowerPC\JitILCommon\IR.h" />

View File

@ -940,15 +940,9 @@
<ClInclude Include="PowerPC\Interpreter\Interpreter_FPUtils.h">
<Filter>PowerPC\Interpreter</Filter>
</ClInclude>
<ClInclude Include="PowerPC\Interpreter\Interpreter_Tables.h">
<Filter>PowerPC\Interpreter</Filter>
</ClInclude>
<ClInclude Include="PowerPC\Jit64\Jit.h">
<Filter>PowerPC\Jit64</Filter>
</ClInclude>
<ClInclude Include="PowerPC\Jit64\Jit64_Tables.h">
<Filter>PowerPC\Jit64</Filter>
</ClInclude>
<ClInclude Include="HW\AudioInterface.h">
<Filter>HW %28Flipper/Hollywood%29\AI - Audio Interface</Filter>
</ClInclude>
@ -1261,9 +1255,6 @@
<ClInclude Include="PowerPC\Jit64IL\JitIL.h">
<Filter>PowerPC\JitIL</Filter>
</ClInclude>
<ClInclude Include="PowerPC\Jit64IL\JitIL_Tables.h">
<Filter>PowerPC\JitIL</Filter>
</ClInclude>
<ClInclude Include="PowerPC\Jit64\FPURegCache.h">
<Filter>PowerPC\Jit64</Filter>
</ClInclude>

View File

@ -63,6 +63,7 @@ void Interpreter::RunTable63(UGeckoInstruction inst)
void Interpreter::Init()
{
InitializeInstructionTables();
m_reserve = false;
m_end_block = false;
}

View File

@ -282,6 +282,8 @@ public:
static u32 Helper_Carry(u32 value1, u32 value2);
private:
static void InitializeInstructionTables();
// flag helper
static void Helper_UpdateCR0(u32 value);
static void Helper_UpdateCR1();

View File

@ -6,7 +6,6 @@
#include "Core/PowerPC/Gekko.h"
#include "Core/PowerPC/Interpreter/Interpreter.h"
#include "Core/PowerPC/Interpreter/Interpreter_Tables.h"
#include "Core/PowerPC/PPCTables.h"
struct GekkoOPTemplate
@ -355,8 +354,6 @@ static std::array<GekkoOPTemplate, 10> table63_2 =
}};
// clang-format on
namespace InterpreterTables
{
constexpr size_t TotalInstructionFunctionCount()
{
return primarytable.size() + table4_2.size() + table4_3.size() + table4.size() + table31.size() +
@ -366,7 +363,7 @@ constexpr size_t TotalInstructionFunctionCount()
static_assert(TotalInstructionFunctionCount() < m_allInstructions.size(),
"m_allInstructions is too small");
void InitTables()
void Interpreter::InitializeInstructionTables()
{
// once initialized, tables are read-only
static bool initialized = false;
@ -376,22 +373,22 @@ void InitTables()
// clear
for (int i = 0; i < 64; i++)
{
Interpreter::m_op_table[i] = Interpreter::unknown_instruction;
m_op_table[i] = Interpreter::unknown_instruction;
m_infoTable[i] = &unknownopinfo;
}
for (int i = 0; i < 32; i++)
{
Interpreter::m_op_table59[i] = Interpreter::unknown_instruction;
m_op_table59[i] = Interpreter::unknown_instruction;
m_infoTable59[i] = &unknownopinfo;
}
for (int i = 0; i < 1024; i++)
{
Interpreter::m_op_table4[i] = Interpreter::unknown_instruction;
Interpreter::m_op_table19[i] = Interpreter::unknown_instruction;
Interpreter::m_op_table31[i] = Interpreter::unknown_instruction;
Interpreter::m_op_table63[i] = Interpreter::unknown_instruction;
m_op_table4[i] = Interpreter::unknown_instruction;
m_op_table19[i] = Interpreter::unknown_instruction;
m_op_table31[i] = Interpreter::unknown_instruction;
m_op_table63[i] = Interpreter::unknown_instruction;
m_infoTable4[i] = &unknownopinfo;
m_infoTable19[i] = &unknownopinfo;
m_infoTable31[i] = &unknownopinfo;
@ -400,7 +397,7 @@ void InitTables()
for (auto& tpl : primarytable)
{
Interpreter::m_op_table[tpl.opcode] = tpl.Inst;
m_op_table[tpl.opcode] = tpl.Inst;
m_infoTable[tpl.opcode] = &tpl.opinfo;
}
@ -410,7 +407,7 @@ void InitTables()
for (auto& tpl : table4_2)
{
int op = fill + tpl.opcode;
Interpreter::m_op_table4[op] = tpl.Inst;
m_op_table4[op] = tpl.Inst;
m_infoTable4[op] = &tpl.opinfo;
}
}
@ -421,7 +418,7 @@ void InitTables()
for (auto& tpl : table4_3)
{
int op = fill + tpl.opcode;
Interpreter::m_op_table4[op] = tpl.Inst;
m_op_table4[op] = tpl.Inst;
m_infoTable4[op] = &tpl.opinfo;
}
}
@ -429,35 +426,35 @@ void InitTables()
for (auto& tpl : table4)
{
int op = tpl.opcode;
Interpreter::m_op_table4[op] = tpl.Inst;
m_op_table4[op] = tpl.Inst;
m_infoTable4[op] = &tpl.opinfo;
}
for (auto& tpl : table31)
{
int op = tpl.opcode;
Interpreter::m_op_table31[op] = tpl.Inst;
m_op_table31[op] = tpl.Inst;
m_infoTable31[op] = &tpl.opinfo;
}
for (auto& tpl : table19)
{
int op = tpl.opcode;
Interpreter::m_op_table19[op] = tpl.Inst;
m_op_table19[op] = tpl.Inst;
m_infoTable19[op] = &tpl.opinfo;
}
for (auto& tpl : table59)
{
int op = tpl.opcode;
Interpreter::m_op_table59[op] = tpl.Inst;
m_op_table59[op] = tpl.Inst;
m_infoTable59[op] = &tpl.opinfo;
}
for (auto& tpl : table63)
{
int op = tpl.opcode;
Interpreter::m_op_table63[op] = tpl.Inst;
m_op_table63[op] = tpl.Inst;
m_infoTable63[op] = &tpl.opinfo;
}
@ -467,7 +464,7 @@ void InitTables()
for (auto& tpl : table63_2)
{
int op = fill + tpl.opcode;
Interpreter::m_op_table63[op] = tpl.Inst;
m_op_table63[op] = tpl.Inst;
m_infoTable63[op] = &tpl.opinfo;
}
}
@ -494,4 +491,3 @@ void InitTables()
initialized = true;
}
} // namespace InterpreterTables

View File

@ -1,10 +0,0 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
namespace InterpreterTables
{
void InitTables();
}

View File

@ -2,6 +2,8 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Core/PowerPC/Jit64/Jit.h"
#include <map>
#include <string>
@ -22,8 +24,6 @@
#include "Core/HW/GPFifo.h"
#include "Core/HW/ProcessorInterface.h"
#include "Core/PatchEngine.h"
#include "Core/PowerPC/Jit64/Jit.h"
#include "Core/PowerPC/Jit64/Jit64_Tables.h"
#include "Core/PowerPC/Jit64/JitAsm.h"
#include "Core/PowerPC/Jit64/JitRegCache.h"
#include "Core/PowerPC/Jit64Common/FarCodeCache.h"
@ -216,6 +216,7 @@ bool Jit64::HandleFault(uintptr_t access_address, SContext* ctx)
void Jit64::Init()
{
InitializeInstructionTables();
EnableBlockLink();
jo.optimizeGatherPipe = true;
@ -874,7 +875,7 @@ const u8* Jit64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitBloc
fpr.BindToRegister(reg, true, false);
}
Jit64Tables::CompileInstruction(*this, ops[i]);
CompileInstruction(ops[i]);
if (jo.memcheck && (opinfo->flags & FL_LOADSTORE))
{

View File

@ -31,37 +31,18 @@
class Jit64 : public Jitx86Base
{
private:
void AllocStack();
void FreeStack();
GPRRegCache gpr{*this};
FPURegCache fpr{*this};
// The default code buffer. We keep it around to not have to alloc/dealloc a
// large chunk of memory for each recompiled block.
PPCAnalyst::CodeBuffer code_buffer;
Jit64AsmRoutineManager asm_routines;
bool m_enable_blr_optimization;
bool m_cleanup_after_stackfault;
u8* m_stack;
public:
Jit64() : code_buffer(32000) {}
~Jit64() {}
void Init() override;
void EnableOptimization();
void EnableBlockLink();
void Shutdown() override;
bool HandleFault(uintptr_t access_address, SContext* ctx) override;
bool HandleStackFault() override;
void EnableOptimization();
void EnableBlockLink();
// Jit!
void Jit(u32 em_address) override;
@ -248,4 +229,23 @@ public:
void dcbx(UGeckoInstruction inst);
void eieio(UGeckoInstruction inst);
private:
static void InitializeInstructionTables();
void CompileInstruction(PPCAnalyst::CodeOp& op);
void AllocStack();
void FreeStack();
GPRRegCache gpr{*this};
FPURegCache fpr{*this};
// The default code buffer. We keep it around to not have to alloc/dealloc a
// large chunk of memory for each recompiled block.
PPCAnalyst::CodeBuffer code_buffer;
Jit64AsmRoutineManager asm_routines;
bool m_enable_blr_optimization;
bool m_cleanup_after_stackfault;
u8* m_stack;
};

View File

@ -4,7 +4,6 @@
#include "Core/PowerPC/Jit64/Jit.h"
#include "Core/PowerPC/Gekko.h"
#include "Core/PowerPC/Jit64/Jit64_Tables.h"
static Jit64::Instruction dynaOpTable[64];
static Jit64::Instruction dynaOpTable4[1024];
@ -358,26 +357,25 @@ static GekkoOPTemplate table63_2[] = {
{31, &Jit64::fmaddXX}, // fnmaddx
};
namespace Jit64Tables
void Jit64::CompileInstruction(PPCAnalyst::CodeOp& op)
{
void CompileInstruction(Jit64& jit, PPCAnalyst::CodeOp& op)
{
(jit.*dynaOpTable[op.inst.OPCD])(op.inst);
(this->*dynaOpTable[op.inst.OPCD])(op.inst);
GekkoOPInfo* info = op.opinfo;
if (info)
{
#ifdef OPLOG
if (!strcmp(info->opname, OP_TO_LOG)) // "mcrfs"
{
rsplocations.push_back(jit.js.compilerPC);
rsplocations.push_back(js.compilerPC);
}
#endif
info->compileCount++;
info->lastUse = jit.js.compilerPC;
info->lastUse = js.compilerPC;
}
}
void InitTables()
void Jit64::InitializeInstructionTables()
{
// once initialized, tables are read-only
static bool initialized = false;
@ -470,5 +468,3 @@ void InitTables()
initialized = true;
}
} // namespace

View File

@ -1,18 +0,0 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
class Jit64;
namespace PPCAnalyst
{
struct CodeOp;
}
namespace Jit64Tables
{
void CompileInstruction(Jit64& jit, PPCAnalyst::CodeOp& op);
void InitTables();
}

View File

@ -2,6 +2,8 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Core/PowerPC/Jit64IL/JitIL.h"
#include <cinttypes>
#include <ctime> // For profiling
#include <map>
@ -19,8 +21,6 @@
#include "Core/HW/CPU.h"
#include "Core/PatchEngine.h"
#include "Core/PowerPC/Jit64Common/Jit64PowerPCState.h"
#include "Core/PowerPC/Jit64IL/JitIL.h"
#include "Core/PowerPC/Jit64IL/JitIL_Tables.h"
#include "Core/PowerPC/PowerPC.h"
#include "Core/PowerPC/Profiler.h"
@ -255,6 +255,7 @@ static void Shutdown()
void JitIL::Init()
{
InitializeInstructionTables();
EnableBlockLink();
jo.optimizeGatherPipe = true;
@ -640,7 +641,7 @@ const u8* JitIL::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitBloc
ibuild.EmitBreakPointCheck(ibuild.EmitIntConst(ops[i].address));
}
JitILTables::CompileInstruction(*this, ops[i]);
CompileInstruction(ops[i]);
if (jo.memcheck && (opinfo->flags & FL_LOADSTORE))
{

View File

@ -35,11 +35,10 @@ public:
// Initialization, etc
void Init() override;
void Shutdown() override;
void EnableBlockLink();
void Shutdown() override;
// Jit!
void Jit(u32 em_address) override;
@ -77,4 +76,8 @@ public:
void DynaRunTable31(UGeckoInstruction _inst) override;
void DynaRunTable59(UGeckoInstruction _inst) override;
void DynaRunTable63(UGeckoInstruction _inst) override;
private:
static void InitializeInstructionTables();
void CompileInstruction(PPCAnalyst::CodeOp& op);
};

View File

@ -4,7 +4,6 @@
#include "Core/PowerPC/Jit64IL/JitIL.h"
#include "Core/PowerPC/Gekko.h"
#include "Core/PowerPC/Jit64IL/JitIL_Tables.h"
#include "Core/PowerPC/PPCTables.h"
static JitIL::Instruction dynaOpTable[64];
@ -376,31 +375,30 @@ static GekkoOPTemplate table63_2[] = {
{31, &JitIL::fmaddXX}, //"fnmaddx", OPTYPE_FPU, FL_RC_BIT_F}},
};
namespace JitILTables
void JitIL::CompileInstruction(PPCAnalyst::CodeOp& op)
{
void CompileInstruction(JitIL& jit, PPCAnalyst::CodeOp& op)
{
(jit.*dynaOpTable[op.inst.OPCD])(op.inst);
(this->*dynaOpTable[op.inst.OPCD])(op.inst);
GekkoOPInfo* info = op.opinfo;
if (info)
{
#ifdef OPLOG
if (!strcmp(info->opname, OP_TO_LOG)) // "mcrfs"
{
rsplocations.push_back(jit.js.compilerPC);
rsplocations.push_back(js.compilerPC);
}
#endif
info->compileCount++;
info->lastUse = jit.js.compilerPC;
info->lastUse = js.compilerPC;
}
else
{
PanicAlert("Tried to compile illegal (or unknown) instruction %08x, at %08x", op.inst.hex,
jit.js.compilerPC);
js.compilerPC);
}
}
void InitTables()
void JitIL::InitializeInstructionTables()
{
// once initialized, tables are read-only
static bool initialized = false;
@ -493,4 +491,3 @@ void InitTables()
initialized = true;
}
}

View File

@ -1,18 +0,0 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
class JitIL;
namespace PPCAnalyst
{
struct CodeOp;
}
namespace JitILTables
{
void CompileInstruction(JitIL& jit, PPCAnalyst::CodeOp& op);
void InitTables();
}

View File

@ -2,6 +2,8 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Core/PowerPC/JitArm64/Jit.h"
#include <cstdio>
#include "Common/Arm64Emitter.h"
@ -19,9 +21,7 @@
#include "Core/HW/Memmap.h"
#include "Core/HW/ProcessorInterface.h"
#include "Core/PatchEngine.h"
#include "Core/PowerPC/JitArm64/Jit.h"
#include "Core/PowerPC/JitArm64/JitArm64_RegCache.h"
#include "Core/PowerPC/JitArm64/JitArm64_Tables.h"
#include "Core/PowerPC/JitInterface.h"
#include "Core/PowerPC/Profiler.h"
@ -47,6 +47,8 @@ static bool HasCycleCounters()
void JitArm64::Init()
{
InitializeInstructionTables();
size_t child_code_size = SConfig::GetInstance().bMMU ? FARCODE_SIZE_MMU : FARCODE_SIZE;
AllocCodeSpace(CODE_SIZE + child_code_size);
AddChildCodeSpace(&farcode, child_code_size);
@ -849,7 +851,7 @@ void JitArm64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitBlock*
js.firstFPInstructionFound = true;
}
JitArm64Tables::CompileInstruction(*this, ops[i]);
CompileInstruction(ops[i]);
if (!MergeAllowedNextInstructions(1) || js.op[1].opinfo->type != OPTYPE_INTEGER)
FlushCarry();

View File

@ -172,29 +172,8 @@ private:
const u8* slowmem_code;
};
// <Fastmem fault location, slowmem handler location>
std::map<const u8*, FastmemArea> m_fault_to_handler;
std::map<SlowmemHandler, const u8*> m_handler_to_loc;
Arm64GPRCache gpr;
Arm64FPRCache fpr;
JitArm64BlockCache blocks{*this};
PPCAnalyst::CodeBuffer code_buffer;
ARM64FloatEmitter m_float_emit;
Arm64Gen::ARM64CodeBlock farcode;
u8* nearcode; // Backed up when we switch to far code.
// Do we support cycle counter profiling?
bool m_supports_cycle_counter;
bool m_enable_blr_optimization;
bool m_cleanup_after_stackfault = false;
u8* m_stack_base = nullptr;
u8* m_stack_pointer = nullptr;
u8* m_saved_stack_pointer = nullptr;
static void InitializeInstructionTables();
void CompileInstruction(PPCAnalyst::CodeOp& op);
void EmitResetCycleCounters();
void EmitGetCycles(Arm64Gen::ARM64Reg reg);
@ -260,4 +239,28 @@ private:
void reg_imm(u32 d, u32 a, u32 value, u32 (*do_op)(u32, u32),
void (ARM64XEmitter::*op)(ARM64Reg, ARM64Reg, u64, ARM64Reg), bool Rc = false);
// <Fastmem fault location, slowmem handler location>
std::map<const u8*, FastmemArea> m_fault_to_handler;
std::map<SlowmemHandler, const u8*> m_handler_to_loc;
Arm64GPRCache gpr;
Arm64FPRCache fpr;
JitArm64BlockCache blocks{*this};
PPCAnalyst::CodeBuffer code_buffer;
ARM64FloatEmitter m_float_emit;
Arm64Gen::ARM64CodeBlock farcode;
u8* nearcode; // Backed up when we switch to far code.
// Do we support cycle counter profiling?
bool m_supports_cycle_counter;
bool m_enable_blr_optimization;
bool m_cleanup_after_stackfault = false;
u8* m_stack_base = nullptr;
u8* m_stack_pointer = nullptr;
u8* m_saved_stack_pointer = nullptr;
};

View File

@ -2,10 +2,9 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Core/PowerPC/JitArm64/JitArm64_Tables.h"
#include "Core/PowerPC/JitArm64/Jit.h"
#include "Core/PowerPC/Gekko.h"
#include "Core/PowerPC/JitArm64/Jit.h"
#include "Core/PowerPC/JitInterface.h"
#include "Core/PowerPC/PPCAnalyst.h"
#include "Core/PowerPC/PPCTables.h"
@ -367,26 +366,25 @@ static GekkoOPTemplate table63_2[] = {
{31, &JitArm64::fp_arith}, // fnmaddx
};
namespace JitArm64Tables
void JitArm64::CompileInstruction(PPCAnalyst::CodeOp& op)
{
void CompileInstruction(JitArm64& jit, PPCAnalyst::CodeOp& op)
{
(jit.*dynaOpTable[op.inst.OPCD])(op.inst);
(this->*dynaOpTable[op.inst.OPCD])(op.inst);
GekkoOPInfo* info = op.opinfo;
if (info)
{
#ifdef OPLOG
if (!strcmp(info->opname, OP_TO_LOG))
{ ///"mcrfs"
rsplocations.push_back(jit.js.compilerPC);
rsplocations.push_back(js.compilerPC);
}
#endif
info->compileCount++;
info->lastUse = jit.js.compilerPC;
info->lastUse = js.compilerPC;
}
}
void InitTables()
void JitArm64::InitializeInstructionTables()
{
// once initialized, tables are read-only
static bool initialized = false;
@ -479,5 +477,3 @@ void InitTables()
initialized = true;
}
} // namespace

View File

@ -1,18 +0,0 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
class JitArm64;
namespace PPCAnalyst
{
struct CodeOp;
}
namespace JitArm64Tables
{
void CompileInstruction(JitArm64& jit, PPCAnalyst::CodeOp& op);
void InitTables();
}

View File

@ -22,14 +22,11 @@
#if _M_X86
#include "Core/PowerPC/Jit64/Jit.h"
#include "Core/PowerPC/Jit64/Jit64_Tables.h"
#include "Core/PowerPC/Jit64IL/JitIL.h"
#include "Core/PowerPC/Jit64IL/JitIL_Tables.h"
#endif
#if _M_ARM_64
#include "Core/PowerPC/JitArm64/Jit.h"
#include "Core/PowerPC/JitArm64/JitArm64_Tables.h"
#endif
namespace JitInterface
@ -70,31 +67,7 @@ CPUCoreBase* InitJitCore(int core)
g_jit->Init();
return ptr;
}
void InitTables(int core)
{
switch (core)
{
#if _M_X86
case PowerPC::CORE_JIT64:
Jit64Tables::InitTables();
break;
case PowerPC::CORE_JITIL64:
JitILTables::InitTables();
break;
#endif
#if _M_ARM_64
case PowerPC::CORE_JITARM64:
JitArm64Tables::InitTables();
break;
#endif
case PowerPC::CORE_CACHEDINTERPRETER:
// has no tables
break;
default:
PanicAlert("Unrecognizable cpu_core: %d", core);
break;
}
}
CPUCoreBase* GetCore()
{
return g_jit;

View File

@ -22,7 +22,6 @@ enum class ExceptionType
void DoState(PointerWrap& p);
CPUCoreBase* InitJitCore(int core);
void InitTables(int core);
CPUCoreBase* GetCore();
// Debugging

View File

@ -15,7 +15,6 @@
#include "Common/StringUtil.h"
#include "Core/PowerPC/Interpreter/Interpreter.h"
#include "Core/PowerPC/Interpreter/Interpreter_Tables.h"
#include "Core/PowerPC/JitInterface.h"
#include "Core/PowerPC/PowerPC.h"
@ -110,15 +109,6 @@ bool UsesFPU(UGeckoInstruction inst)
return (info->flags & FL_USE_FPU) != 0;
}
void InitTables(int cpu_core)
{
// Interpreter ALWAYS needs to be initialized
InterpreterTables::InitTables();
if (cpu_core != PowerPC::CORE_INTERPRETER)
JitInterface::InitTables(cpu_core);
}
#define OPLOG
#define OP_TO_LOG "mtfsb0x"

View File

@ -110,7 +110,6 @@ Interpreter::Instruction GetInterpreterOp(UGeckoInstruction _inst);
namespace PPCTables
{
void InitTables(int cpu_core);
bool IsValidInstruction(UGeckoInstruction _instCode);
bool UsesFPU(UGeckoInstruction _inst);
@ -118,5 +117,4 @@ void CountInstruction(UGeckoInstruction _inst);
void PrintInstructionRunCounts();
void LogCompiledInstructions();
const char* GetInstructionName(UGeckoInstruction _inst);
} // namespace
} // namespace PPCTables

View File

@ -2,6 +2,8 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Core/PowerPC/PowerPC.h"
#include "Common/Assert.h"
#include "Common/ChunkFile.h"
#include "Common/CommonTypes.h"
@ -18,8 +20,6 @@
#include "Core/PowerPC/CPUCoreBase.h"
#include "Core/PowerPC/Interpreter/Interpreter.h"
#include "Core/PowerPC/JitInterface.h"
#include "Core/PowerPC/PPCTables.h"
#include "Core/PowerPC/PowerPC.h"
namespace PowerPC
{
@ -148,8 +148,6 @@ static void ResetRegisters()
static void InitializeCPUCore(int cpu_core)
{
PPCTables::InitTables(cpu_core);
// We initialize the interpreter because
// it is used on boot and code window independently.
s_interpreter->Init();