Commit Graph

13840 Commits

Author SHA1 Message Date
Fiora 4f18f6078f JIT64: Fix fmul rounding issues
Thanks to magumagu's softfp experiments, we know a lot more about the Wii's
strange floating point unit than we used to. In particular, when doing a
single-precision floating point multiply (fmulsx), it rounds the right hand
side's mantissa so as to lose the low 28 bits (of the 53-bit mantissa).

Emulating this behavior in Dolphin fixes a bunch of issues with games that
require extremely precise emulation of floating point hardware, especially
game replays. Fortunately, we can do this with rather little CPU cost; just ~5
extra instructions per multiply, instead of the vast load of a pure-software
float implementation.

This doesn't make floating-point behavior at all perfect. I still suspect
fmadd rounding might not be quite right, since the Wii uses fused instructions
and Dolphin doesn't, and NaN/infinity/exception handling is probably off in
various ways... but it's definitely way better than before.

This appears to fix replays in Mario Kart Wii, Mario Kart Double Dash, and
Super Smash Brothers Brawl. I wouldn't be surprised if it fixes a bunch of
other stuff too.

The changes to instructions other than fmulsx may not be strictly necessary,
but I included them for completeness, since it feels wrong to fix some
instructions but not others, since some games we didn't test might rely on
them.
2014-08-24 10:28:52 -07:00
Pierre Bourdon aaff5a0afb Merge pull request #856 from FioraAeterna/ppcfpopt
JIT: faster PPC_FP code
2014-08-24 19:25:56 +02:00
Dolphin Bot f31ebd23bb Merge pull request #864 from FioraAeterna/avx2bmi
Add AVX2/BMI1/BMI2 detection support
2014-08-24 18:55:01 +02:00
Fiora ce6d09ca5d Add AVX2/BMI1/BMI2 detection support
Also clean up the formatting in a bit of the CPU detection code.
2014-08-24 09:14:54 -07:00
Pierre Bourdon b749a74d33 Merge pull request #863 from lioncash/remhost
UnitTests: Remove now non-existent UpdateStatusBar from StubHost.
2014-08-24 14:41:13 +02:00
Lioncash f200a03d97 UnitTests: Remove now non-existent UpdateStatusBar from StubHost. 2014-08-24 08:34:25 -04:00
comex d19ec35363 Reduce my idiocy in register saving code.
(1) Rename ABI_ALL_CALLEE_SAVED to ABI_ALL_CALLER_SAVED, because that's
what it was actually defined as (and used as).  Derp.

(2) RegistersInUse is always used for the purpose of saving registers
before calling a C++ function in the middle of a JIT block (without
flushing).  There is no need to save callee-saved registers in this
case.  Change the name to CallerSavedRegistersInUse and mask with
ABI_ALL_CALLER_SAVED.

Nothing obvious broke when starting up a Melee game.  (I added a test
for anything actually being masked out; it happens, but in this
particular case seemed to occur at most a few dozen times per second, so
the actual performance benefit is probably negligible.)
2014-08-23 15:46:10 -04:00
comex e0f35e0e59 Remove unused declarations. 2014-08-23 15:26:59 -04:00
comex 3ee1e5cbf0 Switch from disabling a laundry list of warnings for wxWidgets to just disabling everything, since they're almost certainly not our problem and I want to compile with -Werror. 2014-08-23 15:21:28 -04:00
Dolphin Bot 43f890322f Merge pull request #845 from ChuckRozhon/switch_to_cstdint
Changed unsigned ints and chars to cstdint counterparts
2014-08-23 21:18:18 +02:00
shuffle2 7725737872 Merge pull request #860 from shuffle2/remove-dsound
Remove dsound audio backend.
2014-08-23 11:35:24 -07:00
Shawn Hoffman af2405eefd Remove dsound audio backend.
There isn't any reason to use dsound over xaudio.
2014-08-23 11:19:19 -07:00
shuffle2 8bb3fa561b Merge pull request #858 from shuffle2/dx-old
Add headers required by XAudio2_7 to externals.
2014-08-23 11:18:46 -07:00
Shawn Hoffman 1332805bb6 Add headers required by XAudio2_7 to externals.
This makes all builds' audio compatible with downlevel Windows and removes
the need for developers to install the June 2010 DirectX SDK.
2014-08-23 11:03:07 -07:00
shuffle2 f964a282e1 Merge pull request #857 from shuffle2/msvc-improvements
windows: remove now-extraneous NOMINMAX and WIN32_LEAN_AND_MEAN #defines
2014-08-23 11:02:48 -07:00
Shawn Hoffman 327d35377d windows: remove now-extraneous NOMINMAX and WIN32_LEAN_AND_MEAN #defines from dolphin code.
Wrap dinput.h in a header defining DIRECTINPUT_VERSION instead of repeating it multiple places.
2014-08-23 10:48:48 -07:00
Pierre Bourdon 6a5188c9bc Merge pull request #839 from Tilka/emitter
x64Emitter: small source-level fixes
2014-08-23 19:37:24 +02:00
Pierre Bourdon 4ec848736d Merge pull request #847 from Linktothepast/gameinis
Gameini updates.
2014-08-23 19:20:05 +02:00
Pierre Bourdon f7102faae7 Merge pull request #853 from lioncash/memmap
Core: Simplify Memory::GetString
2014-08-23 19:19:09 +02:00
Fiora 59c1a46ab1 JIT: faster PPC_FP code
The PPC_FP conversion code can be made a lot simpler with the observation
that the only values that need to be sent through the slow x87 path are
denormals.

