Elad Ashkenazi
fcd297ffb2
Savestates Support For PS3 Emulation ( #10478 )
2022-07-04 16:02:17 +03:00
Eladash
64399d45c1
vm: Make falloc return value bool
...
Allow to check properly for the success of 0 address allocation.
2022-06-22 21:01:37 +03:00
Elad Ashkenazi
1738b38536
vm_native.cpp: Use Windows 10 memory mapping API (the correct API)
2022-06-10 14:27:02 +03:00
Eladash
16381929ba
vm_var.h: Ensure 16-bytes alignment of gvar
...
Some PPU instructions require memory to be aligned otherwise they produce different results. I've already seen their usage in cellSaveData disassembly so may as well ensure it for all.
2022-06-05 20:47:49 +02:00
Nekotekina
422246825b
vm: workaround bigger native page size for 4k pages
...
Always allocate full memory block if native page size > 4k
2022-06-02 12:56:49 +03:00
Eladash
fcbeb2fa22
Remove slow vm::writer_lock usage from SPUThread.cpp
2022-05-04 23:36:57 +03:00
Nekotekina
5c1f79ab26
vm: remove g_mutex, use g_range_lock instead
...
Simplification and performance improvements.
2022-05-02 10:29:28 +03:00
Nekotekina
12c83b340d
Remove built_function
...
With today's branch prediction techniques, it's hardly useful.
2022-01-24 22:21:41 +03:00
Nekotekina
580bd2b25e
Initial Linux Aarch64 support
...
* Update asmjit dependency (aarch64 branch)
* Disable USE_DISCORD_RPC by default
* Dump some JIT objects in rpcs3 cache dir
* Add SIGILL handler for all platforms
* Fix resetting zeroing denormals in thread pool
* Refactor most v128:: utils into global gv_** functions
* Refactor PPU interpreter (incomplete), remove "precise"
* - Instruction specializations with multiple accuracy flags
* - Adjust calling convention for speed
* - Removed precise/fast setting, replaced with static
* - Started refactoring interpreters for building at runtime JIT
* (I got tired of poor compiler optimizations)
* - Expose some accuracy settings (SAT, NJ, VNAN, FPCC)
* - Add exec_bytes PPU thread variable (akin to cycle count)
* PPU LLVM: fix VCTUXS+VCTSXS instruction NaN results
* SPU interpreter: remove "precise" for now (extremely non-portable)
* - As with PPU, settings changed to static/dynamic for interpreters.
* - Precise options will be implemented later
* Fix termination after fatal error dialog
2022-01-15 06:48:04 +03:00
Nekotekina
61c64d1060
TSX: refactoring M
...
Remove first stage 'optimistic' transactions.
2021-12-19 20:23:01 +03: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
91fefd4671
Fix vm::try_alloc regression
2021-09-12 19:05:26 +03:00
Eladash
fafefb2cf5
Fixup No.3 after #10779
2021-09-10 11:46:39 +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
2d9929059f
vm: Fix an overflow at vm::alloc, fix vm::find_map ( #10760 )
...
* The statement addr += align could have overflowed resulting in either infinite loop or allocating memory outside of the region (illegal).
Add a check checking if it's the last iteration of the loop, then break without adding.
* vm::find_map condition didn't consider the size of the map to be allocated, allowing illegal occupation of [<=0xB000'0000]-0xCFFF'FFFF. (0xC000'0000-0xCFFF'FFFF is reserved for RSX)
2021-08-26 18:14:08 +03:00
Eladash
4e139ee080
vm: Fix vm::page_protect error checking
2021-08-24 18:52:01 +03:00
Eladash
d85bb3f4eb
vm_ptr.h: Improve try_read() ( #10627 )
2021-07-29 21:14:29 +03:00
Eladash
9a392d2b5c
vm_ptr.h: Do not allow dereferencing for void ptr
...
Do not create vm::ref from it as well.
2021-07-17 20:02:21 +02:00
Eladash
a981c65d2f
Minor fixup of vm::ptr
...
const pointers shouldn't disable reading, they should disable writing.
2021-07-17 20:02:21 +02:00
Eladash
b6fccee6a4
Improve ppu_thread::stack_push
...
Save actual stack memory allocation size locally. (not in PS3 memory)
2021-06-28 14:09:24 +03:00
Eladash
23468a2d07
vm_ptr.h: Use concepts
2021-06-28 14:01:58 +03:00
Eladash
76bfe54c7e
Improve bitwise serialization trait
2021-06-11 16:54:17 +03:00
Eladash
0628a5d931
serialization.hpp: Fixes
2021-06-11 08:59:02 +03:00
Nekotekina
d862817485
vm::ref: remove erroneous default constructor
2021-05-31 15:31:20 +03:00
Nekotekina
2491aad6f2
types.hpp: implement min_v<>, max_v<>, SignedInt, UnsignedInt, FPInt concepts
...
Restrict smax to only work with signed values for consistency.
Cleanup <climits> includes.
Cleanup <limits> includes.
2021-05-23 19:43:51 +03:00
Nekotekina
0bd64a0e72
Don't fatal on sparse file initialization failure
...
Also try two different locations (Win32).
2021-05-10 00:39:28 +03: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
Nekotekina
546b52200b
vm: disable locking main/video/stack for now (TODO)
2021-05-04 19:18:57 +03:00
Nekotekina
1b0b2fe21e
vm: add "hook" memory (32G)
...
Implement overcommit emulation for shm.
2021-05-04 18:02:52 +03:00
Nekotekina
f8e05f8e3c
Remove redundant operators !=
2021-04-29 22:57:40 +03:00
Nekotekina
7a9561b966
vm_native: document some unmap_critical behaviour (posix)
2021-04-18 13:13:15 +03:00
Eladash
67e2e154fa
Replace simple_type with std::common_type
2021-04-17 10:27:55 +03:00
Megamouse
a16d8ba3ea
More random changes
2021-04-11 14:01:51 +03:00
Nekotekina
10bbb7fa1f
Fix some warnings (deprecate enum arithmetics)
2021-04-09 10:26:13 +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
Nick Renieris
396c129d41
vm: Flag names (refactoring)
2021-04-06 13:07:54 +03:00
Nekotekina
5dc3467337
vm: fix reservation_update notification
...
Rare function.
2021-03-23 21:09:37 +03:00
Eladash
1864419561
Fix SPU mapped memory page size
2021-03-19 22:25:08 +03:00
Nekotekina
a4fdbf0a88
Enable -Wstrict-aliasing=1 (GCC)
...
Fixed partially.
2021-03-09 03:10:15 +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
d788b12a8e
fixed_typemap.hpp: reduce indirection
...
Backported some changes from auto_typemap.hpp
Implemented methods init(), reset(), clear()
Disabled recreation support.
2021-03-02 16:08:14 +03:00
Eladash
73d45f3bf0
Remove vm::cleanup_unlock
2021-02-22 12:47:45 +03:00
Eladash
5b044a93c1
Fix vm::falloc() for misaligned args ( #9764 )
...
Force addr/size alignment.
2021-02-14 13:19:14 +03:00
Nekotekina
4f8cac731b
Fix SAFE_BUFFERS attribute for GCC
2021-02-09 12:33:50 +03:00
Eladash
0652870204
New RSX Debugger
2021-01-28 17:40:26 +03:00
Nekotekina
a69248299d
SPU: Don't use shm::map_critical in SPU LS allocations
...
Use shm::try_map instead until proper area is found.
2021-01-25 17:45:47 +03:00
Nekotekina
aaaeb66cc8
vm: Minor fix in vm::close
...
Supplied size was wrong.
2021-01-15 20:12:30 +03:00
Eladash
e4c3b1c2bd
vm: Remove vm::dealloc_verbose_nothrow
2021-01-15 17:37:52 +03:00
Nekotekina
db8e6fe7a7
Enable -Wunused-variable
2021-01-12 14:34:14 +03:00
Nekotekina
5227e65808
vm: implement vm::atomic_op, fetch_op helpers
...
Can help to reduce lambda depth hell a little.
2020-12-30 20:11:02 +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
Nekotekina
567d23d856
Implement util/auto_typemap.hpp
...
Used in vm::block_t as an example.
2020-12-24 14:55:25 +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
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
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
fb29933d3d
Add usz alias for std::size_t
2020-12-18 12:23:53 +03:00
Nekotekina
e82bef425f
vm: fix warnings and add narrow cast for u64 ptrs
2020-12-15 20:10:16 +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
62fdcf50ea
vm: initialize g_pages at vm::init
...
Can reduce compile time/overhead.
2020-12-13 15:39:36 +03:00
Nekotekina
b59f142d4e
Move types.h to util/types.hpp
2020-12-12 15:12:01 +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
36c8654fb8
Remove HERE macro
...
Some cleanup.
Add location to some functions.
2020-12-10 12:30:22 +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
d0c271e534
Simplify g_pages
...
This was done because otherwise msvc runs out of heap space on azure.
2020-12-09 11:15:08 +03:00
RipleyTom
af8c661a64
Remove BOM markers
2020-12-06 15:30:12 +03:00
Nekotekina
f0cba1371c
vm: adjustments
...
Increase max range lock size (less than 512 MiB)
Remove "range_executable" flag, make it reserved.
2020-11-24 01:09:04 +03:00
Nekotekina
3e1344e4e4
vm.cpp: minor optimization for filling stack guards
...
Use REP STOSQ on all compilers.
2020-11-19 14:44:58 +03:00
Nekotekina
68931b4c43
Debugger: fill stack guard with STACKGRD
2020-11-17 16:32:59 +03:00
Nekotekina
0fec99e75b
SPU: absolutely unacceptable hack for SPU LS
...
Make normal threads inaccessible in PS3 memory.
2020-11-17 15:22:04 +03:00
Nekotekina
d7e1cf7dd2
vm: respect initial protection for allocation mapping
...
Unused yet.
2020-11-17 05:33:46 +03:00
Nekotekina
ea5f5aea5f
vm: memory locking rewritten
...
Added vm::lock_sudo method (wrapper for utils::memory_lock).
Put locking outside of vm::g_mutex scope.
Prelock sudo memory for RSX, vm::stack, vm::main.
Prelock sudo memory for shared memory objects.
Don't check for TSX path.
2020-11-16 12:46:15 +03:00
Nekotekina
eaf0bbc108
SPU: don't allocate SPU LS in vm::main
...
Create its own shared memory object.
Use vm::spu to allocate all SPU types.
Use vm::writer_lock for shm::map_critical.
2020-11-16 12:46:15 +03:00
Nekotekina
1e269751bf
Temporarily disable memory locking if TSX is not used
...
It's a very heavy operation that could cause some problem under mutex lock.
2020-11-14 11:12:58 +03:00
Eladash
fefab50e06
Fix vm::range_lock, imporve vm::check_addr
2020-11-11 10:30:09 +03:00
Eladash
b32d989a10
Fix PPU stack contents on allocation
2020-11-10 06:30:35 +03:00
Nekotekina
d1ee7c651f
Make memory locking optional (mlock, VirtualLock).
...
Fix desired locking operation (to fix "sudo" memory).
It was discovered that some systems have outdated configuration.
With too tight limit, it's almost impossible to lock anything in memory.
2020-11-10 06:05:37 +03:00
Nekotekina
083397a555
vm: lock memory under "sudo" addr
...
Remove memory touching from transactions.
2020-11-09 23:54:36 +03:00
Nekotekina
d1988d384c
vm: remove unnecessary memset() on stop
2020-11-09 22:57:36 +03:00
Nekotekina
bc61835d97
CPU: use unsigned (u8) priority in suspend_all
2020-11-09 22:57:36 +03:00
Nekotekina
8bc9868c1f
SPU/vm: Improve vm::range_lock a bit
...
Use some prefetching
Use optimistic locking
2020-11-08 17:23:17 +03:00
Nekotekina
3507cd0a37
SPU: improve spu_thread::reservation_check
...
Use optimistic locking and optimistic loop (expecting 1 iteration).
2020-11-08 16:43:15 +03:00
Nekotekina
21ec32b465
vm: implement g_shmem for range locks
...
Renamed from g_shareable. Contains pointers instead of bits.
Used in range locks to prevent any "collision" between memory.
2020-11-08 16:43:15 +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
Nekotekina
b68bdafadc
vm: refactor vm::range_lock again
...
Move bits to the highest, set RWX order.
Use only one reserved value (W = locked).
Assume lock size 128 for range_locked.
Add new "Size" template argument that replaces normal argument.
2020-11-08 16:43:15 +03:00
Eladash
6dcd482dd0
SPU reservations: Do not illegally dereference reservation data
2020-11-07 14:03:09 +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
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
ba5ed5f380
Fix vm::lock_range wrong check
...
Minor header refactoring.
2020-11-04 14:59:26 +03:00
Nekotekina
5d7acda80e
vm: minor refactoring
...
Renamed internal main range locking method.
2020-11-04 14:59:25 +03:00
Nekotekina
06ecc2ae68
vm::range_lock cleanup and minor optimization
...
Removed unused arg.
Linearized some branches.
2020-11-01 23:29:33 +03:00
Nekotekina
46d3066c62
Optimize vm::range_lock
...
Only test address on `range_locked`
Don't check current transaction
Remove vm::clear_range_locks completely
2020-11-01 16:46:06 +03:00
Nekotekina
ca57f25f26
Fix vm::page_protect and range flags
...
Should fix assertion in vm.cpp
Minor refactoring of internal locking
2020-11-01 02:30:10 +03:00
Nekotekina
78c986b5dd
Improve vm::range_lock
...
Not sure how it ever worked
Clear redundant vm::clear_range_lock usage
2020-10-31 23:53:14 +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
Nekotekina
80530e8aef
vm: rename g_addr_lock to g_range_lock
...
Reduce size to 29 bits and use 3 bits to communicate some information.
This information can be used to to a very cheap lock-free access tests.
2020-10-31 15:08:49 +03:00
Nekotekina
ba26e16411
Rename vm::reservation_light_op -> light_op
...
Rename vm::reservation_peek_op -> peek_op
Also remove overkill assertion for cpu_flag::temp.
2020-10-31 15:08:49 +03:00
Megamouse
2cee26c3e7
Cleanup some includes
2020-10-31 11:53:46 +01:00