Ryan Houdek
b4c797c199
Merge pull request #4052 from Sonicadvance1/various_warnings
...
Bunch of little things reported by coverity
2024-09-09 12:54:22 -07:00
Ryan Houdek
fbe817f1c4
Config: Use std::move on strings to avoid copy
2024-09-08 20:02:51 -07:00
Ryan Houdek
eaaf62e4b7
X87: Make it a bit clearer that 80-bit floats can't hit the memory path
...
Makes the static analysis happy.
2024-09-08 18:03:20 -07:00
Ryan Houdek
c3c0bbb060
F80Fallbacks: Fix Uninitialized variable warning that can't occur
2024-09-08 18:03:20 -07:00
Ryan Houdek
8da6b1e729
FEXCore/Allocator: Fixes uninitialized scalar variable warning that can't occur
2024-09-08 18:03:20 -07:00
Ryan Houdek
a94aaca0ec
OpcodeDispatcher: Add default FEX_UNREACHABLE
...
This can't happen but if it changes then make sure we capture it.
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
e6025cc087
Arm64: Fix warning
...
This variable is only used in a log message no, so move it there.
2024-09-08 11:15:46 -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
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
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
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
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
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
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
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
Ryan Houdek
77469de247
FEXCore: Delete ThreadsState struct
...
All uses of this have been removed.
2024-09-05 13:39:02 -07:00
Ryan Houdek
48fd827004
FEXCore: Move CustomIRResult to internal header
...
This definition doesn't need to be exposed in the public API.
Stopped needing to be public once we removed our IR CI thing.
2024-09-05 13:36:15 -07:00
Ryan Houdek
f09d511ac8
FEXCore: Move JITSymbolBuffer to internal header
...
This definition doesn't need to be exposed in the public API.
2024-09-05 13:28:45 -07:00
Ryan Houdek
5013b8a0db
Merge pull request #4036 from alyssarosenzweig/opt/dont-inline-pool
...
ConstProp: stop pooling inline constants
2024-09-05 07:30:39 -07:00
Alyssa Rosenzweig
ac65deed6c
ConstProp: drop CreateInlineConstant
...
bit of cleanup
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-05 09:48:59 -04:00
Alyssa Rosenzweig
d1d4d2d876
ConstProp: stop pooling inline constants
...
Because we already pooled the _Constants, there's no benefit to also pooling inline constants. the robin map to do so just adds extra overhead for no benefit - drop it.
without multiblock, shaves around 2% off node. with multiblock, a bit less than
1% but still a win.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-05 09:47:35 -04:00
Ryan Houdek
a66fac614b
Merge pull request #4034 from alyssarosenzweig/fix-tied-fma
...
IR: fix scalar FMA tied sources
2024-09-04 09:14:24 -07:00
Alyssa Rosenzweig
6d4693cbc1
IR: fix scalar FMA tied sources
...
needs to be modelled explicitly or else we lose information when translating
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-04 07:42:44 -04:00
Ryan Houdek
fd4f6b8020
FEXCore: Dynamically scale TSC
...
When I implemented TSC scaling originally, I chose a scale factor of 128
because it basically covered the range of devices we cared about without
going too high. I also only tested devices that had a TSC scale factor
from 19.2Mhz to 34Mhz. Turns out there is hardware that also has a 48Mhz
cycle counter, which cause them to effectively have a 6.1Ghz cycle
counter, which is kind of absurd.
Instead of a fixed scale, just calculate the amount of scaling we need
to get >= the minimum threshold of 1Ghz. This will change the shift from
7 to 5 or 6 for the faster cycle counter devices.
Of course if someone wants to know the scale factor they can still use
cpuid function 15h to know it.
Fixes #4026
2024-09-03 13:41:31 -07:00
Tony Wasserka
0e6a22febe
FEXQonfig: Add missing license identifiers
2024-09-03 16:48:21 +02:00
Alyssa Rosenzweig
b368223d50
Merge pull request #3628 from Sonicadvance1/seccomp
...
LinuxEmulation: Implement support for seccomp
2024-09-03 08:49:16 -04:00