Ryan Houdek
3bac767866
Merge pull request #3645 from neobrain/refactor_aotir
...
AOTIR: Refactor interfaces to clarify ownership flow
2024-05-21 16:03:06 -07:00
Ryan Houdek
7b4e48480b
Merge pull request #3646 from alyssarosenzweig/opt/minor-disp
...
OpcodeDispatcher: eliminate some Bfe's
2024-05-21 15:57:52 -07:00
Alyssa Rosenzweig
50e56358c3
OpcodeDispatcher: eliminate Bfe's with cmpxchg
...
ConstProp was catching these but they're pointless.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-21 16:39:00 -04:00
Alyssa Rosenzweig
465dbc260f
OpcodeDispatcher: eliminate Bfe's with lea
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-21 16:39:00 -04:00
Tony Wasserka
9f291f3adb
AOTIR: Remove obsolete fields from serialized data
2024-05-21 17:54:28 +02:00
Tony Wasserka
f2acc3da4c
Core: Clean up ownership management for IRListView and RegisterAllocationData
...
IRListView is now purely a view type. Instead, ownership is managed on-demand
by a separate interface (IRStorageBase). Materialization of IRListViews to
owning types is moved to this interface as well.
This also avoids unneeded copies of the data.
2024-05-21 17:51:17 +02:00
Tony Wasserka
f8f165d96d
AOTIR: Remove redundant variable declarations
...
This code was already using structured bindings anyway and just reassigned
the values to different variables.
2024-05-21 17:38:41 +02:00
Tony Wasserka
baef95992c
AOTIR: Drop unneeded local variable
2024-05-21 17:38:41 +02:00
Tony Wasserka
97e18c8469
AOTIR: Drop effectively unused parameter from PreGenerateIRFetch
2024-05-21 17:38:41 +02:00
Tony Wasserka
6e04f7368b
AOT: Use std::optional to replace a validity boolean in PreGenerateIRFetch
2024-05-21 17:38:41 +02:00
Tony Wasserka
55a835ebb8
AOTIR: Clarify serialization code
...
The comments weren't too helpful. Using the struct types directly conveys the
same information more clearly.
2024-05-21 17:38:41 +02:00
Alyssa Rosenzweig
85776c2537
Merge pull request #3643 from alyssarosenzweig/opt/shift-garbage
...
Allow garbage on more shifts
2024-05-21 11:05:47 -04:00
Alyssa Rosenzweig
769b2c2a46
OpcodeDispatcher: allow garbage on shift dests
...
doesn't matter for left shifts (we mask off the garbage), or 32-bit shifts, or
shifts where we explicitly sbfe after.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-20 10:33:15 -04:00
Alyssa Rosenzweig
3b2100307e
OpcodeDispatcher: allow garbage on more shifts
...
we're masking anyway
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-20 10:33:15 -04:00
Alyssa Rosenzweig
3c0f243a2d
JIT: dedupe MapCC
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-20 10:25:56 -04:00
Alyssa Rosenzweig
bbf1563f80
JIT/ALUOps: extract DEF_BINOP_WITH_CONSTANT
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-20 10:25:56 -04:00
Alyssa Rosenzweig
ed6b1011f9
JIT/VectorOps: deduplicate common implementations
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-20 10:25:55 -04:00
Ryan Houdek
e3e7f0279c
Merge pull request #3644 from alyssarosenzweig/clang-format/left
...
clang-format: left-align escaped newlines
2024-05-20 07:12:50 -07:00
Alyssa Rosenzweig
a10f984b1c
clang-format: left-align escaped newlines
...
alternative to #3638 . this is theoretically better for side-by-side diffs. in
practice it may make other diffs worse since all the \'s change when part of the
macro change.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-20 09:47:21 -04:00
Ryan Houdek
b83cbcb33c
ConstProp: Bandage fix for instcountci
...
Fixed offset x86 code doesn't quite solve the issue, so adjust this
heuristic just to get instcounci to stop flaking.
This code is going to heavily change soon anyway so +50 doesn't change
much.
2024-05-18 18:06:25 -07:00
Ryan Houdek
048c8ded88
Merge pull request #3622 from Sonicadvance1/move_emitter
2024-05-17 10:41:51 -07:00
Alyssa Rosenzweig
bb064c7334
JIT/AtomicOps: factor out elementsize
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-16 17:28:58 -04:00
Alyssa Rosenzweig
2d3d49b900
JIT/ConversionOps: use ConvertSubRegSize*
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-16 17:18:59 -04:00
Alyssa Rosenzweig
ea7096ed5b
JIT/MemoryOps: use ConvertSubRegSize8
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-16 17:16:12 -04:00
Alyssa Rosenzweig
7a0f6c0a80
JIT: factor ConvertSize helper
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-16 17:13:00 -04:00
Alyssa Rosenzweig
e4ee35a925
JIT: factor out sub reg size conversion
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-16 15:56:05 -04:00
Ryan Houdek
926eefc86c
Merge pull request #3635 from alyssarosenzweig/opt/flag-store
...
OpcodeDispatcher: reorder some moves
2024-05-16 10:58:40 -07:00
Ryan Houdek
3eb7a5b998
Merge pull request #3632 from pmatos/RemoveBlocks
...
Use erase-remove idiom to remove element
2024-05-16 10:50:50 -07:00
Ryan Houdek
58614ff131
Merge pull request #3634 from alyssarosenzweig/constprop/leftover
...
ConstProp: remove x86 jit leftover
2024-05-16 10:48:31 -07:00
Alyssa Rosenzweig
bf3a09e5e3
ConstProp: remove x86 jit leftover
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-16 09:21:41 -04:00
Alyssa Rosenzweig
7b39e57e72
OpcodeDispatcher: defer overwritten store
...
this can save moves, as it's a bit easier to reason about the live ranges.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-16 08:31:58 -04:00
Paulo Matos
1eb7be9870
Check BitOffset instead of zeroext
2024-05-16 10:50:40 +02:00
Paulo Matos
93e4288c57
Fix left shift undefined behaviour
...
Here BitOffset can have values higher than 32.
2024-05-16 10:22:03 +02:00
Paulo Matos
9ca4868833
Use erase-remove idiom to remove element
...
Fixes #3631
2024-05-16 10:16:01 +02:00
Ryan Houdek
efe7c54374
Merge pull request #3625 from Sonicadvance1/restricted_inst
...
FEXCore: Fixes the difference between CPL-0 and undefined instructions
2024-05-14 07:11:19 -07:00
Ryan Houdek
9e1840e974
FEXCore: Moves CodeEmitter to FHU
...
Now that the vixl dependency is gone, this gets moved to FHU since the
frontend is going to need it for a microjit.
2024-05-13 12:48:10 -07:00
Ryan Houdek
1f40590f9a
Emitter: Inline IsImmLogical from vixl
...
The only core vixl usage we use in the emitter. Is a complete pain to
reimplement so keep it around.
2024-05-13 12:48:10 -07:00
Ryan Houdek
7d9af246ea
CodeEmitter: Removes vixl Float16 usage
...
Creating local Float16 helper which handles our needs
2024-05-13 12:48:09 -07:00
Ryan Houdek
010028e381
FEXCore: Fixes the difference between CPL-0 and undefined instructions
...
undefined instructions are expected to return SIGILL, while implemented
instructions that aren't available in CPL-3 are expected to SIGSEGV.
Noticed this while testing out CPU-Z, it installs a kernel module and
does a bunch of `RDMSR` and `OUTS` instructions. Decided to walk through
the rest of the instructions in the `System Instruction Reference`
section.
Turns out there's a bunch of oddities in there that we don't support.
First step is to go through all the explicitl SIGILL and SIGSEGV and
implement a test for them.
Next step will be implementing the remaining operations that are
considered "System" operations but are still available in CPL-3.
This list includes:
- lar
- lgdt
- lsl
- sidt
- sldt
- stac
- clac
- verr
- verw
2024-05-13 11:12:26 -07:00
Ryan Houdek
d19b57a52e
FEXCore: Get rid of DeferredSignalFaultAddress and use the InterruptFaultPage
...
Arm64ec introduced the InterruptFaultPage which is lower overhead since
instead of ldr+str it just turns in to a single str. We were already
allocating the space, FEXCore and the frontend signal delegator just
needed to be updated to understand the new location.
We can additionally use this in the future if we want to make deferred
async signals INSIDE the JIT only cost a single str as well.
2024-05-10 15:31:28 -07:00
Ryan Houdek
2cae2f2462
Merge pull request #3617 from bylaws/arm64ec-dispatcher
...
FEXCore: ARM64EC x64 entry/exit support
2024-05-08 12:25:26 -07:00
Ryan Houdek
1fde5d7fca
Merge pull request #3621 from alyssarosenzweig/ra/drop-avx
...
RegisterAllocationPass: drop AVX flag
2024-05-08 11:42:53 -07:00
Ryan Houdek
10de2f83ac
Merge pull request #3620 from alyssarosenzweig/ir/burn-parser
...
IR: drop IRParser
2024-05-08 11:29:37 -07:00
Alyssa Rosenzweig
9d86e11a47
RegisterAllocationPass: drop AVX flag
...
RA should not depend on whether we support AVX, that's a huge layering
violation! and fortunately, it does not.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-08 14:26:31 -04:00
Alyssa Rosenzweig
4d503d3155
RegisterAllocationPass: drop prewritable check
...
always true.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-08 14:24:41 -04:00
Alyssa Rosenzweig
7e663b91df
IR: drop IRParser
...
Aside from its own self-test, the parser is unused and should remain that way,
since it's a maintenance burden with no real benefit. Burn it.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-08 14:16:54 -04:00
Alyssa Rosenzweig
3c3ba62c10
MemoryOps: optimize 32-bit SRA case
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-08 14:01:42 -04:00
Alyssa Rosenzweig
34fe56dfb2
DeadStoreElimination: CSE block info
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-08 14:01:42 -04:00
Alyssa Rosenzweig
ecf8cde5e0
DeadStoreElimination: group common logic
...
slightly less obnoxious copypaste.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-08 14:01:42 -04:00
Alyssa Rosenzweig
55284aad7e
DeadStoreElimination: don't handle partial stores
...
SRA replaces the whole contents of the destination.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-05-08 14:01:42 -04:00