Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PPCTables: Namespace all exposed functions #6517

Merged
merged 2 commits into from
Mar 24, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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