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
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
6ad7392cd7
RegisterAllocationPass: pair push/pop
...
as a simple post-RA peephole. much much easier to do post-RA than pre-RA.
This isn't a post-RA /pass/ in the traditional sense... it's done while
assigning registers to coalesce the passes over the IR, since we pay per-pass
and we can merge the walks over the IR.
Closes : #4480
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-27 11:33:12 -04:00
Alyssa Rosenzweig
b15d5f299c
RegisterAllocationPass: drop dead IP increment
...
written but never read.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-27 11:32:33 -04: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
88682a457a
IR: add RemovePostRA helper
...
Remove blows up because of use tracking, but we can do a much simpler version
for post-RA and elide lots of checks from trying to make Remove more general.
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
Alyssa Rosenzweig
babd6e9a7b
RegisterAllocationPass: allow Copy on the input IR
...
useful for pusha.
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
Tony Wasserka
2e24ee7a5f
LogManager: Print source location when failing assertions
2025-05-24 09:35:11 +02:00
StanfordZhang
23cda2c961
Update Arm64Emitter.cpp
...
fix callee saved floating-point arguments issue
2025-05-23 22:14:37 +08:00
Alyssa Rosenzweig
feb67658e1
RegisterAllocationPass: exploit new IR
...
Now that we can just set registers directly, we can simplify RA a lot. All the
Map/Unmap nonsense - it all goes away. We just assign registers as we go and
everything clicks into place naturally.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04: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
f66bf3811e
RegisterAllocationPass: set PostRA flag
...
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
3136a5e2f8
IR: add helpers to extract physical registers from IR
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
c4f00a05df
IR: add space for registers right in OrderedNode *
...
This again follows the same idea of eliminating the RAData sideband.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
e9a8f8a9ff
IR: generate builders that take OrderedNodeWrapper
...
when we need to materialize instructions inside RA without having a
corresponding OrderedNode* source, we want to just pass a OrderedNodeWrapper
with an encoded register. generate appropriate builders so this is possible.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
261ae7a195
IR: add immediates into OrderedNodeWrapper
...
this will let us encode registers directly inside OrderedNodeWrapper, rather
than pointers to OrderedNode *. that will let us speed up RA & onwards.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
7eaf5ae9e0
IR: drop FillRegister original source
...
this is now unused, and it's problematic with future work.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-16 15:18:06 -04:00
Alyssa Rosenzweig
10a02449b1
IR: drop RA validation
...
There's no reasonable way to keep this around without adding significant
complexity to RA. This series prefers to drop complexity from RA, lessening the
need for validation in the first place.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-16 15:18:06 -04:00
Alyssa Rosenzweig
debc57e8c7
Merge pull request #4575 from alyssarosenzweig/cleanup/no-implicit-size
...
IR: drop DestSize inference
2025-05-16 15:17:53 -04:00
LC
b8b516f7b6
Merge pull request #4563 from Sonicadvance1/minor_vma_cleanup2
...
SyscallsVMATracking: Minor cleanup
2025-05-15 19:15:20 -04:00
Alyssa Rosenzweig
3b1e91b1fc
IR: drop DestSize inference
...
no more users, and it's problematic for upcoming work.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-15 15:00:03 -04:00
Alyssa Rosenzweig
8532593d91
IR: specify DestSize for RMWHandle
...
seems to just have been an oversight.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-15 14:58:05 -04:00
Alyssa Rosenzweig
55bd16e2c8
IR: make FillRegister sizes explicit
...
instead of hacking around it.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-15 14:57:51 -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
Ryan Houdek
9b573effd1
Merge pull request #4573 from alyssarosenzweig/cleanup/jit-id-2
...
JIT: use .ID() even less
2025-05-14 13:36:33 -07: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
Ryan Houdek
221ae2d7b4
Merge pull request #4571 from alyssarosenzweig/opt/constprop-xor-1
...
ConstProp: optimize XOR with all-1
2025-05-14 12:59:12 -07: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
Alyssa Rosenzweig
ad75563a26
IR: drop irrelevant reference to x86
...
we don't run the JIT on x86 anymore.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-14 15:32:07 -04:00
Alyssa Rosenzweig
fbd706c191
ConstProp: optimize XOR with all-1
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-14 14:48:29 -04:00
Ryan Houdek
6b85fa5611
SignalScopeGuards: Review
2025-05-14 10:56:44 -07:00
Ryan Houdek
395d870814
SignalScopeGuards: Add checks for locks being held by the calling thread
...
pthreads allows us to check if mutex/rwlock is currently locked by the
calling thread. This can give us some safety in code expecting locks to
be in place, allowing us to find programming bugs.
2025-05-14 10:56:44 -07:00
Tony Wasserka
d4fdb28e72
PoolBufferWithTimedRetirement: Add support for updating the buffer size
...
This should be done at low frequency since it may unclaim the buffer.
2025-05-14 13:37:46 +02: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
Tony Wasserka
f41501444d
ThreadPoolAllocator: Add a dedicated interface to try reowning a buffer without fallback
2025-05-14 13:29:44 +02:00
Tony Wasserka
86b26b80ce
FixedSizePooledAllocation: Clean up documentation
2025-05-14 13:29:44 +02:00
Tony Wasserka
c19119bcd6
ThreadPoolAllocator: Fix assertion in _GLIBCXX_DEBUG builds
...
Default-constructed iterators can't be copied.
2025-05-09 15:02:49 +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