Tony Wasserka
61d77e3f9b
LibraryForwarding: Infer folders for 32-bit wrappers automatically
...
There's no need to bother the user to select these paths manually.
Instead, just use the same folder names with _32 appended.
Fixes #4588 .
2025-06-17 11:57:35 +02:00
Alyssa Rosenzweig
e57130e364
JIT: drop UDiv extensions
...
we already extend in the dispatcher.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-12 16:45:49 -04:00
Alyssa Rosenzweig
eedcb35270
IR: merge ldiv/lrem handlers
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-12 16:45:49 -04:00
Alyssa Rosenzweig
1eb470083c
IR: merge div/rem opcodes
...
it's simpler & faster to calculate both together, matching the x86 semantic.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-10 17:08:20 -04:00
Ryan Houdek
6549b66cf6
Merge pull request #4606 from alyssarosenzweig/opt/cdq
...
Optimize CDQ
2025-06-03 12:24:15 -07:00
Alyssa Rosenzweig
6864d48dcf
OpcodeDispatcher: optimize cdq
...
prereq to optimizing sign-ext+ldiv in a reasonable way.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-03 15:00:06 -04:00
Tony Wasserka
45a37edd4a
Config: Use CMAKE_INSTALL_FULL_LIBDIR when templating default values
2025-06-03 17:45:29 +02:00
Ryan Houdek
fedad275e7
Merge pull request #4597 from alyssarosenzweig/opt/drop-pile-of-constprop
...
Constant fold on the fly
2025-06-02 12:34:53 -07:00
Alyssa Rosenzweig
d966ae145e
ConstProp: merge inline + pooling
...
now that the algebraic/folding opts are gone, we can do this in one pass for a
2.5% speedup:
N Min Max Median Avg Stddev
x 50 0.44474704 0.46750433 0.45455258 0.45446569 0.0044727894
+ 50 0.43149892 0.45173984 0.44252267 0.44295575 0.0045621814
Difference at 95.0% confidence
-0.0115099 +/- 0.00179263
-2.53263% +/- 0.394447%
(Student's t, pooled s = 0.00451771)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:27:02 -04:00
Alyssa Rosenzweig
4cb37e6a1b
ConstProp: drop constant folding and algebraic opts
...
No longer needed.
The total difference from the beginning of this series (all the prep work to
make this change possible) plus this commit is a modest 0.4% win.
N Min Max Median Avg Stddev
x 100 0.4472467 0.46646308 0.45708424 0.45713057 0.0040838243
+ 100 0.44707586 0.46581227 0.45479448 0.45509309 0.0037548573
Difference at 95.0% confidence
-0.00203748 +/- 0.00108734
-0.445711% +/- 0.237862%
(Student's t, pooled s = 0.00392279)
...in addition to a net deletion of 144 lines of code.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:24:58 -04:00
Alyssa Rosenzweig
d9da81e99b
ConstProp: drop dead cross-instr opts
...
these can't work due to architectural limitations. they could be ported to
post-RA passes, I think, but having them here now is not helping anything and
they're in the way.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
7d734740be
Addressing: avoid a Bfe
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
06299cca4b
OpcodeDispatcher: optimize out Bfi for storereg
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
af5aaab38b
OpcodeDispatcher: optimize a few ALU-with-constant ops
...
instead of relying on ConstProp for this.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
77bb01d384
OpcodeDispatcher: don't generate pointless Xor for AF
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
a9eb1bd4e6
OpcodeDispatcher: don't generate pointless Bfe for moves
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
83ef2da95f
OpcodeDispatcher: avoid zero shift in SHLD
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
Alyssa Rosenzweig
ba13ccadb8
OpcodeDispatcher: use ArithRef for 8/16-bit imul
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 14:15:51 -04:00
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
Ryan Houdek
c865eb98ea
Merge pull request #4598 from alyssarosenzweig/idc
...
Stop using hashmap in DCE
2025-06-02 10:26:08 -07:00
Alyssa Rosenzweig
105d0a36ad
RedundantFlagCalculationElimination: dont use hashmap
...
combined results on node from this and the previous commit:
N Min Max Median Avg Stddev
x 50 0.44433582 0.46988457 0.45344824 0.45320041 0.0043288623
+ 50 0.4385365 0.46615359 0.45026179 0.44996216 0.0045742233
Difference at 95.0% confidence
-0.00323825 +/- 0.00176704
-0.71453% +/- 0.389903%
(Student's t, pooled s = 0.00445323)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 13:02:44 -04:00
Alyssa Rosenzweig
263279d5dd
IR: index blocks
...
this will let us avoid a costly hashmap in DCE.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-02 13:02:44 -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