Skip to content

Commit

Permalink
Merge pull request #6517 from lioncash/ppctables
Browse files Browse the repository at this point in the history
PPCTables: Namespace all exposed functions
  • Loading branch information
leoetlino committed Mar 24, 2018
2 parents 3c3d2be + 8a7abd7 commit 328ac42
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 44 deletions.
Expand Up @@ -241,7 +241,7 @@ void CachedInterpreter::Jit(u32 address)

if (endblock || memcheck)
m_code.emplace_back(WritePC, ops[i].address);
m_code.emplace_back(GetInterpreterOp(ops[i].inst), ops[i].inst);
m_code.emplace_back(PPCTables::GetInterpreterOp(ops[i].inst), ops[i].inst);
if (memcheck)
m_code.emplace_back(CheckDSI, js.downcountAmount);
if (endblock)
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp
Expand Up @@ -193,7 +193,7 @@ int Interpreter::SingleStepInner()
last_pc = PC;
PC = NPC;

GekkoOPInfo* opinfo = GetOpInfo(instCode);
const GekkoOPInfo* opinfo = PPCTables::GetOpInfo(instCode);
return opinfo->numCycles;
}

Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/PowerPC/Jit64/Jit.cpp
Expand Up @@ -287,7 +287,7 @@ void Jit64::FallBackToInterpreter(UGeckoInstruction inst)
MOV(32, PPCSTATE(pc), Imm32(js.compilerPC));
MOV(32, PPCSTATE(npc), Imm32(js.compilerPC + 4));
}
Interpreter::Instruction instr = GetInterpreterOp(inst);
Interpreter::Instruction instr = PPCTables::GetInterpreterOp(inst);
ABI_PushRegistersAndAdjustStack({}, 0);
ABI_CallFunctionC(instr, inst.hex);
ABI_PopRegistersAndAdjustStack({}, 0);
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/PowerPC/JitArm64/Jit.cpp
Expand Up @@ -149,7 +149,7 @@ void JitArm64::FallBackToInterpreter(UGeckoInstruction inst)
gpr.Unlock(WA);
}

Interpreter::Instruction instr = GetInterpreterOp(inst);
Interpreter::Instruction instr = PPCTables::GetInterpreterOp(inst);
MOVI2R(W0, inst.hex);
MOVP2R(X30, instr);
BLR(X30);
Expand Down
4 changes: 2 additions & 2 deletions Source/Core/Core/PowerPC/JitInterface.cpp
Expand Up @@ -239,8 +239,8 @@ void CompileExceptionCheck(ExceptionType type)
if (type == ExceptionType::FIFOWrite)
{
// Check in case the code has been replaced since: do we need to do this?
const ::OpType optype = GetOpInfo(PowerPC::HostRead_U32(PC))->type;
if (optype != ::OpType::Store && optype != ::OpType::StoreFP && optype != ::OpType::StorePS)
const OpType optype = PPCTables::GetOpInfo(PowerPC::HostRead_U32(PC))->type;
if (optype != OpType::Store && optype != OpType::StoreFP && optype != OpType::StorePS)
return;
}
exception_addresses->insert(PC);
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/PowerPC/PPCAnalyst.cpp
Expand Up @@ -726,7 +726,7 @@ u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, u32

num_inst++;
memset(&code[i], 0, sizeof(CodeOp));
GekkoOPInfo* opinfo = GetOpInfo(inst);
GekkoOPInfo* opinfo = PPCTables::GetOpInfo(inst);

code[i].opinfo = opinfo;
code[i].address = address;
Expand Down
61 changes: 31 additions & 30 deletions Source/Core/Core/PowerPC/PPCTables.cpp
Expand Up @@ -41,73 +41,74 @@ const std::array<u64, 16> m_crTable = {{
}};
} // namespace PowerPC

