Ryan Houdek
83e44961fc
Merge pull request #4784 from Sonicadvance1/more_ldt_gdt
...
FEXCore: Move LDT/GDT management to the frontend
2025-08-20 13:22:08 -07:00
Ryan Houdek
25a0752e58
FEXCore: Move LDT/GDT management to the frontend
...
This will allow the frontend to manage LDT and GDT so that Linux will be
able to install 32-bit code segments.
2025-08-18 14:03:51 -07:00
Paulo Matos
3bf323aa2b
Clear IE flag on fninit
2025-08-18 15:40:46 +02:00
Ryan Houdek
2f930b201a
Merge pull request #4782 from bylaws/oo0
...
OpcodeDispatcher: Simplify CALLOp return addr calc
2025-08-14 11:23:21 -07:00
Billy Laws
08c430dcfb
OpcodeDispatcher: Simplify CALLOp return addr calc
2025-08-14 00:25:23 +01:00
Ryan Houdek
13da6102b3
OpcodeDispatcher: Implement support for CALLF/RETF
...
Similar to the previous far jmp, if the CS changes operating mode then
things will still explode with other FEX asserts. But this gets another
change out of my stashes.
These instructions go hand-in-hand obviously so they get implemented as
a pair.
2025-08-13 16:18:12 -07:00
Ryan Houdek
2b7d03d4f9
OpcodeDispatcher: Implement support for far jump
...
If anything actually attempts to use this to change CS then it'll very
quickly hit some other asserts, but it gets one more change off my list.
2025-08-13 12:19:16 -07:00
LC
c8810557c1
Merge pull request #4777 from Sonicadvance1/move_gdt_up
...
FEXCore: Split GDT and LDT prep work
2025-08-13 12:06:41 -04:00
Ryan Houdek
2a4bfe49f5
Merge pull request #4743 from pmatos/fclex
...
Implementation of FCNLEX to clear IE flag
2025-08-12 12:35:15 -07:00
Ryan Houdek
3f9df49e3e
FEXCore: Split GDT and LDT prep work
...
Taking this very slowly because this is very fickle code. The frontend
needs to manage GDT and LDT, but before we get there, we need to
actually add support for LDT in the backend. Split the segments to two
arrays so the JIT can actually update their cached values correctly.
Still treats GDT and LDT as mirrors like how the JIT previously did (By
it ignoring the selector's TI bit).
2025-08-11 20:45:51 -07:00
Ryan Houdek
d0ec069dcb
FEXCore: Fixes 32-bit zero-extend semantics on cmpxchg
...
We were missing the semantics when the result was a success.
2025-08-11 17:49:17 -07:00
Ryan Houdek
0879994aff
FEXCore: Fixes 16-bit operand size Leave
...
Weren't testing this edge case just like enter
2025-08-11 17:01:49 -07:00
Ryan Houdek
135d17fbd3
FEXCore: Fixes 16-bit operand size Enter
...
We weren't handling this edge case. Noticed it while looking at some
other test failures.
2025-08-11 16:50:30 -07:00
Alyssa Rosenzweig
2a00f23459
JIT: replace JumpTargets map with vector
...
Hashmaps are super expensive and there's no reason not to use a vector - we
already have compact block IDs so we don't benefit from the sparseness. Huge win
for very little effort.
Spotted when profiling FEX. CondJump() in the JIT was almost 4% of our time (?!)
and all because of map slowness. Easy fix.
Difference at 95.0% confidence
-0.0196494 +/- 0.00194956
-3.92827% +/- 0.389753%
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-08 15:46:35 -04:00
Alyssa Rosenzweig
68ad916a91
Addressing: remove closures from SelectAddressMode
...
this is hot and closures make the assembly harder to reason about.
No difference at 95%.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-08 15:46:35 -04:00
Alyssa Rosenzweig
0f3883152b
RegisterAllocationPass: call GetRAArgs less
...
..and be consistent about signedness.
clang doesn't seem able to do this itself.
Difference at 95.0% confidence, n=100
-0.272326% +/- 0.242353%
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-08 15:46:35 -04:00
Billy Laws
ce59d40570
Vector: Avoid OOB reads in (v)cvt(t)s{s,d}2s{s,d} with mem src
2025-08-07 14:36:12 +01:00
Billy Laws
19f33e22d7
AVX128: Avoid OOB reads in vcvtsi2s{s,d} with mem src
2025-08-07 14:36:12 +01:00
Alyssa Rosenzweig
40beef061f
ConstProp: drop pass
...
now obsolete!
Results for the whole series are excellent:
Difference at 95.0% confidence
-3.97603% +/- 0.254656%
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
f0a434c167
IR: inline as we go
...
Augment IREmitter to inline constants as we generate code, rather than
needing a later clean up pass. This replaces the last function of ConstProp.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
92b66dbf17
IR: describe immediate inlining in json
...
This drops some register class validation since InlineConstants don't have a
register class.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
f336261d6b
IR: introduce & use more add helpers
...
so we can stash all the opts.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
c6324b83ea
IR: introduce & use constant add helpers
...
more ergonomic and gives us a place to stash more logic.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
54873992ab
OpcodeDispatcher: optimize storecontext(0) in dispatcher
...
It's actually slightly less code to do it here than ConstProp, lol.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
38d568a807
OpcodeDispatcher: rework SelectCC
...
inline as we go, while trimming the internal interfaces.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
dcef1212c6
OpcodeDispatcher: add and use NZCVSelect01 helper
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
2030b70ff8
OpcodeDispatcher: do Select 0/1 inline in dispatcher
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
41a188eaec
OpcodeDispatcher: inline entrypoint offsets manually
...
it's literally less code with some helpers.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Alyssa Rosenzweig
f3ddaf455c
OpcodeDispatcher: drop dead constructor
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-06 20:40:49 -04:00
Ryan Houdek
aa979e4bc7
Merge pull request #4728 from bylaws/monohacks
...
Implement mono specific hacks
2025-08-06 15:51:35 -07:00
Billy Laws
c8cecd9f46
Frontend: Adjust forward branch distance limit
...
Now executable page tracking is implemented, this limit is technically
unnecessary and effectively never hit in normal code. Keep a reasonable
limit however to avoid accidentally inlining tail calls and exploring
dead branches in obfuscated code.
2025-08-06 22:39:17 +01:00
Billy Laws
38c59a44de
Frontend: Disable multiblock across calls in mono JIT code
2025-08-06 22:39:17 +01:00
Billy Laws
8b14bd4e87
FEXCore: Fix broken RemoveCustomIREntrypoint
...
Unused, but would have crashed prior due to providing a nullptr thread.
2025-08-06 22:39:17 +01:00
Billy Laws
5c77969e83
Frontend: Force full SMC detection for mono jump thunk callsites
...
See IsBranchMonoTailcall
2025-08-06 22:39:17 +01:00
Billy Laws
e049596252
FEXCore: Use MonoBackpatcherWrite for XCHG ops in the mono backpatcher block
2025-08-06 22:39:17 +01:00
Billy Laws
afa1327242
FEXCore: Implement a write+code invalidate IR op for mono SMC
2025-08-06 22:39:17 +01:00
Billy Laws
da3b7f5a41
FEXCore: Add an option to enable future mono-specific hacks
2025-08-06 22:39:17 +01:00
Billy Laws
100f61ee24
FEXCore: Allow the frontend to force full SMC detection for a block
2025-08-06 22:39:17 +01:00
Billy Laws
dcd2794ff5
FEXCore: Make ThreadRemoveCodeEntryFromJit invalidate over all threads
...
Avoids redundant CompileBlock hits and generally easier to reason about.
2025-08-06 22:39:17 +01:00
Billy Laws
0c6fcd1678
FEXCore: Add function to recover the current block entrypoint
2025-08-06 22:39:17 +01:00
Billy Laws
1e21416ccb
Disable 3DNow by default on WOW64 FEX
2025-08-06 22:30:38 +01:00
LC
63a910d2fc
Merge pull request #4760 from Sonicadvance1/vex_log
...
Frontend: Remove log about VEX map_select
2025-08-05 11:15:53 -04:00
Ryan Houdek
674b6e9f43
Frontend: Remove log about VEX map_select
...
During multiblock code discovery this fires a lot and it isn't
interesting. Just remove the log, it'll SIGILL correctly if it actually
hits.
2025-08-04 15:46:36 -07:00
Ryan Houdek
7897b6ad55
Merge pull request #4759 from alyssarosenzweig/ra/simplify
...
RegisterAllocationPass: simplify next-use logic
2025-08-04 14:59:13 -07:00
Alyssa Rosenzweig
734ab4429f
RegisterAllocationPass: fix SRA spilling corner
...
I hate this.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-04 17:06:15 -04:00
Alyssa Rosenzweig
dcc458ea94
RegisterAllocationPass: simplify next-use logic
...
I doubt this will fix the regression but it might make it easier to identify.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-04 14:31:08 -04:00
Alyssa Rosenzweig
07ef765f7e
OpcodeDispatcher: optimize SetX87FTW
...
In b8dd5d95b ("OpcodeDispatcher: optimize X87FTWTag"), we optimized
X87FTWTag using an efficient Morton interleave operation. Here, we do the
inverse, optimizing SetX87FTW using an efficient Morton deinterleave
operation.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-04 14:13:10 -04:00
Alyssa Rosenzweig
c58ad8b593
IR: add AndShift op
...
will use it for next commit.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-04 14:09:20 -04:00
Alyssa Rosenzweig
31091c1053
RegisterAllocationPass: remove some indentation
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-04 08:16:28 -04:00
Alyssa Rosenzweig
7bcc58687f
IR: remove a bunch of unused atomic ops
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 14:01:44 -04:00