Ryan Houdek
7ca757bb6d
FEXCore: Move CPUInfo to FEX
...
This is only ever used in the frontend now.
2025-04-08 22:54:43 -07:00
Ryan Houdek
c2d59b02bd
FEXCore: Reduce stack usage in CalculateNumberOfCPUs
...
Nothing crazy, just recalculate the maximum string length rather than
use PATH_MAX.
2025-04-08 22:54:43 -07:00
Ryan Houdek
5767c61a91
FEXCore/Emitter: Stop creating a vector on the heap
...
In the Push/Pop CalleeSavedRegisters these vectors were getting created
on the heap, allocating memory and then just iterating them.
Just use a std::array which makes it stop allocating memory and saves
the number of instructions.
2025-04-08 18:36:47 -07:00
Ryan Houdek
4377603d7e
FEXCore/Allocator: Removes old workaround for kernel 4.17
...
This was only used for working around our old CI machines and now that
our minimum kernel requirement is 5.15 this isn't required anymore.
2025-04-08 18:22:39 -07:00
Ryan Houdek
2d7f37386e
Softfloat: Remove warnings
...
These precision warnings are no longer true!
2025-04-07 15:22:24 -07:00
Ryan Houdek
0fbb6aa02f
cephes: Rewrite to use softfloat-3e 128-bit
...
And also use it at the same time, since the function signatures changed.
Instead of relying on the host libc math libraries for `long double` ALU
operations, rewrite the entire thing to use softfloat-3e fixed width
float128_t types.
This is a very invasive change in cephes but is a necessary requirement
for getting the precision we require in environments that map `long
double` to be the same as `double`, like Win32 and MacOS.
This fixes the precision issue in transcendental operations when running
under WINE.
2025-04-07 15:13:04 -07:00
Ryan Houdek
d8cd807520
Softfloat-3e: Moves to Externals
2025-04-05 17:26:15 -07:00
Ryan Houdek
ffca27cbde
FEXCore/Softfloat: Wire up cephes math library for transcendental operations
...
This is solving a different problem than what #4411 is specifically
trying to solve.
For our transcendental operations, we can't currently guarantee that
these functions will actually operate at the 128-bit softfloat
precision. While this is true with glibc, this is /not/ true for musl
and likely more libraries.
Instead of relying on our libc implementation to implement these,
instead include the cephes math library directly which is what most
people use for this. Including musl even, but not for all operations.
With this we are no longer beholden to the standard libraries for
providing a correct implementation.
2025-04-04 16:03:09 -07:00
LC
74cb225ccb
Merge pull request #4478 from Sonicadvance1/sha256rnds2_for_reals
...
OpcodeDispatcher: Implement support for sha256rnds2 using ARM instructions
2025-04-03 11:26:58 -04:00
LC
d5db2ccf18
Merge pull request #4475 from Sonicadvance1/x87_stack_bug
...
x87OptimizationPass: Fixes {Inc,Dec}StackPop
2025-04-03 11:25:53 -04:00
Ryan Houdek
cebcf50c65
x87OptimizationPass: Fixes {Inc,Dec}StackPop
...
On the slow path these were pushing and popping in the wrong direction.
Switch them around to ensure the unittests work.
2025-04-02 14:25:02 -07:00
Ryan Houdek
ec1c7797f4
OpcodeDispatcher: Implement support for sha256rnds2 using ARM instructions
...
The big one.
2025-04-02 12:51:03 -07:00
Tony Wasserka
0bd924eb7e
Merge pull request #4460 from Sonicadvance1/dead_code
...
FEXCore/Frontend: Remove logically dead code
2025-04-02 09:20:41 +02:00
Ryan Houdek
9b0bb29d78
IR: Implement support for sha256h{2,}
...
I keep carrying this patch around. Not yet wired up to the instruction
implementation yet, but I don't want to forget about it.
2025-04-01 17:53:48 -07:00
Ryan Houdek
c3e71de1d7
FEXCore/Frontend: Remove logically dead code
...
This code can't get hit.
2025-04-01 16:09:07 -07:00
Ryan Houdek
1b18bfaff5
Merge pull request #4473 from bylaws/win32-f
...
Windows: Small fixups
2025-04-01 10:53:28 -07:00
Ryan Houdek
8aecdc536c
Merge pull request #4471 from alyssarosenzweig/opt/cvtss2si
...
Optimize float->integer conversions with Feat_FRINTTS
2025-04-01 08:52:50 -07:00
Billy Laws
8f50106187
Context: Fix incorrect ifdef on ARM64EC
2025-03-31 23:57:58 +01: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
Ryan Houdek
cdaf1c5262
Arm64Emitter: Removes warning
2025-03-31 13:51:50 -07: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
Alyssa Rosenzweig
1f08f8df0d
IR: allow VUShrNI with bitshift=0
...
encodes to Xtn, we need this to narrow.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-31 16:03:18 -04:00
Alyssa Rosenzweig
0038a0b19c
IR: plumb Vector_FToISized op
...
this exposes the frint* opcodes in a new ir op
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-31 16:03:18 -04:00
Alyssa Rosenzweig
166a7c7e53
FEXCore: plumb Feat_FRINTTS
...
we want these instructions to accelerate conversions.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-31 16:01:32 -04:00
Ryan Houdek
f9b369c550
Telemetry: Removes unnecessary indirection
...
Telemetry value address generation was forcing an indirection at all
times which was unnecessary. These values live in the BSS, zero
initialized at process start and is unnecessary.
Instead change the wrapper defines to directly operate on the enum
passed in which saves an indirection on all of these telemetry
operations (except for the ones in the JIT which are required to be PIC
compliant).
This also fixes an annoying warning about
`FEXCORE_TELEMETRY_STATIC_INIT` causing initialization and destruction
order being unspecified, so two wins.
2025-03-29 15:10:37 -07:00
LC
949b205f42
Merge pull request #4462 from Sonicadvance1/passes_initialize_data
...
x87StackOptimizationPass: Initialize a couple of arrays
2025-03-29 18:00:47 -04:00
Ryan Houdek
feab0bce4b
x87StackOptimizationPass: Initialize a couple of arrays
...
Just to silence some warnings that think these aren't zero initialized
before using.
2025-03-29 14:02:46 -07:00
Ryan Houdek
0599d80b13
FEXCore/Frontend: Changes how VEX operand encoding flags are encoded
...
These three options are mutually exclusive with each other and could
potentially result in invalid encodings of the table on accident.
Change over to a 2-bit bitfield to encode if the operand that consumes
the VEX option is none, destination, 1st src, or 2nd src.
This ensures the table can't ever be incorrectly encoded.
2025-03-29 13:51:02 -07:00
Lioncache
88e6c48db7
X86Tables: Replace deprecated std::is_trivial template
...
This is deprecated in C++26, so we can just use a more specific type trait.
2025-03-29 00:55:15 -04:00
Lioncache
bfba74dab9
IR: Replace use of deprecated std::is_trivial_v template
...
This is deprecated in C++26
2025-03-29 00:33:39 -04:00
Ryan Houdek
0ca34d11ad
Merge pull request #4454 from alyssarosenzweig/silly-nop
...
Fix 66 90 decoding to a nop
2025-03-28 14:50:02 -07:00
Ryan Houdek
bf3275ba4a
Merge pull request #4451 from pmatos/SingleStepCheck
...
Enable maxinst to 1 only if singlestep exists and is enabled
2025-03-28 14:45:40 -07:00
Paulo Matos
68b5a90518
Enable maxinst to 1 only if singlestep exists and is enabled
2025-03-28 18:09:52 +01:00
Alyssa Rosenzweig
3a2ca41724
OpcodeDispatcher: handle 66 90 as a NOP
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-28 13:03:34 -04:00
Ryan Houdek
d34c287f69
Merge pull request #4450 from lioncash/ilog
...
Addressing: Remove unnecessary assert in LoadEffectiveAddress()
2025-03-28 06:43:31 -07:00
Ryan Houdek
b744ca16e1
Merge pull request #4449 from pmatos/ConfigWarnSA
...
Remove some warnings from Config.cpp
2025-03-28 06:43:01 -07:00
Paulo Matos
573c262bb2
Remove some warnings from Config.cpp
...
- unused includes, and
- unused functions.
2025-03-28 14:18:40 +01:00
Lioncache
ff2c2f1e1f
Addressing: Remove unnecessary assert in LoadEffectiveAddress()
...
ilog2 already has an assert for this.
2025-03-28 06:08:08 -04:00
Lioncache
54dbb9f248
OpcodeDispatcher: Fix potential for uninitialized value use in RCRSmallerOp()
...
If Src isn't a constant, then no value is actually assigned to SrcConst, so this
can result in uninitialized arithmetic being performed
2025-03-28 04:45:40 -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
Ryan Houdek
bd1d6820b7
Merge pull request #4438 from Sonicadvance1/static_analysis_wars
...
Static analysis warning fixes
2025-03-27 20:30:37 -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
b5ed804578
Merge pull request #4444 from lioncash/jitcond
...
JIT: Simplify SVE 256 operation asserts
2025-03-27 19:46:23 -07:00
Ryan Houdek
fbe3a86c4e
Merge pull request #4443 from alyssarosenzweig/ra/cleanup
...
RA: small cleanups
2025-03-27 19:46:14 -07:00
Ryan Houdek
ec976f3f75
Merge pull request #4435 from alyssarosenzweig/opt/pall-pf-af
...
Pair PF/AF when spilling static regs
2025-03-27 19:45:29 -07:00
Lioncache
35ee12e7e9
Addressing: Amend binary AND into logical AND in SelectAddressMode()
...
Bitwise AND here is a little odd and was likely intended to be a logical AND.
2025-03-27 17:29:08 -04:00
Lioncache
4497ab8844
JIT: Simplify SVE 256 operation asserts
...
We can make these slightly less verbose.
2025-03-27 16:55:20 -04:00
Alyssa Rosenzweig
9f399f3313
RegisterAllocationPass: rm unused arg to DecodeSRAReg
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-27 16:45:31 -04:00
Alyssa Rosenzweig
3939213336
RegisterAllocationPass: rm useless assertion
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-27 16:45:31 -04:00
Ryan Houdek
b8165813b4
Merge pull request #4439 from pmatos/Init-SA
...
Initialize class fields to null/zero
2025-03-27 09:32:18 -07:00