David Carlier
266c4209c4
VM: FreeBSD c_madv_no_dump/dump constants support.
2021-04-17 20:47:36 +03:00
Eladash
67e2e154fa
Replace simple_type with std::common_type
2021-04-17 10:27:55 +03:00
Nekotekina
408ffd3d2c
fxo: add debug name to the typeinfo
2021-04-15 20:01:29 +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
Megamouse
a16d8ba3ea
More random changes
2021-04-11 14:01:51 +03:00
Nekotekina
8c5f2b249c
shared_ptr.hpp: further fixes
...
Improved is_same_ptr() trait (added third "maybe" category).
Fallback to pseudo-runtime check in certain cases (if "maybe").
Fix single_ptr moving assignment operator.
2021-04-09 10:26:13 +03:00
Nekotekina
332c512eed
shared_ptr.hpp: minor optimization (GCC hotfix)
...
Use thread_local for dummy objects (doesn't work on MSVC).
Couldn't find better way to remove fake static objects completely.
In a sense that they don't appear in object files.
2021-04-09 10:26:13 +03:00
Nekotekina
94c62b1eec
shared_ptr.hpp: improve is_same_ptr<> trait
...
Don't always return true on MSVC.
2021-04-08 10:29:47 +03:00
Nekotekina
963d150e93
Fix some -Weffc++ warnings (part 2)
2021-04-03 21:54:15 +03:00
Nekotekina
2212a131ef
Fix some -Weffc++ warnings (part 1)
2021-03-31 11:27:09 +03:00
Nekotekina
729757b1dd
atomic.hpp: allow raw notify_all by pointer
2021-03-23 20:58:42 +03:00
Nekotekina
393f9d329d
atomic.cpp: allow non-standard sizes in atomic wait (>16)
2021-03-23 20:52:56 +03:00
Nekotekina
820390b7ed
atomic.cpp: remove raw_notify and simplify internal logic
...
Also permit zero size in waiters.
2021-03-23 20:19:10 +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
03332c340d
Implement utils::bless (pointer cast)
...
Tries to workaround strict aliasing troubles.
Don't confuse with std::bless which works differently.
2021-03-10 16:02:00 +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
ded828dfc9
sysinfo.cpp: Implement utils::main_tid (main thread id)
...
Careful.
2021-03-06 23:10:31 +03:00
Nekotekina
87af905018
Enable -Wunused-parameter
2021-03-06 18:07:08 +03:00
Eladash
228988ca2b
Fix utils::get_firmware_version()
...
* Do not crash on invalid file contents.
* Do not crash on unexpected file.open() error.
2021-03-06 14:53:40 +03:00
Nekotekina
e6a3b59229
endian.hpp: simplify be_t/le_t constructors
2021-03-03 17:37:51 +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
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
Nekotekina
8a9320c4ef
auto_typemap.hpp: reduce indirection
...
Implement is_init() method.
Implement optional Size template arg for further optimization.
2021-03-02 16:08:14 +03:00
Nekotekina
5cc9bd7702
typeindices.hpp: upgrade with size and align info
...
This allows contiguous allocation (as in an aggregate).
2021-03-02 16:08:14 +03:00
Nekotekina
aa7e2376ec
shared_ptr.hpp: minor fixup for arrays
2021-03-02 16:08:14 +03:00
Nekotekina
71e16bfac3
shared_ptr.hpp: minor fixup
2021-03-01 00:28:28 +03:00
Nekotekina
b7c579adf9
Tentative fix for -Wattributes
...
These warnings enabled conditionally for GCC 10.1+.
2021-03-01 00:22:32 +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
Megamouse
a4d4ab1df9
remove unused variable
2021-02-28 18:48:34 +03:00
Megamouse
e940632d93
Fix Nan in cpu_stats::get_usage
...
And apply same logic to linux and windows
2021-02-25 13:08:27 +03:00
Nekotekina
cd01a1eb09
Move CPUStats.h -> util/cpu_stats.cpp
2021-02-23 18:24:50 +03:00
Nekotekina
ad1027455a
Fix minor inconsistency in utils::memory_reset (Linux)
2021-02-22 13:00:01 +03:00
Nekotekina
9dc238187f
Simplify utils::align() a bit
...
std::is_unsigned implies std::is_integral I believe.
2021-02-22 13:00:01 +03:00
Eladash
b86ec2ffcf
Fix potential overflows in utils::aligned_div, utils::rounded_div
2021-02-19 16:10:03 +03:00
Nekotekina
e76d8eb046
Fix -Wstring-aliasing (gcc)
2021-02-18 19:38:22 +03:00
Nekotekina
038148bf06
Fix almost all GCC warnings
2021-02-17 22:59:04 +03:00
Nekotekina
8e6e57de86
Enable -Wunused-function warning
2021-02-15 14:39:53 +03:00
Nekotekina
4f8cac731b
Fix SAFE_BUFFERS attribute for GCC
2021-02-09 12:33:50 +03:00
Eladash
d3bc96a201
Fix minor issue with usage of STL thread::hardware_concurrency()
2021-01-29 18:23:29 +03:00
Nekotekina
67dd6754a6
Seal cereal includes in util/cereal.cpp
2021-01-28 10:48:53 +03:00
Nekotekina
ee288340b0
Implement thread_ctrl::scoped_priority
...
RAII priority control (+1, or -1)
2021-01-25 21:49:16 +03:00
Nekotekina
caa83d20f7
vm_native.cpp: implement shm::try_map
...
Treats addr as a hint, emulating windows behaviour.
2021-01-25 16:55:19 +03:00
kd-11
ead180aa60
win32: Be a bit more optimistic with allocated ranges; we get contiguous ranges more often than not
2021-01-24 14:24:55 +03:00
Nekotekina
0ac68def49
vm_native.cpp: minor compilation fix
2021-01-17 15:14:11 +03:00
Nekotekina
4ed76a15ff
Use different approach in shm::unmap_critical (Linux)
...
For now, set protection to PROT_NONE.
Attempt to address #9609
2021-01-15 20:11:09 +03:00
Nekotekina
b5837d1271
Memory: use MADV_DONTDUMP if available (Linux)
...
Also refactor other madvise() usage
2021-01-15 19:54:41 +03:00
Nekotekina
ea916fd7e1
Memory: fix critical bug in shm::unmap_critical (Linux)
...
It was leaving holes in reserved areas.
Windows is unaffected.
2021-01-14 18:04:29 +03:00
Eladash
923fcc3b3d
utils::shm: Hotfix after #9578
2021-01-12 23:57:36 +03:00
Eladash
c50b9bc4b4
utils::shm: Make map_self() atomic ( #9578 )
2021-01-12 19:53:18 +03:00
Nekotekina
db8e6fe7a7
Enable -Wunused-variable
2021-01-12 14:34:14 +03:00
Nekotekina
673e84920b
fixed_typemap.hpp: remove useless reporters
2021-01-05 16:16:01 +03:00
kd-11
cbe0000d23
Improved Zen chip detection
2021-01-03 19:31:18 +03:00
Nekotekina
8a5620592b
Implement util/fifo_mutex.hpp
...
Prototype. Uses 2 bytes.
Added minor fix to slow_mutex.hpp as well.
2020-12-31 20:07:50 +03:00
Nekotekina
35322b5d14
Remove deprecated _bit accessor from v128
...
Complicated (a lot of code), confusing (ambiguous)
2020-12-29 21:04:28 +03:00
Nekotekina
6b96807112
Reimplement utils::popcnt64
...
Implement utils::popcnt128
2020-12-29 15:28:02 +03:00
JohnHolmesII
02b684b810
Warnings: Warnings use kebab case, Mr. Kot
2020-12-29 14:17:34 +03:00
Nekotekina
e3dec420a2
vm_native.cpp: conditionally define c_madv_free
2020-12-27 12:19:50 +03:00
Nekotekina
1e32311a65
Use MAP_NORESERVE when available in mmap (Linux)
...
Used in: memory_reserve, memory_decommit (vm_native.cpp)
2020-12-27 10:20:42 +03:00
Marin Baron
92e5bb88e8
Remove std typeinfo
2020-12-27 00:30:16 +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
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
Jan Beich
96bde3df81
atomic.hpp: revert Clang < 11 workaround for u128
2020-12-22 09:00:34 +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
360c4d1554
Simplify f16 type
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
c16fb61bea
fixed_typemap.hpp: Fix assignment operator for g_ptr
...
Maybe RPCS3 hangs will finally be gone.
2020-12-17 16:47:25 +03:00
Nekotekina
ca5f0444bf
shared_ptr.hpp: add wait support for atomic_ptr<>
...
As well as default mask and value transformation function overload.
2020-12-15 12:52:21 +03:00
Nekotekina
4a883ba6ea
atomic.hpp: use SFINAE for waitable atomic detection
...
Add default_mask<> variable.
Refactor get_value<>().
2020-12-15 12:50:44 +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
09d293592e
shared_ptr.hpp: fix is_same_ptr<>() trait
...
Implemented as constexpr function.
2020-12-13 15:39:36 +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
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
33c3977036
endian.hpp: minor simplification
...
And stop pretending...
2020-12-11 22:00:26 +03:00
Nekotekina
aa3aef4beb
std::chrono cleanup: always use steady_clock
2020-12-11 19:01:56 +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
Nekotekina
062c605eb1
atomic.hpp: fixup (rsp addressing)
2020-12-08 08:51:27 +03:00
RipleyTom
51dcb4a79d
Remove bom from .hpp files
2020-12-07 20:03:44 +03:00
Nekotekina
24e4e329ed
atomic.hpp: add atomic_t<bool> specialization
...
May be required in future, plus adds/hides some methods.
2020-12-07 17:13:12 +03:00
Nekotekina
b16cc618b5
atomic.hpp: add some features and optimizations
...
Add atomic_t<>::observe() (relaxed load)
Add atomic_fence_XXX() (barrier functions)
Get rid of MFENCE instruction, replace with no-op LOCK OR on stack.
Remove <atomic> dependence from stdafx.h and relevant headers.
2020-12-07 17:13:12 +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
RipleyTom
af8c661a64
Remove BOM markers
2020-12-06 15:30:12 +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
983439076b
shared_ptr.hpp: fixups and updates
...
Fix atomic_ptr load() edge case.
Implement atomic_ptr::peek_op() to make possible to reduce load() overhead.
Implement atomic_ptr::compare_exchange() and friends.
Implement null_ptr constant, remove nullptr_t assignment/construction.
2020-12-04 14:10:53 +03:00
Nekotekina
019f566239
atomic.cpp: more phase splitting in notify_all()
2020-12-04 14:10:53 +03:00
Nekotekina
332410d20b
shared_ptr.hpp: improve atomic_ptr methods
2020-12-04 14:10:53 +03:00
Nekotekina
13a0b88755
atomic.cpp: improve hashtable access
...
Simplified, tried to use all ptr bits.
Try to prevent self-collisions (bug).
Hashtable size doubled (to 8 MiB).
2020-12-01 10:19:31 +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
872655369a
shared_ptr.hpp: fix critical bugs
...
Fix array initialization.
Fix reference counting.
Fix offset to refctr.
Add some features.
2020-11-27 14:32:41 +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
bd90e3e37f
atomic.cpp: shrink and simplify main hashtable
...
Reduce collision detection to 1 or 0 for now.
I think it should be offloaded to notifiers.
2020-11-26 20:11:26 +03:00
Nekotekina
8b6d615aa6
atomic.hpp: remove/deprecate incomplete notify features
...
Notification with "phantom value" could be useful in theory.
As an alternative way of sending signal from the notifier.
But current implementation is just useless.
Also fixed slow_mutex (not used anywhere).
2020-11-26 06:31:36 +03:00
Nekotekina
2b674d4d8c
utils::shm: allow 2M hugepages on demand
2020-11-25 10:41:17 +03:00
Nekotekina
487b572aa6
Linux: remove assertions on MADV_HUGEPAGE
...
It's a hint and is allowed to fail.
2020-11-25 10:41:17 +03:00
Nekotekina
600c0ea5ba
atomic.cpp: fix windows/std path
...
Always check condition after rearming internal semaphore.
2020-11-25 10:41:17 +03:00
Nekotekina
00e64920c8
Implement "slow mutex" without spin-waiting.
...
Benefits: only 1 byte.
Testing atomic wait.
2020-11-25 10:41:17 +03:00
Nekotekina
d8e9382573
asm.hpp: constexpr refactoring
...
Removed asm (what an irony), made many functions constexpr.
Removed some unused function, readding them should be trivial.
2020-11-24 13:20:40 +03:00
Nekotekina
ab248e170c
vm_native.cpp: add MADV_HUGEPAGE
...
It enables Transparend Huge Pages for some regions on Linux.
Although it can't be actively useful, it seems to do something.
Maybe it's even harmful for recompilers.
2020-11-24 12:31:11 +03:00
Nekotekina
27097cbcfe
atomic.hpp: alter atomic_storage<>::store a bit
...
Always fallback to exchange. May improve codegen on gcc.
2020-11-24 12:31:11 +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
14fa96fdef
atomic.cpp: don't use empty notify callback
...
Instead, allow setting it to null and check for null.
Similar could be done for wait cb, but it's set for all named threads.
2020-11-24 01:09:04 +03:00
Nekotekina
16cc88dd0e
atomic.hpp: fix atomic_wait::list regression
...
Typo-regressions. Also improve static asserts.
2020-11-23 09:26:25 +03:00
Nekotekina
280f5f0b54
atomic.hpp: redefine op::ne to actually mean "not equal"
...
WTF is "native endianness", it's native by default.
2020-11-23 09:24:16 +03:00
Nekotekina
d70ab11477
atomic.cpp: remove redundant constexpr
...
Static initialization is all-zeros anyway.
But constexpr was killing my intellisense.
And probably also affected compile time.
Also make some internal structures hidden ("static").
2020-11-22 12:07:49 +03:00
Nekotekina
e89a568765
Attempt to fix Emu.Quit()
...
There was some kind of "initialization order fiasco" of g_fxo.
Not only should it be used after main, but also destroyed before exit.
2020-11-21 18:27:16 +03:00
Nekotekina
60cff6f3d4
Attempt to fix #9271
2020-11-21 07:09:48 +03:00
Nekotekina
5f010c2f4c
atomic.cpp: optimize "cond" allocation with TLS
...
Billions of events can reduce to thousands, saving CPU time a few s.
Only 4 slots are available (arbitrarily), and only 1 is usually used.
Other slots are used only for waiting on multiple atomics.
2020-11-20 19:13:22 +03:00
Nekotekina
6c18e00977
atomic.cpp: use deterministic "cond" allocation
...
Takes ~80 ns instead of ~40 ns, same about deallocation.
Loops don't exist here, only 4-level semaphore tree.
Worst case only happens with concurrence, not from looping.
This optimization is not really necessary at current state of RPCS3.
This is more like to test C++ compilers and MSVC u128 implementation.
2020-11-20 15:04:17 +03:00
Nekotekina
72ac1aa537
atomic.cpp: use some actual hash for hashtable (std::minstd_rand)
...
Should only take about 5ns for initialization.
Should also make collisions almost impossible.
I also suspect I fixed some bad bug in process...
2020-11-20 15:04:17 +03:00
Nekotekina
3dd48a24ce
atomic.cpp: remove tiny redundancy
2020-11-17 15:22:04 +03:00
Nekotekina
984e97cbdc
Potential fix for Linux compilation
2020-11-17 15:22:04 +03:00
Nekotekina
333fe9a561
atomic.cpp: fix notification on windows
2020-11-15 04:40:44 +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
3ac819ee70
atomic.cpp: fix waiting on multiple variables
...
Silly bugs are so silly...
2020-11-14 17:25:02 +03:00
Nekotekina
00f877e812
atomic.cpp: fix rare overload scenario
...
If slot allocation fails, increase reference counter in every slot.
This prevents search routine from "losing" some slots.
2020-11-14 13:56:23 +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
e48f160a29
atomic.cpp: continuation of fixing all-ones masks
...
Also added missing const noexcept.
2020-11-13 12:40:02 +03:00
Nekotekina
cfda4d0ade
atomic.cpp: optimize raw_notify() for unspecified pointer mode
...
Remove unnecessary optimization from cond_alloc().
Optimistic case was absolutely dominating anyway.
Although the whole function is a dirty hack.
Now scanning through all threads is faster.
2020-11-13 07:05:33 +03:00
Nekotekina
3888b0429c
atomic.cpp: print some stats on stop
2020-11-12 05:52:22 +03:00
Nekotekina
70761a4ef0
atomic.cpp: fix notification bug from few commits before
...
Make sure forced notification ignores mask comparison.
Also fix masks provided by smaller types to correct ones.
2020-11-12 05:01:44 +03:00
Nekotekina
e37df998e9
atomic.cpp: minor optimization
...
Silly MSVC emits unnecessary initialize-on-first-use code guards.
Didn't check other compiler. But workaround just works anyway.
2020-11-12 03:41:19 +03:00
Nekotekina
c30cdfb3a7
atomic.cpp: merge more atomic variables for simplicity
...
Compress 16-bit ref counter and two 48+64 bit slot allocators.
This allowed to remove some weird unnecessary logic paths.
Adjust hashtable size to keep it the same.
2020-11-12 03:39:05 +03:00
Nekotekina
350b704cd7
atomic.cpp: combine two atomics (ref ctr and wait ptr)
...
Should fit into cache line perfectly.
Also makes ptr check more robust.
2020-11-12 01:06:12 +03:00
Nekotekina
ad013d59f4
atomic.cpp: don't load actual memory on empty mask
...
It's not an optimization. It just allows some tricks safely.
2020-11-11 23:59:09 +03:00
Nekotekina
d391133524
atomic.cpp: minor notification improvement
...
Check mask before locking the reference.
Can help to not bother non-eligible waiters.
2020-11-11 23:51:41 +03:00
Nekotekina
4b823469f7
atomic.cpp: restore notify_all() behaviour
...
Restore batch notification with non-blocking attempts.
2020-11-11 22:43:13 +03:00
Nekotekina
7cd1e767be
atomic.cpp: implement some atomic wait operations.
...
Instead of plain waiting while equal to some value,
it can be something like less, or greater, or even bitcount.
But it's a draft and untested. Hopefully doesn't break anything.
2020-11-11 20:46:37 +03:00
Nekotekina
c047ab6147
atomic.cpp: waitable atomics got brutally rewritten
...
Hashtable increased and flatten, tree-alike extensions removed.
Some things simplified, so it can actually decrease perf a bit.
But most platforms shouldn't be affected.
Removed limit of 56 waiters per pointer.
Real limit now is about 65535.
2020-11-11 05:35:27 +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
dcbe8ef5f4
Import VirtualAlloc2 if available (Win10+)
...
Import MapViewOfFile3 as well.
Unused, this crap is tricky.
2020-11-10 03:04:38 +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
e98eb4659e
Implement utils::memory_lock
2020-11-09 22:57:36 +03:00
Nekotekina
d1988d384c
vm: remove unnecessary memset() on stop
2020-11-09 22:57:36 +03:00
Nekotekina
b05d12df0e
Hotfix for shm->map_self()
...
Make sure mmap returns 64K-aligned results, as on Windows.
2020-11-08 22:15:59 +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
fd7ea82965
atomic.cpp: fix 3-arg notify functions
...
Third arg forces comparison with itself, and possibly forced wakeup.
2020-11-07 19:18:14 +03: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