commit
a0ff868c34
|
@ -43,7 +43,7 @@ void Jit64AsmRoutineManager::Generate()
|
||||||
MOV(64, R(R15), Imm64((u64)jit->GetBlockCache()->GetCodePointers())); //It's below 2GB so 32 bits are good enough
|
MOV(64, R(R15), Imm64((u64)jit->GetBlockCache()->GetCodePointers())); //It's below 2GB so 32 bits are good enough
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
outerLoop = GetCodePtr();
|
const u8* outerLoop = GetCodePtr();
|
||||||
ABI_CallFunction(reinterpret_cast<void *>(&CoreTiming::Advance));
|
ABI_CallFunction(reinterpret_cast<void *>(&CoreTiming::Advance));
|
||||||
FixupBranch skipToRealDispatch = J(); //skip the sync and compare first time
|
FixupBranch skipToRealDispatch = J(); //skip the sync and compare first time
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ void Jit64AsmRoutineManager::Generate()
|
||||||
SetJumpTarget(bail);
|
SetJumpTarget(bail);
|
||||||
doTiming = GetCodePtr();
|
doTiming = GetCodePtr();
|
||||||
|
|
||||||
testExternalExceptions = GetCodePtr();
|
// Test external exceptions.
|
||||||
TEST(32, M((void *)&PowerPC::ppcState.Exceptions), Imm32(EXCEPTION_EXTERNAL_INT | EXCEPTION_PERFORMANCE_MONITOR | EXCEPTION_DECREMENTER));
|
TEST(32, M((void *)&PowerPC::ppcState.Exceptions), Imm32(EXCEPTION_EXTERNAL_INT | EXCEPTION_PERFORMANCE_MONITOR | EXCEPTION_DECREMENTER));
|
||||||
FixupBranch noExtException = J_CC(CC_Z);
|
FixupBranch noExtException = J_CC(CC_Z);
|
||||||
MOV(32, R(EAX), M(&PC));
|
MOV(32, R(EAX), M(&PC));
|
||||||
|
@ -174,11 +174,6 @@ void Jit64AsmRoutineManager::Generate()
|
||||||
ABI_PopAllCalleeSavedRegsAndAdjustStack();
|
ABI_PopAllCalleeSavedRegsAndAdjustStack();
|
||||||
RET();
|
RET();
|
||||||
|
|
||||||
breakpointBailout = GetCodePtr();
|
|
||||||
//Landing pad for drec space
|
|
||||||
ABI_PopAllCalleeSavedRegsAndAdjustStack();
|
|
||||||
RET();
|
|
||||||
|
|
||||||
GenerateCommon();
|
GenerateCommon();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,8 +187,6 @@ void Jit64AsmRoutineManager::GenerateCommon()
|
||||||
GenFifoWrite(32);
|
GenFifoWrite(32);
|
||||||
fifoDirectWriteFloat = AlignCode4();
|
fifoDirectWriteFloat = AlignCode4();
|
||||||
GenFifoFloatWrite();
|
GenFifoFloatWrite();
|
||||||
fifoDirectWriteXmm64 = AlignCode4();
|
|
||||||
GenFifoXmm64Write();
|
|
||||||
|
|
||||||
GenQuantizedLoads();
|
GenQuantizedLoads();
|
||||||
GenQuantizedStores();
|
GenQuantizedStores();
|
||||||
|
|
|
@ -51,19 +51,6 @@ void CommonAsmRoutines::GenFifoFloatWrite()
|
||||||
RET();
|
RET();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommonAsmRoutines::GenFifoXmm64Write()
|
|
||||||
{
|
|
||||||
// Assume value in XMM0. Assume pre-byteswapped (unlike the others here!)
|
|
||||||
PUSH(ESI);
|
|
||||||
MOV(32, R(EAX), Imm32((u32)(u64)GPFifo::m_gatherPipe));
|
|
||||||
MOV(32, R(ESI), M(&GPFifo::m_gatherPipeCount));
|
|
||||||
MOVQ_xmm(MComplex(RAX, RSI, 1, 0), XMM0);
|
|
||||||
ADD(32, R(ESI), Imm8(8));
|
|
||||||
MOV(32, M(&GPFifo::m_gatherPipeCount), R(ESI));
|
|
||||||
POP(ESI);
|
|
||||||
RET();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Safe + Fast Quantizers, originally from JITIL by magumagu
|
// Safe + Fast Quantizers, originally from JITIL by magumagu
|
||||||
|
|
||||||
static const u8 GC_ALIGNED16(pbswapShuffle1x4[16]) = {3, 2, 1, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
|
static const u8 GC_ALIGNED16(pbswapShuffle1x4[16]) = {3, 2, 1, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
|
||||||
|
|
|
@ -14,21 +14,16 @@ public:
|
||||||
const u8 *fifoDirectWrite16;
|
const u8 *fifoDirectWrite16;
|
||||||
const u8 *fifoDirectWrite32;
|
const u8 *fifoDirectWrite32;
|
||||||
const u8 *fifoDirectWriteFloat;
|
const u8 *fifoDirectWriteFloat;
|
||||||
const u8 *fifoDirectWriteXmm64;
|
|
||||||
|
|
||||||
const u8 *enterCode;
|
const u8 *enterCode;
|
||||||
|
|
||||||
const u8 *outerLoop;
|
|
||||||
const u8 *dispatcher;
|
const u8 *dispatcher;
|
||||||
const u8 *dispatcherNoCheck;
|
const u8 *dispatcherNoCheck;
|
||||||
const u8 *dispatcherPcInEAX;
|
const u8 *dispatcherPcInEAX;
|
||||||
|
|
||||||
const u8 *testExternalExceptions;
|
|
||||||
const u8 *dispatchPcInEAX;
|
const u8 *dispatchPcInEAX;
|
||||||
const u8 *doTiming;
|
const u8 *doTiming;
|
||||||
|
|
||||||
const u8 *breakpointBailout;
|
|
||||||
|
|
||||||
// In: array index: GQR to use.
|
// In: array index: GQR to use.
|
||||||
// In: ECX: Address to read from.
|
// In: ECX: Address to read from.
|
||||||
// Out: XMM0: Bottom two 32-bit slots hold the read value,
|
// Out: XMM0: Bottom two 32-bit slots hold the read value,
|
||||||
|
|
Loading…
Reference in New Issue