Commit Graph
493 Commits
Author SHA1 Message Date
Ryan Houdek a97c2c8bb3 Adds MMX decoding support to the frontend 2020-03-27 18:07:57 -07:00
Stefanos Kornilios Mitsis Poiitidis 84743796a5 Merge pull request #67 from Sonicadvance1/more_cvt
Implements two more CVT instructions
2020-03-23 00:39:59 +02:00
Stefanos Kornilios Mitsis Poiitidis d0667452e6 Merge pull request #66 from Sonicadvance1/pmul
Implements PMULLW
2020-03-23 00:39:49 +02:00
Stefanos Kornilios Mitsis Poiitidis 75e3f1a9aa Merge pull request #68 from Sonicadvance1/paddb
Implements PADDB
2020-03-23 00:39:37 +02:00
Ryan Houdek 8e21e6b456 Implements PADDB unit test 2020-03-22 13:07:39 -07:00
Ryan Houdek 33e68cf0c4 Implements PADDB in OpDispatcher 2020-03-22 13:07:25 -07:00
Ryan Houdek 7cdaefccd4 Adds CVTSS2SI unit test 2020-03-22 13:06:19 -07:00
Ryan Houdek c87ef005b1 Adds CVTTPD2DQ unit test 2020-03-22 13:05:54 -07:00
Ryan Houdek 71b507f8de Extends CVTTSS2SI test to test negative numbers 2020-03-22 13:05:34 -07:00
Ryan Houdek eeebfeaec1 Implements two more CVT instructions
CCVTSS2SI and CVTTPD2DQ
2020-03-22 13:03:34 -07:00
Ryan Houdek bdf1440e11 Adds unit test for PMULLW 2020-03-22 13:00:36 -07:00
Ryan Houdek ad71b4de94 Implements PMULLW in OpDispatcher
Renames the PMULL function that does PMUL to larger element to have the distinction between the two
2020-03-22 13:00:36 -07:00
Ryan Houdek f4dc6ee1ce Adds vector multiply op to LLVM JIT 2020-03-22 13:00:36 -07:00
Stefanos Kornilios Mitsis Poiitidis 013ac22744 Merge pull request #62 from Sonicadvance1/vector_mul
Implement vector integer multiply IR ops
2020-03-22 09:01:35 +02:00
Stefanos Kornilios Mitsis Poiitidis 7930712ef2 Merge pull request #63 from Sonicadvance1/vector_ftozs
Implements Vector_FTOZS op in x86 JIT
2020-03-22 09:01:21 +02:00
Stefanos Kornilios Mitsis Poiitidis 7989a22802 Merge pull request #53 from Sonicadvance1/fix_flag_setting
Implements and fixes flag setting in a few instructions
2020-03-22 09:01:08 +02:00
Stefanos Kornilios Mitsis Poiitidis 208dc794e8 Merge pull request #64 from Sonicadvance1/more_syscalls
Implements more syscalls that I found while running applications
2020-03-22 08:58:39 +02:00
Stefanos Kornilios Mitsis Poiitidis 9ecdfefdd9 Merge pull request #65 from Sonicadvance1/comiss
Implements the COMISS instructions
2020-03-22 08:57:17 +02:00
Ryan Houdek f89ef01578 Implements the COMISS instructions
These are fairly popular so not having them around is causing headaches.
We will really want these in the future to use the host register, btu
that is more time consuming than I want to dedicate to at the moment.

So the FCMP instruction must be told which flags to generate up front,
then it generates the flags in to a GPR which are then tracked and
pulled out with a specific IR op.

This can be augmented in the future to more easily RA the host flag
register
2020-03-21 22:52:46 -07:00
Ryan Houdek b948be7ad8 Implements more syscalls that I found while running applications
Futex needs to be looked at seriously soon to see if we can just pass it
directly
2020-03-21 21:12:15 -07:00
Ryan Houdek c94102051c Implements Vector_FTOZS op in x86 JIT 2020-03-21 20:58:53 -07:00
Ryan Houdek 2133a1755d Implement vector integer multiply IR ops 2020-03-21 20:56:54 -07:00
Stefanos Kornilios Mitsis Poiitidis 628a208db2 Merge pull request #61 from Sonicadvance1/ELFLoader_arg_plumbing
Plumbs ELFLoader arguments through the CodeLoader
2020-03-22 03:19:16 +02:00
Ryan Houdek 3fd1475d30 Plumbs ELFLoader arguments through the CodeLoader
This is necessary for execve in the future to keep everything in sync
2020-03-21 15:19:31 -07:00
Ryan Houdek 8459f75487 Updates cpp-optparse submodule 2020-03-21 15:18:20 -07:00
Stefanos Kornilios Mitsis Poiitidis e18fafbf5c Merge pull request #60 from Sonicadvance1/remove_sarx
Removes sarx usage in the x86 JIT
2020-03-21 22:04:55 +02:00
Ryan Houdek b93848c343 Removes sarx usage in the x86 JIT 2020-03-21 12:44:27 -07:00
Stefanos Kornilios Mitsis Poiitidis f9b7eff7c6 Merge pull request #58 from Sonicadvance1/instruction_fixes
Fixes for SQRTPD, SQRTPS, RSQRTPS
2020-03-21 09:31:00 +02:00
Stefanos Kornilios Mitsis Poiitidis 8a1a3c222b Merge pull request #57 from Sonicadvance1/fix_futex
Fixes a couple bugs in the futex syscall
2020-03-21 09:30:51 +02:00
Stefanos Kornilios Mitsis Poiitidis 24be8b974f Merge pull request #50 from Sonicadvance1/keep_print
Makes sure DCE pass doesn't remove print IR op
2020-03-21 09:27:37 +02:00
Stefanos Kornilios Mitsis Poiitidis c4cc36d23b Merge pull request #54 from Sonicadvance1/threaded_compile_workaround
Throws a mutex in CompileBlock until we properly handle threaded compilation.
2020-03-21 09:27:06 +02:00
Stefanos Kornilios Mitsis Poiitidis 790faab6a3 Merge pull request #51 from Sonicadvance1/cpuid_hypervisor
Adds hypervisor CPUID function
2020-03-21 09:22:32 +02:00
Stefanos Kornilios Mitsis Poiitidis 43df66de29 Merge pull request #52 from Sonicadvance1/remove_old_code
Removes old test code from FEXCore
2020-03-21 09:21:51 +02:00
Stefanos Kornilios Mitsis Poiitidis c6e606c609 Merge pull request #55 from Sonicadvance1/more_syscalls
Adds a few new syscalls that I saw in app testing
2020-03-21 09:19:41 +02:00
Stefanos Kornilios Mitsis Poiitidis f2f6c34309 Merge pull request #56 from Sonicadvance1/fix_automatic_dynamic_linker
Fixes the dynamic linker detection
2020-03-21 09:17:55 +02:00
Ryan Houdek 6de60bea70 Fixes FRSQRT in AArch64
fmov (vector, immediate, broadcast) keys register size based on the
float/double constant passed in

