115 lines
2.5 KiB
C
Raw Normal View History

// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#pragma once
#include "Core/PowerPC/Gekko.h"
#include "Core/PowerPC/Interpreter/Interpreter.h"
enum
{
2014-02-09 16:03:16 -05:00
FL_SET_CR0 = (1<<0), //
FL_SET_CR1 = (1<<1), //
FL_SET_CRn = (1<<2), //
FL_SET_CRx = FL_SET_CR0 | FL_SET_CR1 | FL_SET_CRn, //
FL_SET_CA = (1<<3), // carry
FL_READ_CA = (1<<4), // carry
FL_RC_BIT = (1<<5),
FL_RC_BIT_F = (1<<6),
FL_ENDBLOCK = (1<<7),
FL_IN_A = (1<<8),
FL_IN_A0 = (1<<9),
FL_IN_B = (1<<10),
FL_IN_C = (1<<11),
FL_IN_S = (1<<12),
FL_IN_AB = FL_IN_A | FL_IN_B,
FL_IN_SB = FL_IN_S | FL_IN_B,
FL_IN_A0B = FL_IN_A0 | FL_IN_B,
FL_IN_A0BC = FL_IN_A0 | FL_IN_B | FL_IN_C,
FL_OUT_D = (1<<13),
FL_OUT_S = FL_OUT_D,
FL_OUT_A = (1<<14),
FL_OUT_AD = FL_OUT_A | FL_OUT_D,
FL_TIMER = (1<<15),
FL_CHECKEXCEPTIONS = (1<<16),
2014-02-09 16:03:16 -05:00
FL_EVIL = (1<<17),
FL_USE_FPU = (1<<18),
FL_LOADSTORE = (1<<19),
};
enum
{
OPTYPE_INVALID ,
OPTYPE_SUBTABLE,
OPTYPE_INTEGER ,
OPTYPE_CR ,
OPTYPE_SPR ,
OPTYPE_SYSTEM ,
OPTYPE_SYSTEMFP,
OPTYPE_LOAD ,
OPTYPE_STORE ,
OPTYPE_LOADFP ,
OPTYPE_STOREFP ,
OPTYPE_FPU ,
OPTYPE_PS ,
OPTYPE_DCACHE ,
OPTYPE_ICACHE ,
OPTYPE_BRANCH ,
OPTYPE_UNKNOWN ,
};
2014-02-09 16:03:16 -05:00
enum
{
OPCD_HLEFUNCTION = 1,
OPCD_COMPILEDBLOCK = 2,
2014-02-09 16:03:16 -05:00
OPCD_BCx = 16,
OPCD_SC = 17,
OPCD_Bx = 18,
};
2014-02-09 16:03:16 -05:00
enum
{
OP_BLR = 0x4e800020,
};
2014-02-09 16:03:16 -05:00
struct GekkoOPInfo
{
const char *opname;
int type;
int flags;
int numCyclesMinusOne;
u64 runCount;
int compileCount;
u32 lastUse;
};
extern GekkoOPInfo *m_infoTable[64];
extern GekkoOPInfo *m_infoTable4[1024];
extern GekkoOPInfo *m_infoTable19[1024];
extern GekkoOPInfo *m_infoTable31[1024];
extern GekkoOPInfo *m_infoTable59[32];
extern GekkoOPInfo *m_infoTable63[1024];
extern GekkoOPInfo *m_allInstructions[512];
extern int m_numInstructions;
GekkoOPInfo *GetOpInfo(UGeckoInstruction _inst);
Interpreter::_interpreterInstruction GetInterpreterOp(UGeckoInstruction _inst);
class cJit64;
namespace PPCTables
{
void InitTables(int cpu_core);
bool IsValidInstruction(UGeckoInstruction _instCode);
bool UsesFPU(UGeckoInstruction _inst);
void CountInstruction(UGeckoInstruction _inst);
void PrintInstructionRunCounts();
void LogCompiledInstructions();
const char *GetInstructionName(UGeckoInstruction _inst);
} // namespace