100 Commits
Author SHA1 Message Date
mitaclaw 433c6ce0f2 GCC: Remedy NRVO Fails
Using the `-Wnrvo` flag introduced by GCC 14, I identified a few places where NRVO was clearly intended, but is fumbled.
2025-03-10 12:38:03 -07:00
mitaclaw e4efe011d7 Modernize std::max_element with ranges and projections 2025-03-09 13:26:39 -07:00
mitaclaw 258ec4f9cd Modernize std::lower_bound/upper_bound with ranges and projections 2025-03-09 13:26:38 -07:00
mitaclaw c9f589faa5 Modernize std::stable_sort with ranges and projections 2025-03-09 13:26:38 -07:00
mitaclaw 8b9f92a0af Modernize std::sort with ranges and projections
In PPCTables.cpp, the code is currently unused so I was unable to test it.

In CustomPipeline.cpp, a pointer to member function cannot be used due to 16.4.5.2.1 of the C++ Standard regarding "addressable functions". https://eel.is/c++draft/namespace.std#6

In Fs.cpp and DirectoryBlob.cpp, these examples used projections in a previous iteration of this commit, but no longer do. Still, they remain in this commit because the PR they would actually belong to is already merged.
2025-03-09 13:26:38 -07:00
mitaclaw 9f972db4b8 Modernize std::none_of with ranges and projections 2025-03-09 13:26:37 -07:00
mitaclaw 00e147c722 Simplify std::count_if with std::ranges::count and projections 2025-03-09 13:26:37 -07:00
mitaclaw 62b2b939b5 Simplify std::find_if with std::ranges::find and projections
In LabelMap.cpp, the code is currently unused so I was unable to test it.

In WiiUtils.cpp, the magic value `1u` was replaced by the constant value `DiscIO::PARTITION_UPDATE`.
2025-03-09 13:26:35 -07:00
mitaclaw 1e5e9219cd Common: Create Range Projections For std::pair 2025-03-09 13:19:41 -07:00
mitaclaw 527841f1df Simplify std::search with Common::ContainsSubrange 2025-01-01 09:52:03 -08:00
mitaclaw d92c68e1de Simplify std::find_if with Common::Contains 2025-01-01 09:52:03 -08:00
mitaclaw 110d32729e Simplify std::find with Common::Contains
In NandPaths.cpp, the `std::initializer_list<char>` of illegal characters has been turned into a `char[]` (similar to the one in GameList.cpp).

The reverse iteration in ResourcePack.cpp seemed to provide no benefits, and doing without it it seemed to have no ill effects.
2025-01-01 09:52:03 -08:00
mitaclaw 6f10acea3f Common: Create "Contains.h" Algorithm Header
The new `Common::Contains` and `Common::ContainsSubrange` function objects mirror C++23's `std::ranges::contains` and `std::ranges::contains_subrange`, respectively.
2025-01-01 09:52:01 -08:00
mitaclaw 2b0cd16c8c Modernize std::none_of with ranges
In JitRegCache.cpp, the lambda predicate were replaced by a pointer to member function because ranges algorithms are able to invoke those.

In ConvertDialog.cpp, the `std::mem_fn` helper was removed because ranges algorithms are able to handle pointers to member functions as predicates.

In BoundingBox.cpp, the lambda predicate was returning the bool element unchanged, so `std::identity` was a better fit.
2024-12-15 19:54:17 -08:00
mitaclaw 140252ffc0 Modernize std::any_of with ranges
In WiimoteReal.cpp, JitRegCache.cpp, lambda predicates were replaced by pointers to member functions because ranges algorithms are able invoke those.

In ConvertDialog.cpp, the `std::mem_fn` helper was removed because ranges algorithms are able to handle pointers to member functions as predicates.
2024-12-15 19:54:16 -08:00
mitaclaw 860e6cf5cb Modernize std::all_of with ranges
In DITSpecification.cpp, MaterialAsset.cpp, and ShaderAsset.cpp, lambda predicates were replaced by pointers to member functions because ranges algorithms are able invoke those.

