1
0
mirror of https://github.com/RPCS3/rpcs3.git synced 2024-11-22 10:42:36 +01:00
Commit Graph

1631 Commits

Author SHA1 Message Date
Nekotekina
e3e6fb5489 Don't use vm::preallocated flag in patch enclave allocs 2021-12-26 14:40:21 +03:00
Nekotekina
dcd011048d Implement "built_function" utility (runtime-generated assembly)
Similar to build_function_asm, but links without indirection.
Achieved by emitting code directly into a byte array.
2021-12-22 19:27:20 +03:00
nastys
08333e0876
macOS moltenVK support and SIGBUS handling (#11252) 2021-12-12 21:35:56 +01:00
Nekotekina
6b40d69a8f Introduce coroutine support (util/coro.hpp)
Implement coroutine types `lazy` and `generator` in stx namespace.
Implement fs::list_dir_recursively.
2021-12-07 13:04:10 +03:00
Eladash
cb4711203b logging: Tell apart PPU access violation caused by executing unmapped memory 2021-12-05 01:22:32 +03:00
DH
cccfb89aa0 [Config] Use std::less<> for std::map<...>
Reduces amount of string copies
[Utilities] fmt::replace_all: avoid creation of temporary strings
2021-12-02 21:36:57 +03:00
DH
813c3298ad [Utilities] Fixed area_base operator* scalar type 2021-12-02 21:36:57 +03:00
Eladash
f16949c292
fs::file: always use strict reading mode for large reads (#11206) 2021-12-01 19:09:07 +03:00
Vestrel
37a722cc1d
Audio backend improvements
Callback based audio update.
Upgraded common backend interface.
Added Cubeb backend.
Support multiple audio providers.
Dropped pulse, alsa, openal backends.
2021-11-24 19:41:05 +01:00
Eladash
9afa960979 Fix possible fs::create_path recursion overflow 2021-10-22 15:37:47 +03:00
Eladash
24e76f2960 fs: Add fs::write_new, promotes safe file creation (no overwrite) 2021-10-10 09:34:50 +02:00
Eladash
75e66ab5e0 Make pad and patches config savinng atomic 2021-10-10 09:34:50 +02:00
Megamouse
f72d148d37 Fix config mode reset 2021-10-05 20:16:11 +02:00
Eladash
65c9cd99cd Patches/PPU: Implement HLE/LLE/With-TOC function call patches
Example patches:
  [ jumpf, 0x12340, "cellGcmSys:cellGcmSetFlip"] // Places a call to cellGcmSetFlip at 0x12340
  [ jumpf, 0x12340, "cellGcmSys:0xDC09357E"] // Same, using FNID
  [ jumpf, 0x12340, 0x2345678 ] # Function OPD based call eading OPD at 0x2345678
2021-09-26 20:49:57 +03:00
Eladash
e10c6cbaf7 SPU: cpu_work() fixup, fix recursion in AV handler 2021-09-18 19:43:55 +03:00
Megamouse
129ade2f73 System: only init fxo objects if a game is started
The progress_dialog and patch system aren't needed unless a game is started.
Before, they were both initialized everytime we added a single game to the game list or even when simply started RPCS3.
This both means that a thread was needlessly idling all the time and even worse: The patch.yml was read countless times when we didn't need it.
2021-09-17 22:45:14 +02:00
Eladash
73bdf7481e Emu: Fix disc game move from hdd0/game 2021-09-17 22:15:48 +02:00
Eladash
50ad7ba1f6 vm: Fix vm::unmap
* Make vm::unmap atomic, squash the memory unmapping process inside this function while still using the same VM mutex ownership.
* Make vm::unmap not fail due to random vm::get calls, shared_ptr reference count is no longer a condition.
* Fix sys_mmapper_free_address spuriously failing with EBUSY due to random vm::get calls.
* Fix sys_vm_unmap race condition due to non-atomic vm::unmap.
* Add an optional verification block ptr arg to vm::unmap, used by patches.
2021-09-13 20:53:34 +03:00
Eladash
f98595bee5 Patches/PPU: Add jump_link patch type 2021-09-10 11:46:39 +03:00
Eladash
fafefb2cf5 Fixup No.3 after #10779 2021-09-10 11:46:39 +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
Megamouse
76ac8ffbd6 input: fix custom pad config removal 2021-09-05 10:16:25 +02:00
Megamouse
3c0681ad6d Qt: patch creator 2021-09-04 10:39:32 +02:00
Nekotekina
ad6a72e369 Fixup for #10779 2021-09-01 14:38:20 +03:00
Eladash
b40ed5bdb7
Patches/PPU: Extend and improve patching capabilities (code allocations, jumps to any address) (#10779)
* Patches/PPU: Implement dynamic code allocation + Any-Address jump patches

Also fix deallocation path of fixed allocation patches.
2021-09-01 13:38:17 +03:00
Eladash
ddb042148d Patches/LLVM: Implement Complex Patches Support 2021-08-26 23:04:32 +03:00
Megamouse
72f0637efe Windows/Audio: add listener for device change
For some reason XAudio2 doesn't automatically change the device anymore.
So let's just listen for the OnDefaultDeviceChanged event and update the cell audio thread if necessary.
2021-08-25 22:44:16 +02:00
Megamouse
cad96cef72 input: redesign pad profiles 2021-08-15 08:24:35 +02:00
Eladash
7fdbadf645 patch_manager: Prefer specific patches over global patches 2021-08-09 18:12:17 +02:00
Nekotekina
5ba8daf518 Fix thread time/cycles report with respect to thread pool
Fix all RUSAGE stats as well (POSIX)
2021-08-01 09:59:00 +03:00
Megamouse
0aa1aff6ba StrFmt: fix comma placement in format_byte_array 2021-07-27 11:37:07 +02:00
Eladash
98e40d12ef sys_ppu: Implement sys_ppu_thread_rename 2021-07-19 12:37:33 +02:00
Eladash
70a3c5d440 Fixup byte array formatter 2021-07-17 20:02:21 +02:00
Eladash
1e9afdc289 Formatting Library: Implement byte arrays formatting 2021-07-17 18:10:43 +02:00
Eladash
66368debf8 Win32 FS: Implement support for large reads/writes 2021-07-16 18:48:20 +03:00
Nekotekina
5dfa908835 fmt: add support for std::u8string 2021-07-15 17:07:41 +03:00
Nekotekina
ea0c559bc3 fmt: implement char8_t string support 2021-07-15 17:07:41 +03:00
Eladash
0aed00a758
Improve thread aborting mechanism (#10490)
Call pseudo-virtual operator=(thread_state) of thread context.
2021-06-27 11:43:48 +03:00
Megamouse
2c2003aa5b move try_to_int64 to StrUtil 2021-06-25 09:41:32 +03:00
Nekotekina
3c614d95b8 fs: alternative fs::pending_file implementation (Win32)
Use MOVEFILE_WRITE_THROUGH instead of sync() on commit().
2021-06-20 22:08:24 +03:00
Nekotekina
696be6aacd Implement fmt::ensure (assert-like with formatted message) + fmt::tie
Arguments should be provided via fmt::tie() due to some limitations.
Allow to specify simple message (non-formatting) for plain ::ensure().
Remove redundant function for narrow error.
2021-06-10 21:16:57 +03:00
Eladash
4f76211551 Hotfix #10411 2021-06-08 20:12:32 +03:00
Eladash
76bf720adf Improve emulation stopping speed
Split phases of signalling threads and joining them.
2021-06-08 18:26:14 +03:00
Ani
a49446c9e9
Replace gsl::span for std::span (c++20) (#7531)
* Replace gsl::span for std::span (c++20)
* Replace gsl::byte with std::byte

Co-authored-by: Bevan Weiss <bevan.weiss@gmail.com>
2021-05-30 17:10:46 +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
Eladash
638f20c80f Improve get_current_cpu_thread() 2021-05-20 09:25:51 +03:00
Nekotekina
1d0f6eebdc Improve error_code (new formatting constructor)
Minor cleanup in formatting utilities.
2021-05-19 22:41:16 +03:00
Nekotekina
d3b0a3dc46 bs_t<>: add all_of() and none_of()
Convenience functions.
2021-05-18 21:40:59 +03:00
Paul
4e12e70929
Add Intel's Rocket Lake 11th gen cpu. (#10205)
This does nothing but may be required later.
2021-05-13 11:34:37 +03:00
Eladash
f7b845d49c fs: Optimize filesystem handle reconstruction 2021-05-12 12:12:34 +03:00
David Carlier
b09970f159 couple of warning build fixes 2021-05-09 09:25:40 +02:00
Nekotekina
e24ada37bf fs: implement fs::get_temp_dir() (Win32)
Trying to workaround issues with sparse files (#10231)
2021-05-05 19:38:36 +03:00
Eladash
daa53b77cf Simplify named_thread construction 2021-05-01 18:08:03 +03:00
Megamouse
5720a32bc5 save-overlays: change list entry contents.
There's no need to tell the user that the entry is for game xy, they are already playing that game.
On a real PS3 only the subtitle and the date are displayed.
2021-04-30 00:30:26 +02:00
Nekotekina
f8e05f8e3c Remove redundant operators != 2021-04-29 22:57:40 +03:00
Nekotekina
5724d2d4c7 Simplify umax
Add operator less and conversion operator.
2021-04-29 12:21:12 +03:00
Nekotekina
b5e9f09972 fmt: support numeric u128 formatting 2021-04-25 18:17:38 +03:00
Nekotekina
61450335a5 named_thread: use concepts, improve constructors
Better default thread name detection.
2021-04-21 17:19:53 +03:00
Nekotekina
0c9c481cee Use requires syntax in more places
Change style in some places.
2021-04-19 16:51:40 +03:00
David Carlier
b6732fbae9 MacOs build fix proposal.
Made on Big Sur, removing few unnecessary old specifics.
Build with LLVM homebrew.
2021-04-18 17:18:09 +03:00
Nekotekina
fb26da1cb0 bs_t<>: create BitSetEnum concept
Try concepts instead of SFINAE.
2021-04-17 19:23:19 +03:00
Nekotekina
9d4fcbf946 bs_t<>: fix/cleanup some operators 2021-04-17 15:54:33 +03:00
Eladash
67e2e154fa Replace simple_type with std::common_type 2021-04-17 10:27:55 +03:00
Nekotekina
a211895e28 shared_ptr.hpp: use for fs::virtual_device
Add new constructors for single_ptr and shared_ptr.
Change virtual device prefix format.
2021-04-15 17:26:47 +03:00
p01arst0rm
c9d2aed286 small collection of fixes 2021-04-15 11:05:15 +03:00
p01arst0rm
1de7ac3c67 added inline suggestion to patch_engine_version to prevent duplicate includes 2021-04-13 09:14:53 +03:00
Megamouse
a16d8ba3ea More random changes 2021-04-11 14:01:51 +03:00
Eladash
56d34e0e80 Enforce backslash at the end of emulated drives paths 2021-04-10 23:51:49 +03:00
Eladash
11824b3916 Win32 FS: Improve fs::create_dir 2021-04-10 23:51:49 +03:00
Eladash
49c5ce30cc Emulation: Fix boot path resolving
* Fix /dev_flash executables path arg. (/host_root is wrong for it)
* Fix usage of /host_root for homebrew applications when it is not mounted, use /app_home.
* Fix path source detection. (don't get fooled by path slashes repetitions, symlinks, '.', ".." and ('\' on Windows))
* Unescape tail of /dev_hdd0 paths.
2021-04-08 23:57:00 +03: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
Nekotekina
963d150e93 Fix some -Weffc++ warnings (part 2) 2021-04-03 21:54:15 +03:00
Eladash
73320d4180 Output all fatal log messages to Console/debugger as well 2021-04-03 08:47:58 +02:00
Nekotekina
2212a131ef Fix some -Weffc++ warnings (part 1) 2021-03-31 11:27:09 +03:00
Eladash
5a3c218239 thread-pool: Fix default rounding mode 2021-03-30 11:13:47 +03:00
xddxd
9d895e6b15 Scheduler overhaul 2021-03-26 00:29:44 +03:00
Nekotekina
b3fb6d7d18 Add and fix -Wredundant-decls (GCC) 2021-03-23 22:48:57 +03:00
Eladash
2f333424a6 Improve ELF/Trophy loader's error checking 2021-03-23 16:05:23 +03:00
Eladash
a67b347966
debugger: Fix SPU memory viewing (#10007)
* debugger: Fix SPU memory viewing

* Fix terminal recovery from page faults (hack allocation)
2021-03-23 13:33:07 +03:00
Megamouse
2c05e9719d cfg: simplify get_nodes 2021-03-20 20:54:26 +03:00
Megamouse
ae01e1d2c3 cfg: move get_name to _base 2021-03-20 20:54:26 +03:00
Eladash
4c7fc8a70a
Improve fs::container_stream::write (#9976)
Add overflow condition.
2021-03-16 14:03:58 +03:00
Eladash
a5bb925a3d Thread.cpp: Add missing newline 2021-03-15 20:41:33 +03:00
Nekotekina
ccdea1c4ad Enable -Wduplicated-branches (GCC) 2021-03-13 18:03:08 +03:00
Eladash
cd6ef2958b Add information about unnamed/main threads in logs and fatal dialog
* If thread is unnamed, keep log name empty for main thread, otherwise print thread id. In fatal dialog, main thread can be handled differently (with special remark that it's main thread).
* Always print thread id in fatal dialog, regardless of thread type.

Co-authored-by: Nekotekina <nekotekina@gmail.com>
2021-03-11 22:55:06 +03:00
Nekotekina
a6350d5dd1 Fixup write_gather (Linux, BSD)
Split iovec into small portions (256 for now)
2021-03-09 15:54:04 +03:00
Nekotekina
a4fdbf0a88 Enable -Wstrict-aliasing=1 (GCC)
Fixed partially.
2021-03-09 03:10:15 +03:00
Nekotekina
5bdd1cf837 Remove some redundant code
Potential fix for future warnings.
2021-03-09 03:09:50 +03:00
Nekotekina
3609eb25c9 Implement thread_ctrl::is_main() 2021-03-06 23:10:31 +03:00
Nekotekina
55c75d2c87 Implement thread_ctrl::get_tid() 2021-03-06 23:10:31 +03:00
Nekotekina
c69c70cf5f Another minor fix for fmt::split
Doesn't affect existing code.
If there are 2 or more separator, choose closest.
2021-03-06 19:30:09 +03:00
Nekotekina
7cd79714fa Minor fix for fmt::split with empty string
Doesn't affect existing code, I believe.
Return at least 1 empty string if is_skip_empty=false.
2021-03-06 19:26:41 +03:00
Nekotekina
87af905018 Enable -Wunused-parameter 2021-03-06 18:07:08 +03:00
Nekotekina
52fe86b56c fixed_typemap.hpp: make it a bit fool-proof
Require objects to be non-copyable (move is still allowed).
2021-03-02 21:58:49 +03:00
Nekotekina
ea5e837bd6 fixed_typemap.hpp: return reference 2021-03-02 16:08:14 +03:00
Nekotekina
bbf52f3cea named_thread: fix bugs in std::forward usage
Fix few misused threads and other bugs.
2021-03-02 16:08:14 +03:00
Eladash
ff211a9508 LLVM: Do not crash on failure to create cache file 2021-03-02 16:07:51 +03:00
Eladash
48cd56acc2
Report deadlocked thread names in failures to stop emulation (#9865)
* Report deadlocked thread names in failures to stop emulation

Co-authored-by: Nekotekina <nekotekina@gmail.com>
2021-03-01 01:06:48 +03:00
Nekotekina
de9d859f4a named_thread: implement task queue
atomic_ptr: implement push_head()

thread_ctrl::state() triggers task queue execution.
2021-02-28 20:20:17 +03:00
Nekotekina
3aaa0172d5 named_thread: implement "default" event loop
Fixup "sleepy" thread at startup on Windows.
Permit threads which lack operator()() overload.
2021-02-28 20:16:13 +03:00
Nekotekina
29e7eda887 named_thread: rewrite result_storage
Use SFINAE as permitted by std::invoke_result_t<>
2021-02-28 20:16:13 +03:00
Nekotekina
cd01a1eb09 Move CPUStats.h -> util/cpu_stats.cpp 2021-02-23 18:24:50 +03:00
Nekotekina
090a769bf6 Implement fs::sync (Linux/POSIX) 2021-02-23 18:24:50 +03:00
Nekotekina
014846cf31 cellSaveData: fix minor issues 2021-02-23 18:24:50 +03:00
Megamouse
663b2c9c5e overlays: Fix frametime graph spikes
The frametime_timer was restarted at the end of the update method, instead of immediately after reading its value.
This means that the frametime was lower than expected when an expensive task was executed in-between.
2021-02-23 13:27:54 +03:00
Eladash
d4af8dd89a Fix atomicity of savedata/trophy data writes 2021-02-23 11:29:23 +03:00
Eladash
932f31e37b Atomic PARAM.SFO writes 2021-02-23 11:29:23 +03:00
Nekotekina
980be9e0e8 JIT.cpp: fix overcommit bug (should have been Linux-specific)
Closes #9820

Co-authored-by: Eladash <elad3356p@gmail.com>
2021-02-22 13:35:01 +03:00
Nekotekina
038148bf06 Fix almost all GCC warnings 2021-02-17 22:59:04 +03:00
Nekotekina
1446254a03 Add error on missing 'override'
For consistency.
2021-02-15 20:21:30 +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
0a23a5ef50 Rewrite fs::get_parent_dir
Don't analyse full path if possible.
2021-02-12 21:43:30 +03:00
Nekotekina
629d608d4f Patch engine: add bd32, bd64 and utf8 patch types
bd32 is the same as be32 with a hint it's not executable.
utf8 is NOT null-terminated string, null can be added manually.
2021-02-12 21:43:30 +03:00
Eladash
e26ae9899c Reimplement/fix PRX patches 2021-02-12 15:27:59 +03:00
kd-11
1bad9a939f rsx: Refactor texture cache utils
- Also lays groundwork for optional hashed sections
2021-02-10 11:37:14 +03:00
Nekotekina
4f8cac731b Fix SAFE_BUFFERS attribute for GCC 2021-02-09 12:33:50 +03:00
Nekotekina
b7ff2ecffb Patch system: export some info for future use
For now it's just a list of addresses.
For now it's not used (just a stub).
2021-02-07 11:02:31 +03:00
Nekotekina
78bad361ab Fix fs::unread (Linux)
Detach from fs::lock
Handle existing file case (unlink it).
2021-02-02 01:05:53 +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
Nekotekina
aeeceb7d0b Minor fixups 2021-02-01 11:30:50 +03:00
Nekotekina
f9ee8978ff PPU LLVM: improve analyser
Compile possibly executable holes between detected functions.
Add unused "PPU LLVM Greedy Mode" option (for future updates).
Add "nounwind" attribute to compiled functions (reduces size).
2021-02-01 11:30:50 +03:00
Eladash
d3bc96a201 Fix minor issue with usage of STL thread::hardware_concurrency() 2021-01-29 18:23:29 +03:00
Eladash
a742501a4f Do not account RSX for TSX pauses 2021-01-29 10:31:15 +03:00
Eladash
0652870204 New RSX Debugger 2021-01-28 17:40:26 +03:00
Nekotekina
34274ec391 Purge unused typeid() invocations 2021-01-28 10:23:29 +03:00
Eladash
28feea0447 Unfatal Segfaults 2021-01-27 21:54:29 +03:00
Nekotekina
c652d0b183 Detect execution access violation
Don't try to handle it, treat as fatal.
2021-01-27 11:53:10 +03:00
Nekotekina
22c55cbcfa Add trace logging to thread_ctrl::set_thread_affinity_mask 2021-01-26 19:59:48 +03:00
Nekotekina
c24d89dd34 Threads: fix typo in emergency_exit (dump useful info) 2021-01-26 19:58:47 +03:00
Nekotekina
f10ea1fb9b Thread pool: try to fix resetting affinity mask
Attempt to address #9657
2021-01-26 16:45:36 +03:00
Nekotekina
eb72cc9f04 Thread pool: reset thread affinity mask 2021-01-25 22:05:38 +03:00
Nekotekina
ee288340b0 Implement thread_ctrl::scoped_priority
RAII priority control (+1, or -1)
2021-01-25 21:49:16 +03:00
Nekotekina
8480674708 Thread pool: reset priority 2021-01-24 16:45:28 +03:00
Eladash
12e1be2626 Implement thread_ctrl::wait_on (see #9208) 2021-01-21 18:31:51 +03:00
Nekotekina
c66b155dcb Remove unnecessary fmt::throw_exception destructor body
Tested with GCC and Clang in Debug mode, it now works.
2021-01-20 09:02:25 +03:00
Eladash
dbecf0fa50 Introducing RSX debugger entry (main debugger) 2021-01-19 22:55:12 +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
Nekotekina
6cf0c5cd6d Fix fmt::throw_exception destructor v2
Remove destructor for MSVC.
2021-01-18 21:19:34 +03:00
Nekotekina
e07484f057 Rewrite fmt::throw_exception destructor
Add _DEBUG in debug mode for consistency with MSVC.
2021-01-18 13:49:16 +03:00
Eladash
0070fce286
Compilation fix (#9622) 2021-01-18 13:41:39 +03:00
Nekotekina
3567c43fb5 LLVM: generate trampolines for "null" functions
Embed name into the trampoline for easier debugging.
Only warn about it during the compilation phase.
2021-01-15 21:38:33 +03:00
Megamouse
a692adefd7 Remove legacy patch support 2021-01-13 10:39:17 +01:00
Nekotekina
f14d47bfe6 LLVM: log certain null functions 2021-01-12 15:39:43 +03:00
Nekotekina
db8e6fe7a7 Enable -Wunused-variable 2021-01-12 14:34:14 +03:00
Eladash
bf6f43ec3a Utils: Rewrite fmt::split 2021-01-08 22:23:48 +03:00
Nekotekina
1dcf5e4f85 Error on no return type warning
Added non-existing noreturn destructor to fmt::throw_exception (for clang).
2021-01-07 11:56:16 +03:00
kd-11
5f8564c655 Update Utilities/Thread.cpp
Co-authored-by: Bird Egop <sampletext32@bk.ru>
2021-01-03 19:31:18 +03:00
kd-11
cbe0000d23 Improved Zen chip detection 2021-01-03 19:31:18 +03:00
Eladash
247e90b3d0 rsx: Shaders cache loading and saving bugfixes
* Fixed crash whenever files are missing from the cache.
* Fixed crash whenever files are empty.
* Fixed crash whenever file creation/overwrite of cache files failed. (handled by fs::write_file)
* Fixed crash whenever there are any subdirectories inside the pipelines cache directories.
* Overwrite invalid shader cache files if encountered such.
* Optimizations have been added.
2021-01-03 01:47:07 +03:00
Florin9doi
f1c61067bc
Buzz! emulated controller (#9504)
* Buzz emulated controller
Co-authored-by: Florin9doi <Florin9doi@users.noreply.github.com>
Co-authored-by: Ivan <nekotekina@gmail.com>
2020-12-31 21:02:03 +03:00
JohnHolmesII
57621d1c4e Types: Use nullptr over 0 2020-12-29 14:17:34 +03:00
JohnHolmesII
76b1acf99d Warnings: Ensure death functions are all marked noreturn 2020-12-29 14:17:34 +03:00
Eladash
66581d115b vm: Fix access violations on super memory, support super memory in vm::get_addr 2020-12-26 17:56:49 +03:00
RipleyTom
bef2c50b03 Remove bom in Utilities dir 2020-12-25 10:07:40 +03:00
Nekotekina
a8e0d261b7 types.hpp: more cleanup
Also fix compilation.
2020-12-22 19:08:09 +03:00
Nekotekina
43a58df8a0 Butcher narrow cast a little (don't print value).
Also remove some forward declarations from util/types.hpp
If they don't work properly, it's easier to remove them.
2020-12-22 14:32:30 +03:00
Nekotekina
b7bf316c1a Don't randomly include "stdafx.h"
It's file for precompiled headers.
Include what is used, don't rely on transitive includes.
2020-12-22 14:32:30 +03:00
Nekotekina
41ee792f95 MSVC: remove MemLeak build support
There are better memleak detection tools.
1) Requires to guard placement new and external libs
2) Doesn't work thoroughly
2020-12-22 14:32:30 +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
Nekotekina
5f618814f6 atomic.hpp: use u128 as storage for masks/values 2020-12-21 13:51:23 +03:00
Nekotekina
eec11bfba9 Move align helpers to util/asm.hpp
Also add some files:
GLTextureCache.cpp
VKTextureCache.cpp
2020-12-18 18:07:42 +03:00
Nekotekina
db9b7db531 Cleanup and move sysinfo.h -> util/sysinfo.hpp 2020-12-18 12:55:54 +03:00
Nekotekina
05099e2ae1 Replace uint64_t with u64 2020-12-18 12:23:53 +03:00
Nekotekina
fb29933d3d Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
Nekotekina
4cfa9b11f3 Move busy_wait() to asm.hpp 2020-12-18 12:23:53 +03:00
Nekotekina
3c86e14ea4 Fix hexadecimal line numbers in error reports 2020-12-17 17:00:06 +03:00
Nekotekina
6b3f722ff0 Hotfix: useless error 2020-12-16 11:57:29 +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
a6a5292cd7 Use uptr (std::uintptr_t alias) 2020-12-12 16:29:55 +03:00
Nekotekina
b59f142d4e Move types.h to util/types.hpp 2020-12-12 15:12:01 +03:00
Nekotekina
666a18f5e5 Remove ceil2/floor2 from types.h 2020-12-12 15:12:01 +03:00
Nekotekina
dff4392c10 Move error_code to ErrorCodes.h 2020-12-12 15:12:01 +03:00
Nekotekina
b09b7c1184 Remove any_pod<> from types.h
Add simplified any32 to GCM.h
Add simplified cmd64 to PPUThread.h
2020-12-12 13:12:39 +03:00
Nekotekina
6e05dcadb6 Reduce std::numeric_limits dependency
Please, stop pretending...
You need these templates for generic code.
In other words, in another templates.
Stop increasing compilation time for no reason.
2020-12-12 12:35:18 +03:00
Nekotekina
cb19316a17 Fix u128 constructors (MSVC) 2020-12-12 09:54:39 +03:00
Nekotekina
aa3aef4beb std::chrono cleanup: always use steady_clock 2020-12-11 19:01:56 +03:00
Nekotekina
12a48fc6d1 Fixup for fs::file::read 2020-12-11 07:33:15 +03:00
Nekotekina
b382d3b3e9 Remove ASSUME macro
It's dangerous and sometimes bluntly misused feature.
Its optimization potential is near-zero.
2020-12-10 14:08:02 +03:00
Nekotekina
61b882b2a6 Always print system error code on 'throwing' errors.
Print system error code in src_loc fmt.
Error code may be irrelevant though.
2020-12-10 12:43:49 +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
Nekotekina
77aa9e58f2 shared_ptr.hpp: add trivial conversion for shared/single types
These conversions don't exist in std::shared_ptr-alike types.
But I don't want to bother with == operators until we have proper C++20.
Removed trivial conversion for atomic_ptr because it's heavyweight.
2020-12-07 15:33:28 +03:00
Nekotekina
d1e7837422 atomic_t: cleanup type requirements
Add C++17 requirements.
Remove alignment requirements (auto-align type).
What's missing is to detect padding and forbid it.
2020-12-04 19:11:36 +03:00
Nekotekina
8efc22bd45 atomic.hpp: simplify and unify bit test instructions
Also make them available on all platform.
Rename some rare methods.
2020-12-04 14:33:38 +03:00
Nekotekina
3b8e3a9714 stdafx.h: remove BOM from custom included headers
Also add warnings about adding them.
2020-11-29 15:35:05 +03:00
Nekotekina
0892758994 Minor debugging enhancement
Use raise(SIGTRAP) in failed SIGSEGV handling and return.
2020-11-26 20:11:26 +03:00
Nekotekina
22a24446c1 Threads: fix minor race
Has already been in "fixed" state in past...
2020-11-26 20:11:26 +03:00
Nekotekina
b5d498ffda Homebrew atomic_ptr rewritten (util/shared_ptr.hpp)
It's analogous to C++20 atomic std::shared_ptr

The following things brought into global namespace:
single_ptr
shared_ptr
atomic_ptr
make_single
2020-11-26 20:11:26 +03:00
Nekotekina
ca9898e838 JIT: increase likeliness of allocating 2M large pages
On top of enabled transparent hugepages hint (Linux).
2020-11-25 10:41:17 +03:00
Nekotekina
43952e18e2 Implement prefetch_write() and prefetch_exec() wrappers
Do some refactoring to prefetch_read() in util/asm.hpp as well.
Make all these function constexpr because they are no-ops.
2020-11-24 12:31:11 +03:00
Nekotekina
b954a41f2a Threads: minor simplification 2020-11-24 01:09:04 +03:00
Nekotekina
d4c17ecda5 Simplify communication with thread pool
Add "entry_point" member to "thread_base".
Don't use "m_thread" to exchange values.
2020-11-23 11:32:34 +03:00
Nekotekina
a4458e2c8c Clean thread pool at exit.
Execute TLS destructors.
Test atomic wait list.
2020-11-23 10:20:42 +03:00
Nekotekina
71f1021648 Fix thread pool entry point and get_cycles()
Fix possible race between thread handle availability.
Don't treat zero thread as invalid one.
Now entry point is full is assembly.
Attempt to fix #9282
Also fix some TLS.
2020-11-21 17:18:42 +03:00
Nekotekina
60cff6f3d4 Attempt to fix #9271 2020-11-21 07:09:48 +03:00
Nekotekina
c0f3d1f06d Basic constexpr support for u128 (MSVC)
Added explicit conversion op to u64.
Added constexpr path for +,-,>>,<< ops.
Make almost all methods constexpr.
Removed a lot of redundancy.
2020-11-20 15:04:17 +03:00
Nekotekina
36f1193497 Fix u128 type on MSVC (subtraction, minus)
All subtraction operations were broken.
2020-11-19 16:38:06 +03:00
Nekotekina
d789250976 Add thread_ctrl::get_thread_stack
Returns addr and size of current thread's stack.
2020-11-17 05:33:46 +03:00
Nekotekina
dfae7bd073 SPU: Fix some stat printing 2020-11-15 04:41:16 +03:00
Nekotekina
badb3dc2dd atomic.cpp/threads: remove old wait callback
Add new wait callback which simply collects statistics.
Shift workarounds towards actual problem detection.
2020-11-14 18:16:27 +03:00
Nekotekina
0c7f9458c0 Fix thread pool resource management.
Make sure no tail call happens (change ret address to a trampoline).
Make sure thread handles don't leak if the pool is full.
2020-11-13 17:17:45 +03:00
Nekotekina
ab365fe494 Fixed thread pool a bit
Use 128-bit allocator instead of queue.
When pool is full (128), threads just terminate as before.
2020-11-13 13:32:44 +03:00
Nekotekina
67785a918c Implement simple thread pool 2020-11-13 03:32:24 +03:00
RipleyTom
1378645413 Adds SIGPIPE to ignored exceptions(unix) 2020-11-12 07:08:59 +03:00
Eladash
829a697c39 Fix vm::check_addr calls in Thread.cpp 2020-11-11 17:40:46 +03:00
Nekotekina
bd5253047b Improve DYNAMIC_IMPORT
Don't call get_proc_address every time if if failed.
Also rename Utilities/dynamic_library.h to util/dyn_lib.hpp
2020-11-10 01:44:31 +03:00
Nekotekina
1c99a2e7fb vm: add map_self() method to utils::shm
Add complementary unmap_self() method.
Move VirtualMemory to util/vm.hpp
Minor associated include cleanup.
Move asm.h to util/asm.hpp
2020-11-08 16:43:15 +03:00
Megamouse
6fcc68699a unify patch log 2020-11-07 19:22:40 +01:00
Nekotekina
0bd989b118 atomic.cpp: allow waiting on multiple variables simultaneously
Arbitrary maximum set to 8, but really we need 2, maybe 3.
Added atomic_wait::list object for multi-waiting.
Added atomic_wait::get_unique_tsc just in case.
2020-11-07 18:18:02 +03:00
Megamouse
a3eb5c2d63 More Header cleanup 2020-11-06 22:14:05 +01:00
Nekotekina
557f0c5a8a atomic.cpp: remove load() from notify functions
Only compare masks for overlap for second overload (with mask provided).
Explicit "new value" can be provided in new 3-arg overloads.
Also rename atomic_storage_futex -> atomic_wait_engine.
2020-11-06 04:44:31 +03:00
Nekotekina
cc07e5306e Improve shared_mutex
Wait/notify only on c_sig, should reduce spurious wakeup noise.
2020-11-06 00:10:16 +03:00
Nekotekina
34fa010601 Improve cond_var notifiers
But nobody uses it anyway, so clean up includes.
2020-11-06 00:10:16 +03:00
Nekotekina
7d56069243 Fix HAS_OVERCOMMIT usage in JIT.cpp 2020-11-05 18:50:19 +03:00
Nekotekina
ebdf93e5dc Fix 1 warning in MSVC 2020-11-05 06:45:01 +03:00
Nekotekina
5248240e10 atomic.cpp: improvements.
Reduced static memory amount for waitable atomics.
Allow notifier to skip notifications if wait/notify masks don't overlap.
Improve raw_notify to wake up the thread by its id, add thread_id arg.
Add optional mask argument to notify_one() and notify_all().
2020-11-05 05:51:43 +03:00
Nekotekina
b66628baca Improve low-level mmap utilities (Linux/BSD)
Add madvise (MADV_WILLNEED) on utils::memory_commit
Add madvise (MADV_FREE or MADV_DONTNEED) on utils::memory_decommit
Improve shm_open pseudo-random name (not used on Linux)
2020-11-04 14:59:26 +03:00
Nekotekina
ba5ed5f380 Fix vm::lock_range wrong check
Minor header refactoring.
2020-11-04 14:59:26 +03:00
Nekotekina
2d38d8a639 Fix NEVER_INLINE attribute
Similarly to FORCE_INLINE, it doesn't imply inline on some compilers.
2020-11-04 14:59:25 +03:00
Nekotekina
1b8bf081b5 Upgrade to LLVM 11 Stable 2020-11-02 21:23:25 +03:00
Nekotekina
86fc842c89 TSX: new fallback method (time-based)
Basically, using timestamp counter.
Rewritten vm::reservation_op with the same principle.
Rewritten another transaction helper.
Add two new settings for configuring fallbacks.
Two limits are specified in nanoseconds (first and second).
Fix PUTLLC reload logic (prevent reusing garbage).
2020-10-31 15:34:14 +03:00
Megamouse
2cee26c3e7 Cleanup some includes 2020-10-31 11:53:46 +01:00
Nekotekina
605d57c541 sys_event: cleanup (replace vm::temporary_unlock)
Also made minor changes in sys_rsx.cpp.
Removed unused exception std headers.
2020-10-30 17:49:07 +03:00
Nekotekina
f972fa26a4 Derive RSX Replay thread from cpu_thread
Its id is set to 0, so fix some id_type() usages.
2020-10-30 17:36:11 +03:00
Nekotekina
8ce0819b42 SPU: add stx/ftx counters
Just count pure transaction successes and failures.
2020-10-29 18:57:57 +03:00
Nekotekina
c491b73f3a SPU: improve accurate DMA
Remove vm::reservation_lock from it.
Use lock bits to prevent memory clobbering in GETLLAR.
Improve u128 for MSVC since it's used for bitlocking.
Improve 128 bit atomics for the same reason.
Improve vm::reservation_op and friends.
2020-10-28 03:47:41 +03:00
Nekotekina
c50233cc92 atomics.cpp: add support for waiting on 128-bit atomics
Complementarily.
Also refactored to make waiting mask non-template arg.
2020-10-28 03:47:41 +03:00
Nekotekina
4966f6de73 vm: improve range_lock and shareable cache (Non-TSX)
Allocate "personal" range lock variable for each spu_thread.
Switch from reservation_lock to range lock for all stores.
Detect actual memory mirrors in shareable cache setup logic.
2020-10-27 17:56:19 +03:00
Nekotekina
6806e3d5c7 atomic.cpp: implement notify callback
Notification can be very heavy, especially if we need to wake many threads.
Callback is set for cpu_thread in order to set wait flag accordingly.
2020-10-27 17:56:19 +03:00
Nekotekina
d344701fd5 atomic.cpp: add sparse atomics
Set alignment as second template argument (typically cache line).
2020-10-26 01:15:31 +03:00
Nekotekina
97ae5ab561 Add imports for some undocumented NTDLL functions
Some of them are available only since Windows 8.
2020-10-24 14:16:32 +03:00
Nekotekina
10caa2981f Improve raw_notify a bit 2020-10-24 14:16:32 +03:00
Nekotekina
59d9e7ce98 Revert "Atomics: use WaitOnAddress if available (Win8+)"
This reverts commit f0fd7e2e19.
2020-10-21 09:59:08 +03:00
Nekotekina
f0fd7e2e19 Atomics: use WaitOnAddress if available (Win8+) 2020-10-21 00:22:08 +03:00
Nekotekina
4384ae15b4 Improve vm::reservation_op
Remove XABORT, sync status handling with SPU/PPU transaction.
Limit max number of transaction attempts in loop.
Add Ack template parameter, as in vm::reservation_light_op.
Remove utils::tx_abort, improve utils::tx_start as well.
2020-10-20 09:10:21 +03:00
Nekotekina
dc8252bb9f Remove XABORT in PPU/SPU transactions.
It's expensive for unknown reason. Simply XEND is usually much cheaper.
Add some minor improvements. Use g_sudo_addr.
2020-10-20 09:10:21 +03:00
Nekotekina
44c90c060a TSX: improve transaction repeat handling
Handle status 0 as fatal.
2020-10-19 19:41:28 +03:00
Nekotekina
15efb73aae Add assert in build_function_asm to not ignore errors 2020-10-17 21:55:22 +03:00
Nekotekina
3d980a9f66 Reimplement ASMJIT runtime
Try to emplace generated code in lower address area.
Protect generated code from writing.
2020-10-17 21:25:43 +03:00
Nekotekina
b57a9c31f0 Implement utils::tx_start (for TSX)
Implement utils::tx_abort helper.
2020-10-12 15:20:24 +03:00
Nekotekina
f2d2a6b605 JIT cleanup for PPU LLVM
Remove MemoryManager3 as unnecessary.
Rewrite MemoryManager1 to use its own 512M reservations.
Disabled unwind info registration on all platforms.
Use 64-bit executable pointers under vm::g_exec_addr area.
Stop relying on deploying PPU LLVM objects in first 2G of address space.
Implement jit_module_manager, protect its data with mutex.
2020-10-11 17:22:28 +03:00
Eladash
3c935f7834
SPU: Fix minor segfaults (#9015)
SPU: Remove "RawSPU Not Found" exception.
Fix edge case in access violation handler.
2020-10-11 14:59:18 +03:00
Nekotekina
050c3e1d6b Rewrite cpu_thread::suspend_all
Now it's a function of higher order.
Make only one thread do the hard work of thread pausing.
2020-10-10 13:58:48 +03:00
Eladash
c628147521 cellSpurs: Implement more HLE functions (part 1) 2020-10-07 01:12:21 +03:00
Megamouse
5226076676 Emu: use vulkan as default renderer 2020-10-01 09:19:13 +02:00
Eladash
8ad36e2526
Fix fs::delim type, fix "." and ".." processing in fs::get_parent_dir (#8975)
* Fix fs::delim type

* Fix fs::get_parent_dir: "." and ".." processing
2020-09-26 19:18:32 +01:00
Eladash
3b11f22062 MSVC bug workaround 2020-09-25 13:26:08 +03:00
Eladash
6b11d82dd0 Win32 FS: Always use FILE_SHARE_DELETE 2020-09-24 18:06:51 +03:00