Age | Commit message (Collapse) | Author |
|
This removes libco and all the usages of it (+pthreads).
Rewired all dynarecs and interpreter to return after every frame so that
libretro can process events. This required to make dynarec re-entrant.
Dynarecs were updated to check for new frame on every update (IRQ, cycle
exhaustion, I/O write, etc). The performance impact of doing so should
be minimal (and definitely outweight the libco gains). While at it,
fixed small issues to get a bit more perf: arm dynarec was not idling
correctly, mips was using stack when not needed, etc.
Tested on PSP (mips), OGA (armv7), Linux (x86 and interpreter). Not
tested on Android though.
|
|
Fix a ghost bug with some games
|
|
Affects at least SM Adv 4 on PSP, which doesn't load at all.
I think the MIPS pipeline does not like invalidating the Icache and
using it immediately after (seems to read an old value sometimes?).
Rewired it to not do that and instead jump to the handler directly.
|
|
Fix x86 dynarec, broken by d10c4afe
|
|
The dynarec expects function args to be located in registers instead of
the stack, which is not the default calling convetion in GCC/clang.
|
|
ARM dynarec: Do not use the stack at all
|
|
Fix a C func call while at it. This is a prerequisite to make the
dynarec re-entrant and get rid of libco
|
|
Minor ARM cleanup
|
|
Turns out this was not even used! No need to fix it then!
|
|
Turns out most of that file ends up in JIT section, which is RWX and not
a very nice way to run code really (security issues aside).
This also makes possible to build that file with -ggdb otherwise it
complains about stuff.
|
|
Minor improvements in ARM stubs
|
|
This gets rid of stack usage (except for callback invocations) in the
dynarec execution code. A requirement to make the dynarec re-entrant.
|
|
Remove more dead code
|
|
|
|
Small fixes to division by zero
|
|
This causes crashes in PSP quite often in many games. Other CPUs might
(depending on the processor state) silently return zero or some
undefined value.
The fix is borrowed from ReGBA's codebase
|
|
More cleanups (mostly whitespace and unused stuff)
|
|
|
|
Minor cleanup in ARM and MIPS
|
|
Fix some small issues, mainly associated with undefined behaviour
expressions
|
|
Fix ARM dynarec
|
|
I think this does not make a difference at all in the code, since PC is
treated in a special way anyway (reloaded with an immediate when read
and treated as an indirect branch when written). However for the sake of
completeness I'm undoing what I did. (The comma fix stays :P)
|
|
Turns out there were a couple of very interesting and hard to track
bugs. A missing comma made the reg list too short, leaving the 31th
element at the mercy of the linker ordering algorithm, which seems to
work in some cases depending on the compiler version.
Also the cache flush code seemed not to work on my machine (OGA),
not sure why it wored in the past :/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Add OpenDingux target to .gitlab-ci.yml
|
|
|
|
|
|
Optimise interframe blending
|
|
|
|
Use correct path separator
|
|
|
|
Overhaul frameskip options
|
|
|
|
|
|
Set 'USE_LIBCO=1' in Android JNI build file
|
|
|
|
Add build-time option to run the emulator in a thread instead of libco (fixes OpenDingux target)
|
|
|
|
(fixes OpenDingux target)
|
|
|
|
Update RTC emulation
|
|
- Based on notes, gpSP's RTC does was based on vba.
- I've updated relevant sections of it based on latest vba.
reference issue: https://github.com/libretro/gpsp/issues/79
|
|
|