GekkoOPInfo* GetOpInfo(UGeckoInstruction _inst)
namespace PPCTables
{
GekkoOPInfo* GetOpInfo(UGeckoInstruction inst)
{
GekkoOPInfo* info = m_infoTable[_inst.OPCD];
const GekkoOPInfo* info = m_infoTable[inst.OPCD];
if (info->type == OpType::Subtable)
{
switch (_inst.OPCD)
switch (inst.OPCD)
{
case 4:
return m_infoTable4[_inst.SUBOP10];
return m_infoTable4[inst.SUBOP10];
case 19:
return m_infoTable19[_inst.SUBOP10];
return m_infoTable19[inst.SUBOP10];
case 31:
return m_infoTable31[_inst.SUBOP10];
return m_infoTable31[inst.SUBOP10];
case 59:
return m_infoTable59[_inst.SUBOP5];
return m_infoTable59[inst.SUBOP5];
case 63:
return m_infoTable63[_inst.SUBOP10];
return m_infoTable63[inst.SUBOP10];
default:
ASSERT_MSG(POWERPC, 0, "GetOpInfo - invalid subtable op %08x @ %08x", _inst.hex, PC);
ASSERT_MSG(POWERPC, 0, "GetOpInfo - invalid subtable op %08x @ %08x", inst.hex, PC);
return nullptr;
}
}
else
{
if (info->type == OpType::Invalid)
{
ASSERT_MSG(POWERPC, 0, "GetOpInfo - invalid op %08x @ %08x", _inst.hex, PC);
ASSERT_MSG(POWERPC, 0, "GetOpInfo - invalid op %08x @ %08x", inst.hex, PC);
return nullptr;
}
return m_infoTable[_inst.OPCD];
return m_infoTable[inst.OPCD];
}
}

Interpreter::Instruction GetInterpreterOp(UGeckoInstruction _inst)
Interpreter::Instruction GetInterpreterOp(UGeckoInstruction inst)
{
const GekkoOPInfo* info = m_infoTable[_inst.OPCD];
const GekkoOPInfo* info = m_infoTable[inst.OPCD];
if (info->type == OpType::Subtable)
{
switch (_inst.OPCD)
switch (inst.OPCD)
{
case 4:
return Interpreter::m_op_table4[_inst.SUBOP10];
return Interpreter::m_op_table4[inst.SUBOP10];
case 19:
return Interpreter::m_op_table19[_inst.SUBOP10];
return Interpreter::m_op_table19[inst.SUBOP10];
case 31:
return Interpreter::m_op_table31[_inst.SUBOP10];
return Interpreter::m_op_table31[inst.SUBOP10];
case 59:
return Interpreter::m_op_table59[_inst.SUBOP5];
return Interpreter::m_op_table59[inst.SUBOP5];
case 63:
return Interpreter::m_op_table63[_inst.SUBOP10];
return Interpreter::m_op_table63[inst.SUBOP10];
default:
ASSERT_MSG(POWERPC, 0, "GetInterpreterOp - invalid subtable op %08x @ %08x", _inst.hex, PC);
ASSERT_MSG(POWERPC, 0, "GetInterpreterOp - invalid subtable op %08x @ %08x", inst.hex, PC);
return nullptr;
}
}
else
{
if (info->type == OpType::Invalid)
{
ASSERT_MSG(POWERPC, 0, "GetInterpreterOp - invalid op %08x @ %08x", _inst.hex, PC);
ASSERT_MSG(POWERPC, 0, "GetInterpreterOp - invalid op %08x @ %08x", inst.hex, PC);
return nullptr;
}
return Interpreter::m_op_table[_inst.OPCD];
return Interpreter::m_op_table[inst.OPCD];
}
}
namespace PPCTables
{

bool UsesFPU(UGeckoInstruction inst)
{
GekkoOPInfo* const info = GetOpInfo(inst);
Expand All @@ -125,21 +126,21 @@ std::vector<u32> rsplocations;
}
#endif

const char* GetInstructionName(UGeckoInstruction _inst)
const char* GetInstructionName(UGeckoInstruction inst)
{
const GekkoOPInfo* info = GetOpInfo(_inst);
const GekkoOPInfo* info = GetOpInfo(inst);
return info ? info->opname : nullptr;
}

bool IsValidInstruction(UGeckoInstruction _inst)
bool IsValidInstruction(UGeckoInstruction inst)
{
const GekkoOPInfo* info = GetOpInfo(_inst);
const GekkoOPInfo* info = GetOpInfo(inst);
return info != nullptr && info->type != OpType::Unknown;
}

void CountInstruction(UGeckoInstruction _inst)
void CountInstruction(UGeckoInstruction inst)
{
GekkoOPInfo* info = GetOpInfo(_inst);
GekkoOPInfo* info = GetOpInfo(inst);
if (info)
{
info->runCount++;
Expand Down
14 changes: 7 additions & 7 deletions Source/Core/Core/PowerPC/PPCTables.h
Expand Up @@ -105,16 +105,16 @@ extern std::array<GekkoOPInfo*, 1024> m_infoTable63;
extern std::array<GekkoOPInfo*, 512> m_allInstructions;
extern size_t m_numInstructions;

GekkoOPInfo* GetOpInfo(UGeckoInstruction _inst);
Interpreter::Instruction GetInterpreterOp(UGeckoInstruction _inst);

namespace PPCTables
{
bool IsValidInstruction(UGeckoInstruction _instCode);
bool UsesFPU(UGeckoInstruction _inst);
GekkoOPInfo* GetOpInfo(UGeckoInstruction inst);
Interpreter::Instruction GetInterpreterOp(UGeckoInstruction inst);

bool IsValidInstruction(UGeckoInstruction inst);
bool UsesFPU(UGeckoInstruction inst);

void CountInstruction(UGeckoInstruction _inst);
void CountInstruction(UGeckoInstruction inst);
void PrintInstructionRunCounts();
void LogCompiledInstructions();
const char* GetInstructionName(UGeckoInstruction _inst);
const char* GetInstructionName(UGeckoInstruction inst);
} // namespace PPCTables

0 comments on commit 328ac42

Please sign in to comment.