Ryan Houdek
0a32ba9b29
instcountCI: Fixes for shifts
2024-09-08 18:03:20 -07:00
Ryan Houdek
f51832ca6b
FEXCore: Fixes a bug with VPSRLDQ/VPSLLDQ with >= 16-byte shifts
...
When the shift amount is >= 16-bytes then we need to zero the register.
We had a bug where we were assigning `Result.High` to itself, which
effectively made the top 128-bits of the ymm register not modify itself.
Adds a unit test to ensure that doesn't happen again.
2024-09-08 15:39:22 -07:00
Ryan Houdek
5f9a30af7a
FileManagement: Use const ref for RootFSPath
...
No need to make a copy
2024-09-08 15:20:04 -07:00
Ryan Houdek
453ef0b94c
Linux/ExecveHandler: Move a path rather than copy
...
We can do move assignment instead of copy assignment here.
2024-09-08 15:17:04 -07:00
Ryan Houdek
4779e64cf5
Linux/EmulatedFiles: Check return for seal
...
This shouldn't be possible to occur, but have a log message just in
case.
2024-09-08 15:15:38 -07:00
Ryan Houdek
cd4c224dc0
Merge pull request #4050 from alyssarosenzweig/sra/move-size
...
JIT: always use 64-bit moves for SRA
2024-09-08 10:30:17 -07:00
Ryan Houdek
07f117b957
Merge pull request #4047 from bylaws/arm64ec-sysv2
...
ARM64EC: Switch to exception-based native syscall dispatch
2024-09-08 10:30:05 -07:00
Ryan Houdek
36e4f9a070
Merge pull request #4049 from alyssarosenzweig/opt/constprop-merges
...
ConstProp: speed it up
2024-09-08 10:13:23 -07:00
Alyssa Rosenzweig
67c751d3e5
JIT: always use 64-bit moves for SRA
...
I see no reason not to. Simpler code and it's slightly faster on Firestorm.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-08 13:02:57 -04:00
Ryan Houdek
1c59bfeb9f
Merge pull request #4027 from alyssarosenzweig/opt/global-flag
...
Global flag optimizations
2024-09-08 09:42:18 -07:00
Alyssa Rosenzweig
2b0041a291
InstCountCI: Update
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-08 10:27:20 -04:00
Alyssa Rosenzweig
39cc1e5116
ConstProp: merge folding+inlining
...
2% off nodejs
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-08 10:26:58 -04:00
Alyssa Rosenzweig
f46856c090
ConstProp: template constant inlining
...
DRY
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-08 10:26:58 -04:00
Alyssa Rosenzweig
b7859052da
ConstProp: don't mask shifts
...
done in the emitter now
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-08 10:26:58 -04:00
Alyssa Rosenzweig
3b30d8103f
ConstProp: combine like cases
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-08 10:26:58 -04:00
Alyssa Rosenzweig
d19fc36f8f
ConstProp: delay constant pooling
...
more efficient to pool the output of constant folding and such. but we need to
avoid that becoming accidentally quadratic, so rework that too
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-08 10:26:58 -04:00
Alyssa Rosenzweig
5fbf76ee9e
CodeEmitter: mask immediate shifts
...
more convenient for constprop and not really any more expensive.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-08 10:26:58 -04:00
Ryan Houdek
5f79761fe4
Merge pull request #4046 from Sonicadvance1/cpubackend_remove_unused
...
CPUBackend: Remove unused functions
2024-09-07 13:11:32 -07:00
Billy Laws
621af9e7e8
ARM64EC: Switch to exception-based native syscall dispatch
...
The previous approach assumed that ntdll wouldn't have been patched
before FEX was loaded, but that isn't necessarily the case thanks to
CEF. This takes the same approach used by xtajit which wine recently gained
support for wine. The overhead to this isn't ideal but most syscalls
aren't directly done through x86 code anyway and in the future FEX could
forward unpatched thunks to their ARM variants at JIT time.
2024-09-07 15:30:00 +00:00
Billy Laws
f4d107c8f0
ARM64EC: Split out FEX -> packed EC context conversion from reconstruction
2024-09-07 15:29:48 +00:00
Ryan Houdek
59643db331
CPUBackend: Remove unused functions
...
Some of these were bad ideas, some ideas were something we effectively
grew out of.
2024-09-07 08:07:00 -07:00
Alyssa Rosenzweig
46f36dc89d
InstCountCI: Update
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:41 -04:00
Alyssa Rosenzweig
384882744c
DeadStoreElimination: drop now that it's redundant
...
it's only really load bearing for pf/af, which is handled as a global flag opt
now. this mitigates some of the compile time hit from globalizing flag opts.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
b36d1f7e7b
RedundantFlagCalculationElimination: optimize parity
...
another global CFG-based optimization -- if we know that the raw PF is already
1-bit we can skip parity evaluation, saving work with floating point compares.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
dd7c66db2e
RedundantFlagCalculationElimination: use LUT for flags
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
47ac9edd7a
RedundantFlagCalculationElimination: select testz
...
this saves uops.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
6e6d640fec
RedundantFlagCalculationElimination: fold compares/axflag into branches
...
now that we know whether flags are killed on the edge, we can improve branch
isel
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
eb88366614
RedundantFlagCalculationElimination: globalize
...
Gather a control flow graph and use it to propagate flags throughout the
program.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
50d6ddd591
RedundantFlagCalculationElimination: extract per-block logic
...
nfc
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
249de7c758
RedundantFlagCalculationElimination: drop unneeded bools
...
nonzero <==> not dummy
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
c350888d70
RedundantFlagCalculationElimination: add missing adczero case
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
f23bef1653
RedundantFlagCalculationElimination: add missing testnz case
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
d17f33a922
OpcodeDispatcher: don't emit fake 0 for condjump
...
not needed and getting in the way
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
50a3ca0d6d
IR: introduce dedicated PF/AF instructions
...
this makes reasoning about them a little easier, e.g. for flags. about 1% win
in nodejs.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
8745455a5b
IR: track whether parity is read
...
so we can gate optimizations efficiently
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 08:26:04 -04:00
Alyssa Rosenzweig
e9ab514962
IR: push parity evaluation down
...
so we can optimize it globally
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 08:26:04 -04:00
Alyssa Rosenzweig
4eb0948451
IR: push down AXFLAG lowering
...
so we can get the new axflag optimizations on billy's x13s.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 08:26:04 -04:00
Alyssa Rosenzweig
8d9f19bd73
IR: add TestZ op
...
more optimized than TestNZ if we don't care about the sign bit.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 08:26:04 -04:00
Alyssa Rosenzweig
9fe7bc5818
InstCountCI: add ucomiss+pf opt case
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 08:26:04 -04:00
Alyssa Rosenzweig
5a590a9b11
InstCountCI: add 8-bit test cases
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 08:26:04 -04:00
Ryan Houdek
a4acd64246
Merge pull request #4042 from neobrain/refactor_system_libs
...
CMake: Compile with system libraries for xxhash, Catch2, and fmt, if available
2024-09-06 11:48:12 -07:00
Ryan Houdek
304b5de1af
Merge pull request #4038 from Sonicadvance1/move_aotir_debugdata
...
AOTIR: Move debugdata structure to internal header
2024-09-06 10:50:42 -07:00
Ryan Houdek
ca2fe0b301
AOTIR: Move debugdata structure to internal header
...
This definition doesn't need to be exposed in the public API.
2024-09-06 10:19:45 -07:00
Ryan Houdek
bbef4d762c
Merge pull request #4044 from bylaws/int2e
...
OpcodeDispatcher: Do not forbid INT 2E syscalls on 64-bit Windows
2024-09-06 10:18:18 -07:00
Ryan Houdek
f77841d784
Merge pull request #4041 from Sonicadvance1/fix_poll
...
LinuxSyscalls: With poll syscall, ensure fds is writable only if nfds is not zero
2024-09-06 10:17:55 -07:00
Ryan Houdek
219a4777c6
Merge pull request #4040 from Sonicadvance1/delete_threadsstate
...
FEXCore: Delete ThreadsState struct
2024-09-06 10:16:28 -07:00
Ryan Houdek
29f0e9b4d6
Merge pull request #4039 from Sonicadvance1/move_customir_entry
...
FEXCore: Move `CustomIRResult` to internal header
2024-09-06 10:16:18 -07:00
Ryan Houdek
b75efc42bf
Merge pull request #4037 from Sonicadvance1/move_symbol
...
FEXCore: Move `JITSymbolBuffer` to internal header
2024-09-06 10:15:54 -07:00
Tony Wasserka
90dbd4766d
Merge pull request #4043 from alyssarosenzweig/gitignore/build
...
gitignore: ignore build symlink
2024-09-06 18:08:47 +02:00
Billy Laws
f7b911ca43
OpcodeDispatcher: Do not forbid INT 2E syscalls on 64-bit Windows
...
This works fine on real Windows and is relied on by wine as SystemCall
is set to 1 in KUSER_SHARED_DATA, which causes the ntdll thunks to use
it over `syscall`
2024-09-06 15:58:17 +00:00