In NetPlayClient.cpp, the non-trivial `NetPlay::Player` elements were being passed by value in `NetPlayClient::DoAllPlayersHaveGame()`. This has been fixed.

In WIABlob.cpp, the second example's predicate was returning the `std::optional` by value instead of implicitly converting it to a bool. This has been fixed.
2024-12-15 19:50:34 -08:00
mitaclaw 826e2bbf98 StringUtil: More Wrappers For <cctype>
`Common::IsLower(char)` was omitted as nothing needed it.
2024-12-15 19:50:34 -08:00
mitaclaw 97e2a43eac Branch Watch Tool: Refresh Context Menus OnEmulationStateChanged 2024-12-14 14:47:47 -08:00
mitaclaw 62d7166e6a GDBStub: Signal Breakpoint Changes To Host 2024-11-15 15:12:11 -08:00
mitaclaw 12f8b11452 MainWindow: Avoid Global System Accessor 2024-10-24 21:41:35 -07:00
mitaclaw 0371b74ebf JitBlockTableModel: Update For Symbols Too
Flushing efficiency down the drain because I wrote unsafe code to achieve it... I hope I can recover this.
2024-10-24 18:10:52 -07:00
mitaclaw 5a95951751 DolphinQt: Signal Host::JitCacheInvalidation in more places 2024-10-23 23:43:25 -07:00
mitaclaw 3d9c728910 Host: Rename JitCacheInvalidation
There are two hard problems in computer science...
2024-10-23 23:43:24 -07:00
mitaclaw c3bda2e875 Jit64: Make Furthest Exit Micro-Optimization More Correct 2024-10-19 18:19:17 -07:00
mitaclaw ff6845288e Simplify std::copy with fmt::format_to
Plus a few other memory allocation optimizations.
2024-10-19 12:18:16 -07:00
mitaclaw 4c064de235 Simplify std::copy with fmt::join 2024-10-19 12:18:16 -07:00
mitaclaw a035bd95e4 JITs: Revamp LogGeneratedX86
Debug logging of recompiled code is now a feature of all three JITs.
2024-10-19 02:30:45 -07:00
mitaclaw 9afd09598c DolphinQt: JIT Widget Refresh
Fulfilling a certain six-year-old todo.
2024-10-19 02:30:44 -07:00
mitaclaw ca9222a16b Move UICommon/Disassembler to Common/HostDisassembler
A preliminary commit for a cleaner diff and an easier review
2024-10-19 00:14:54 -07:00
mitaclaw a0987829e5 JITs: Add GetMemoryStats Function
Using the updated rangeset library
2024-10-19 00:14:54 -07:00
mitaclaw 46f8fe0eaf JITs: Add EraseSingleBlock Function 2024-10-19 00:14:54 -07:00
mitaclaw d26dc1ba32 JITs: Outline FreeRanges Function
As I have done for Cached Interpreter 2.0
2024-10-19 00:14:54 -07:00
mitaclaw c431cd2e1e CachedInterpreter: Callback Disassembler 2024-10-19 00:14:53 -07:00
mitaclaw 1f30d05027 Externals: Update rangeset
I added a new `get_stats` member function to the upstream for use in the JIT Widget Refresh.
2024-10-18 23:50:26 -07:00
mitaclaw ff9be97ea1 JitCache: Add WipeBlockProfilingData Function
Accessible from DolphinQt and Android.
2024-10-18 23:50:26 -07:00
mitaclaw 3d0d03b871 Modernize std::partition with ranges
The new return value is `std::ranges::subrange`.
2024-10-17 18:39:13 -07:00
mitaclaw 5f3a8ff0de Modernize std::unique with ranges
The new return value is `std::ranges::subrange`.
2024-10-17 18:39:12 -07:00
mitaclaw be0b13da97 Simplify std::remove with std::erase
`std::erase` is a replacement for the remove-erase idiom.

