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
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
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
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
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
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
Paulo Matos
ee1725684a
Implementation of FCNLEX to clear IE flag
2025-07-30 10:50:16 +02:00
Ryan Houdek
a6bb9739d4
OpcodeDispatcher: Initial support for runtime long-mode switch
...
This has the Frontend and OpcodeDispatcher select their operating mode
depending on the incoming code segment long-mode flag.
Adds some asserts since currently it is unexpected if the configuration
changes at runtime.
This is fairly straightforward for an initial setup but isn't fully
fleshed out.
Right now FEX's x86 tables aren't setup in a way to support choosing a
different instruction decoding depending on runtime operating mode
change, so that would break in interesting ways.
Primarily this just gets FEX setup to start piping the operating mode
through from the frontend to the backend. This is a long term task, so
it is going to take a long time to iron out all the issues.
2025-07-29 12:02:37 -07:00
Alyssa Rosenzweig
6b3c7319c4
IR: wrap _Constant as Constant
...
flag day rename/wrapping. no functional change.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-07-26 09:33:15 -04:00
Alyssa Rosenzweig
bf51fc7c36
OpcodeDispatcher: do not use Constant as an identifier
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-07-26 09:32:42 -04:00
Alyssa Rosenzweig
e910a81c12
OpcodeDispatcher: remove sized constant use
...
instcountci squashed for visibility.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-07-26 09:26:43 -04:00
Ryan Houdek
0d69e88d53
FEXCore: Remove reference SHA implementation
...
Due to us only enabling the CPUID extension in the case that the host
hardware supports SHA or not, this has actually been largely unused now.
Also the only hardware that doesn't support the crypto extension has
been some old Pi hardware and some other things we don't really care
about.
This code was a phenomenal reference point for implementing the SHA
versions of the instructions and would have been significantly more
difficult to implement had this not been available. Kudos to @lioncash
for having written it!
But now as we are no longer utilizing it, it is time to remove it.
2025-07-25 12:18:13 -07:00
Paulo Matos
726656d0bf
Implement x87 invalid operation bit on F80 mode
2025-07-23 16:01:10 +02:00
Paulo Matos
5267cde60e
Whole-tree reformat with clang-format-19
2025-07-17 08:10:00 +02:00
Ryan Houdek
e36a64ecc0
Merge pull request #4681 from Sonicadvance1/i_dislike_tuple_2
...
FEXCore/OpcodeDispatcher: Removes tuple usage for Dispatch tables
2025-07-16 14:23:18 -07:00
Ryan Houdek
82be09b6a3
FEXCore/OpcodeDispatcher: Removes tuple usage for Dispatch tables
...
NFC
2025-07-16 13:57:16 -07:00
Ryan Houdek
219ab44a82
FEXCore: Implement a mostly NOP implementation of waitpkg
...
Part of waitpkg is the TPAUSE instruction. This instruction gives an
RDTSC deadline to go in to a low power sleep mode with the CPU.
Semantically we can't implement umonitor and umwait with ARM's exclusive
monitor implementation, but a nop implementation is sane. Just need to
make sure to clear the pre-req flags.
This lowers power consumption of UE5 games since their job handler now
goes to a tpause based implementation instead of a `pause` spinloop
implementation.
2025-07-15 16:13:29 -07:00
Billy Laws
0f6ceaac05
OpcodeDispatcher: Load only the element size from memory for VFMAScalarImpl
2025-07-09 00:52:59 +01:00
Billy Laws
635816c07f
OpcodeDispatcher: Force ElementSize loads for UCOMISxOp
2025-07-09 00:52:59 +01:00
Billy Laws
2fac5c23ff
OpcodeDispatcher: Always use 32-bit load/store for {LD,ST}MXCSR
2025-07-09 00:52:59 +01:00
Billy Laws
c2e2d1e92f
OpcodeDispatcher: Only read at most ElementSize in CVTFPR_To_GPR
2025-07-09 00:50:47 +01: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
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
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
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
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
Billy Laws
416267a238
OpcodeDispatcher: Safely clobber NZCV in FCOMIF64
...
Also fix a small typo that broke the !flagm2 path.
2025-04-16 13:06:37 +01:00
Ryan Houdek
ec1c7797f4
OpcodeDispatcher: Implement support for sha256rnds2 using ARM instructions
...
The big one.
2025-04-02 12:51:03 -07:00
Ryan Houdek
1b18bfaff5
Merge pull request #4473 from bylaws/win32-f
...
Windows: Small fixups
2025-04-01 10:53:28 -07:00
Billy Laws
02d3a319f9
OpTables: Disable thunk opcodes on win32
...
They are of no use here, and are quite frequent in never-taken blocks in Denuvo games
so treating them as invalid avoids wasting some time.
2025-03-31 23:57:58 +01:00
Alyssa Rosenzweig
c4f7b27459
OpcodeDispatcher: accelerate F->I conversions with FRINTTS
...
this should significantly help perf on supported platforms.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-31 16:09:54 -04:00
Ryan Houdek
21233430aa
Merge pull request #4446 from lioncash/cond
...
OpcodeDispatcher: Remove unnecessary 128-bit check in VPGATHER()
2025-03-27 20:30:49 -07:00
Lioncache
40b1c32008
OpcodeDispatcher: Remove unnecessary 128-bit check in VPGATHER()
...
This is already guaranteed to be true, since it's checked in the outer if,
so this can just be a regular else statement.
2025-03-27 23:08:59 -04:00
Ryan Houdek
8f9d818368
OpcodeDispathcer: static analysis warnings
2025-03-27 04:26:40 -07:00
Paulo Matos
b18f148575
Abstract AddressMode into its own header
...
Also refactor usage of utility functions into x87 Stack Optimization Pass.
2025-03-20 11:41:26 +01:00
Paulo Matos
e18a661b50
Refactor OP_STORESTACKMEM case in x87 Stack Opt Pass
2025-03-18 18:34:06 +01:00
Paulo Matos
16e5777816
Do not attempt direct encoding of 32bit addressing modes
...
Fixes #4393
2025-03-18 15:54:54 +01:00
Paulo Matos
64020e8828
Simplify by merging FSTF64 with FST
2025-03-18 15:54:54 +01:00
Ryan Houdek
929b111648
Merge pull request #4405 from Sonicadvance1/static_analysis_again
...
Various: More static analysis warnings cleanup
2025-03-17 13:08:11 -07:00
Ryan Houdek
b901b42417
OpcodeDispatcher/X87: Optimize GPR moves using new IR operation
...
This saves one instruction per FILD and FRSTOR
2025-03-12 22:22:03 -07:00