lioncash
dcc218a168
OpcodeDispatcher: Handle VPMULLD
2022-12-16 23:20:25 +00:00
lioncash
49b9b18b4a
OpcodeDispatcher: Handle VPMULLW
2022-12-16 23:07:06 +00:00
lioncash
47b21fa758
OpcodeDispatcher: Handle VPSRLQ (vector)
...
Also mark VPMOVMSKB as UNDEC, since it's not implemented yet.
2022-12-16 22:18:40 +00:00
lioncash
b6e82965df
OpcodeDispatcher: Handle VPSRLD (vector)
2022-12-16 22:09:52 +00:00
lioncash
8dc8785340
OpcodeDispatcher: Handle VPSRLW (vector)
2022-12-16 22:00:53 +00:00
lioncash
c710ab60b0
OpcodeDispatcher: Factor out PSRLDOp implementation to regular function
...
This will be used with the AVX variants of the shifts also
2022-12-16 21:43:11 +00:00
Ryan Houdek
c86ba7646c
Merge pull request #2259 from lioncash/pextr
...
OpcodeDispatcher: Handle VPEXTR{B, D, Q, W}/VEXTRACTPS
2022-12-16 11:25:38 -08:00
Ryan Houdek
c1e301a5ed
Merge pull request #2257 from lioncash/limm
...
OpcodeDispatcher: Handle immediate variants of VPSLL{D, Q, W}
2022-12-16 11:23:16 -08:00
lioncash
37c743b616
OpcodeDispatcher: Handle VPSLLQ (immediate)
2022-12-16 18:37:27 +00:00
lioncash
c810ae4018
OpcodeDispatcher: Handle VPSLLD (immediate)
2022-12-16 18:37:27 +00:00
lioncash
d3481c8271
OpcodeDispatcher: Handle VPSLLW (immediate)
2022-12-16 18:37:27 +00:00
lioncash
7c1e152441
OpcodeDispatcher: Extract PSLLI impl to regular function
...
This will be reused for the AVX variants.
2022-12-16 18:37:20 +00:00
lioncash
f11ac8674d
OpcodeDispatcher: Handle VEXTRACTPS
2022-12-16 18:13:55 +00:00
Ryan Houdek
1fecf89bfc
Arm64: Inline Syscall spill optimization
...
This was likely an issue with signals racing to the spill handler, which
we have fixed bugs with over the past few months.
This means we don't need to spill all SRA GPR registers anymore, at most
we need to spill three registers that intersect with syscall arguments.
2022-12-16 10:04:16 -08:00
lioncash
21ad0fa334
OpcodeDispatcher: Handle VPEXTRQ
...
VPEXTRQ uses VEX.W to handle size differencing, since it shares an
encoding spot with VPEXTRD, so we need to handle that a little
differently.
2022-12-16 18:02:24 +00:00
lioncash
3429815103
OpcodeDispatcher: Handle VPEXTRD
2022-12-16 17:33:01 +00:00
lioncash
559ff1582e
OpcodeDispatcher: Handle VPEXTRW
2022-12-16 17:29:16 +00:00
lioncash
2e973ae079
OpcodeDispatcher: Handle VPEXTRB
2022-12-16 14:37:47 +00:00
Ryan Houdek
40e073c8b2
Arm64: Optimize SVE register spilling and filling
...
Causes the dispatcher to drop from 4476 bytes down to 3900 for
SVE-256bit supporting targets.
This is done by significantly reducing SVE loadstore ops. Going from 8
instructions per 4 registers, down to 2 instructions.
This is done by switching from 1 register loadstore instructions up to 4
register loadstore instructions. Which should significantly improve
performance on future SVE platforms.
Filling and Spilling to the context is still using the old code path
because SVE doesn't offer non-interleaving loadstores.
Spilling and filling on the stack is fine because we don't need to match
context state.
2022-12-16 00:25:50 -08:00
lioncash
8fac21e43f
OpcodeDispatcher: Handle VPSLLQ (vector)
2022-12-16 06:34:00 +00:00
lioncash
d9a1e97bc1
OpcodeDispatcher: Handle VPSLLD (vector)
2022-12-16 06:34:00 +00:00
lioncash
848f1a2f78
OpcodeDispatcher: Handle VPSLLW (vector)
2022-12-16 06:34:00 +00:00
lioncash
7b8a46d934
OpcodeDispatcher: Move PSLL impl into a regular function
2022-12-16 06:33:58 +00:00
Mai
9a8852f9b6
Merge pull request #2250 from Sonicadvance1/optimize_spilling_filling
...
Arm64: Optimizing spilling and filling
2022-12-16 04:47:22 +00:00
Mai
65e8bf9d72
Merge pull request #2253 from Sonicadvance1/single_page_dispatcher
...
Arm64: Reduce dispatcher to 1 page
2022-12-16 04:44:55 +00:00
Ryan Houdek
5dc7dfacb3
Arm64: Reduce dispatcher to 1 page
...
We currently only use 2236 bytes, no need for two pages.
Once #2250 is merged we will use 1716 bytes
2022-12-15 20:33:28 -08:00
lioncash
122aa8a69a
Arm64/VectorOps: Simplify FADDP result merging
...
Keeps the implementation similarly in sync with VAddP.
2022-12-16 04:19:46 +00:00
Ryan Houdek
8ce6c08152
Merge pull request #2251 from lioncash/hadd
...
OpcodeDispatcher: Handle VPHADDW/VPHADDD
2022-12-15 20:11:07 -08:00
Ryan Houdek
1beb791d52
Arm64: Optimizing spilling and filling
...
Just makes these a little more optimal when jumping out of the JIT.
Noticed these while working on the new emitter.
2022-12-15 20:04:16 -08:00
lioncash
27c0d4a9f5
OpcodeDispatcher: Handle VPHADDD
2022-12-16 03:28:57 +00:00
lioncash
dd4ba7562f
OpcodeDispatcher: Handle VPHADDW
2022-12-16 03:28:57 +00:00
lioncash
bd9d8e8fe5
x86_64: Correct handling for 128-bit/256-bit VAddP
...
Makes the behavior consistent with the ARM JIT.
2022-12-16 03:28:57 +00:00
lioncash
c7ac204322
Arm64/VectorOps: Simplify VAddP merging operation
...
We can just merge the two results together instead of shifting to the
left and then ORing together.
2022-12-16 03:28:52 +00:00
lioncash
5e634fcbc9
Crypto: Explicitly clear upper lane with VPCLMULQDQ
...
Ensures the 128-bit case will be handled when extending for 256-bit
2022-12-16 01:08:48 +00:00
lioncash
e985dcdb22
X86Tables: Restrict CVTTSD2SI src to 64 bit
...
When accessing memory, this should only be doing a 64-bit access, rather
than a 128-bit one.
2022-12-15 23:59:15 +00:00
lioncash
ee9778480d
X86Tables: Restrict CVTDQ2PD src to 64 bit
...
When accessing memory, this should only be doing a 64-bit access, rather
than a 128-bit one.
2022-12-15 23:46:48 +00:00
Mai
048daa4579
Merge pull request #2244 from Sonicadvance1/move_to_header
...
ARM64: Moves RA functions to header
2022-12-15 23:13:32 +00:00
Ryan Houdek
6ae8a1e55f
ARM64: Moves RA functions to header
...
These are just some basic address calculations and a load, we want these
to be inlined as much as possible.
2022-12-15 15:00:33 -08:00
Ryan Houdek
dc2eaf6511
Merge pull request #2246 from lioncash/extend
...
OpcodeDispatcher: Handle VPMOVSXB{D, W, Q}/VPMOVSXW{D, Q}/VPMOVSXDQ/VPMOVZXB{D, W, Q}/VPMOVZXW{D, Q}/VPMOVZXDQ
2022-12-15 14:19:28 -08:00
lioncash
ba5fafcd7f
OpcodeDispatcher: Narrow memory access with scalar rounding operations
...
These should only be accessing a 32-bit or 64-bit portion of memory
depending on single or double precision variants are used. Previously
we'd be doing a full 128-bit load.
2022-12-15 19:42:37 +00:00
lioncash
b12503fe32
OpcodeDispatcher: Handle VPMOVSXDQ
2022-12-15 18:10:38 +00:00
lioncash
aa63c7b94d
OpcodeDispatcher: Handle VPMOVSXWQ
2022-12-15 18:08:00 +00:00
lioncash
cccbb7f595
OpcodeDispatcher: Handle VPMOVSXWD
2022-12-15 18:01:43 +00:00
lioncash
ce12ed60ae
OpcodeDispatcher: Handle VPMOVSXBQ
2022-12-15 17:58:42 +00:00
lioncash
d7eab5f787
OpcodeDispatcher: Handle VPMOVSXBD
2022-12-15 17:54:51 +00:00
lioncash
21537a3636
OpcodeDispatcher: Handle VPMOVSXBW
2022-12-15 17:50:58 +00:00
lioncash
588a2611a7
OpcodeDispatcher: Handle VPMOVZXDQ
2022-12-15 17:45:14 +00:00
lioncash
2895a09101
OpcodeDispatcher: Handle VPMOVZXWQ
2022-12-15 17:41:15 +00:00
lioncash
5c8d40d9be
OpcodeDispatcher: Handle VPMOVZXWD
2022-12-15 17:37:51 +00:00
lioncash
b4079cfea3
OpcodeDispatcher: Handle VPMOVZXBQ
2022-12-15 17:32:18 +00:00