Commit Graph
264 Commits
Author SHA1 Message Date
Stefanos Kornilios Mitsis Poiitidis 7a9a95583c Merge pull request #190 from Sonicadvance1/fix_128bit_div
Fixes 128bit divisions on AArch64
2020-05-26 09:34:32 +03:00
Stefanos Kornilios Mitsis Poiitidis ec8eac2836 Merge pull request #197 from Sonicadvance1/remove_xop
Removes XOP frontend handling
2020-05-25 17:16:44 +03:00
Stefanos Kornilios Mitsis Poiitidis a69a821773 Merge pull request #192 from Sonicadvance1/fix_aarch64_llvm9
Fixes LLVM on AArch64
2020-05-25 17:06:28 +03:00
Ryan Houdek 45bf39ca0f Removes XOP frontend handling
This keeps the XOP instruction tables around but removes the decoding
assert.
This lets us implement the POP instruction that overlapped the XOP
prefix without having to deal with XOP at all.

I don't believe we have any real need to support XOP, but if it is a
thing later then it'll be easy to add back
2020-05-25 00:53:14 -07:00
Ryan Houdek 7c98f5a3ac Fixes LLVM on AArch64
LLVM-9 doesn have the include, while LLVM-10 does
2020-05-24 00:19:54 -07:00
Ryan Houdek 61c0fde8fe Fixes ASHR on AArch64
Smaller than 8byte wasn't sexting to the full register so it was causing issues
2020-05-24 00:18:51 -07:00
Ryan Houdek 600ad7f597 Fixes 128bit divisions on AArch64
These were only doing 64bit divisions.
Function calls are a bit ugly but once the new RA lands we can clean them up
2020-05-23 23:45:52 -07:00
Ryan Houdek 64556e3eac Ensures passmanager gets the syscall handler during core init 2020-05-14 01:04:04 -07:00
Ryan Houdek d2cf07a4fd Passes the running mode through from FEX to FEXCore 2020-05-14 00:56:31 -07:00
Stefanos Kornilios Mitsis Poiitidis a65bb87fa8 Merge pull request #183 from Sonicadvance1/fix_frontend_imm
Fixes a bug in the frontend regarding constants
2020-05-12 19:52:43 +03:00
Ryan Houdek 0b88984005 Fixes a bug in the frontend regarding constants
Optimization passes found a bug in the frontend regarding constants.

Specifically in the case of instructions that have a 32bit constant that
are sign extended to 64bit was being incorrectly set to have a size of
32bits (the size of the constant).
So an optimization pass would rematerialize constants of the expected
size, thus ~0ULL would turn in to ~0U and generate invalid code.

Now watch the destination size and set the constant to that size, which
matches what its size will be.
2020-05-11 16:10:50 -07:00
Ryan Houdek e6e4634651 Ensures LLVM JIT doesn't crash if DebugInfo isn't provided
IR doesn't have DebugInfo, all the other backends already handle this
2020-05-09 12:21:54 -07:00
Ryan Houdek 718b3e6b4c Refactors PassManager to ingest IREmitter class instead of OpDispatcher
The Passmanager passes need very little or zero x86 knowledge to do
their work. They don't need the x86 OpDispatcher handling code at all.
Convert this entirely over to using the IREmitter class so it can
actually optimize IR code from the IRLoader frontend
2020-05-09 12:14:59 -07:00
Ryan Houdek dc87134af3 Switches the OpcodeDispatcher over to using the new IREmitter class 2020-05-08 19:08:14 -07:00
Ryan Houdek c25f2845d3 Adds the ability for the frontend codeloader to load IR
This will be used by the IR unit test loader.
Will give the backend IR so it doesn't even parse any x86 code
2020-05-07 17:40:29 -07:00
Ryan Houdek 66dc5ebc54 Merge pull request #179 from FEX-Emu/skmp/fix-exit-code
Propagate guest exit code
2020-05-01 16:58:07 -07:00
Stefanos Kornilios Mitsis Poiitidis d58961ef1e Propagate guest exit code 2020-05-02 02:34:50 +03:00
Stefanos Kornilios Mitsis Poiitidis 3c9be4625c Add silent log 2020-05-02 01:45:22 +03:00
Ryan Houdek 0d89de2799 Merge pull request #175 from Sonicadvance1/xmm_to_mmx
Implements three XMM <-> MMX conversion instructions
2020-05-01 00:52:46 -07:00
Scott Mansell 22a557b2db Remove stray debug code 2020-05-01 19:12:00 +12:00
Ryan Houdek deb5bd8fe8 Implements three XMM <-> MMX conversion instructions
CVTPI2PS does MMX->XMM integer to float conversion with lower 64bit
insert