So since 1.0f was missing the f, it was passed as a double, duplicating
64bit doubles rather than 32bit floats
2020-03-20 19:49:05 -07:00
Ryan Houdek 2bc7c28a9c Fixes AArch64 ROL implementation
In the case that RA does Dst = Src[1] then we would have overwrote our
shift value. Move the negation to the top of the 8bit and 16bit ROL to
make sure that doesn't happen
2020-03-20 18:58:39 -07:00
Ryan Houdek 6899a8f53a Implements unit tests for sqrtpd, sqrtps, and rsqrtps 2020-03-20 18:14:44 -07:00
Ryan Houdek 76d67812ed Implements 64bit RSQRT and fixes vector 32bit RSQRT in the x86 JIT. 2020-03-20 18:14:44 -07:00
Ryan Houdek ba71271982 Implements SQRTPS in OpDispatcher 2020-03-20 18:14:44 -07:00
Ryan Houdek 24159b969c Fixes RSQRTPS x86 tables 2020-03-20 18:14:39 -07:00
Ryan Houdek ca36fd4523 Fixes a couple bugs in the futex syscall
futex command 9 is actually WAIT_BITSET, not WAKE_BITSET
Implements futexes with timeouts as well, necessary for anything using
std::condition_variable and wait_for/wait_until
2020-03-20 17:32:37 -07:00
Ryan Houdek e5dc72ad69 Fixes the dynamic linker detection
Fixes #49

Makes it so we no longer have to pass in the ld location to the
ELFLoader application.

Once we switch over to the dynamic linker, the program being executed to
us is no longer a dynamic program.
But the frontend ELF loader also still needs to know that we are
executing the dynamic linker so it can append the linker to the
arguments.
2020-03-20 13:08:33 -07:00
Ryan Houdek ea167cf7d9 Adds a few new syscalls that I saw in app testing
madvise, dup, bind, syslog, getresuid, get_mempolicy, newfstatat, execve

execve specifically returned error. We don't support it yet.
2020-03-20 12:30:08 -07:00
Ryan Houdek 8e06765101 Throws a mutex in CompileBlock until we properly handle threaded compilation.
This is purely a workaround until it gets implemented correctly
2020-03-20 12:25:14 -07:00
Ryan Houdek c44da5d3eb Implements and fixes flag setting in a few instructions
A few instructions were missing flag setting entirely or were generating
wrong flags
  - ROL, ROR, SHL, SHR, ASHR, SHLD, SHRD, CMPXCHG

This fixes those instructions and removes a few outdated comments
Specifically noticed when trying to run xcalc, it was using the flag
results from SHL for something and crashed without flag setting.

Unit tests for RFLAG setting instructions is still forthcoming
2020-03-20 12:22:00 -07:00
Ryan Houdek 105d27d0da Removes old test code from FEXCore
These weren't ever actually used and were more of a blasting zone for
testing
2020-03-20 12:11:44 -07:00
Ryan Houdek a059fc1943 Adds hypervisor CPUID function
4000'0000h is the hypervisor CPUID information leaf, can just return all
zeroes to imply we aren't running under a hypervisor

EAX: The maximum input value for CPUID supported by the hypervisor.
     - We return zero here to signify no Hypervisor
EBX, ECX, EDX: Vedor ID signature

CPUID 4000'0001h - 4000'000Fh is reserved for hypervisor, which we don't
need to expose since we return zero in EAX
2020-03-20 12:06:01 -07:00
Ryan Houdek 9c24a92f73 Makes sure DCE pass doesn't remove print IR op
This is useful for debugging, don't want the DCE pass to remove it
2020-03-20 12:04:23 -07:00
Stefanos Kornilios Mitsis Poiitidis 12c71ad227 Merge pull request #45 from Sonicadvance1/unittests/arm64_ci_ctest
Adds ctest step to the CI
2020-03-19 10:22:25 +02:00