Commit Graph
432 Commits
Author SHA1 Message Date
Ryan Houdek addcb824e2 Merge pull request #390 from FEX-Emu/skmp/add-pendatic-smc
SMC: Add --smc-full-checks, implement frontend, irint, irjit, unit test
2020-09-16 09:26:35 -07:00
Stefanos Kornilios Mitsis Poiitidis df3bdf361f SMC: Add --smc-full-checks, implement frontend, irint, irjit, unit test 2020-09-16 01:15:21 +03:00
Ryan Houdek 703c6833fc Merge pull request #389 from FEX-Emu/skmp/asr32-should-zext
OP_ASR: Fix zext semantics
2020-09-15 10:12:18 -07:00
Ryan Houdek aa3b42da10 Merge pull request #388 from FEX-Emu/skmp/fix-cmpxchg8b-zext
x86disp: cmpxchg8b should only zext on register write
2020-09-15 10:08:06 -07:00
Ryan Houdek 605a774bc4 Merge pull request #387 from FEX-Emu/skmp/fix-dividiv-zext
x86disp: Fix div32/idiv32 zext behavior
2020-09-15 10:07:31 -07:00
Ryan Houdek 4e2c4f71f9 Merge pull request #384 from FEX-Emu/skmp/fix-shrasr-cf
x86disp: Fix LSR/ASR CF calculation
2020-09-15 10:06:38 -07:00
Ryan Houdek ded48258d6 Merge pull request #378 from FEX-Emu/skmp/fix-BT-offsets
x86disp: BT/BTR/BTS/BTC make bit index signed
2020-09-15 10:05:47 -07:00
Ryan Houdek 5a31cc9aa1 Merge pull request #383 from FEX-Emu/skmp/fix-fld-sti
x86disp: Fix FLD st(i)
2020-09-15 10:04:40 -07:00
Ryan Houdek b5e354d341 Merge pull request #380 from FEX-Emu/skmp/fix-movhlps
x86disp: Add movhlps special case
2020-09-15 10:04:17 -07:00
Ryan Houdek e11d3ed83a Merge pull request #382 from FEX-Emu/skmp/fix-xadd-regreg
x86disp: fix xadd reg,reg
2020-09-15 10:02:04 -07:00
Ryan Houdek 29cb5d1821 Merge pull request #381 from FEX-Emu/skmp/fix-8bit-idiv
x86disp: Fix 8 bit IDIV
2020-09-15 10:01:29 -07:00
Ryan Houdek c6f69e158c Merge pull request #379 from FEX-Emu/skmp/fix-inc-dec
x86disp: Fix locked INC/DEC flags
2020-09-15 10:00:53 -07:00
Ryan Houdek a6addcee5e Merge pull request #377 from FEX-Emu/skmp/fix-movd
x86tables: fix mmx movd src/dst sizes for gprs
2020-09-15 10:00:14 -07:00
Ryan Houdek d8eeccc931 Merge pull request #376 from FEX-Emu/skmp/fix-test-simm32
x86tables: Fix test simm32 extension
2020-09-15 09:58:17 -07:00
Stefanos Kornilios Mitsis Poiitidis 8bdcb762f7 x86disp: Fix movhlps to write all 128 bits to context 2020-09-15 18:16:33 +03:00
Stefanos Kornilios Mitsis Poiitidis b512a98c7b OP_VEXTRACTELEMENT: Fix irint size calculation 2020-09-15 18:15:56 +03:00
Stefanos Kornilios Mitsis Poiitidis c875beb74b OP_ASHR: Fix zext semantics after sext 2020-09-15 17:02:09 +03:00
Stefanos Kornilios Mitsis Poiitidis 92ad556534 cmpxchg8b: Only set registers if compare failed 2020-09-15 13:46:52 +03:00
Stefanos Kornilios Mitsis Poiitidis c99cc9c6d3 DIV/IDIV: Fix Zext for 32 bit divides 2020-09-15 13:44:49 +03:00
Stefanos Kornilios Mitsis Poiitidis dd7f3ddef3 SHR/ASR,imm: Fix CF calculation 2020-09-15 13:36:37 +03:00
Stefanos Kornilios Mitsis Poiitidis 0cc9ecfab4 OpDispatcher: FLD ST(i) should read before stack push 2020-09-15 13:34:07 +03:00
Stefanos Kornilios Mitsis Poiitidis af99407228 xadd: fix xaddb reg,reg & xadd reg,same reg
Found via qemu's test-x86_64
2020-09-15 13:32:04 +03:00
Stefanos Kornilios Mitsis Poiitidis 611499d0ee IDIV: Fix 16 by 8 divide 2020-09-15 13:28:57 +03:00
Stefanos Kornilios Mitsis Poiitidis 4ea5457734 movhps: reg,reg should be movhlps special case 2020-09-15 13:26:17 +03:00
Stefanos Kornilios Mitsis Poiitidis 5704ce4db9 INC/DEC: Fix atomicity and flags for locked variants 2020-09-15 13:23:30 +03:00
Stefanos Kornilios Mitsis Poiitidis 75b70b8e13 BT/BTC/BTR/BTS: Should use signed offset for bit index 2020-09-15 13:19:01 +03:00
Stefanos Kornilios Mitsis Poiitidis bec3cfff14 X86Tables: Fix MOVD SRC/DST size 2020-09-15 12:58:50 +03:00
Stefanos Kornilios Mitsis Poiitidis 140c704f8a X86Tables: Fix testq imm to sext 2020-09-15 12:41:14 +03:00
Ryan Houdek 80a77b39be Implements RCR and RCL x86 ops
These are interesting rotate instructions that treats CF as an
additional rotation bit for the source.

