notaz [Mon, 8 Aug 2022 21:07:27 +0000 (00:07 +0300)]
cspace: generic implementation with vector extensions
notaz [Mon, 8 Aug 2022 18:16:59 +0000 (21:16 +0300)]
gpu_neon: integration for arm64
notaz [Sun, 17 Jul 2022 22:26:25 +0000 (01:26 +0300)]
gpu_neon: new intrinsics-only implementation
~80-95% performance of the asm version on cortex-a72,
but maybe less of a portability nightmare (+arm64 support)
notaz [Sat, 23 Jul 2022 15:22:33 +0000 (18:22 +0300)]
gpu_neon: place asm func prototypes into a separate header
for the upcoming intrinsics implementation
notaz [Sun, 17 Jul 2022 22:18:52 +0000 (01:18 +0300)]
gpu_neon: don't include vector_ops.h in the main header
that stuff is only used in the C-only prototype
notaz [Mon, 1 Aug 2022 21:08:49 +0000 (00:08 +0300)]
gpu_neon: fix some more abi violations
notaz [Tue, 2 Aug 2022 21:51:35 +0000 (00:51 +0300)]
drc: patch up some potential issues on the switch
notaz [Sat, 23 Jul 2022 22:31:08 +0000 (01:31 +0300)]
gpu_neon: try to make the compiler save some callee-save regs
... which the asm isn't doing properly
notaz [Fri, 29 Jul 2022 22:07:21 +0000 (01:07 +0300)]
dfxvideo: patch up some unsafe macros
(old?)-ARM version of GETLE32() was causing wrong shifting due to
implicit signed int promotion.
libretro/pcsx_rearmed#676
Paul Cercueil [Fri, 3 Jun 2022 17:26:28 +0000 (18:26 +0100)]
CI: Pass SDL_CONFIG to the ./configure script
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Fri, 29 Apr 2016 20:06:36 +0000 (22:06 +0200)]
configure: Detect the toolchain's sdl-config tool
Instead of calling the host's sdl-config, which doesn't work when
cross-compiling, call the sdl-config program that's installed in the
compiler's sysroot.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Tue, 24 May 2022 21:22:48 +0000 (22:22 +0100)]
cdrom: Fix PBP support on big-endian platforms
The data contained in the PBP is in little-endian format. Therefore,
everything in the PBP's header must be read with the byte-swap macros,
for PBP support to work on big-endian systems.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Sat, 21 May 2022 16:52:47 +0000 (17:52 +0100)]
dfxvideo: Restore support for big-endian arch
The hardware registers, emulated RAM or emulated VRAM are all in
little-endian format. Therefore, each access must be done with one of
the byte-swap macros, for the plugin to work on big-endian systems.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Sat, 21 May 2022 17:58:14 +0000 (18:58 +0100)]
frontend: Fix colorspace conversion routines on big-endian
The bgr555_to_rgb565() and bgr888_to_rgb565() functions were only
working correctly on little-endian systems.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Thu, 26 May 2022 13:07:41 +0000 (14:07 +0100)]
misc: Use GCC builtins for byte-swap operations
Instead of using custom code to byte-swap values, use the built-in
function provided by GCC.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Fri, 13 Sep 2019 21:13:43 +0000 (23:13 +0200)]
gpulib: Add proper support for big-endian
Update the gpulib code to work properly on big-endian architectures.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Fri, 13 Sep 2019 21:09:11 +0000 (23:09 +0200)]
Get rid of bit fields in union
Long story short, bit fields aren't endian-safe.
More info: http://mjfrazer.org/mjfrazer/bitfields/
Simplify that by just using a few macros to access the needed bits.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Fri, 13 Sep 2019 21:01:57 +0000 (23:01 +0200)]
Make sure hardware registers are manipulated as little-endian
The hardware registers should be represented in little-endian format.
Therefore, on big-endian systems the values need to be byte-swapped.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Paul Cercueil [Wed, 11 Sep 2019 15:33:14 +0000 (17:33 +0200)]
Fix PCSX on big-endian systems
The __BIGENDIAN__ macro was never defined anywhere, and the
__BIG_ENDIAN__ macro isn't set anymore by recent versions of GCC.
Replace them by checking __BYTE_ORDER__ against __ORDER_BIG_ENDIAN__.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
notaz [Mon, 18 Jul 2022 21:21:44 +0000 (00:21 +0300)]
drc: some more libnx support
notaz [Thu, 14 Jul 2022 21:41:58 +0000 (00:41 +0300)]
drc: simplify cache flush for some platforms
untested, may break 3DS, if it happens please report
notaz [Thu, 14 Jul 2022 21:24:34 +0000 (00:24 +0300)]
drc: some libnx support
notaz [Mon, 6 Jun 2022 22:59:51 +0000 (01:59 +0300)]
cdriso: hack .chd track handling to match .cue
libretro/pcsx_rearmed#648
notaz [Mon, 6 Jun 2022 21:45:57 +0000 (00:45 +0300)]
cdrom: don't read and play simultaneously
notaz/pcsx_rearmed#250
notaz [Thu, 2 Jun 2022 20:22:19 +0000 (23:22 +0300)]
psxcounters: try to support a dynarec with a very long timeslice
The dynarec instead should probably not run for thousands of cycles
doing no interrupt checks, but maybe this hack will be enough.
libretro/pcsx_rearmed#658
notaz [Wed, 1 Jun 2022 21:25:32 +0000 (00:25 +0300)]
drc: update some logging and patches
notaz [Mon, 14 Mar 2022 22:04:27 +0000 (00:04 +0200)]
release r23
notaz [Sun, 13 Mar 2022 23:24:50 +0000 (01:24 +0200)]
frontend: omap: fix glitches on mode changes
Where was I 10 years ago? Why am I so old?
notaz [Sun, 13 Mar 2022 21:40:48 +0000 (23:40 +0200)]
cdriso: handle chd subchannels, when available
libretro/pcsx_rearmed#535
only raw mode tested
notaz [Sun, 13 Mar 2022 21:10:52 +0000 (23:10 +0200)]
cdriso: merge some libretro changes
no async read for now
notaz [Sun, 13 Mar 2022 20:46:31 +0000 (22:46 +0200)]
always enable chd support
notaz [Tue, 1 Mar 2022 22:49:11 +0000 (00:49 +0200)]
drc: fix some wrong inv address calculations
Fixes:
882a08fc49541450bc403b2e920e4bccc257dfdf
notaz/pcsx_rearmed#243
notaz [Sat, 26 Feb 2022 23:54:39 +0000 (01:54 +0200)]
unbreak nodynarec build
oops
notaz [Sat, 26 Feb 2022 22:10:57 +0000 (00:10 +0200)]
drc: try to avoid some block trapping
notaz [Thu, 24 Feb 2022 21:28:11 +0000 (23:28 +0200)]
drc: rework jump_out lists
should waste less memory for malloc overheads
notaz [Wed, 23 Feb 2022 23:08:35 +0000 (01:08 +0200)]
drc: rework expire code
Should be quite a bit simpler now, and no longer wastes ~4MB of
translation cache for aggressive block expiring. However more stuff
in cache means longer lists which may slow things down if
recompilation is happening nonstop, so further tuning might be needed.
notaz [Tue, 22 Feb 2022 22:26:51 +0000 (00:26 +0200)]
drc: more precise invalidation checking for the invstub case
notaz [Mon, 21 Feb 2022 23:23:09 +0000 (01:23 +0200)]
drc: rework block tracking
Mostly to remove that horrible generated code parsing.
Also seems to generate less code now.
notaz [Sat, 19 Feb 2022 22:46:51 +0000 (00:46 +0200)]
drc: get rid of SPAN
Should have done it 10 years ago, it's a huge maintenance burden for
something than almost never happens.
notaz [Sat, 19 Feb 2022 22:11:52 +0000 (00:11 +0200)]
drc: restore all block entry points at once
and add some stats
notaz [Sat, 19 Feb 2022 19:37:23 +0000 (21:37 +0200)]
drc: don't delay block restoration
Not sure why it was done the way it was (maybe something N64 related?),
but it occasionally caused dyna_linker to repeatedly walk the jump_in
list. What's worse, if the dirty block was deemed to expire soon,
it would never be restored and dyna_linker repeated jump_in walking
would never end, causing severe slowdown.
notaz [Thu, 17 Feb 2022 00:14:03 +0000 (02:14 +0200)]
Revert "clear Index0 data FIFO flag (#241)"
This reverts commit
50ae51487697da0d2f9c93295f89d2f10694b6d8.
It broke Driver 2.
notaz [Tue, 15 Feb 2022 23:20:31 +0000 (01:20 +0200)]
drc: try not to end the block prematurely
Fixes:
4919de1e88095f00466f6674323d518fc520b0db
(was not really broken, only load delay detection can't work with
blocks that are too small)
notaz [Tue, 15 Feb 2022 21:17:42 +0000 (23:17 +0200)]
psxinterpreter: unbreak load delay handling
Fixes:
943a507a4156b8f5b00e4431152e41eeb4dc6f3d
notaz [Sat, 12 Feb 2022 20:58:23 +0000 (22:58 +0200)]
drc: add a clock override for Super Robot Taisen Alpha
libretro/pcsx_rearmed#610
notaz [Sun, 6 Feb 2022 23:41:12 +0000 (01:41 +0200)]
drc: try to make some passes not as slow, part 2
notaz [Sun, 6 Feb 2022 20:38:54 +0000 (22:38 +0200)]
drc: put passes in their own functions
mostly for profiling
notaz [Sat, 5 Feb 2022 22:10:18 +0000 (00:10 +0200)]
drc: try to make some passes not as slow
notaz [Thu, 3 Feb 2022 00:04:52 +0000 (02:04 +0200)]
drc: use optimized get_reg
arm32-only for now
notaz [Wed, 2 Feb 2022 21:40:48 +0000 (23:40 +0200)]
drc: rm unneeded &63 masking
64bit leftover
gameblabla [Mon, 7 Feb 2022 19:17:34 +0000 (19:17 +0000)]
clear Index0 data FIFO flag (#241)
Merge PCSX Redux fix.
This is what he had to say about it :
"So, this commit works around/fixes two issues with loading unirom.
There's a fix for logging invalid commands which should be pretty straight forward. The other change is around the FIFO flag.
Not really experienced with debugging/verifying this sort of thing so not feeling really confident the change is "right", though every game I've tried so far still seem to work as expected.
There's still something going on with not having an iso mounted that I haven't quite nailed down. Even having the iso mounted with "lid open" gives a bootable result. Feel like I'm going in circles a bit for something that might be an easy fix. Unirom is technically usable via ISO, but the unirom exe freezes if no iso is loaded"
Co-authored-by: johnbaumann <76951440+johnbaumann@users.noreply.github.com>
gameblabla [Sat, 5 Feb 2022 21:43:34 +0000 (21:43 +0000)]
Fix silly typo mistake for CDROM pause/resume fix for DOA. (#242)
My bad guys.
notaz [Mon, 31 Jan 2022 23:50:12 +0000 (01:50 +0200)]
gpu_neon: fix apparent missing msb setting in blend_blocks_textured_add_fourth
The source bit is taken, which also enables semi transparency,
so if we did blending the bit must be set.
notaz [Mon, 31 Jan 2022 00:07:25 +0000 (02:07 +0200)]
gpu_neon: reserved bpp is 16bpp, not 4bpp
notaz [Sun, 30 Jan 2022 16:40:03 +0000 (18:40 +0200)]
drc: don't abort on game crash
Was not the best user experience, with this the user can load
another game at least.
notaz [Sun, 30 Jan 2022 15:34:42 +0000 (17:34 +0200)]
rm the old debugger stuff, like in libretro fork
notaz [Sat, 29 Jan 2022 23:39:40 +0000 (01:39 +0200)]
drc: add apparently missing ROREG loading
sjump_assemble had different loading for taken/not taken cases for
whatever reason, and I added ROREG loading according to INVCP, which
was (maybe?) erroneously missing for 'not taken' case. Fixes CTR crash
shortly after starting driving.
notaz [Sat, 29 Jan 2022 23:37:45 +0000 (01:37 +0200)]
drc: some more debug logging
notaz [Thu, 27 Jan 2022 23:09:44 +0000 (01:09 +0200)]
drc: add seemingly missing double-alloc check
seems like it was possible to alloc the same reg on 2 host regs
edit: found after all the debugging: mupen64plus/mupen64plus-core@
8f4cc2bdc93c41801077abda3197a3cb3b89cbb7
notaz [Thu, 27 Jan 2022 22:02:09 +0000 (00:02 +0200)]
drc: clear dirty flag when deallocating a reg
In later stages it may place special regs like AGEN there, and things
like AGEN being marked dirty seemed wrong, although probably harmless
as there is no code to writeback AGEN.
notaz [Thu, 27 Jan 2022 21:54:42 +0000 (23:54 +0200)]
drc: init some variables, adjust comments
no proof that is actually needed, but it felt like some path could
pick up something uninitialized
notaz [Wed, 26 Jan 2022 20:09:22 +0000 (22:09 +0200)]
drc: emulate break opcode
sort-of-but-not-really used by "F1 2000"
(SLUS01120, not "Formula One 2000").
notaz [Wed, 26 Jan 2022 20:02:18 +0000 (22:02 +0200)]
drc: don't cache psxRegs.interrupt
cdrom code can now cancel interrupts, so must always use the global
notaz [Mon, 24 Jan 2022 18:49:04 +0000 (20:49 +0200)]
drc: another hack to try to get Vita to work
notaz [Sun, 23 Jan 2022 23:49:45 +0000 (01:49 +0200)]
drc: a bit more sophisticated f1 hack
yes it sucks, I know...
notaz [Sun, 23 Jan 2022 20:57:06 +0000 (22:57 +0200)]
always describe to get git hash in log messages
notaz [Sun, 23 Jan 2022 14:14:39 +0000 (16:14 +0200)]
drc: possibly the missing piece for Vita
Lost during merge of dynarec fixes.
_newlib_vm_size_user might be the critical bit that overrides
a weak symbol in bootstrap/vita/sbrk.c
notaz [Sat, 22 Jan 2022 23:24:36 +0000 (01:24 +0200)]
drc: align size passed to mprotect
Maybe this makes svcControlProcessMemory() not do it's work there?
It doesn't seem to be failing though.
notaz [Sat, 22 Jan 2022 20:25:05 +0000 (22:25 +0200)]
spu: try to eliminate some cdda clicks/pops
cdda feeds less data than consumes due to poor timings,
especially for PAL
notaz [Sat, 22 Jan 2022 20:20:42 +0000 (22:20 +0200)]
spu: save/restore decode_pos
SPUOSSFreeze_t conveniently had padding space for it
notaz [Sat, 22 Jan 2022 20:15:54 +0000 (22:15 +0200)]
cdrom: play cdda regardless of report mode
Vib-Ribbon doesn't use it while playing.
notaz [Tue, 14 Dec 2021 22:04:11 +0000 (00:04 +0200)]
drc: always clear full decoded_insn
Some stuff was left after INTCALL conversion and broke branch in delay
slot handling, like in Rayman 2.
notaz [Tue, 14 Dec 2021 19:09:45 +0000 (21:09 +0200)]
fix some issues and warnings seen on ctr build
notaz [Tue, 14 Dec 2021 19:03:25 +0000 (21:03 +0200)]
drc: reapply some libretro changes
notaz [Tue, 14 Dec 2021 00:37:51 +0000 (02:37 +0200)]
drc: adjust asm to make clang happy
notaz [Mon, 29 Nov 2021 21:35:08 +0000 (23:35 +0200)]
drc: rearrange hacks
Also adds PE2 hack. PE2 probably checks if a frame didn't take
too long to complete by comparing counter 2 to a hardcoded value.
If it did exceed the limit it restarts all the processing, probably
assuming that the GPU was busy that time and retrying on next frame
would work out?
Still it will hang if not enough cycles are available, regardless of how
root counters are handled, and currently won't work on the interpreter
even with root counter hack because of recently added stalls.
PCSX's timing is just too wrong all over the place...
notaz [Mon, 29 Nov 2021 00:10:27 +0000 (02:10 +0200)]
drc: fix some mistake done during arm64 porting
notaz [Sun, 28 Nov 2021 16:34:07 +0000 (18:34 +0200)]
drc: fix an old memhandler oversight
accidentally got it right when doing arm64 port though
notaz [Sun, 28 Nov 2021 21:08:57 +0000 (23:08 +0200)]
drc: fix CCREG loading
CCREG was always manually loaded by *jump_assemble and few other
places, however when I added more CCREG allocs I expected loading
to be handled automatically, but turns out it wasn't.
notaz [Sun, 28 Nov 2021 15:23:34 +0000 (17:23 +0200)]
drc: don't cull ccreg
It didn't even seem to be written back. What was the point doing so
anyway, other regs were (maybe?) culled to prevent saving/restoring
them in memhandlers, but ccreg is in callee-saved reg anyway?
We also need ccreg more often now for stalls.
notaz [Sun, 28 Nov 2021 15:12:04 +0000 (17:12 +0200)]
drc: rework cycle counting
The way it was done before caused different behaviour on different
platforms because the dynarec can invert branches depending on register
pressure and maybe other things. Because of that cycle counts would
change slightly but sufficiently to break/fix timing sensitive games.
Now it should be more consistent, maybe.
notaz [Sun, 28 Nov 2021 22:03:20 +0000 (00:03 +0200)]
drc: prefer callee-saved regs on alloc
reduces amount of saved/restored regs (random game):
arm32: ~45%
arm64: ~80%
notaz [Fri, 26 Nov 2021 23:28:08 +0000 (01:28 +0200)]
drc: get rid of RAM_FIXED, revive ROREG
should work better on devices that can't map memory at desired locations
notaz [Fri, 26 Nov 2021 22:53:16 +0000 (00:53 +0200)]
drc: botched msb bit check
adjust the f1 hack too
notaz [Wed, 24 Nov 2021 20:52:53 +0000 (22:52 +0200)]
drc: only override default cycle_multiplier
To let the user tune if they want. Also iS multiplier in db
was still too small for HLE mode.
notaz [Wed, 24 Nov 2021 19:17:47 +0000 (21:17 +0200)]
drc: add a hack for f1 games
Quite fragile but maybe good enough.
What the games do seems to be deliberate to break emulators. It takes
the address of some internal function (let's call it f1) and calculates
an address add2 in such a way that f1 can't evict code at addr2. It then
writes a 4 instruction code piece f2 that just loads an address from
stack (which happens to be stacked ra) and jumps to it. f1 then gets
called, loads data (?) and overwrites f2 doing it and returns. Right
after that f2 gets called again.
notaz [Mon, 22 Nov 2021 23:48:53 +0000 (01:48 +0200)]
interpreter: simplify icache implementation
Should be more accurate too.
notaz [Mon, 22 Nov 2021 21:18:56 +0000 (23:18 +0200)]
drc: drop 'likely' branch support, simplify
not in MIPS1
notaz [Mon, 22 Nov 2021 20:33:52 +0000 (22:33 +0200)]
drc: reduce memory usage
mostly automated conversion
text data bss dec hex filename
137712 0
2753296 2891008 2c1d00 libpcsxcore/new_dynarec/new_dynarec.o
132720 0
2732816 2865536 2bb980 libpcsxcore/new_dynarec/new_dynarec.o
notaz [Mon, 22 Nov 2021 19:29:08 +0000 (21:29 +0200)]
make icache implementation play nice with the dynarec
No need to to have a build-time option now.
notaz [Mon, 22 Nov 2021 19:08:17 +0000 (21:08 +0200)]
drc: detect unconditional branches early
Mainly helps to end the block and not compile data.
Unsure if this doesn't break something.
notaz [Mon, 22 Nov 2021 18:55:37 +0000 (20:55 +0200)]
drc: minor adjustments
like not marking INTCALL as compiled code
notaz [Mon, 22 Nov 2021 18:20:36 +0000 (20:20 +0200)]
drc: fix block expire
was shifting pointers that are not necessarily aligned
notaz [Sun, 21 Nov 2021 14:44:35 +0000 (16:44 +0200)]
frontend: remove src alignment requirements in asm
no measurable perf improvement seen just from :64 alignment both on
cortex-a8 and cortex-a72, and Psybadek uses unaligned vram location.
notaz [Sat, 20 Nov 2021 22:06:52 +0000 (00:06 +0200)]
drc,interpreter: add mul/div stalls
for games like Zero Divide, which will run at twice speed if there is
not enough combined slowdown (probably from muldiv/gte/cache misses).
notaz [Fri, 19 Nov 2021 21:35:04 +0000 (23:35 +0200)]
drc: try to make gte stall handling less bloaty
notaz [Thu, 18 Nov 2021 22:52:31 +0000 (00:52 +0200)]
drc/gte: add some stall handling
notaz [Fri, 19 Nov 2021 21:33:27 +0000 (23:33 +0200)]
drc: use helpers for jump checks
most not converted, maybe another day
notaz [Fri, 19 Nov 2021 21:36:28 +0000 (23:36 +0200)]
frontend: force full recompile on drc setting change
Libretro port should do the same, but here it outdated and nobody cared
updating it here.
notaz [Thu, 18 Nov 2021 22:39:26 +0000 (00:39 +0200)]
drc: use a separate var for game hacks
because config save/load can clear the main var