CVTPS2PI/CVTTPS2PI does an XMM->XMM float to integer conversion
2020-04-29 19:03:48 -07:00
Ryan Houdek 9848f7eac8 Implements the XLAT instruction
This is a fairly straightforward instruction, it's just <segment>:[rBX + AL]
Needs the previous changes since we weren't handling GS correctly
2020-04-29 18:26:03 -07:00
Ryan Houdek 6a98e93666 Implements the segment reading and writing instructions 2020-04-29 18:25:46 -07:00
Ryan Houdek a0f412d85a Update the new register segment reading and writing table flags
These are instructions that can executed at any CPL level
2020-04-29 18:25:46 -07:00
Ryan Houdek 53798f194e Fix the Frontend's handling of the GS prefix
We were accidently treating it as FS each time it was encountered
2020-04-29 18:25:46 -07:00
Ryan Houdek e49a66f740 Implements support for the three loop instructions
loop, loope, loopne
2020-04-29 17:20:09 -07:00
Ryan Houdek 8f2f046fc8 Merge pull request #157 from Sonicadvance1/rcp
Implements support for rcpps/rcpss
2020-04-29 16:03:38 -07:00
Ryan Houdek 056d017ac8 Merge pull request #160 from Sonicadvance1/horizontal_arith
Implements four new vector horizontal ALU ops
2020-04-29 12:56:26 -07:00
Ryan Houdek f99482ed84 Implements four new vector horizontal ALU ops
haddps, hsubps, haddpd, hsubpd
2020-04-29 12:47:27 -07:00
Ryan Houdek f0229fba38 Implements the two new ops in the LLVM JIT 2020-04-29 12:47:27 -07:00
Ryan Houdek f6814de357 Implements the two new ops in the x86-64 JIT 2020-04-29 12:47:27 -07:00
Ryan Houdek 1645e65ff3 Implements the two new ops in the AArch64 JIT 2020-04-29 12:47:27 -07:00
Ryan Houdek 1c572e71c7 Implements the two new ops in the interpreter 2020-04-29 12:47:27 -07:00
Ryan Houdek fee4aeaf88 Merge pull request #167 from Sonicadvance1/fix_exec
Fixes loading EXEC applications in to memory.
2020-04-29 12:31:33 -07:00
Ryan Houdek 2005a2ea3d Merge pull request #164 from Sonicadvance1/fwait
Implements fwait as a nop
2020-04-29 12:30:45 -07:00
Ryan Houdek f1403e5f54 Merge pull request #161 from Sonicadvance1/jrcxz
Implements JRCXZ in the OpcodeDispatcher
2020-04-29 12:30:25 -07:00
Ryan Houdek 3d782f0930 Merge pull request #156 from Sonicadvance1/movsldup
Implements support for movsldup
2020-04-29 12:27:37 -07:00
Ryan Houdek 169875c34d Merge pull request #155 from Sonicadvance1/non_temporal
Implements two non-temporal XMM move instructions
2020-04-29 12:27:22 -07:00
Ryan Houdek 536eb7ec3e Merge pull request #154 from Sonicadvance1/more_satalu
Implements six more saturating arithmetic instructions
2020-04-29 12:27:10 -07:00
Ryan Houdek 1ee9070e8f Merge pull request #150 from Sonicadvance1/fix_x86_code_overflow
Fixes crash that occurs when the x86-64 JIT code cache gets full
2020-04-29 12:26:11 -07:00
Ryan Houdek a0537ed630 Merge pull request #149 from Sonicadvance1/fix_syscall_memleak
Fixes memory leak on shutdown for syscall handlers
2020-04-29 12:25:55 -07:00
Ryan Houdek 2f56c475e2 Fixes memory leak on shutdown for syscall handlers
Switches it over to a unique_ptr to ensure it doesn't happen again.
2020-04-26 18:15:52 -07:00
Ryan Houdek 3528b30684 Fixes loading EXEC applications in to memory.
If we are loading EXEC then we actually need to start loading in to the
lower 32bits of memory.
This lets the frontend code loader handle the memory base instead of
hiding it behind some core magic instead.

This lets us get EXEC programs working.
So now we support EXEC, DYN, and static applications
2020-04-26 18:11:48 -07:00
Ryan Houdek f3f63251ea Merge pull request #124 from Sonicadvance1/fix_cache_clear_crash
Fixes crashes when code cache is cleared
2020-04-26 18:02:54 -07:00
Ryan Houdek ec87131939 Implements fwait as a nop
Since we don't yet support instruction exceptions this is nothing but a
nop.
2020-04-25 23:53:30 -07:00
Ryan Houdek c726e3ef51 Implements JRCXZ in the OpcodeDispatcher
This only operates on 64bit and 32bit RCX register. the 16bit encoding
isn't possible in 64bit mode.
2020-04-25 22:06:46 -07:00
Ryan Houdek ad467c5b30 Adds new vector float negate and float add horizontal IR ops 2020-04-25 17:55:37 -07:00
Ryan Houdek 4ae33147f5 Implements support for rcpps/rcpss 2020-04-24 23:35:33 -07:00
Ryan Houdek a0c0384340 Ensures reciprocal hits the precision we expect in the x86-64 JIT
Otherwise unit tests can fail
2020-04-24 23:34:47 -07:00
Ryan Houdek 73632556ce Implements support for movsldup 2020-04-24 23:13:51 -07:00