Nekotekina
7cf9d1380b
LLVM DSL: add line number in get_const_vector automatically
2021-09-17 10:23:43 +03:00
Nekotekina
f188019244
LLVM DSL: reimpelement fsqrt, fabs
2021-09-17 10:23:43 +03:00
Eladash
bd66dfedc9
Do not allow to unpause after fatal error occured in emulation
...
* Plus fix #10590
2021-09-09 19:30:54 +02:00
Malcolm Jestadt
43cc62d267
SPU LLVM: Add m_use_vnni
...
- Alderlake and Sapphirerapids will require an update to the llvm fork before they can be detected
2021-08-31 14:02:05 +03:00
Malcolm Jestadt
d304b52391
SPU LLVM: Add VNNI optimized variant of sumb
...
- Uses vpdpbusd to horrizontally add values, for some reason this is much faster than the normal horizontal add instructions.
2021-08-31 14:02:05 +03:00
Malcolm Jestadt
a86b278115
SPU LLVM: Expand byteswap elimination to more instructions
2021-08-31 14:02:05 +03:00
Whatcookie
c62deeefd4
SPU LLVM: Add approximate FCEQ/FCMEQ ( #8729 )
...
- It's 100% accurate, but will sit under approx xfloat anyways
- Attempts to use a single instruction when 1 value is constant
2021-08-22 10:13:34 +03:00
Nekotekina
05d1b3605e
Fixup for SPU Debug mode (bad SHA1)
...
Should fix crashes due to read out of bounds.
2021-08-01 10:12:08 +03:00
Nekotekina
fc5840cda6
SPU Cache: allow to dump cache upon startup
...
Print also some stats (if SPU Debug is enabled).
2021-07-30 09:21:11 +03:00
Eladash
d81a5b1423
SPU LLVM: Add missing WRCH PC updates
2021-05-29 15:26:52 +03:00
Malcolm Jestadt
7c2b08b9b6
SPU LLVM: Expand branch optimizations for more instructions
2021-05-29 13:07:35 +03:00
Nekotekina
160b131de3
types.hpp: implement smin, smax, amin, amax
...
Rewritten the following global utility constants:
`umax` returns max number, restricted to unsigned.
`smax` returns max signed number, restricted to integrals.
`smin` returns min signed number, restricted to signed.
`amin` returns smin or zero, less restricted.
`amax` returns smax or umax, less restricted.
Fix operators == and <=> for synthesized rel-ops.
2021-05-22 12:10:57 +03:00
Malcolm Jestadt
52780e65e7
SPU LLVM: Optimize branching
...
- Detect a pattern where vpmovmskb and a check against the sign bit can be used instead of checking against zero
2021-05-17 16:59:20 +03:00
Eladash
cacb852a1e
Emulation stopping bugfix
2021-05-14 15:35:07 +03:00
Nekotekina
6dca588370
SPU LLVM: improve MPYH instruction
...
Rewritten to use 16-bit multiplication, as in SPU ASMJIT.
2021-05-13 23:16:53 +03:00
Megamouse
1caf81811a
Move unspecific Emulator code out of System.cpp
2021-04-24 11:21:22 +03:00
Nekotekina
67649d7976
SPU LLVM: restore lost comment
2021-04-21 13:33:44 +03:00
Malcolm Jestadt
6247969ede
SPU LLVM: Absolute final fixes for icelake shufb paths
...
- The constant mask was accessing bits in reverse order of what was expected
2021-04-21 11:00:02 +03:00
Malcolm Jestadt
efd38fa940
SPU LLVM: Improve byteswap elimination
...
- Use the data before it has been swapped rather than relying on a second byteswap to cancel out the first
2021-04-20 23:24:21 +03:00
Malcolm Jestadt
551472220e
SPU LLVM: Remove icelake shufb paths for now
2021-04-20 23:24:21 +03:00
Malcolm Jestadt
53f13a9721
SPU LLVM: Final fixup for icelake shufb paths
...
- The cause of the problems was due to the constant mask for gf2p9affineqb being used as the first argument, instead of the second argument.
2021-04-20 13:07:24 +03:00
Nekotekina
9d4fcbf946
bs_t<>: fix/cleanup some operators
2021-04-17 15:54:33 +03:00
Malcolm Jestadt
0a7df9d02e
SPU LLVM: add AVX-512 SPU verification
...
- This is hidden behind a new setting, as some cpus may downclock agressively when executing 512 wide instructions
2021-04-16 09:35:26 +03:00
Megamouse
a16d8ba3ea
More random changes
2021-04-11 14:01:51 +03:00
Megamouse
03b76b4606
Emu: some cleanup
2021-04-09 21:03:49 +02:00
Nekotekina
95725bf7fc
Add -Werror=missing-noreturn (GCC, clang)
...
May be useful to diagnose functions which fail assertions unconditionally.
2021-04-08 10:29:47 +03:00
Megamouse
02febd3f65
Workaround: Skip progress_dialog during gameplay
2021-04-06 21:39:34 +03:00
Nekotekina
6f1f75bc8f
Minor progress dialog refactoring
...
Add rsx::overlays::progress_dialog class (identical to message_dialog).
Don't use Emu.CallAfter() for native dialogs.
Make g_progr_ptotal waitable.
2021-04-03 22:38:04 +03:00
Nekotekina
e9a45a2f45
Implement scoped_progress_dialog
...
Create Emu/system_progress.hpp
Remove atomic g_progr_show
2021-03-31 23:40:09 +02:00
Nekotekina
2212a131ef
Fix some -Weffc++ warnings (part 1)
2021-03-31 11:27:09 +03:00
Megamouse
870224cde0
Emu/overlay: ingame native overlay PPU compilation
2021-03-31 09:38:30 +02:00
Nekotekina
b3fb6d7d18
Add and fix -Wredundant-decls (GCC)
2021-03-23 22:48:57 +03:00
Nekotekina
a4fdbf0a88
Enable -Wstrict-aliasing=1 (GCC)
...
Fixed partially.
2021-03-09 03:10:15 +03:00
Nekotekina
53af2dbb3f
Add/fix warning -Wignored-qualifiers (GCC/clang)
...
Fix simple_array::const_iterator as a part of it.
2021-03-09 03:09:50 +03:00
Malcolm Jestadt
e5d0e035d0
SPU LLVM: Rearange FM instruction for better performance
...
- Doesn't eliminate any instructions, but allows for better out of order execution.
2021-03-08 15:48:36 +03:00
Nekotekina
87af905018
Enable -Wunused-parameter
2021-03-06 18:07:08 +03:00
Eladash
004ebfdaee
SPU debugger: Implement MFC journal
...
* Allow to dump up to 1820 commands with up 128 bytes of data each, using key D with the debugger.
2021-03-02 21:57:51 +03:00
Nekotekina
ea5e837bd6
fixed_typemap.hpp: return reference
2021-03-02 16:08:14 +03:00
Nekotekina
a90ad62fc0
Remove garbage SPUW perf report
2021-02-23 18:24:50 +03:00
Eladash
96400234a8
Remove cpu_thread destructor
2021-02-22 12:47:45 +03:00
Eladash
f43260bd58
Atomic waiting refactoring ( #9208 )
...
* Use atomic waitables instead instead of global thread wait as often as possible.
* Add ::is_stopped() and and ::is_paued() which can be used in atomic loops and with atomic wait. (constexpr cpu flags test functions)
* Fix notification bug of sys_spu_thread_group_exit/terminate. (old bug, enhanced by #9117 )
* Function time statistics at Emu.Stop() restored. (instead of current "X syscall failed with 0x00000000 : 0")
2021-02-13 17:50:07 +03:00
Nekotekina
d0126f0fa0
Fix freezes in HLE Vdec and SPU LLVM precompilation.
...
Freezes could accidentally occur on close or ingame.
Deprecate range-for loop on lf_queue.
This is a part of PR #9208
Co-authored-by: Eladash <elad3356p@gmail.com>
2021-02-01 19:14:01 +03:00
Megamouse
7bddb87306
Simplify compile threads
2021-01-31 12:18:32 +03:00
Eladash
d3bc96a201
Fix minor issue with usage of STL thread::hardware_concurrency()
2021-01-29 18:23:29 +03:00
Eladash
0652870204
New RSX Debugger
2021-01-28 17:40:26 +03:00
Nekotekina
ee288340b0
Implement thread_ctrl::scoped_priority
...
RAII priority control (+1, or -1)
2021-01-25 21:49:16 +03:00
Malcolm Jestadt
486d48e4f8
SPU LLVM: Optimize ROTQBY family for VBMI
...
- Avoid masking pshufb index by 0xf by using vpermb instead.
- Also fix conversion of vperm2b index to ShuffleVector index.
2021-01-25 13:18:23 +03:00
Ani
7c62574e59
spu: Restore workers priority after initialization
2021-01-24 16:40:59 +03:00
Nekotekina
f9bc682115
Refactor some 'offending' code a bit (no effect)
...
It appears linkage errors were rare even in debug mode (GCC/clang).
2021-01-18 21:58:28 +03:00
Malcolm Jestadt
a2e8e3090c
SPU LLVM: Optimize FSM following comparison
...
- FSM following a comparison instruction can be optimized to a single shuffle instruction
2021-01-17 16:52:44 +03:00
Nekotekina
def364fe28
SPU LLVM: add splat_scalar helper
...
Unrolls into zshuffle from the preferred slot.
2021-01-17 15:13:28 +03:00
Nekotekina
db8e6fe7a7
Enable -Wunused-variable
2021-01-12 14:34:14 +03:00
Malcolm Jestadt
c952e99f3e
SPU LLVM: Fix edgecase in icelake codegen
2020-12-29 22:01:11 +03:00
Nekotekina
bd269bccaf
types.hpp: remove intrinsic includes
...
Replace v128 with u128 in some places.
Removed some unused files.
2020-12-21 21:11:25 +03:00
Eladash
ef884642e4
Cleanup disasm classes a bit
2020-12-21 13:46:26 +03:00
Nekotekina
db9b7db531
Cleanup and move sysinfo.h -> util/sysinfo.hpp
2020-12-18 12:55:54 +03:00
Nekotekina
fb29933d3d
Add usz alias for std::size_t
2020-12-18 12:23:53 +03:00
Megamouse
d21f87af5d
Fix unresponsive UI during SPU compilation
2020-12-16 11:01:51 +03:00
Nekotekina
e39348ad96
Make lf_queue<> compatible with atomic_wait
2020-12-15 19:19:36 +03:00
Nekotekina
e321765c54
Split BEType.h to util/v128.hpp and util/to_endian.hpp
2020-12-13 16:34:45 +03:00
Nekotekina
65c04e4ddd
Remove constexpr from ppu/spu decoders.
...
We don't need them at compile time (yet).
But can reduce compile time and complexity.
2020-12-10 15:06:01 +03:00
Nekotekina
36c8654fb8
Remove HERE macro
...
Some cleanup.
Add location to some functions.
2020-12-10 12:30:22 +03:00
Nekotekina
5d934c8759
Improve narrow() and size32() with src_loc detection
2020-12-09 16:26:20 +03:00
Nekotekina
e055d16b2c
Replace verify() with ensure() with auto src location.
...
Expression ensure(x) returns x.
Using comma operator removed.
2020-12-09 15:43:38 +03:00
RipleyTom
af8c661a64
Remove BOM markers
2020-12-06 15:30:12 +03:00
Eladash
28cbba5a7d
SPU LLVM: fix AND instruction family ( #9290 )
...
Incorrect immediate test (looks like copypasta)
2020-11-18 14:36:26 +03:00
Nekotekina
1b8bf081b5
Upgrade to LLVM 11 Stable
2020-11-02 21:23:25 +03:00
Nekotekina
fe03b55046
TSX: tiny optimization of transaction functions
...
Because new memory manager puts them in first 2G.
2020-11-01 14:44:59 +03:00
Eladash
c2c559f8d9
Disasm: do not allow to access previous instructions in non-interpreter mode
2020-10-31 17:15:47 +03:00
Nekotekina
425fce5070
SPU: load previous data on PUTLLC failure
...
Since it will most likely execute GETLLAR to load it again.
Only implemented for TSX at moment.
2020-10-30 02:58:39 +03:00
Eladash
4cafd5a31c
SPU: Remove dead additions in Accurate Xfloat
2020-10-03 20:31:35 +03:00
Eladash
ad37259ccc
SPU: Implement many missing channel counts
2020-09-22 19:47:47 +03:00
eladash
36ac68b436
SPU: Implement events channel count, minor interrupts fixes
2020-09-18 21:57:24 +03:00
Eladash
4ffc58a8ce
SPU: Cleanup for Accurate PUTLLUC
...
Should no longer affect GET commands because Accurate DMA is available for this functionality.
2020-09-04 10:20:44 +02:00
Eladash
73d23eb6e6
SPU: Implement Accurate DMA ( #8822 )
2020-09-02 23:58:29 +02:00
Eladash
47b545282e
SPU: Fix events ACK, minor optimizations ( #8771 )
2020-08-27 21:36:54 +01:00
Eladash
995cb8125e
SPU LLVM: Improve approx FCGT ( #8728 )
2020-08-14 19:33:35 +01:00
Whatcookie
9e4f43f4d1
SPU LLVM: Add icelake optimized paths for SHUFB ( #8712 )
2020-08-13 15:00:56 +01:00
Eladash
8cdfe5952a
SPU/PPU LLVM: Improve 0 addend FMA detection ( #8709 )
2020-08-13 04:13:08 +03:00
Eladash
57471f8c94
SPU LLVM: Fix signed zeroes handling on Accurate xfloat
2020-08-08 22:21:22 +01:00
Eladash
7e11855330
SPU/PPU LLVM: Fix FMA signed zeroes handling
2020-08-08 22:21:22 +01:00
Eladash
f6764767f6
SPU/PPU LLVM: Fix cpu_translator::get_const_vector<v128>()
2020-07-30 17:06:24 +01:00
Eladash
21a1072117
SPU LLVM: Minor cleanup after #8559
2020-07-29 03:32:21 +03:00
Malcolm Jestadt
a9d0ffcac1
SPU LLVM: Avoid additional endian swapping
...
- Avoid additional endian swapping with the ROTQBY and ROTQBYBI instructions
- ROTQBYI is left out intentionally, since it caused worse codegen
2020-07-26 11:36:50 +01:00
Malcolm Jestadt
824be77bba
SPU LLVM: Avoid redundant endian swapping
...
- PSHUFB operates in reverse byte order from SHUFB, so we can take advantage of that to swap endianness without additional transformations in some situations
2020-07-26 11:36:50 +01:00
Whatcookie
9f829b375a
SPU/PPU LLVM: Optimize VSEL/SELB with constant mask ( #8559 )
2020-07-25 17:59:35 +01:00
Eladash
3354c800d7
SPU/PPU LLVM: Improve expressions matching ( #8620 )
2020-07-24 16:53:48 +01:00
Eladash
c37bc3c55c
SPU: Make spu_thread::offset private
2020-07-19 17:58:49 +03:00
Malcolm Jestadt
6cc0fe4221
SPU LLVM: Avoid negative clamping when the input is known to be positive
2020-07-19 17:56:59 +03:00
Eladash
af1ceb1151
SPU LLVM: LS Memory Mirrors (Optimize loads/stores)
2020-07-18 02:01:33 +03:00
Eladash
282b00674a
SPU LLVM: Optimize non-constant Tag Update requests
2020-07-10 02:52:02 +03:00
Eladash
235d12aa6b
SPU MFC: Never clear tag status in WrTagUpdate
2020-07-10 02:52:02 +03:00
Eladash
5d1fc546a8
SPU MFC: Fix MFC_WrTagUpdate channel count
...
Always report available, in realhw this is just a hint if the previous tag update hasnt been checked yet by the MFC, avoiding blocking writes and allowing the SPU to execute some code while it processes the previous update request.
Except for MFC_TAG_UPDATE_IMMEDIATE, where it also waits for MFC to process it.
2020-07-10 02:52:02 +03:00
Eladash
72337f2678
SPU LLVM: Fix barrier commands enqueuing
2020-07-02 22:46:02 +03:00
Eladash
2c93fecd8b
SPU: Use named constants for MFC tag updates
2020-06-27 20:42:41 +01:00
Eladash
20fcc6530f
SPU LLVM: Fix WRCH instruction to WrTagUpd
2020-06-27 20:42:41 +01:00
Eladash
d7842b7de2
SPU LLVM: Fix WRCH instruction to WrTagMask
2020-06-27 07:04:37 +01:00
Eladash
3ee1d8aed1
fixup
2020-06-18 06:47:07 +03:00
Eladash
5c6dae498b
SPU LLVM: Avoid bad optimization in FCGT
2020-06-18 06:47:07 +03:00
Malcolm Jestadt
dcf5c06d6d
SPU LLVM: Optimize FM when op.ra == op.rb
2020-06-06 22:27:48 +03:00