Commit Graph
342 Commits
Author SHA1 Message Date
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
Ryan Houdek c171fbb71e Add 64bit config option
Not currently wired up to anything
2020-05-14 00:55:52 -07:00
Stefanos Kornilios Mitsis Poiitidis c555577d07 Merge pull request #184 from Sonicadvance1/RA_Fix
Works around a spill bug in the RA
2020-05-12 23:44:48 +03: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 0a1a52860d Works around a spill bug in the RA
Spilling is a mess in this version of the RA and there was a significant
bug that effectively made spilling either infinite loop or crash.

This adds a bunch of new comments about the logic of the spilling and
ipmroves it so it shouldn't break as easily.

There are still some edge cases that can be hit that break spilling but
a lot of this code is going to be scrapped for the new RA coming up
anyway.
This is temporary until the new RA merges in.
2020-05-11 16:19:08 -07: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 1b720479c4 Adds a self contained IREmitter class
This class does IR emitting and some basic handling of IR specific
tasks.

This is going to be used to split the x86 OpDispatcher from the IR
emission so the IR emitter can be passed around without caring about x86
dependencies.
2020-05-08 19:03:22 -07:00
Ryan Houdek bb7e58b3f1 Adds more IR documentation 2020-05-08 18:40:21 -07:00
Ryan Houdek 4269cef98f Adds the ability for the IR printer to dump TypeDefinition
No IR uses this currently directly but it could definitely happen.
2020-05-07 17:40:29 -07:00
Ryan Houdek 54ee9cbe86 Adds predefined TypeDefinition types for common sizes 2020-05-07 17:40:29 -07:00
Ryan Houdek 6e4b29d760 Implements a TypeDefition type for IR handling
Will be useful when parsing later
2020-05-07 17:40:29 -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 bf2d02c244 Adds python script for generating a markdown file for IR documentation
Pretty light markdown that ends up generating when the build runs
2020-05-07 17:27:54 -07:00
Ryan Houdek f4964927e0 Updates IR generator to support printing out IR lexing code 2020-05-07 17:27:01 -07:00
Ryan Houdek 00028d41db Updates IR dumping to be easier to parse
This will allow us to lex the text
2020-05-07 17:25:44 -07:00
Ryan Houdek 0e4bd4e7b7 Significantly improves IR documentation in the JSON file
Doesn't cover 100% of the IR ops but it hits about half
2020-05-07 17:24:44 -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 0d83454366 Merge pull request #170 from dmiller423/procfs_auxv
Added dup3 syscall, EmulatedFiles : /proc/{self,$PID}/auxv, modified …
2020-04-29 16:06:30 -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
David Miller 09f119a3ce removed front end header / class from EmulatedFiles.cpp 2020-04-29 16:39:40 -04:00
David Miller f916294772 Include unistd.h in EmulatedFiles.cpp as CI doesn't build 2020-04-29 16:04:39 -04:00
David Miller 306cca33d7 Added dup3 syscall, EmulatedFiles : /proc/{self,$PID}/auxv, modified OpenAt() to normalize path to canonical if possible or lexically_normal. Note: canonical will change symlinks, ensure the map keys take this into account. 2020-04-29 16:00:59 -04: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 523562cc6d Merge pull request #153 from Sonicadvance1/more_syscalls3
Implements 9 new syscalls
2020-04-29 12:26:59 -07:00
Ryan Houdek fb88100a7e Merge pull request #152 from Sonicadvance1/implement_open_syscall
Implements the open syscall
2020-04-29 12:26:46 -07:00