summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2015-01-24 12:28:44 +1100
committerskidau <skidau@gmail.com>2015-01-24 12:28:44 +1100
commitf1a4b98d36bedc4c56c409a93c94ba81a1bbefaa (patch)
treea2847cf9501d914baeb1e5b823271bcfdac51f15 /Source/Core
parent0b1d8fae1b4d1a041c03e59fd09fc5e212c87af7 (diff)
parent213eb730d033f2c6181cb40ff1658dbec44538fa (diff)
Merge pull request #1879 from magumagu/idle-exception-check
For idle loops, perform an exception check before CoreTiming::Advance.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/CoreTiming.cpp2
-rw-r--r--Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp2
-rw-r--r--Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp2
-rw-r--r--Source/Core/Core/PowerPC/JitArm32/JitArm_LoadStore.cpp1
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp1
-rw-r--r--Source/Core/Core/PowerPC/PowerPC.cpp10
-rw-r--r--Source/Core/Core/PowerPC/PowerPC.h3
7 files changed, 4 insertions, 17 deletions
diff --git a/Source/Core/Core/CoreTiming.cpp b/Source/Core/Core/CoreTiming.cpp
index ff50f5b38a..2a7e571dc2 100644
--- a/Source/Core/Core/CoreTiming.cpp
+++ b/Source/Core/Core/CoreTiming.cpp
@@ -479,8 +479,6 @@ void Idle()
idledCycles += DowncountToCycles(PowerPC::ppcState.downcount);
PowerPC::ppcState.downcount = 0;
-
- Advance();
}
std::string GetScheduledEventsSummary()
diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp
index 0c0a23acfc..6857ead896 100644
--- a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp
+++ b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp
@@ -134,7 +134,7 @@ void Jit64::lXXx(UGeckoInstruction inst)
BitSet32 registersInUse = CallerSavedRegistersInUse();
ABI_PushRegistersAndAdjustStack(registersInUse, 0);
- ABI_CallFunctionC((void *)&PowerPC::OnIdle, PowerPC::ppcState.gpr[a] + (s32)(s16)inst.SIMM_16);
+ ABI_CallFunction((void *)&PowerPC::OnIdle);
ABI_PopRegistersAndAdjustStack(registersInUse, 0);
diff --git a/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp
index f38293cf6b..21288492a7 100644
--- a/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp
+++ b/Source/Core/Core/PowerPC/Jit64IL/IR_X86.cpp
@@ -2088,7 +2088,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, u32 exitAddress)
FixupBranch noidle = Jit->J_CC(CC_NZ);
RI.Jit->Cleanup(); // is it needed?
- Jit->ABI_CallFunction((void *)&PowerPC::OnIdleIL);
+ Jit->ABI_CallFunction((void *)&PowerPC::OnIdle);
Jit->MOV(32, PPCSTATE(pc), Imm32(ibuild->GetImmValue( getOp2(I) )));
Jit->WriteExceptionExit();
diff --git a/Source/Core/Core/PowerPC/JitArm32/JitArm_LoadStore.cpp b/Source/Core/Core/PowerPC/JitArm32/JitArm_LoadStore.cpp
index ed2e96db3a..678223b7a6 100644
--- a/Source/Core/Core/PowerPC/JitArm32/JitArm_LoadStore.cpp
+++ b/Source/Core/Core/PowerPC/JitArm32/JitArm_LoadStore.cpp
@@ -464,7 +464,6 @@ void JitArm::lXX(UGeckoInstruction inst)
rA = gpr.GetReg();
MOVI2R(rA, (u32)&PowerPC::OnIdle);
- MOVI2R(R0, PowerPC::ppcState.gpr[a] + (s32)(s16)inst.SIMM_16);
BL(rA);
gpr.Unlock(rA);
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp
index ed92483e58..ad06be4ccd 100644
--- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp
+++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp
@@ -398,7 +398,6 @@ void JitArm64::lXX(UGeckoInstruction inst)
ARM64Reg XA = EncodeRegTo64(WA);
MOVI2R(XA, (u64)&PowerPC::OnIdle);
- MOVI2R(W0, PowerPC::ppcState.gpr[a] + (s32)(s16)inst.SIMM_16);
BLR(XA);
gpr.Unlock(WA);
diff --git a/Source/Core/Core/PowerPC/PowerPC.cpp b/Source/Core/Core/PowerPC/PowerPC.cpp
index 5f8bc9de00..fca69f7bc1 100644
--- a/Source/Core/Core/PowerPC/PowerPC.cpp
+++ b/Source/Core/Core/PowerPC/PowerPC.cpp
@@ -510,15 +510,7 @@ void CheckBreakPoints()
}
}
-void OnIdle(u32 _uThreadAddr)
-{
- u32 nextThread = Memory::Read_U32(_uThreadAddr);
- //do idle skipping
- if (nextThread == 0)
- CoreTiming::Idle();
-}
-
-void OnIdleIL()
+void OnIdle()
{
CoreTiming::Idle();
}
diff --git a/Source/Core/Core/PowerPC/PowerPC.h b/Source/Core/Core/PowerPC/PowerPC.h
index bb6d418065..5ac0d802a4 100644
--- a/Source/Core/Core/PowerPC/PowerPC.h
+++ b/Source/Core/Core/PowerPC/PowerPC.h
@@ -153,8 +153,7 @@ volatile CPUState *GetStatePtr(); // this oddity is here instead of an extern d
u32 CompactCR();
void ExpandCR(u32 cr);
-void OnIdle(u32 _uThreadAddr);
-void OnIdleIL();
+void OnIdle();
void UpdatePerformanceMonitor(u32 cycles, u32 num_load_stores, u32 num_fp_inst);