Age | Commit message (Collapse) | Author |
|
This reverts commit aafde6de7b2a28c1684c0e9fa62fee9a2a5398dd.
This was causing trimmed roms to fail to load.
|
|
|
|
|
|
|
|
This should correct some minor issues in some games.
|
|
This might make a handful games slightly slower (but on the upper side
they work now instead of crashing or restarting).
Also while at it, fix some minor stuff in arm stubs for speed.
|
|
Cleans up a ton of whitespace in cpu.c (like 100KB!) and improves
readability of some massive decode statements.
Added an optimization for PC-relative loads (pool load) in ROM (since
it's read only and cannot possibily change) that directly emits an
immediate load. This is way faster, specially in MIPS/x86, ARM can be
even faster if we rewrite the immediate load macros to also use a pool.
|
|
Some minor formating too
|
|
This works on both interpreter and dynarec.
Tested in MIPS, ARM and x86, still needs some more testing, some edge
cases can be buggy.
|
|
|
|
This reverts commit fb7ca09b019248b9a0aba481ea55386f71053d73.
It seems that commit broke rolling in Minish Cap when using the ARM dynarec.
|
|
Using an invalid SP makes Vita crash (for an unkown reason) and makes
things like C signal handlers crash (luckily Retroarch doesn't use
them). It is also a violation of the ABI and not a great idea.
Recycled some little used registers to free SP. Perf should be roughly
the same.
|
|
|
|
|
|
Handle already translated blocks in the ARM asm to speed up indirect
branches (affect some games more than others)
|
|
|
|
|
|
|
|
Makes accesses more efficient for MIPS. Make accesses also fast for palette
reads.
|
|
Fix a small bug in MIPS dynarec that affects non -G0 targets
|
|
Seems that using the __atribute__ magic for sections is not the best way
of doing this, since it injects some default atributtes that collide
with the user defined ones. Using assembly is far easier in this case.
Reworked definitions a bit to make it easier to import from assembly.
Also wrapped stuff around macros for easy and less verbose
implementation of the symbol prefix issue.
|
|
This saves a few cycles in MIPS and simplifies a bit the core.
Removed the write map, only affects interpreter performance very
minimally. Rewired ARM and x86 handlers to support direct access to
I/EWRAM (and VRAM on ARM) to compensate. Overall performance is slightly
better but code is cleaner and allows for further improvements in the
dynarecs.
|
|
|
|
This is not really necessary since it can share area with ROM.
Performance impact should be very minimal (haven't noticed it myself)
and could be compensated (even by a positive offset) if we bump the ROM
cache area size.
Tested with several dynarecs.
|
|
Also rewrite a bit memory handlers for smaller functions.
|
|
This gets rid of some more absolute addrs in the MIPS dynarec.
Tested on several platforms, we should be good.
|
|
Will move also OAM structures to gain a few cycles per load/store.
Loads can also be optimized for an extra instruction per access.
|
|
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 C func call while at it. This is a prerequisite to make the
dynarec re-entrant and get rid of libco
|
|
Turns out this was not even used! No need to fix it then!
|
|
This gets rid of stack usage (except for callback invocations) in the
dynarec execution code. A requirement to make the dynarec re-entrant.
|
|
Fix some small issues, mainly associated with undefined behaviour
expressions
|
|
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 :/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Not available on iOS/Android, only probably there on OpenPandora.
On top of that iOS 8+ deprecated the system() call, so would
probably be becoming obsolete on that platform.
|
|
|
|
|
|
|
|
|
|
|