summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-06-27Merge pull request #137 from davidgfnet/masterDavid G. F
Enable big-endian devices: gc/wii
2021-06-27Enable big-endian devices: gc/wiiDavid Guillen Fandos
This patch adds big-endian compatibility in gpsp (in general but only for the interpreter). There's no performance hit for little-endian platforms (should be a no-op) and only add a small overhead in memory accesses for big-endian platforms. Most memory accesses are wrapped with a byteswap instruction and I/O reg accesses are also rewired for proper access (using macros). Video rendering has been fixed to also do byteswaps but there's a couple of games and rendering modes that still seem broken (but they amount to less than 20 games in my tests with 1K ROMs). This also adds build rules and CI for NGC/WII/WIIU (untested)
2021-06-25Merge pull request #136 from davidgfnet/masterDavid G. F
Remove macros in dma code
2021-06-25Remove macros in dma codeDavid Guillen Fandos
This reduces code size more than 20% (which is 200-300KB!). DMA handling accounts for less than 0.5% the average emulation runtime which doesn't justify the crazy optimization level that the code has. In fact it's more than likely that the new code runs faster due to less I-cache trashing.
2021-06-22Merge pull request #135 from davidgfnet/masterDavid G. F
Fix CI for OD beta
2021-06-22Fix CI for OD betaDavid Guillen Fandos
2021-06-22Merge pull request #134 from davidgfnet/masterDavid G. F
Some MIPS fixes
2021-06-22Fix the no-caller-saves bug for MIPSDavid Guillen Fandos
Seems that ABI mandates that we allocate space for arg0..4 even if we do pass them as registers. For some reason write_io_register<> functions write in that stack area (1 word) corrupting the s0 saved register. This seems to be a new gcc behaviour?
2021-06-21Add support for mips64n32David Guillen Fandos
This only needs some support to save/load state with 64 bit registers. Since pointers remain 32 bit, no extra changes are needed in the dynarec. Verified with qemu (qemu-mipsn32el) and miniretro.
2021-06-18Add preliminary support for non mips32r2 devicesDavid Guillen Fandos
This is required in PS2 but could also make older dingux devices run gpsp on retroarch
2021-06-16Rework patch handlers (MIPS)David Guillen Fandos
2021-06-16Minor cleanup in MIPS codeDavid Guillen Fandos
2021-06-09Update libretro.h with the new extensions from upstreamDavid Guillen Fandos
2021-06-09Cleanup unused stuffDavid Guillen Fandos
2021-05-20Minor mips asm cleanup and fixesDavid Guillen Fandos
2021-05-19Cleanup Makefiles a bitDavid Guillen Fandos
2021-05-19Minor optimizationDavid Guillen Fandos
2021-05-17Merge pull request #130 from jdgleaver/turbo-buttonsAutechre
Add turbo A/B buttons
2021-05-17Add turbo A/B buttonsjdgleaver
2021-05-17Add ROM mirroring and fix mult. cycle countDavid Guillen Fandos
This should correct some minor issues in some games.
2021-05-17Fix ARM dynarec unaligned 32 bit loadsDavid Guillen Fandos
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.
2021-05-13Merge pull request #86 from jdgleaver/ff-buttonAutechre
Add dedicated RetroPad fast-forward button
2021-05-13Add dedicated RetroPad fast-forward buttonjdgleaver
2021-05-07Small optimization (~2-4%) and whitespace cleanup!David Guillen Fandos
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.
2021-05-05Fix aligned32 reads in interpreter modeDavid Guillen Fandos
An address check was missing to read aligned 32 (stm/ldm) data from high mem areas (0xX0000000). This fixes SM4 EU that for some reason has some weird memory access (perhaps a bug?)
2021-05-05Fix small buf and add cheat error messagesDavid Guillen Fandos
Some minor formating too
2021-05-05Adding Code Breaker cheat supportDavid Guillen Fandos
This works on both interpreter and dynarec. Tested in MIPS, ARM and x86, still needs some more testing, some edge cases can be buggy.
2021-04-28Fix invalid memory map entriesnegativeExponent
2021-04-27Fix Vita port and likely some Linux/Android hidden issuesDavid Guillen Fandos
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.
2021-04-26Fix RTC support for MIPSDavid Guillen Fandos
2021-04-04Fix palette writes in MIPSDavid Guillen Fandos
Was not writing to the right address (but decoded memory was working). Most game worked well except those that depend on modifying the existing palette bits (instead of copying from ROM/RAM). Fixes several games.
2021-04-03Do not use stack in mips stubsDavid Guillen Fandos
No need for it (faster) and avoid mis-aligning it across calls
2021-04-03Add instruction tracing, for testing purposesDavid Guillen Fandos
2021-04-02Add function decorators for easier debugging / profilingDavid Guillen Fandos
2021-03-30Improve indirect jumps in ARMDavid Guillen Fandos
Handle already translated blocks in the ARM asm to speed up indirect branches (affect some games more than others)
2021-03-30Improve ARM store handlersDavid Guillen Fandos
2021-03-27Add CROSS_COMPILE rulestwinaphex
2021-03-27Merge pull request #120 from davidgfnet/masterAutechre
Fixes and improvements for MIPS and ARM
2021-03-26Fix 16 bit RAM stores (VRAM and OAM) in ARMDavid Guillen Fandos
2021-03-26Improve ARM store accessesDavid Guillen Fandos
2021-03-26Move OAM RAM to stubs alsoDavid Guillen Fandos
Makes accesses more efficient for MIPS. Make accesses also fast for palette reads.
2021-03-26Move OAM update flag to a registerDavid Guillen Fandos
Fix a small bug in MIPS dynarec that affects non -G0 targets
2021-03-26Merge pull request #119 from jdgleaver/dingux-beta-fixAutechre
Fix OpenDingux Beta build
2021-03-26Fix OpenDingux Beta buildjdgleaver
2021-03-25Add od-betatwinaphex
2021-03-23Merge pull request #118 from davidgfnet/masterAutechre
2021-03-23Move caches to stub files to get around gcc 10David Guillen Fandos
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.
2021-03-23Merge pull request #117 from davidgfnet/asmfixes2Autechre
Make ewram memory linear
2021-03-23Make ewram memory linealDavid Guillen Fandos
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.
2021-03-23Merge pull request #116 from davidgfnet/masterAutechre
Export double symbol to cover Win but also Apple compilers