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
7e1be6625f
SyscallHandler: Add a method for invalidating a guest code range
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
Ryan Houdek
e6de17e72e
Merge pull request #4752 from alyssarosenzweig/opt/defer-next-use-analysis-2
...
RegisterAllocationPass: defer next-use analysis
2025-08-01 16:38:31 -07:00
Ryan Houdek
0457bdc7ce
Merge pull request #4751 from lioncash/perm
...
ASIMDOps: Remove unused permute overloads
2025-08-01 12:45:50 -07: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
Alyssa Rosenzweig
6a03df7b8d
RedundantFlagCalculationElimination: drop dead syscall/atomic opts
...
I don't think these are worth it, and also currently they don't trigger ever.
n=100:
Difference at 95.0% confidence
-0.00245961 +/- 0.00139573
-0.524468% +/- 0.297615%
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 14:01:37 -04:00
Alyssa Rosenzweig
7ee5a8065c
RegisterAllocationPass: defer next-use analysis
...
This is expensive and only needed for spilling, so only do it for spilling. This
complicates the RA a bit but speeds us up on average since most blocks
don't spill. Total results of this change (including the prep commits that
slowed things down temporarily):
Difference at 95.0% confidence
-1.71952% +/- 0.455996%
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 13:24:52 -04:00
Alyssa Rosenzweig
2f2353765f
RegisterAllocationPass: use kill bits
...
this is a lot lighter weight than next uses for the same purpose.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 13:24:52 -04:00
Alyssa Rosenzweig
8b4c2f5093
RegisterAllocationPass: consider AnySpilled at start of iteration
...
if we spill for SRA, we don't need/want to execute this code path. this will be
load bearing by the end of this series.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 13:24:52 -04:00
Alyssa Rosenzweig
d80662a9ba
RegisterAllocationPass: ignore kill bit in SRA
...
needed for the backwards pass internally due to ordering. a little awkward but
shrug.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 12:11:53 -04:00
Alyssa Rosenzweig
68c5c72dbc
IR: model kill bits
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 12:04:50 -04:00
Lioncache
b460cbc91a
ASIMDOps: Remove unused permute overloads
...
These aren't used at all and don't really provide anything that the existing
non-templated overloads can't.
2025-08-01 11:51:55 -04:00
Lioncache
f7939078c2
ASIMDOps: Remove unnecessary ins() overload
...
There's no difference between this and the non-templated version, in fact,
this variant wasn't even used at all, so we can just remove it.
2025-08-01 11:24:44 -04:00
Alyssa Rosenzweig
c82efe7621
RegisterAllocationPass: set AnySpilled less
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 10:39:11 -04:00
Ryan Houdek
84704d1cc2
CPUID: Update documentation comments
...
Additional reserved bits have set uses now.
Additionally set the cpuid bit for bus-lock-detect, because FEX
definitely detects bus-locks.
2025-07-30 15:13:08 -07:00
Ryan Houdek
d4dcbfa90b
FEXCore/Frontend: Ensure multiple prefix bytes work
...
Only the last prefix byte is retained when multiple are set. We were
accidentally generating a mask.
Additionally with 64-bit code, the legacy segment prefixes don't
overwrite if FS or GS have been set. So no weird behaviour where FS/GS
is set, a legacy prefix is used for padding, and then it "ignores" a bad
prefix by ignoring only the latest one.
2025-07-30 12:30:13 -07:00
Ryan Houdek
d04f75df29
Frontend: Remove arbitrary check
...
REX prefix isn't even encoded in to the instruction tables if a 32-bit
process is running. Just remove this.
2025-07-30 11:53:15 -07:00
Ryan Houdek
369ca5cb72
Merge pull request #4719 from Sonicadvance1/runtime_mode_switch_take2
...
Runtime mode switch take 2
2025-07-30 11:47:54 -07:00