Commit Graph
67 Commits
Author SHA1 Message Date
Tillmann Karras d802d39281 clang-modernize -use-nullptr
and s/\bNULL\b/nullptr/g for *.cpp/h/mm files not compiled on my machine
2014-03-09 21:14:26 +01:00
Tillmann Karras f28116b7da clang-modernize -add-override 2014-03-09 21:12:01 +01:00
Tillmann Karras c89f04a7c5 clang-modernize -loop-convert
and some manual adjustments
2014-03-09 21:11:59 +01:00
Tillmann Karras 16885d0f74 Interpreter: less duplicate code in float compares 2014-03-09 19:35:13 +01:00
Tillmann Karras 9ef64245fa MathUtil: fix IsQNAN()
The constants were one nibble too short and the lower 51 bits don't
actually have to be zero.
2014-03-09 19:34:58 +01:00
Tillmann Karras d05e205a24 FPURoundMode: revert use of enums in bit-fields
The workaround of using fixed underlying types produces lots of warnings
in GCC because now the bit-fields are too small for the value range used
for conversion semantics.
2014-03-09 15:24:35 +01:00
Tillmann Karras 154ad838f4 .gitignore: multiple build dirs and kdevelop stuff 2014-03-09 15:24:34 +01:00
Tillmann Karras 161b67076a Update android.toolchain.cmake
from https://raw.github.com/taka-no-me/android-cmake/master/android.toolchain.cmake
2014-03-09 15:24:33 +01:00
Tillmann Karras aa7a2fc4bf Jit64::twx(): add assert message
The implemented and the real control flow differ a bit.
2014-03-09 15:24:33 +01:00
Tillmann Karras 17adcbb14e MMIOTest: fix sign warning 2014-03-09 15:24:32 +01:00
Tillmann Karras d461b3f33c SW renderer: add missing ClearCurrent()
courtesy of degasus
2014-03-06 01:53:29 +01:00
Tillmann Karras 891b334f52 Fix 32 bit non-Windows build 2014-03-03 10:46:08 +01:00
Tillmann Karras 7c93f2dc23 Fix the Windows build (broken in 315a8ba) 2014-03-01 01:33:19 +01:00
Tillmann Karras 892012dc02 Remove own round() implementation
1. It's not correct, it rounds x.5 down to x.
2. It is visible across the whole project (!).
3. VS2013 finally supports this:
   http://msdn.microsoft.com/en-us/library/dn353646.aspx
   http://msdn.microsoft.com/en-us/library/dn329049.aspx
2014-02-28 12:43:23 +01:00
Tillmann Karras 7a66a3ded1 ArmEmitter: make it more readable 2014-02-28 12:43:22 +01:00
Tillmann Karras 46e7c0657f Crypto: small cleanup 2014-02-28 12:43:22 +01:00
Tillmann Karras 315a8ba1c0 Various changes suggested by cppcheck
- remove unused variables
- reduce the scope where it makes sense
- correct limits (did you know that strcat()'s last parameter does not
  include the \0 that is always added?)
- set some free()'d pointers to NULL
2014-02-28 12:43:20 +01:00
Tillmann Karras 5f0a8008f4 Convert MemoryUtil.cpp to Unix-style line endings 2014-02-28 12:28:21 +01:00
Tillmann Karras 1a428de189 x64FPURoundMode: move things around a bit 2014-02-28 12:28:21 +01:00
Tillmann Karras 269e2aefa7 CMake: fix escaping in miniupnpc test 2014-02-28 12:28:20 +01:00
Tillmann Karras 6914eca167 Fix various warnings reported by clang
- mostly remove unused variables
- rename some generic JIT identifiers
2014-02-28 12:28:19 +01:00
Tillmann Karras 15576287f8 CMake: remove USE_SHARED_POLARSSL_LIBRARY
This could easily be mistaken for a Dolphin option.
2014-02-24 21:10:33 +01:00
Tillmann Karras 48dcd29f62 CMake: check PolarSSL version 2014-02-24 20:02:45 +01:00
Tillmann Karras 76b5a6b95e PolarSSL/CMake: validate cached values 2014-02-24 19:07:24 +01:00
Tillmann Karras 33beaf20f3 PolarSSL: adapt Dolphin to new version
- strip down PolarSSL's CMakeLists.txt
- switch to the PolarSSL 1.3 API
- use entropy interface instead of havege (PolarSSL 1.3 has disabled
  havege by default because it is "considered unsafe for primary usage")
