From ed3a3b2fabac6c9e8b701819762b96f8bb963820 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Mon, 31 Oct 2016 00:08:01 -0700 Subject: [PATCH] Core: A few micro-optimizations --- src/core/timing.c | 6 +++--- src/core/timing.h | 2 +- src/gb/gb.c | 5 +---- src/gba/gba.c | 9 ++++----- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/core/timing.c b/src/core/timing.c index fe4ad0f2a..65de7d92a 100644 --- a/src/core/timing.c +++ b/src/core/timing.c @@ -53,19 +53,19 @@ void mTimingDeschedule(struct mTiming* timing, struct mTimingEvent* event) { } } -void mTimingTick(struct mTiming* timing, int32_t cycles) { +int32_t mTimingTick(struct mTiming* timing, int32_t cycles) { timing->masterCycles += cycles; uint32_t masterCycles = timing->masterCycles; while (mTimingEventListSize(&timing->events)) { struct mTimingEvent* next = *mTimingEventListGetPointer(&timing->events, 0); int32_t nextWhen = next->when - masterCycles; if (nextWhen > 0) { - *timing->nextEvent = nextWhen; - return; + return nextWhen; } mTimingEventListShift(&timing->events, 0, 1); next->callback(timing, next->context, -nextWhen); } + return *timing->nextEvent; } int32_t mTimingNextEvent(struct mTiming* timing) { diff --git a/src/core/timing.h b/src/core/timing.h index 3877a0f1b..3564ada5d 100644 --- a/src/core/timing.h +++ b/src/core/timing.h @@ -32,7 +32,7 @@ void mTimingDeinit(struct mTiming* timing); void mTimingClear(struct mTiming* timing); void mTimingSchedule(struct mTiming* timing, struct mTimingEvent*, int32_t when); void mTimingDeschedule(struct mTiming* timing, struct mTimingEvent*); -void mTimingTick(struct mTiming* timing, int32_t cycles); +int32_t mTimingTick(struct mTiming* timing, int32_t cycles); int32_t mTimingNextEvent(struct mTiming* timing); #endif diff --git a/src/gb/gb.c b/src/gb/gb.c index 4987c29fe..9d85b02e2 100644 --- a/src/gb/gb.c +++ b/src/gb/gb.c @@ -546,10 +546,7 @@ void GBProcessEvents(struct LR35902Core* cpu) { } } - mTimingTick(&gb->timing, cycles); - nextEvent = cpu->nextEvent; - - cpu->nextEvent = nextEvent; + cpu->nextEvent = mTimingTick(&gb->timing, cycles); if (cpu->halted) { cpu->cycles = cpu->nextEvent; diff --git a/src/gba/gba.c b/src/gba/gba.c index 238c6b4c5..f476283b0 100644 --- a/src/gba/gba.c +++ b/src/gba/gba.c @@ -235,8 +235,8 @@ static void GBAProcessEvents(struct ARMCore* cpu) { gba->springIRQ = 0; } - int32_t nextEvent; - do { + int32_t nextEvent = cpu->nextEvent; + while (cpu->cycles >= nextEvent) { int32_t cycles = cpu->cycles; int32_t testEvent; @@ -250,8 +250,7 @@ static void GBAProcessEvents(struct ARMCore* cpu) { #endif nextEvent = cycles; do { - mTimingTick(&gba->timing, nextEvent); - nextEvent = cpu->nextEvent; + nextEvent = mTimingTick(&gba->timing, nextEvent); } while (gba->cpuBlocked); testEvent = GBASIOProcessEvents(&gba->sio, cycles); @@ -275,7 +274,7 @@ static void GBAProcessEvents(struct ARMCore* cpu) { mLOG(GBA, FATAL, "Negative cycles will pass: %i", nextEvent); } #endif - } while (cpu->cycles >= nextEvent); + } } void GBAAttachDebugger(struct GBA* gba, struct mDebugger* debugger) {