So you end up with a 9bit, 17bit, 33bit, or 65bit rotate.
The rotate value is still masked by 0x1F or 0x3F depending on
instruction size.

This ends up with the quirk that this instruction doesn't directly map
to AArch64 rotations  for the smaller register sizes;
So we have to do some manual mirroring in a larger register to pull the
correct view out of the op
2020-09-13 17:29:51 -07:00
Ryan Houdek 8878278402 Implements new EXTR IR op
This maps directly to AArch64's EXTR op.
Maps closely to x86's SHRD instruction
2020-09-13 17:28:09 -07:00
Ryan Houdek a324f4c222 Implements missing BFI in JITs
We had the IR op but it wasn't implemented for the JITs
2020-09-13 17:26:26 -07:00
Ryan Houdek e9b74b0230 Initial Callback support
This interface is for native host code to be able to call back in to JIT
to execute guest code.
This is mainly for thunks but could be used for other purposes.
This can cross a couple ABI boundaries so one must be careful when
calling in to this
2020-09-11 15:48:51 -07:00
Stefanos Kornilios Mitsis Poiitidis ad13c82918 Merge pull request #371 from Sonicadvance1/sigaction_gt64
Don't allow an application to try and set a signal past 64
2020-09-11 10:45:00 +03:00
Stefanos Kornilios Mitsis Poiitidis 87dbefd0a3 Merge pull request #367 from Sonicadvance1/sigsuspend
Implements sigsuspend
2020-09-11 10:43:50 +03:00
Ryan Houdek e08972b06a Don't allow an application to try and set a signal past 64
We only have 64, this is invalid!
2020-09-11 00:35:39 -07:00
Scott Mansell abd98be5f1 Make Interpreter Reentrant; alloca SSAs on Stack 2020-09-11 19:31:31 +12:00
Stefanos Kornilios Mitsis Poiitidis 27dbc66e2e Merge pull request #361 from Sonicadvance1/cvtpd2dq
Implements missing CVTPD2DQ
2020-09-11 09:20:48 +03:00
Ryan Houdek a3ee4dff45 Implements sigsuspend
This helps out Mono's garbage collector specifically. There is a minor
race that can currently occur with signal 63 but that technically should
only occur on a pause or stop condition.

Might need to change this behaviour if it becomes a problem
2020-09-10 21:50:29 -07:00
Ryan Houdek 8aeb6718ac Merge pull request #362 from Sonicadvance1/fix_guest_signal_dfl
Fixes guest default signal handling and pending signals
2020-09-10 19:00:29 -07:00
Ryan Houdek 98aef5ee19 Merge pull request #355 from Sonicadvance1/initial_32bit_unittest
Adds initial 32bit unit tests
2020-09-10 18:50:06 -07:00
Ryan Houdek 290e2b55c4 Fixes guest default signal handling and pending signals
glibc raise() actually disables all signals, raises the signal that the
user wants, then reenables the previous signal mask.

On the reenabling of the previous signal mask, that is when the pending
signal fires.
This needs to be accurately handled, so check for pending signals
getting unmasked in sigprocmask

This also then needs to be further fixed to handle default signal
handling, where if a signal was sent that is default ignored (NOT set to
ignore!) then it would just exit the application before.
Now something likg SIGCHLD with the default handler (aka ignore) won't
kill the process
2020-09-10 18:16:24 -07:00
Ryan Houdek 7a80f2bcbb Implements missing CVTPD2DQ
Without impementing MXCSR still, this matches the already implemented
CVTTPD2DQ
2020-09-10 16:50:05 -07:00
Ryan Houdek 5b0386ad83 Ensures the RIP only gets stored as 32bit in 32bit mode 2020-09-07 00:04:30 -07:00
Stefanos Kornilios Mitsis Poiitidis e2fc0f03c9 loopOp: Constant takes size in bits, not bytes 2020-09-07 00:51:38 +03:00
Ryan Houdek 4b17521ab9 Merge pull request #343 from Sonicadvance1/cpuid_improvements
Has /proc/cpuinfo generated from CPUID
2020-09-06 12:40:03 -07:00
Ryan Houdek 6e28fd68c3 Merge pull request #344 from Sonicadvance1/rcpc
Adds support for RCPC load instructions
2020-09-06 12:31:28 -07:00
Stefanos Kornilios Mitsis Poiitidis 54bf7a095a Merge pull request #349 from Sonicadvance1/fix_altstack_disable
Fixes guest disabling sigaltstack.
2020-09-06 17:40:26 +03:00
Ryan Houdek 50227ba379 Fixes guest disabling sigaltstack.
Previously we never checked for SS_DISABLE.
We were also only ever checking for ss_sp being a valid memory range
when we should have been checking for the absense of SS_DISABLE.

Fixes #326
2020-09-05 21:59:52 -07:00
Ryan Houdek c12847cbcb Cleans up CPUID
Instead of saying we support the world, actually go through each
individual flag and say that we support the correct things.
Puts FEX plus the git hash in to the model name for now.
Once we have a tagged release in the future we can change this to have
its version tag inside of it.
2020-09-05 16:59:10 -07:00
Ryan Houdek 2175e9d9c8 Adds support for RCPC load instructions
If the host CPU supports RCPC instructions then it'll use those
instruction of atomics for LoadMemTSO ops.

This pushed my worst case FTL test from 16FPS to 17FPS .

There is another extension to RCPC to add short immediate offset support
which the c630 doesn't support any way. For future optimization on
hardware we can use that.
2020-09-05 16:58:50 -07:00