- add VS2013 .vcxproj file
2014-02-24 16:20:50 +01:00
Tillmann Karras d025d63fd6 PolarSSL: update to current stable version (1.3.4)
I just removed Externals/polarssl/, added the new version, then deleted
the following files/directories:

DartConfiguration.tcl
Makefile
doxygen/
library/Makefile
programs/
scripts/
tests/
visualc/
2014-02-24 16:20:48 +01:00
Tillmann Karras 3038bca0a4 JitBackpatch: initialize InstructionInfo to 0
DisassembleMov() doesn't always initialize all fields of 'info'.
2014-02-23 04:36:26 +01:00
Tillmann Karras ee21cbe2d1 Add phire's more accurate DoubleToSingle version
This method doesn't involve messing around with the quirks of the x87
FPU and should be reasonably fast. As a bonus, it does the correct thing
for out-of-range doubles.

However, it is also a little slower and only benefits programs that rely
on undefined behavior so it is disabled for now.
2014-02-23 04:13:47 +01:00
Tillmann Karras 79336c88f8 Remove X11InputBase (dead code) 2014-02-22 22:42:42 +01:00
Tillmann Karras 6ae2972444 DSP: add inline opcode documentation
While further increasing the table width doesn't make the code any less
ugly, it makes it easy to generate auto-comments in the IDA processor
plugin. Also, use spaces for alignment instead of tabs.
2014-02-16 18:29:53 +01:00
Tillmann Karras 9f462a00a0 DSP: remove redundant expression 2014-02-16 18:18:23 +01:00
Tillmann Karras 0d6ab2c658 Silence some Windows compiler warnings
by adding explicit type casts.
2014-02-16 16:59:45 +01:00
Tillmann Karras 404624bf0b Turn loops into range-based form
and some things suggested by cppcheck and compiler warnings.
2014-02-13 09:05:50 +01:00
Tillmann Karras 2ff794d299 Fix some warnings 2014-02-13 09:02:43 +01:00
Tillmann Karras 1f34ed2c25 Re-enable non-IEEE mode support 2014-02-12 23:12:16 +01:00
Tillmann Karras f6897039c7 Interpreter: fix float conversions
Can't use simple casting, otherwise we get the same problems as in Jit64.
2014-02-12 23:12:15 +01:00
Tillmann Karras db196d8c5b Jit64[IL]: fix float conversions
Floating-point is complicated...

Some background: Denormals are floats that are too close to zero to be
stored in a normalized way (their exponent would need more bits). Since
they are stored unnormalized, they are hard to work with, even in
hardware.  That's why both PowerPC and SSE can be configured to operate
in faster but non-standard-conpliant modes in which these numbers are
simply rounded ('flushed') to zero.

Internally, we do the same as the PowerPC CPU and store all floats in
double format. This means that for loading and storing singles we need a
conversion. The PowerPC CPU does this in hardware. We previously did
this using CVTSS2SD/CVTSD2SS. Unfortunately, these instructions are
considered arithmetic and therefore flush denormals to zero if non-IEEE
mode is active. This normally wouldn't be a problem since the next
arithmetic floating-point instruction would do the same anyway but as it
turns out some games actually use floating-point instructions for
copying arbitrary data.