A whole bunch faster: 708->678 seconds on POV-RAY.
2014-08-23 07:44:42 -07:00
Lioncash 6a74f5e8f6 Merge pull request #817 from archshift/disabledcolor
Fixed toolbar's disabled button color.
2014-08-23 05:08:26 -04:00
Lioncash 41577f044a Merge pull request #844 from lioncash/wx-hotkey
DolphinWX: Get rid of unnecessary hotkey code.
2014-08-22 19:52:18 -04:00
Lioncash 624972e37c Merge pull request #855 from magcius/fix-gamelist-title
Frame: Actually call UpdateTitle
2014-08-22 17:48:56 -04:00
Jasper St. Pierre 1e464d1a25 Frame: Actually call UpdateTitle
This was obviously what I meant to do, but due to a typo, called
SetTitle instead, causing the main game list title to be set instead.
2014-08-22 17:28:02 -04:00
Ryan Houdek db039d1440 Merge pull request #850 from lioncash/unused-headers
Core: Removed blank headers Boot_ELF.h and Boot_WiiWAD.h
2014-08-22 02:07:10 -05:00
Lioncash 130f57df91 Core: Simplify Memory::GetString 2014-08-22 01:22:58 -04:00
Ryan Houdek fc5a73d62e Merge pull request #849 from FioraAeterna/fixppcanalyzer
PPCAnalyzer: move num_instructions initialization to correct place
2014-08-22 00:14:11 -05:00
Lioncash 48f52b9662 Merge pull request #789 from archshift/linuxvideo
Fix for black screen on Linux upon starting a game
2014-08-21 15:55:29 -04:00
archshift 7e2534ee47 Fixed black screen on game start for X11 contexts. 2014-08-21 12:50:42 -07:00
Lioncash de9edbeebf Core: Removed blank headers Boot_ELF.h and Boot_WiiWAD.h 2014-08-21 15:30:51 -04:00
Lioncash 25e29c323d Merge pull request #842 from lioncash/jit
Coding style clean up for the Jit, JitARM and JitIL
2014-08-21 15:25:43 -04:00
Fiora 5c0145f71b PPCAnalyzer: move num_instructions initialization to correct place
Much of the PPC Analyzer code (e.g. instruction reordering for merging
branches) wasn't actually being run.
2014-08-21 11:19:23 -07:00
Lioncash f17dcd2019 Merge pull request #764 from magcius/new-nogui-2
Rewrite GLInterface
2014-08-21 14:14:54 -04:00
Matthew Parlane cf82972961 Merge pull request #848 from shuffle2/msvc-improvements
msvc: skip copying Data dir and precompiled dlls to Binary dir if they are already there (unless the source files are newer).
2014-08-21 12:25:47 +12:00
Shawn Hoffman 9ac5d7ecd5 msvc: skip copying Data dir and precompiled dlls to Binary dir if they are already there (unless the source files are newer).
Also fix a bug which was preventing DolphinWX/AfterBuild target from being completely skipped.
2014-08-20 16:57:34 -07:00
Linktothepast 636dbc32d7 Gameini updates.
Updates gameinis for various us wiiware titles. How to Train Your Dragon
2 (wii), Opoona (wii), The Legend of Zelda: Collector's Edition (gc),
Super Mario Sunshine (gc), Super Monkey Ball 2  (gc) updated.
Fixes issues 7491, 7447 and 7581.
2014-08-21 01:42:23 +03:00
Charles Rozhon 965b1f1f2c Removed the typedefs for Elf32 word types 2014-08-20 15:21:41 -05:00
Charles Rozhon d84b2f3be4 Changed unsigned ints and chars to cstdint counterparts 2014-08-20 14:52:01 -05:00
Lioncash 77ce389bb0 DolphinWX: Get rid of unnecessary hotkey code. 2014-08-20 14:43:08 -04:00
Lioncash b5337ea1b5 Merge pull request #826 from lioncash/wx-events
DolphinWX: Use the typesafe equivalents for declaring wx event types
2014-08-20 14:34:17 -04:00
Lioncash 20f8ec9afa Core: Join a few if statements in IR.cpp 2014-08-20 14:26:16 -04:00
Lioncash 99ae79f7f9 Core: Better assert messages for stx op 2014-08-20 14:16:05 -04:00
Lioncash d694637938 Core: Clean up brace/body placements for JitIL 2014-08-20 14:04:01 -04:00
Lioncash b005ba2797 Core: Clean up body/brace placements in JitArm32 2014-08-20 14:03:46 -04:00
shuffle2 d29e333142 Merge pull request #833 from shuffle2/msvc-improvements
misc improvements for msvc build. -Werror for msvc!
2014-08-20 10:57:31 -07:00
Lioncash 6145ced5f7 Core: Change "unsigned result" to "u32 result" in rlwinmx for Jit64 2014-08-20 12:51:30 -04:00
Lioncash e7f49692e8 Core: Clean up body/brace placements in Jit64 and JitCommon 2014-08-20 12:50:42 -04:00
Shawn Hoffman a9c33075f2 msvc: enable compiler warnings as errors. 2014-08-19 22:33:49 -07:00
Shawn Hoffman d9fcc855a7 msvc: resolve all warnings in DolphinWX.
Also, bring WiiSaveCrypted closer to modern dolphin coding style.
2014-08-19 22:33:48 -07:00
Shawn Hoffman 5471c71819 msvc: resolve all warnings in VideoBackends/OGL. 2014-08-19 22:33:47 -07:00