Commit Graph

20 Commits

Author SHA1 Message Date
Xphalnos
5f918ef28d [Misc] Replaced const with constexpr where possible 2025-03-25 19:50:37 +01:00
Adrian
b7b707ddd2 [3PP] Uplift utfcpp 2025-02-01 23:43:49 +01:00
Gliniak
c3586bc165 [C++] Uplift version to C++20 2024-12-26 23:42:31 +01:00
Gliniak
ce9a82ccf8 Merge branch 'master' of https://github.com/xenia-project/xenia into canary_experimental 2023-09-01 18:20:29 +02:00
Adriano Martins
1887ea0795 [Base] Add missing #include <cstdint> to utf8.cc 2023-07-27 13:02:54 +03:00
chss95cs@gmail.com
cb85fe401c Huge set of performance improvements, combined with an architecture specific build and clang-cl users have reported absurd gains over master for some gains, in the range 50%-90%
But for normal msvc builds i would put it at around 30-50%
Added per-xexmodule caching of information per instruction, can be used to remember what code needs compiling at start up
Record what guest addresses wrote mmio and backpropagate that to future runs, eliminating dependence on exception trapping. this makes many games like h3 actually tolerable to run under a debugger
fixed a number of errors where temporaries were being passed by reference/pointer
Can now be compiled with clang-cl 14.0.1, requires -Werror off though and some other solution/project changes.
Added macros wrapping compiler extensions like noinline, forceinline, __expect, and cold.
Removed the "global lock" in guest code completely. It does not properly emulate the behavior of mfmsrd/mtmsr and it seriously cripples amd cpus. Removing this yielded around a 3x speedup in Halo Reach for me.
Disabled the microprofiler for now. The microprofiler has a huge performance cost associated with it. Developers can re-enable it in the base/profiling header if they really need it
Disable the trace writer in release builds. despite just returning after checking if the file was open the trace functions were consuming about 0.60% cpu time total
Add IsValidReg, GetRegisterInfo is a huge (about 45k) branching function and using that to check if a register was valid consumed a significant chunk of time
Optimized RingBuffer::ReadAndSwap and RingBuffer::read_count. This gave us the largest overall boost in performance. The memcpies were unnecessary and one of them was always a no-op
Added simplification rules for multiplicative patterns like (x+x), (x<<1)+x
For the most frequently called win32 functions i added code to call their underlying NT implementations, which lets us skip a lot of MS code we don't care about/isnt relevant to our usecases
^this can be toggled off in the platform_win header
handle indirect call true with constant function pointer, was occurring in h3
lookup host format swizzle in denser array
by default, don't check if a gpu register is unknown, instead just check if its out of range. controlled by a cvar
^looking up whether its known or not took approx 0.3% cpu time
Changed some things in /cpu to make the project UNITYBUILD friendly
The timer thread was spinning way too much and consuming a ton of cpu, changed it to use a blocking wait instead
tagged some conditions as XE_UNLIKELY/LIKELY based on profiler feedback (will only affect clang builds)
Shifted around some code in CommandProcessor::WriteRegister based on how frequently it was executed
added support for docdecaduple precision floating point so that we can represent our performance gains numerically
tons of other stuff im probably forgetting
2022-08-13 12:59:00 -07:00
Rick Gibbed
a3e5ea8575 [Base] Fix missing include in utf8.cc. 2022-05-27 17:56:14 -05:00
Conrad Kramer
2962a266b5 Fix xenia-core build on macOS 2021-10-25 00:48:53 +03:00
Gliniak
dcffc1a4d5 [Base] Remove multiple trailing separators in path 2021-06-25 23:07:57 -05:00
gibbed
2d2721ee7a [Base] Fix UTF-8 fnfp with trailing separator.
[Base] Fix off-by-one in UTF-8 find_name_from_path with trailing
separator.
2021-05-02 09:36:32 -05:00
gibbed
b7674f0bd8 [Base] Plain string variant of UTF-8 join_paths. 2021-05-02 08:18:22 -05:00
gibbed
46dfb3449c [Base] Dedupe new/old separators in UTF-8 fps.
[Base] Dedupe new/old separators in UTF-8 fix_path_separators.
2021-05-02 08:18:22 -05:00
gibbed
de3825274e [Base] Fix edge case in UTF-8 fnfp/fbp.
[Base] Fix edge case in UTF-8 find_name_from_path/find_base_path with
strings that consist of only a separator.
2021-05-02 08:18:22 -05:00
gibbed
dbd980150b [Base] Don't use reverse iterator for UTF-8.
[Base] Don't use reverse iterator for UTF-8. Fixes #1760.
2021-05-01 15:16:37 -05:00
gibbed
725f3ce17f [Base] Make utf8 arguments consistent.
[Base] Make utf8 arguments consistent. Fix "sep" to "separator".
2020-04-20 01:14:07 -05:00
gibbed
1f28ff5f18 [Base] Add opt arg to allow empty parts in split.
[Base] Add optional argument to allow empty parts in utf8::split.
2020-04-20 01:14:07 -05:00
gibbed
817d87a0a7 [Base] Join paths better.
[Base] Join paths better, so the first iteration isn't a join of an empty
string with the first path part.
2020-04-20 01:14:07 -05:00
gibbed
85dbb9d451 [Base] Fix canonicalize path for rooted paths. 2020-04-20 01:14:07 -05:00
gibbed
60681eeb23 [Base] Add xe::utf8::count. 2020-04-13 12:57:14 -05:00
gibbed
5bf0b34445 C++17ification.
C++17ification!

- Filesystem interaction now uses std::filesystem::path.
- Usage of const char*, std::string have been changed to
  std::string_view where appropriate.
- Usage of printf-style functions changed to use fmt.
2020-04-07 16:09:41 -05:00