My idea for fixing this problem was to use x87 instructions since the
x87 FPU never supported flush-to-zero and thus doesn't mangle denormals.
However, there is one more problem to deal with: SNaNs are automatically
converted to QNaNs (by setting the most-significant bit of the
fraction). I opted to fix this by manually resetting the QNaN bit of all
values with all-1s exponent.
2014-02-12 23:12:15 +01:00
Tillmann Karras c25c4a6e20 x64: add support for some x87 instructions 2014-02-12 22:45:01 +01:00
Tillmann Karras 3218f6cca8 x64: drop instructions that don't exist
These instructions don't exist in hardware although I agree that they
would be useful for our purposes ;)
2014-02-11 05:22:53 +01:00
Tillmann Karras 7c47825038 Readme: add link to issue tracker 2014-02-05 00:42:44 +01:00
Tillmann Karras 442796b681 Jit64IL: nits 2014-02-04 09:09:06 +01:00
Tillmann Karras 8ef57064b2 Silence warning 2014-02-04 01:30:39 +01:00
Tillmann Karras e94a6f07f4 Fix warning 2014-01-25 21:42:44 +01:00
Tillmann Karras b34fe2b8f1 x64: fix parameter names of WriteModRM() 2014-01-25 17:36:09 +01:00
Tillmann Karras 21b0252e27 Jit64: disable non-IEEE mode emulation
I give up. Merging the ppc_fp branch has caused issues in numerous games
and I can't find the bug. I'm leaving this merged to enable easy
recompilation for people who would like to play games that benefit from
non-IEEE mode emulation (e.g. Starfox Assault).
2014-01-19 09:36:08 +01:00
Tillmann Karras ff91789773 Jit64: really fix fmrx regression
This is more tricky than I thought!
2013-11-21 05:31:55 +01:00
Tillmann Karras bcefa880e4 Jit64: fix fmrx regression
Revision ddaf29e039 introduced a register
corruption bug (#6825). Since fmrx/MOVSD only modifies ps0 but we save
both ps0 and ps1 in one xmm register, not loading the previous value
when binding to a x64 register trashed ps1.

But hey, a good opportunity to shave off one more instruction ;)
2013-11-20 21:30:49 +01:00
Tillmann Karras b863e40677 Merge branch 'ppc_fp' 2013-11-18 19:31:09 +01:00
Tillmann Karras 038ffea369 Jit64: don't flush clean FPRs 2013-11-13 08:03:18 +01:00
Tillmann Karras 288bef2807 x64: add small warning if CPU has SSE2 but not DAZ 2013-11-13 06:26:57 +01:00
Tillmann Karras cd069fdce1 Interpreter: software-based flush-to-zero
bDAZ is now called bFlushToZero to better reflect what it's actually
used for.

I decided not to support any hardware-based flush-to-zero on systems
that don't support this for both inputs _and_ outputs. It makes the code
cleaner and the intersection of CPUs that support SSE2 but not DAZ
should be very small.
2013-11-13 06:24:58 +01:00
Tillmann Karras 466a7afde3 Interpreter: support non-IEEE mode emulation
v2: fix fxsave on visual studio, thx @ rodolfo for this patch
2013-11-13 06:24:57 +01:00
Tillmann Karras 710a0ff435 Jit64: don't unnecessarily load registers 2013-11-13 06:16:24 +01:00
Tillmann Karras ddaf29e039 Jit64: use AVX instructions in some places 2013-11-13 06:15:56 +01:00
Tillmann Karras ae86850a78 x64: support VEX opcode encoding
and add some AVX instructions
2013-11-13 06:12:23 +01:00
Tillmann Karras 22b47d5b9c Jit64: Fix and re-enable psq_l for W=1
Patch by konpie:
https://forums.dolphin-emu.org/Thread-code-bug-report-based-on-3-0-735
2013-11-13 05:58:28 +01:00
Tillmann Karras 6054129df8 x64: detect FMA support 2013-11-13 04:46:34 +01:00
Tillmann Karras 2fecb033be Jit64: micro-optimize ps_sel
Adapted from a patch by konpie:
https://forums.dolphin-emu.org/Thread-code-bug-report-based-on-3-0-735
2013-11-13 04:45:43 +01:00
Tillmann Karras 6f5650f82e Fix Bluetooth warnings 2013-11-13 04:01:24 +01:00
Tillmann Karras 268bdf19ce Fix format string warnings 2013-11-13 04:01:16 +01:00
Tillmann Karras cdc27e46f1 Jit64: implement ps_res
This is probably more accurate than it is allowed to be. After all, the
instructions are supposed to be "estimates".
2013-11-07 02:19:20 +01:00
Tillmann Karras 0a2a273a2e Jit64: simplify ps_sel 2013-11-07 02:02:38 +01:00
Tillmann Karras 201c4c65a5 Jit64: fix typo in ps_sel and re-enable it 2013-11-07 02:02:24 +01:00
Tillmann Karras c29fb22cd4 Jit64: extract frsqrtex as method 2013-11-07 01:59:00 +01:00
Tillmann Karras 69a10869bb Document FPSCR fields 2013-10-24 01:46:07 +02:00
Tillmann Karras e4a81f32d4 Document some UGeckoInstruction fields 2013-10-17 04:59:13 +02:00
Tillmann Karras c234dc97c0 Jit64: optimize floating-point/paired-single arith
The "else if (b != d)" branch was dead code and only works if b == d. Now
the last else block with two temporary XMM registers is not needed anymore.
2013-10-16 00:52:21 +02:00