Alyssa Rosenzweig
ad0dd34412
InstCountCI: Update
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-31 20:31:38 -04:00
Alyssa Rosenzweig
7b1bb159fa
OpcodeDispatcher: use ForeachDirection for scas
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-31 20:31:38 -04:00
Alyssa Rosenzweig
5c7f2934de
OpcodeDispatcher: use ForeachDirection for lods
...
eliminates xblock live
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-31 20:29:29 -04:00
Alyssa Rosenzweig
5d79d4eb50
OpcodeDispatcher: use ForeachDirection for CMPS
...
eliminates xblock liveness
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-31 20:29:16 -04:00
Alyssa Rosenzweig
3f66173bc7
OpcodeDispatcher: add ForeachDirection helper
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-31 20:28:56 -04:00
Alyssa Rosenzweig
784cdd7b6b
InstCountCI: Update
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-31 19:54:14 -04:00
Alyssa Rosenzweig
1a1545da0f
OpcodeDispatcher: rework rep cmp
...
1. pull flag calculation out of the loop body for perf
2. fully rotate the inner loop to save an instruction per iteration
3. hoist the rcx=0 jump to avoid computing df when rcx=0
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-31 19:54:00 -04:00
Alyssa Rosenzweig
a70ea30c02
IR: add CondSubNZCV (ccmp) instruction
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-31 17:50:57 -04:00
Alyssa Rosenzweig
67baff8a57
Merge pull request #3537 from Sonicadvance1/remove_vla_ra
...
RA: Removes VLA usage
2024-03-31 14:44:37 -04:00
Ryan Houdek
fedc24be1e
RA: Removes VLA usage
...
Just like #3508 , clang-18 complains about VLA usage.
This vector is relatively small, only around 18 elements but is
semi-dynamic depending on arch and if FEXCore is targeting Linux or
Win32.
2024-03-30 16:50:04 -07:00
Alyssa Rosenzweig
2a625a467b
Merge pull request #3530 from alyssarosenzweig/opt/cmpxchg-flags2
...
Optimize cmpxchg with flagm
2024-03-30 15:22:40 -04:00
Alyssa Rosenzweig
9bca052146
InstCountCI: Update
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-30 14:12:59 -04:00
Alyssa Rosenzweig
706065b0e2
OpcodeDispatcher: accelerate cmpxchg with flagm
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-30 14:12:59 -04:00
Alyssa Rosenzweig
9fd32f07cb
JIT: preserve nzcv for the slow atomic path
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-30 14:12:59 -04:00
Alyssa Rosenzweig
deba6a1b76
JIT: add comment about unaligned backpatching
...
save future me some grief.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-30 14:12:59 -04:00
Alyssa Rosenzweig
6866c3d0ac
InstCountCI: add dead cmpxchg case
...
not super optimizable but worth tracking.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-30 14:12:59 -04:00
Alyssa Rosenzweig
d25ace43aa
Merge pull request #3528 from alyssarosenzweig/ra/xsave-xrstor
...
Eliminate crossblock liveness in xsave/xrstor
2024-03-30 14:11:25 -04:00
Mai
2ad170b7d7
Merge pull request #3533 from Sonicadvance1/remove_debugstore
...
FEXCore: Remove DebugStore map
2024-03-29 20:19:47 -04:00
Ryan Houdek
8564290f76
FEXCore: Remove DebugStore map
...
This hasn't been used and is blocking refactoring more code.
2024-03-29 14:58:44 -07:00
Alyssa Rosenzweig
1d96631af7
InstCountCI: Update
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-29 09:58:03 -04:00
Alyssa Rosenzweig
c513b9685d
OpcodeDispatcher: eliminate crossblock liveness in xsave/xrstor
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-29 09:57:16 -04:00
Ryan Houdek
aa26b6288e
Merge pull request #3522 from alyssarosenzweig/ra/cmpxchg8
...
OpcodeDispatcher: eliminate branch in cmpxchg pair
2024-03-27 21:56:19 -07:00
Mai
3d31291c3d
Merge pull request #3510 from Sonicadvance1/fix_pthread_memleak
...
Linux/Threads: Fixes a stack memory leak for pthreads
2024-03-27 21:38:44 -04:00
Ryan Houdek
624bc3fce5
Merge pull request #3520 from Sonicadvance1/sleep_process
...
FEXLoader: Add a way to sleep a process on startup
2024-03-27 18:35:06 -07:00
Alyssa Rosenzweig
d1722ab119
InstCountCI: Update
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-27 12:40:27 -04:00
Alyssa Rosenzweig
61758ea47d
OpcodeDispatcher: eliminate branch in cmpxchg pair
...
In the old case:
* if we take the branch, 1 instruction
* if we don't take the branch, 3 instruction
* branch predictor fun
* 3 instructions of icache pressure
In the new case:
* unconditionally 2 instructions
* no branch predictor dependence
* 2 instructions of icache pressure
This should not be non-neglibly worse, and it simplifies things for RA.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-27 12:40:06 -04:00
Ryan Houdek
7b74ca1931
Merge pull request #3514 from alyssarosenzweig/opt/demon
...
rewrite Demon Addition Adjust (DAA) and other demonic opcodes
2024-03-26 23:24:00 -07:00
Ryan Houdek
24fd28ed9e
Merge pull request #3511 from Sonicadvance1/more_tso_levers
...
FEXCore: Adds more TSO control levers
2024-03-26 23:23:41 -07:00
Ryan Houdek
970d5d5b13
Merge pull request #3509 from Sonicadvance1/allow_telemetry_redirect
...
Telemetry: Allow redirecting directory that data is written to
2024-03-26 23:23:05 -07:00
Ryan Houdek
79454ed8a6
Merge pull request #3507 from Sonicadvance1/fd_tracking_check
...
FEXLoader: Add some debug-only tracking for FEX owned FDs
2024-03-26 23:22:29 -07:00
Ryan Houdek
7f90ca53f7
Merge pull request #3505 from Sonicadvance1/telemetry_noncanonical
...
Telemetry: Adds tracker for non-canonical memory access crash
2024-03-26 23:21:32 -07:00
Mai
542f454630
Merge pull request #3517 from Sonicadvance1/remove_mman
...
FEXCore: Removes vestigial mman SMC checking
2024-03-26 23:28:05 -04:00
Ryan Houdek
4ea6305940
Merge pull request #3521 from neobrain/fix_libfwd_vkcreateinstance
...
Library Forwarding/vulkan: Fix query of vkCreateInstance function pointer
2024-03-26 08:59:23 -07:00
Tony Wasserka
4d8ffa2abb
Library Forwarding/vulkan: Fix query of vkCreateInstance function pointer
...
The Vulkan specification states that querying "global commands" like
vkCreateInstance with a non-NULL instance is undefined behavior. Indeed, some
implementations will return null pointers in such cases.
Instead, we can drop the query from DoSetupWithInstance altogether, since
the library initializer will load the function pointer using dlsym instead.
Fixes #3519 .
2024-03-26 16:25:51 +01:00
Ryan Houdek
ade0c46845
FEXLoader: Add a way to sleep a process on startup
...
I find myself reimplementing this nearly monthly. Actually codify it so
I can stop reimplementing it.
2024-03-26 07:48:09 -07:00
Ryan Houdek
1450c92b60
Merge pull request #3518 from pmatos/20MFix
...
Put <20M in double quotes to avoid truncate error
2024-03-26 05:10:45 -07:00
Paulo Matos
53f02ee869
Put <20M in double quotes to avoid truncate error
...
Avoids bash assuming < is redirection.
See error in https://github.com/FEX-Emu/FEX/actions/runs/8434045431/job/23096421079#step:18:16
2024-03-26 11:47:57 +00:00
Ryan Houdek
6f29e75f67
FEXCore: Removes vestigial mman SMC checking
...
This wasn't actually wired up to anything ever since some refactoring
occured two years ago.
2024-03-26 02:56:26 -07:00
Ryan Houdek
c1c797bcba
FEXConfig: Add new TSO levers
...
Nice and convenient when testing applications.
2024-03-26 02:50:54 -07:00
Alyssa Rosenzweig
bbc232741b
InstCountCI: Update
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-25 19:43:20 -04:00
Alyssa Rosenzweig
dfe0bdd7f2
OpcodeDispatcher: rewrite DAS
...
exhaustively checked against the Intel pseudocode since this is tricky:
def intel(AL, CF, AF):
old_AL = AL
old_CF = CF
CF = False
if (AL & 0x0F) > 9 or AF:
Borrow = AL < 6
AL = (AL - 6) & 0xff
CF = old_CF or Borrow
AF = True
else:
AF = False
if (old_AL > 0x99) or old_CF:
AL = (AL - 0x60) & 0xff
CF = True
return (AL & 0xff, CF, AF)
def fex(AL, CF, AF):
AF = AF | ((AL & 0xf) > 9)
CF = CF | (AL > 0x99)
NewCF = CF | (AF if (AL < 6) else CF)
AL = (AL - 6) if AF else AL
AL = (AL - 0x60) if CF else AL
return (AL & 0xff, NewCF, AF)
for AL in range(256):
for CF in [False, True]:
for AF in [False, True]:
ref = intel(AL, CF, AF)
test = fex(AL, CF, AF)
print(AL, "CF" if CF else "", "AF" if AF else "", ref, test)
assert(ref == test)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-25 19:43:10 -04:00
Alyssa Rosenzweig
e26481e3cc
OpcodeDispatcher: simplify AAM
...
in the area.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-25 19:43:10 -04:00
Alyssa Rosenzweig
86b5a2f352
OpcodeDispatcher: simplify AAD
...
noticed in the area.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-25 19:43:10 -04:00
Alyssa Rosenzweig
2bf880c43a
OpcodeDispatcher: rewrite AAS
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-25 19:43:10 -04:00
Alyssa Rosenzweig
583d4f8f94
OpcodeDispatcher: factor out CalculateAFForDecimal
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-25 19:43:10 -04:00
Alyssa Rosenzweig
3ca2c4377f
OpcodeDispatcher: rewrite AAA
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-03-25 19:43:10 -04:00
Ryan Houdek
32ec4a3c81
Merge pull request #3508 from Sonicadvance1/stop_using_vla
...
ELFParser: Stop using a VLA
2024-03-25 12:18:37 -07:00
Ryan Houdek
76983476b9
Merge pull request #3504 from Sonicadvance1/fix_loop_a16
...
OpcodeDispatcher: Fixes 32-bit mode LOOP RCX register usage
2024-03-25 12:18:14 -07:00
Alyssa Rosenzweig
150af80f3f
Merge pull request #3512 from Sonicadvance1/panic_spilling_block
...
InstcountCI: Adds a block that is causing panic spilling
2024-03-25 13:13:48 -04:00
Alyssa Rosenzweig
a8b59c16d6
Merge pull request #3513 from Sonicadvance1/panic_spilling_rip
...
RA: Adds RIP when a block panic spills
2024-03-25 13:13:15 -04:00