Commit Graph
226 Commits
Author SHA1 Message Date
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 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 73632556ce Implements support for movsldup 2020-04-24 23:13:51 -07:00
Ryan Houdek 8ffccc0027 Implements two non-temporal XMM move instructions
movntss/movntsd
2020-04-24 23:04:41 -07:00
Ryan Houdek fef466ee6b Implements six more saturating arithmetic instructions
paddusb, paddusw, psubusb, psubusw, psubsb, psubsw
2020-04-24 22:51:17 -07:00
Ryan Houdek 4bdbe65043 Fixes crash that occurs when the x86-64 JIT code cache gets full
Need to clear the other caches in the cases the x86 cache needs to be
wiped.
Not optimal but will improve once we get multiple tiers of code cache
2020-04-24 19:05:55 -07:00
Ryan Houdek b9002bb790 Merge pull request #135 from dmiller423/master
Added include of <llvm/IR/IntrinsicsX86.h> to LLVMCore.cpp
2020-04-24 13:24:09 -07:00
Ryan Houdek f2f2d9fd0d Merge pull request #134 from Sonicadvance1/fix_stack_bug
Fixes accessing a stack variable post destruction bug
2020-04-24 09:10:36 -07:00
Ryan Houdek b2beb6ffb1 Merge pull request #132 from Sonicadvance1/RA_print
Adds RA printing to the IR dumping function
2020-04-24 09:10:22 -07:00
Ryan Houdek 1ac36e2ddd Merge pull request #131 from Sonicadvance1/fix_dumb_wait_for_idle
Removes the dumb timer wait for idle
2020-04-24 09:10:10 -07:00
Ryan Houdek e0ca2e3126 Merge pull request #128 from Sonicadvance1/removes_ssse3
Removes SSSE3 CPUID feature bit
2020-04-24 09:09:51 -07:00
Ryan Houdek 7869a5a40e Merge pull request #127 from Sonicadvance1/fix_x86_regs
Fixes x86 JIT's RA for 16bit and 8bit registers
2020-04-24 09:09:40 -07:00
Ryan Houdek 8cc8472a75 Merge pull request #126 from Sonicadvance1/fix_llvm_logs
Disables LLVM debug messages
2020-04-24 09:09:20 -07:00
Ryan Houdek 2e5db1ddc9 Merge pull request #125 from Sonicadvance1/x87_table
Ensure FLDENV/FNSTENV has correct flags in the x87 table
2020-04-24 09:09:06 -07:00
David Miller 1daec14a48 added guard on IntrinsicsX86.h inclusion 2020-04-23 20:10:35 -04:00
David Miller 5999e7477f Added guard around llvm/IR/IntrinsicsX86.h inclusion, seems to only be needed for version 10?\nMore Investigation needed here.\nChanged Debugger/IMGui.{h,cpp} to IMGui_I so it will build in filesystems that aren't case sensitive.\nAdded CMakeSettings.json that has profiles to build from VisualStudio, using env variables to control system specific options. \n Currently only the WSL is tested (and working). \nRemote should work as well, if correct string for preconfigured remote is in env variable fexremote.\nCross compile (to linux) untested, using sysroot in env variable fexsysroot 2020-04-23 16:12:28 -04:00
David Miller a8d3cd67ad Added include of <llvm/IR/IntrinsicsX86.h> to LLVMCore.cpp 2020-04-23 11:12:45 -04:00
Ryan Houdek b5c170be41 Merge pull request #123 from Sonicadvance1/fix_32bit_x86_cvtsi2ss
Fixes 32bit Float_FromGPR_S IR op in x86 JIT
2020-04-22 08:37:56 -07:00
Ryan Houdek 11c341f722 Fixes accessing a stack variable post destruction bug
This happened to work with clang-9 but is caught in clang-10 now.
We were constructing an iterator temp then pulling a node through it
past the destruction.