Changes to `OpenModeToAndroid` inadvertently revealed that the prior implementation had UB (potentially deleting the end iterator). This is now fixed.
2024-10-17 18:38:34 -07:00
mitaclaw 4fde0f2868 Modernize std::search with ranges
The new return value is `std::ranges::subrange`.
2024-10-17 18:38:34 -07:00
mitaclaw 0352f24a8e Modernize std::mismatch with ranges
The new return value is `std::ranges::mismatch_result`, an alias for the pair-like type `std::ranges::in_in_result`.
2024-10-17 18:38:34 -07:00
mitaclaw 203923b267 JitArm64_RegCache: Simplify std::find using ranges and projections 2024-10-11 12:09:00 -07:00
mitaclaw 8b1975ab18 GraphicsMod: Simplify std::sort using ranges and projections 2024-10-11 12:08:22 -07:00
mitaclaw 2edf6c6419 CoreTiming: Simplify algorithms using ranges and three-way comparison 2024-10-11 12:08:22 -07:00
mitaclaw e8d5fb89e4 C++20: Synthesize operator!= From operator==
The inequality operator is automatically generated by the compiler if `operator==` is defined.
2024-10-10 20:23:55 -07:00
mitaclaw d296b2613c Modernize std::adjacent_find with ranges 2024-10-10 15:28:11 -07:00
mitaclaw e4fb837f4b Modernize std::find_if with ranges
In BTEmu.cpp, `std::mem_fn` was not necessary for the predicate to compile.
2024-10-10 15:28:11 -07:00
mitaclaw 6ca7e2856b Modernize std::find with ranges 2024-10-10 15:28:11 -07:00
mitaclaw e572081ac3 Modernize std::min_element with ranges 2024-10-10 00:53:48 -07:00
mitaclaw c99a0c25e0 Modernize std::max_element with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 88a1a5b4f2 Modernize std::set_intersection with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 728663bdc0 Modernize std::binary_search with ranges
In VolumeVerifier.cpp, constructing a `std::string_view` of the volume's GameID is unnecessary, as `std::`(`ranges::`)`binary_search` supports heterogeneous lookup. The usage in GameFile.cpp is a perfect example.
2024-10-10 00:53:48 -07:00
mitaclaw 01d0bdf1bb Modernize std::is_sorted with ranges
In OGLConfig.cpp, `std::views::reverse` is used rather than sorting using `std::ranges::greater` in order to parallel other instances of reverse iteration in the function.
2024-10-10 00:53:48 -07:00
mitaclaw ebf7cebc32 Modernize std::sort with ranges 2024-10-10 00:53:48 -07:00
mitaclaw bcaf665d14 Modernize std::reverse_copy with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 78440ca335 Modernize std::reverse with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 9bd1dae41d Modernize std::fill with ranges
In DSPCore.cpp, there were two `std::fill` uses that could be simplified using `std::fill_n`. Due to their proximity with other `std::fill` algorithms being modernized with ranges, I chose to make these examples into the rare `std::ranges::fill_n`.
2024-10-10 00:53:48 -07:00
mitaclaw a7160c7b38 Modernize std::replace_if with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 0a80243a92 Modernize std::replace with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 72436a0d1f Modernize std::transform with ranges
In StringUtil.h, the lambdas wrapping `Common::ToLower(char)` and `Common::ToUpper(char)` were only necessary due to the function names being overloaded.
2024-10-10 00:53:48 -07:00
mitaclaw 7ce170f138 Modernize std::copy with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 249defa72b Modernize std::equal with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 4cc5e1972a Modernize std::count_if with ranges 2024-10-10 00:53:48 -07:00
mitaclaw c46060e298 Modernize std::count with ranges 2024-10-10 00:53:48 -07:00
mitaclaw ed5eb49d47 Modernize std::for_each with ranges 2024-10-10 00:53:48 -07:00
mitaclaw 519da8297c Simplify std::stable_sort with std::ranges::stable_partition 2024-10-09 17:26:10 -07:00
mitaclaw e6f93efac4 Simplify std::transform with std::ranges::transform_view 2024-10-09 17:26:10 -07:00
mitaclaw 809766a439 Simplify std::fill with std::array::fill 2024-10-09 17:26:10 -07:00
mitaclaw b6ec8ddc20 Simplify std::fill with std::fill_n 2024-10-07 15:34:56 -07:00
mitaclaw 7c96762f5f Simplify std::copy with std::copy_n
+ a surprise `std::memcpy` in VolumeVerifier.cpp.
2024-10-07 15:34:56 -07:00
mitaclaw c60accc96d VolumeVerifier: Promote DEBUG_ASSERT to static_assert
This runtime assertion was added before `std::is_sorted` became constexpr in the codebase.
2024-09-28 23:12:12 -07:00
mitaclaw 5f90673686 StringUtil: Remove JoinStrings
With 12 uses of `JoinStrings` in the codebase vs 36 uses of `fmt::join`, fmtlib's range adapter for string concatenation with delimiters is clearly the preferred option.
2024-09-22 21:09:36 -07:00
mitaclaw 508ccc2054 IniFile: Migrate Common::CaseInsensitiveLess to StringUtil
Migrating `Common::CaseInsensitiveLess` to StringUtil.h will hopefully discourage rolling one's own solution in the future for case-insensitive associative containers when this (quite robust!) solution already exists.

