mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-30 01:29:42 -06:00
More linux...
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@122 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -260,13 +260,17 @@ namespace Jit64
|
||||
|
||||
bool ImHereDebug = false;
|
||||
|
||||
std::map<u32, bool> been_here;
|
||||
std::map<u32, int> been_here;
|
||||
void ImHere()
|
||||
{
|
||||
if (been_here.find(PC) != been_here.end())
|
||||
return;
|
||||
if (been_here.find(PC) != been_here.end()) {
|
||||
been_here.find(PC)->second++;
|
||||
if ((been_here.find(PC)->second) & 1023)
|
||||
return;
|
||||
}
|
||||
LOG(DYNA_REC, "I'm here - PC = %08x , LR = %08x", PC, LR);
|
||||
been_here[PC] = true;
|
||||
printf("I'm here - PC = %08x , LR = %08x", PC, LR);
|
||||
been_here[PC] = 1;
|
||||
}
|
||||
|
||||
void FlushRegCaches()
|
||||
|
@ -23,11 +23,11 @@ void BackPatchError(const std::string &text, u8 *codePtr, u32 emAddress) {
|
||||
char disbuf[256];
|
||||
memset(disbuf, 0, 256);
|
||||
#ifdef _M_IX86
|
||||
disasm.disasm32(
|
||||
disasm.disasm32
|
||||
#else
|
||||
disasm.disasm64(
|
||||
disasm.disasm64
|
||||
#endif
|
||||
0, code_addr, codePtr, disbuf);
|
||||
(0, code_addr, codePtr, disbuf);
|
||||
PanicAlert("%s\n\n"
|
||||
"Error encountered accessing emulated address %08x.\n"
|
||||
"Culprit instruction: \n%s\nat %08x%08x",
|
||||
@ -82,9 +82,9 @@ void BackPatch(u8 *codePtr, int accessType, u32 emAddress)
|
||||
// * Set up stack frame.
|
||||
// * Call ReadMemory32
|
||||
//LEA(32, ECX, MDisp((X64Reg)addrReg, info.displacement));
|
||||
MOV(32, R(ECX), R((X64Reg)addrReg));
|
||||
MOV(32, R(ABI_PARAM1), R((X64Reg)addrReg));
|
||||
if (info.displacement) {
|
||||
ADD(32, R(ECX), Imm32(info.displacement));
|
||||
ADD(32, R(ABI_PARAM1), Imm32(info.displacement));
|
||||
}
|
||||
switch (info.operandSize) {
|
||||
//case 1:
|
||||
|
@ -198,6 +198,7 @@ namespace Jit64
|
||||
|
||||
bool GPRRegCache::IsXRegVolatile(X64Reg reg) const
|
||||
{
|
||||
#ifdef _WIN32
|
||||
switch (reg)
|
||||
{
|
||||
case RAX: case RCX: case RDX: case R8: case R9: case R10: case R11:
|
||||
@ -208,6 +209,9 @@ namespace Jit64
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
void RegCache::DiscardRegContentsIfCached(int preg)
|
||||
@ -252,7 +256,7 @@ namespace Jit64
|
||||
#ifdef _WIN32
|
||||
RSI, RDI, R12, R13, R14, R8, R9, RDX, R10, R11 //, RCX
|
||||
#else
|
||||
R12, R13, R14, R8, R9, RDX, R10, R11, RSI, RDI //, RCX
|
||||
R12, R13, R14, R8, R9, R10, R11, RSI, RDI //, RCX
|
||||
#endif
|
||||
#elif _M_IX86
|
||||
ESI, EDI, EBX, EBP, EDX //, RCX
|
||||
|
@ -188,9 +188,9 @@ namespace Jit64
|
||||
#ifdef _M_X64
|
||||
if (!jo.noAssumeFPLoadFromMem)
|
||||
{
|
||||
MOV(32, R(EAX), MComplex(RBX, ECX, SCALE_1, offset));
|
||||
MOV(32, R(EAX), MComplex(RBX, ABI_PARAM1, SCALE_1, offset));
|
||||
//#else
|
||||
// MOV(32, R(EAX), MDisp(ECX, (u32)Memory::GetMainRAMPtr() + (u32)offset));
|
||||
// MOV(32, R(EAX), MDisp(ABI_PARAM1, (u32)Memory::GetMainRAMPtr() + (u32)offset));
|
||||
//#endif
|
||||
BSWAP(32, EAX);
|
||||
}
|
||||
@ -221,8 +221,8 @@ namespace Jit64
|
||||
}
|
||||
s32 offset = (s32)(s16)inst.SIMM_16;
|
||||
gpr.Lock(a);
|
||||
MOV(32, R(ECX), gpr.R(a));
|
||||
MOV(64, R(EAX), MComplex(RBX, ECX, SCALE_1, offset));
|
||||
MOV(32, R(ABI_PARAM1), gpr.R(a));
|
||||
MOV(64, R(EAX), MComplex(RBX, ABI_PARAM1, SCALE_1, offset));
|
||||
BSWAP(64,EAX);
|
||||
MOV(64, M(&temp64), R(EAX));
|
||||
fpr.Lock(d);
|
||||
@ -249,10 +249,10 @@ namespace Jit64
|
||||
fpr.Lock(s);
|
||||
fpr.LoadToX64(s, true, false);
|
||||
MOVSD(M(&temp64), fpr.RX(s));
|
||||
MOV(32, R(ECX), gpr.R(a));
|
||||
MOV(32, R(ABI_PARAM1), gpr.R(a));
|
||||
MOV(64, R(EAX), M(&temp64));
|
||||
BSWAP(64, EAX);
|
||||
MOV(64, MComplex(RBX, ECX, SCALE_1, offset), R(EAX));
|
||||
MOV(64, MComplex(RBX, ABI_PARAM1, SCALE_1, offset), R(EAX));
|
||||
gpr.UnlockAll();
|
||||
fpr.UnlockAll();
|
||||
}
|
||||
|
@ -52,8 +52,8 @@ static u32 GC_ALIGNED16(temp32);
|
||||
// TODO(ector): Improve 64-bit version
|
||||
void WriteDual32(u64 value, u32 address)
|
||||
{
|
||||
Memory::Write_U32((u32)(value>>32), address);
|
||||
Memory::Write_U32((u32)value, address+4);
|
||||
Memory::Write_U32((u32)(value >> 32), address);
|
||||
Memory::Write_U32((u32)value, address + 4);
|
||||
}
|
||||
|
||||
const double m_quantizeTableD[] =
|
||||
@ -171,7 +171,7 @@ void psq_st(UGeckoInstruction inst)
|
||||
MOVAPS(M(&temp64), XMM0);
|
||||
MOV(16, R(ABI_PARAM1), M(&temp64));
|
||||
#ifdef _M_X64
|
||||
MOV(16, MComplex(RBX, RDX, SCALE_1, 0), R(ABI_PARAM1));
|
||||
MOV(16, MComplex(RBX, ABI_PARAM2, SCALE_1, 0), R(ABI_PARAM1));
|
||||
#else
|
||||
BSWAP(32, ABI_PARAM1);
|
||||
SHR(32, R(ABI_PARAM1), Imm8(16));
|
||||
@ -201,7 +201,7 @@ void psq_st(UGeckoInstruction inst)
|
||||
MOV(32, R(ABI_PARAM1), M(&temp64));
|
||||
#ifdef _M_X64
|
||||
BSWAP(32, ABI_PARAM1);
|
||||
MOV(32, MComplex(RBX, RDX, SCALE_1, 0), R(ABI_PARAM1));
|
||||
MOV(32, MComplex(RBX, ABI_PARAM2, SCALE_1, 0), R(ABI_PARAM1));
|
||||
#else
|
||||
BSWAP(32, ABI_PARAM1);
|
||||
CALL(&Memory::Write_U32);
|
||||
@ -321,4 +321,4 @@ void psq_l(UGeckoInstruction inst)
|
||||
//u32 EA = (m_GPR[_inst.RA] + _inst.SIMM_12) : _inst.SIMM_12;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
@ -58,7 +58,7 @@ namespace Jit64
|
||||
|
||||
// OK, this is easy.
|
||||
gpr.Lock(d);
|
||||
gpr.LoadToX64(d,true);
|
||||
gpr.LoadToX64(d, true);
|
||||
MOV(32, M(&PowerPC::ppcState.spr[iIndex]), gpr.R(d));
|
||||
gpr.UnlockAll();
|
||||
}
|
||||
|
Reference in New Issue
Block a user