Remove the iterator construction entirely and removes the unused lambda
from the AArch64 JIT that had the same problem.
2020-04-21 16:16:50 -07:00
Ryan Houdek 0c1fecb6c2 Merge pull request #113 from Sonicadvance1/redundant_ra_allocation
Ensures the JIT constructor's don't reallocate RA
2020-04-20 17:18:51 -07:00
Ryan Houdek 3bf641dd14 Adds RA printing to the IR dumping function
If a backend has RA then this'll pass through the RAPass and will dump
the RA alongside the IR. Very useful for debugging.
2020-04-18 13:42:44 -07:00
Ryan Houdek 6642734aa8 Removes the dumb timer wait for idle
Turns out my Threadripper stomps these tests so the arbitrary wait time
actually slows down my unit test time.
Don't want to make it shorter since `strace -f` becomes ugly at that
point.
Instead set up a semaphore style waiting structure that waits until
there are no longer any participants in the atomic
2020-04-18 12:37:58 -07:00
Ryan Houdek 56759faff0 Merge pull request #122 from Sonicadvance1/fix_futexes
Fixes some bugs with threads and futexes
2020-04-18 12:35:56 -07:00
Ryan Houdek d55ce197b6 Removes SSSE3 CPUID feature bit
Dolphin uses this in a couple of places, so until it is fully supported
leave it disabled.
2020-04-18 11:32:41 -07:00
Ryan Houdek 7c9dca0de9 Fixes x86 JIT's RA for 16bit and 8bit registers
There were four independent arrays for each size of the RA.
Missed the 16bit and 8bit registers when removing a register.
This removes the redundant arrays and just uses one and transforms the
register to the right size depending on what the JIT wants
2020-04-18 11:31:56 -07:00
Ryan Houdek 21cad8f689 Disables LLVM debug messages 2020-04-18 11:27:59 -07:00
Ryan Houdek 4f80a1a3a7 Ensures the JIT constructor's don't reallocate RA
Currently RA is shared between threads(!).
If the RA had been previously allocated then don't allocate it again.
Fixes a race condition when multiple threads are spinning up and one is
compiling code
2020-04-18 11:26:10 -07:00
Stefanos Kornilios Mitsis Poiitidis 3edaf6e46e Merge pull request #120 from Sonicadvance1/cpuid_amd
Add a compile define for choosing CPUID manufacturer id
2020-04-18 04:12:49 +03:00
Stefanos Kornilios Mitsis Poiitidis 86b13a9ff7 Merge pull request #119 from Sonicadvance1/implement_movbe
Implements MOVBE
2020-04-18 04:11:43 +03:00
Stefanos Kornilios Mitsis Poiitidis 8642a64733 Merge pull request #118 from Sonicadvance1/remove_bmi
Removes BMI1/BMI2 CPUID bits
2020-04-18 04:10:37 +03:00
Stefanos Kornilios Mitsis Poiitidis 98c00ba6b1 Merge pull request #106 from Sonicadvance1/vector_op_ir
Move vector op RegisterSize and ElementSize values in to the header struct
2020-04-18 04:00:52 +03:00
Stefanos Kornilios Mitsis Poiitidis 2bb3543827 Merge pull request #102 from Sonicadvance1/ra_class_in_json
Minor IR cleanup
2020-04-18 03:57:46 +03:00
Ryan Houdek 5cdf97e028 Ensure FLDENV/FNSTENV has correct flags in the x87 table 2020-04-17 15:28:48 -07:00
Ryan Houdek 74578d3ef4 Ensure the Interpreter and x86 JIT doesn't crash if DebugData isn't provided 2020-04-17 15:25:18 -07:00
Ryan Houdek e74c168aa7 Ensures we still get debug data when IR for code already exists 2020-04-17 15:24:20 -07:00
Ryan Houdek 7eb8ceafbe Ensures IRList doesn't store stale aliased data in cache 2020-04-17 15:23:44 -07:00
Ryan Houdek d12ac8365d Fixes 32bit Float_FromGPR_S IR op in x86 JIT
x86's cvtsi2ss can take a 32bit or 64bit input and convert it to a 32bit
float.
This ensures the register passed in is 32bit so it uses the 32bit
instruction
2020-04-16 12:09:58 -07:00
Ryan Houdek 902cae7ebc Fixes some bugs with threads and futexes
Fixing some bugs in threading required fixing how the futexes operate.
Instead of the terrible condition variables and atomic values just use
the kernel futex facility directly.
This required fixing some of the threading management since otherwise
there was a issue around the weird mixture of our threads using our
"Futex" class and the kernel expecting real futexes on the values.
Just switch everything over and it ends up being cleaner

Fixes random mutex failures that were happening in various applications
2020-04-15 11:58:26 -07:00
Ryan Houdek 8c8216584a Add a compile define for choosing CPUID manufacturer id
This can prove useful for applications that change some of their checks
depending what the vendor is
2020-04-15 11:08:32 -07:00
Ryan Houdek 46402e3244 Implements MOVBE in the OpDispatcher
This is pretty easy to implement. Kind of flies in the face of why the
instruction implementation exists (icache and frontend issue overhead
savings) but it is easy to implement.
2020-04-13 17:43:33 -07:00
Ryan Houdek 494e27c87d Fixes the MOVBE instruction table definitions
CRC32 was overlapping the MOVBE instruction with 66 prefix
2020-04-13 17:43:33 -07:00