`Common::CaseInsensitiveStringCompare::IsEqual` was removed in favor of using the `Common::CaseInsensitiveEquals` function.

The `a.size() != b.size()` condition in `Common::CaseInsensitiveEquals` can be removed, since `std::ranges::equal` already checks this condition (confirmed in libc++).
2024-09-21 23:15:42 -07:00
mitaclaw 671958f141 GeckoCode: Remove Dead Code 2024-09-21 15:33:40 -07:00
mitaclaw 4f821f4332 BreakpointWidget: Update when Host::PPCSymbolsChanged
Otherwise, outdated symbol names will remain.
2024-09-20 18:39:20 -07:00
mitaclaw 7c2a39706e DolphinQt: A Ubiquitous Signal For When Breakpoints Change
There were three distinct mechanisms for signaling breakpoint changes in DolphinQt, and the wiring had room for improvement. The behavior of these signals has been consolidated into the new `Host::PPCBreakpointsChanged` signal, which can be emitted from anywhere in DolphinQt to properly update breakpoints everywhere in DolphinQt.

This improves a few things:
- For the `CodeViewWidget` and `MemoryViewWidget`, signals no longer need to propagate through the `CodeWidget` and `MemoryWidget` (respectively) to reach their destination (incoming or outgoing).
- For the `BreakpointWidget`, by self-triggering from its own signal, it no longer must manually call `Update()` after all of the emission sites.
- For the `BranchWatchDialog`, it now has one less thing it must go through the `CodeWidget` for, which is a plus.
2024-09-20 18:37:39 -07:00
mitaclaw e67e579b38 SI_Device: Remove Dead Config Code 2024-09-04 08:31:00 -07:00
mitaclaw 5a95c5dd14 CachedInterpreterEmitter: Fix std::memcpy UB
I wasn't aware that even with a size of zero, it's still not safe to pass a nullptr to `std::memcpy`. When `CachedInterpreterEmitter::PoisonCallback` is written, UB is happening.
2024-09-01 19:36:21 -07:00
mitaclaw 2a20e6e3df Branch Watch Tool: Toolbar Visiblity Menu
Adds the ability to hide unneeded features of the controls toolbar.
2024-08-31 15:37:34 -07:00
mitaclaw 8f76a32be4 Branch Watch Tool: New Conditional Branch Inspection Tools
Invert conditions, invert decrement checks, and make conditional branches unconditional. USnapshotMetadata in prior versions of Dolphin is forward-compatible with these changes (tested on x86_64).
2024-08-31 15:37:34 -07:00
mitaclaw 8bdfdc88b2 Branch Watch Tool: Ignore Apploader Branch Hits Concurrency Fix
Also removed worthless `Start` and `Pause` helpers from `Core::BranchWatch`.
2024-08-31 15:37:34 -07:00
mitaclaw e4500b5798 BranchWatchDialog: Improve Branch Was/Not Overwritten Buttons
Giving a warning if these are used when not usable is bad UX.
2024-08-31 15:37:34 -07:00
mitaclaw f5e7b45773 BranchWatchDialog: Listen For clicked Signal Rather Than pressed
The latter signal was used by mistake, see PR #8263.
2024-08-31 15:37:24 -07:00
mitaclaw 0c889c715d BranchWatchDialog: Const Correctness
m_index_list_temp should not be imagined as a member of `BranchWatchDialog`, so it is now mutable to allow for more const member functions.
2024-08-31 15:31:26 -07:00
mitaclaw 7ce703a4a8 BranchWatchDialog: Refactor Context Menus
Instead of one wildly complex context menu constructed lazily, now three manageable context menus are constructed proactively.
2024-08-31 15:11:25 -07:00
mitaclaw 107c08b77f BranchWatchDialog: Clean Up Object Parenting and Prefer Auto
Objects which get parented automatically by later processing now pass a nullptr to the constructor to make the intent clearer. Also fixed "true" and "false" not being translatable strings.
2024-08-31 15:11:25 -07:00
mitaclaw f9f0806022 BranchWatchDialog: Disconnect Slots When Hidden 2024-08-31 15:11:24 -07:00
mitaclaw ffaba26830 BranchWatchDialog: Refactor For LoadQSettings / SaveQSettings 2024-08-24 00:29:53 -07:00
mitaclaw 7b89730daa BranchWatchDialog: Defer Layout Construction When Possible
The main layout, tool controls layout, and misc. controls layout all don't need the QLayout constructed so early.
2024-08-24 00:29:52 -07:00
mitaclaw 9eb79f1d28 BranchWatchDialog: De-lambda-ize Constructor 2024-08-24 00:29:52 -07:00
mitaclaw b6c20b715a BranchWatch: Don't Save Irrelevant Hits In Reduction Phase 2024-08-24 00:29:52 -07:00
mitaclaw 76a998ecf9 TypeUtils: Remove Common::Fill
This temporary solution is no longer needed.
2024-08-22 17:29:26 -07:00
mitaclaw 6ffd71ffae BitUtils: Constexpr BitCastToArray, Remove BitCastFromArray
`std::bit_cast` participates in overload resolution only if `sizeof(To) == sizeof(From)` and both `To` and `From` are *TriviallyCopyable* types, so the static assertions here can be removed. `[[nodiscard]]` was added as well.
2024-08-16 12:21:49 -07:00
mitaclaw de1c47a701 Misc. Container Find Changes 2024-08-15 14:25:51 -07:00
mitaclaw 9fa4eb9aab Use 'contains' method 2024-08-15 14:20:16 -07:00
mitaclaw 9c5cd817e3 CMakeLists: Fix LLVM Usage In UICommon
This compile definition was removed in 68cbd2640d because it was complicated by changes in 50dc0ffbce. Thus, the LLVM disassembler would never be used in UICommon's Disassembler class.
2024-08-08 10:14:22 -07:00
mitaclaw 8e546e79aa DolphinQT: Listen For clicked Signal Rather Than pressed
The latter signal was likely used by mistake, e.g. https://github.com/dolphin-emu/dolphin/pull/8263.
2024-08-08 08:09:38 -07:00
mitaclaw e0e0c074ef JITs: Consistently Use Trivial IsDebuggingEnabled Getter 2024-08-07 04:44:45 -07:00
mitaclaw cde64b6a3d CachedInterpreter: Software JIT Profiling Support 2024-08-02 06:00:56 -07:00
mitaclaw 4f0954dd44 MainAndroid: Thread Correctness In WriteJitBlockLogDump
In a race condition, the core could shut down between the `JitInterface::GetCore` nullptr check and the `JitInterface::JitBlockLogDump` call which constructs a `CPUThreadGuard`. In this scenario, nothing horrible happens—`JitBlockLogDump` also checks for a nullptr—but it would be a failure to display the correct feedback to the user.
2024-07-28 16:10:59 -07:00
mitaclaw 7cafd78ffc MainAndroid: Use JNI_FALSE instead of static_cast<jboolean>(false) 2024-07-27 20:22:25 -07:00