Alyssa Rosenzweig
4a2dee873d
OpcodeDispatcher: use ArithRef for small rotates
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
589906e6e6
OpcodeDispatcher: generalize AF on constants optimization
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
f0fcf6d9e6
OpcodeDispatcher: optimize SVE vmovmskpd
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
1591ced5a7
OpcodeDispatcher: use ArithRef for ADC/SBB flags
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
0d235d63d0
OpcodeDispatcher: use ArithRef for bit tests
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
820d5c1447
OpcodeDispatcher: use ArithRef for rotates
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
8093e8f5f1
OpcodeDispatcher: optimize LoadDir
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
802857e411
OpcodeDispatcher: add ArithRef helpers
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
bf3a1839a2
OpcodeDispatcher: transform DF ourselves
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
ad7844d7da
OpcodeDispatcher: do not generate useless VMov
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Tony Wasserka
a792dd0703
CPUBackend: Clean up CodeBuffer size limits
2025-06-01 22:45:50 +02:00
Tony Wasserka
a9a6a645bf
Arm64Emitter: Disable PC-relative constant encoding
...
This no longer works since the JIT output is now relocated before execution.
2025-06-01 22:45:50 +02:00
Tony Wasserka
7c93becd5f
JIT: Increase estimate for CodeBuffer space use
...
The previous bound was exceeded during Steam startup before.
2025-06-01 22:45:50 +02:00
Tony Wasserka
4bbaef58e9
JIT: Re-enable parallel compilation by compiling to a temporary buffer
2025-06-01 22:45:50 +02:00
Tony Wasserka
95791a985a
Core: Minimize the time CodeBufferWriteMutex is held
2025-06-01 22:45:50 +02:00
Tony Wasserka
0dfefe9730
Core: Re-check LookupCache before running compiler backend
...
This further reduces lock contention by skipping the backend phase in case
another thread raced the active one for the same block.
2025-06-01 22:45:49 +02:00
Tony Wasserka
8481c797df
FEXCore/JIT: Extend LookupCache lock to all of ExitFunctionLink
2025-06-01 22:44:49 +02:00
Tony Wasserka
a503b5e20b
Rename CodeBufferManager reference
2025-06-01 22:44:49 +02:00
Tony Wasserka
4078840ef1
Core: Reduce JIT time by sharing CodeBuffers between threads
...
This is changes the interface of CodeBuffer to that of a partially persistent
data structure based on reference counting:
- Exactly one CodeBuffer is now designated as "active", which means data can
be *appended* to it
- Lossy modifications to the active CodeBuffer will not invalidate any data
in use by other threads, which enables save sharing across threads
- Instead, such lossy modifications trigger a new "version" of the data in
the modifying thread. Old versions of the CodeBuffer persist as read-only
data for use by the other threads.
- The other threads can update their version of the CodeBuffer. This will
decrease the reference count and eventually trigger deallocation of the
old version
2025-06-01 22:44:49 +02:00
Tony Wasserka
ab51958b26
Move AllocateNewCodeBuffer from CPUBackend to a new CodeBufferManager interface
2025-06-01 22:42:55 +02:00
Tony Wasserka
3376587b6a
CPUBackend: Manage CodeBuffers using shared_ptr
...
This is required for sharing CodeBuffers between threads anyway, but it also
allows use of the constructor/destructor to manage memory automatically.
2025-06-01 22:42:55 +02:00
Tony Wasserka
6681d7dcf9
LookupCache: Split L3 cache into a dedicated interface
...
This data isn't really a cache, since the JIT is directly responsible of
writing its contents. Instead it be considered the source to populate the
L1/L2 caches from.
Furthermore, splitting off this data allows it to be shared across threads
in the future without affecting L1/L2 caches.
2025-06-01 22:42:55 +02:00
Tony Wasserka
34224481c6
LookupCache: Prefer empty() over a size check
2025-06-01 22:42:55 +02:00
Ryan Houdek
cdea8d7f74
Merge pull request #4593 from alyssarosenzweig/ici/zeroing-sub-regs
...
InstructionCountCI: add more cases for mov 0/~0
2025-05-29 12:26:15 -07:00
Ryan Houdek
ef6dc3d802
Merge pull request #4592 from alyssarosenzweig/opt/x87-tag
...
OpcodeDispatcher: optimize X87FTWTag
2025-05-29 12:26:04 -07:00
Alyssa Rosenzweig
0fbe69ebcf
OpcodeDispatcher: optimize xor-with-self flags
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-28 13:53:38 -04:00
Alyssa Rosenzweig
ece817c691
OpcodeDispatcher: optimize logical flags
...
seems to be strictly better.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-28 13:34:50 -04:00
Alyssa Rosenzweig
3fbc8204b7
OpcodeDispatcher: clean up logical flags
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-28 13:28:31 -04:00
Alyssa Rosenzweig
b8dd5d95b0
OpcodeDispatcher: optimize X87FTWTag
...
using bit twiddling tricks :-)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-28 13:13:16 -04:00
Ryan Houdek
7cd52febc2
FEXCore/CPUID: Remove warning
...
This is currently only used on win32 builds because Linux doesn't
understand TPIDRRO.
2025-05-28 09:28:41 -07:00
Alyssa Rosenzweig
6927c7577a
RegisterAllocationPass: delete trivial instructions
...
lots of instructions only exist for RA, so RA can garbage collect them before
post-RA passes (including the JIT) deals with them. this simplifies our life
now, and makes post-RA passes a LOT simpler for little cost.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-26 15:52:23 -04:00
Alyssa Rosenzweig
61ae53cc03
IR: add paired PushTwo/PopTwo helpers
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-26 15:52:23 -04:00
Alyssa Rosenzweig
0e67f30103
OpcodeDispatcher: make Push do the right thing and use it
...
this both optimizes and bug-fixes pusha while deleting a snotton of code.
Closes: https://github.com/FEX-Emu/FEX/issues/4589
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-26 15:52:23 -04:00
Ryan Houdek
dc9f8aa855
Merge pull request #4580 from alyssarosenzweig/ir/inline-ra
...
IR: Inline registers into the IR
2025-05-26 09:44:51 -07:00
StanfordZhang
23cda2c961
Update Arm64Emitter.cpp
...
fix callee saved floating-point arguments issue
2025-05-23 22:14:37 +08:00
Alyssa Rosenzweig
65ee1fafa8
IR: drop RegisterAllocationData
...
This sideband is now unused, registers are encoded directly in the IR. So we can
garbage collect all this code for quite some savings.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
49f8332c5b
JIT: use registers directly from the IR
...
This is the flag day change from the series, using all the new shiny
infrastructre we added.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
afce108ed7
JIT: make almost all the DEF_OPs common
...
this deduplicates a bunch of #defines, letting us change the signature easier.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
30f3b545af
RegisterAllocationPass: use Header spill slots instead
...
Removes even more RAData dependence.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
bf1597920c
IR: use post-RA flag
...
rather than implicitly depending on the RA data.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
a01e29ac99
IR: extend the IR header with RA info
...
Beyond the actual registers allocated, there are two pieces of sideband data we
store in the RAData object:
* # of spill slots (explicitly)
* whether RA has run (implicitly by the existence of RAData)
We want to get rid of RAData, so we'll move these to the header.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
c7797d56c9
IR: don't use GetOpSize in ExitFunction
...
nothing else does this, and it complicates upcoming refactor to move away from
IR builder helpers doing IR dereferencing.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-15 14:51:11 -04:00
Alyssa Rosenzweig
dfd1aedae5
JIT: use .ID() even less
...
oops, missed a "/g" with th sed.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-14 16:23:22 -04:00
Alyssa Rosenzweig
ecc6fea54e
JIT: stop using .ID() pattern
...
sed -ie 's/.ID()//' *
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-14 15:46:32 -04:00
Alyssa Rosenzweig
99446da7c1
JIT: add Reg helpers taking OrderedNodeWrappers
...
more ergonomic and will give us freedom to migrate things easier soon.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-14 15:43:20 -04:00
Tony Wasserka
39a5c2021e
ThreadPoolAllocator: Rename FixedSizePoolAllocation to PoolBufferWithTimedRetirement
...
This more accurately reflects that the core feature of the helper is the
timer-based unclaiming of buffers instead of the allocation size.
2025-05-14 13:29:44 +02:00
LC
1dff7073de
Merge pull request #4554 from Sonicadvance1/remove_unused_argument
...
NFC: FEXCore: Removes unused argument on CreateThread
2025-05-05 14:30:24 -04:00
Ryan Houdek
92a82c3134
FEXCore: Removes unused argument on CreateThread
...
ParentTID is purely a Linux construct and has been moved entirely to the
frontend at this point. Remove this argument which is now unused.
2025-05-05 11:17:02 -07:00
Tony Wasserka
cdaa65f6fd
Arm64Emitter: Fix overalignment in Align16B
...
Previously, 16 additional bytes were emitted if the buffer was already
aligned.
2025-05-05 16:02:42 +02:00
Ryan Houdek
7ed17f68c5
FEXCore: Remove unused InvalidateGuestCodeRange with callback
2025-05-02 01:15:50 -07:00