Commit Graph
32924 Commits
Author SHA1 Message Date
JosJuiceandGitHub b6e062f2e3 Merge pull request #13689 from JosJuice/lock-core-any-thread
Core: Let any thread call previously host-thread-only functions
2025-11-16 18:35:17 +01:00
JosJuiceandGitHub 3ff4985120 Merge pull request #12134 from JosJuice/jit-constprop
Jit: Extract immediate handling to separate ConstantPropagation class
2025-11-16 18:34:49 +01:00
JosJuiceandGitHub 91c3a58889 Merge pull request #13922 from TryTwo/imgui_add_default_font
OSD/Imgui: Add a better default font
2025-11-16 13:58:18 +01:00
JosJuice b9d9f36ce5 JitArm64: Replace dirty flag and partially replace RegType enum
Like Jit64, JitArm64 now keeps track of the location of a guest register
using three booleans: Whether it is in ppcState, whether it is in a host
register, and whether it is a known immediate. The RegType enum remains
only for the purpose of keeping track of what format FPRs are stored in
in host registers.
2025-11-16 09:52:09 +01:00
JosJuice 2995aa5be4 JitArm64: Don't store immediate values in register cache
Like the previous commit did for Jit64, JitArm64 can now handle the
combination of a value simultaneously being in a host register and being
a known immediate.

Unlike with Jit64, I've put the codegen-affecting changes in this commit
and the move away from the RegType enum in a follow-up commit. This is
in part because the design of JitArm64 made it easy to implement the
codegen-affecting changes without combining it with a big bang
refactorization, and in part because we need to keep RegType around for
keeping track of different float formats in Arm64FPRCache, complicating
the refactorization a bit.
2025-11-16 09:52:09 +01:00
JosJuice 817bb9d94c Jit64: Don't store immediate values in register cache
They're now stored in ConstantPropagation instead.

I've also removed the LocationType enum. The location of each guest
register is now tracked using three booleans: Whether it is in ppcState,
whether it is in a host register, and whether it is a known immediate.
The first two of these booleans are stored in the register cache, and
the last one is stored in ConstantPropagation. This new model allows us
to handle the combination of a value simultaneously being in a host
register and being a known immediate. It also keeps track of which
registers are dirty, which was previously kept track of in X64CachedReg.

The old model maps to the new model as follows:

                                default    host_reg    immediate

Default                         true       false       false
Discarded                       false      false       false
Bound                           (!dirty)   true        false
Immediate                       false      false       true
SpeculativeImmediate            true       false       true
[previously unrepresentable]    (!dirty)   true        true
2025-11-16 09:52:09 +01:00
JosJuice 4114a0b506 Jit: Update constant propagation during instruction
This commit makes the JIT set/clear the individual registers of
ConstantPropagation immediately instead of at the end of the
instruction. This is needed to prevent Jit64::ComputeRC, which reads
from a register written to earlier during the same instruction, from
reading back stale register values from ConstantPropagation in the next
commit.
2025-11-16 09:52:07 +01:00
JosJuice 502b48a690 JitArm64: Make FlushRegisters unlock condition more robust
To find out whether a host register needs to be unlocked, FlushRegisters
checks if the guest register is known to be a zero immediate. This works
right now, but it will stop working correctly once we gain the ability
to have a guest register be a known immediate and be in a host register
at the same time, because a register that's known to be a zero immediate
may have had a host register allocated prior to the call to
FlushRegisters. Instead, we should check whether the register is
RegType::Register after we're done calling BindForRead.
2025-11-16 09:50:31 +01:00
JosJuice 7065b93ba5 JitArm64: Pass index to more Arm64GPRCache functions
This refactorization is needed for upcoming commits.
2025-11-16 09:50:31 +01:00
JosJuice 502317a485 Jit: Move rlwimix to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice bac911aac4 Jit: Move srawx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice c136fd9807 Jit: Move srwx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice bb645e6cbb Jit: Move slwx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice 45760841b2 Jit: Move divwx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice fc6c278007 Jit: Move divwux to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice c7d8a0b276 Jit: Move subfic to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice 204a8fbd53 Jit: Move subfx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice 2134991be8 Jit: Move multiplication by 0 optimization to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice 7456ba3d3d Jit: Move mullwx, mulhwx, mulhwux to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice b469981c72 Jit: Move mulli to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice 1eea610375 Jit: Move addicx to ConstantPropagation
Note: Jit64 didn't support immediate handling for addic before.
2025-11-16 09:50:31 +01:00
JosJuice a3797778ff Jit: Move srawix to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice 1a22bda0a7 Jit: Move rlwinmx and rlwnmx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice 4c8995fae5 Jit: Move negx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice 92a5a46b2c Jit: Move cntlzwx to ConstantPropagation 2025-11-16 09:50:31 +01:00