4191 Commits

Author SHA1 Message Date
Pierre Bourdon
9f8e1e2a0d Merge pull request #720 from booto/dma-audio-fix2
DSP: copy audio dma samples as early as possible
2014-08-02 15:13:26 -07:00
booto
35dfe57bc1 DSP: copy audio dma samples as early as possible 2014-08-03 05:24:19 +08:00
Lioncash
a46a500b94 Core: Fix warnings on Linux related to the JIT 2014-08-02 16:15:20 -04:00
Pierre Bourdon
da2833c0e6 Merge pull request #679 from lioncash/ucode-update-params
Core: Remove the unused cycle parameter from DSPHLE update calls
2014-08-02 10:37:19 -07:00
Pierre Bourdon
8f768e5a54 Merge pull request #714 from lioncash/gen
Core: Remove using namespace statements from the Jit and Interpreter headers
2014-08-02 10:36:31 -07:00
Lioncash
a723fd39df Merge pull request #715 from lioncash/interp
Core: Clean up coding style in the Interpreter
2014-08-02 08:39:11 -04:00
Lioncash
8467c82f79 Core: Clean up coding style in the Interpreter 2014-08-02 07:49:11 -04:00
Lioncash
afb539699e Core: Remove using statements from the Jit and Interpreter headers 2014-08-02 01:48:02 -04:00
Lioncash
b8e64716be Merge pull request #713 from lioncash/cast
Core: Remove now redundant assert conditions in some DSPJitRegCache functions
2014-08-01 22:55:52 -04:00
Lioncash
44f751f752 Merge pull request #692 from booto/dma-audio-fix
DSP: latch dma parameters
2014-08-01 22:19:50 -04:00
Lioncash
899bc84e98 Core: Remove now redundant assert conditions in some DSPJitRegCache functions 2014-08-01 20:49:48 -04:00
Lioncash
005004dfa5 Core: Fix cast warnings in DSPJitRegCache 2014-08-01 20:44:38 -04:00
Lioncash
4e2f487741 Core: Get rid of a cast in JitRegCache.cpp 2014-08-01 20:25:39 -04:00
Lioncash
6c923b776e Merge pull request #695 from lioncash/ipl-string
Core: Use a std::string in EXI_DeviceIPL instead of a char buffer
2014-08-01 19:59:56 -04:00
booto
47ba8cc4c1 DSP: latch dma parameters 2014-08-02 05:59:36 +08:00
Pierre Bourdon
0380bb61fa Merge pull request #708 from lioncash/drum-axis
Core: Fix Y-data not being assigned in Drums.cpp
2014-07-31 22:20:40 -07:00
Lioncash
31e9b1ebdd Core: Fix Y-data not being assigned in Drums.cpp
Prior to this we were overwriting the x-axis with y-axis data.
2014-08-01 01:18:39 -04:00
Lioncash
5bb9a74759 Merge pull request #527 from delroth/flags-opt
[RFC] PowerPC flags emulation optimization
2014-07-31 02:51:48 -04:00
Ryan Houdek
fda2190a37 Support the 64bit CR flags in the ARM JIT. 2014-07-30 21:41:18 -07:00
Ryan Houdek
3627bd21f1 Remove JitArmIL files from the project.
Due to how the new CR-flags work, it isn't possible without some hefty work in the JITIL backend to support this on 32bit systems.
2014-07-30 21:41:17 -07:00
magumagu
f27940478d JitIL: Attempt to constant-fold more aggressively. 2014-07-30 21:41:17 -07:00
magumagu
79ecdf5fd0 JitIL: Misc small optimizations. 2014-07-30 21:41:17 -07:00
magumagu
c8dd557dde JITIL: compare instruction folding. 2014-07-30 21:41:17 -07:00
magumagu
5bb428c685 JITIL: optimize branches. 2014-07-30 21:41:17 -07:00
magumagu
79cc000d62 JITIL: Optimize compare instruction. 2014-07-30 21:41:17 -07:00
magumagu
1429fccb97 Initial unoptimized JITIL flag optimization. 2014-07-30 21:41:17 -07:00
Pierre Bourdon
5506e57ab8 CR: Replace some magic values with constants. 2014-07-30 21:41:17 -07:00
Pierre Bourdon
0ff1481494 Optimize PPC CR emulation by using magic 64 bit values
PowerPC has a 32 bit CR register, which is used to store flags for results of
computations. Most instructions have an optional bit that tells the CPU whether
the flags should be updated. This 32 bit register actually contains 8 sets of 4
flags: Summary Overflow (SO), Equals (EQ), Greater Than (GT), Less Than (LT).
These 8 sets are usually called CR0-CR7 and accessed independently. In the most
common operations, the flags are computed from the result of the operation in
the following fashion:
  * EQ is set iff result == 0
  * LT is set iff result < 0
  * GT is set iff result > 0
  * (Dolphin does not emulate SO)

While X86 architectures have a similar concept of flags, it is very difficult
to access the FLAGS register directly to translate its value to an equivalent
PowerPC value. With the current Dolphin implementation, updating a PPC CR
register requires CPU branching, which has a few performance issues: it uses
space in the BTB, and in the worst case (!GT, !LT, EQ) requires 2 branches not
taken.

After some brainstorming on IRC about how this could be improved, calc84maniac
figured out a neat trick that makes common CR operations way more efficient to
JIT on 64 bit X86 architectures. It relies on emulating each CRn bitfield with
a 64 bit register internally, whose value is the result of the operation from
which flags are updated, sign extended to 64 bits. Then, checking if a CR bit
is set can be done in the following way:
  * EQ is set iff LOWER_32_BITS(cr_64b_val) == 0
  * GT is set iff (s64)cr_64b_val > 0
  * LT is set iff bit 62 of cr_64b_val is set

To take a few examples, if the result of an operation is:
  * -1 (0xFFFFFFFFFFFFFFFF) -> lower 32 bits not 0       => !EQ
                            -> (s64)val (-1) is not > 0  => !GT
                            -> bit 62 is set             =>  LT
            !EQ, !GT, LT

  *  0 (0x0000000000000000) -> lower 32 bits are 0       =>  EQ
                            -> (s64)val (0) is not > 0   => !GT
                            -> bit 62 is not set         => !LT
            EQ, !GT, !LT

  *  1 (0x0000000000000001) -> lower 32 bits not 0       => !EQ
                            -> (s64)val (1) is > 0       =>  GT
                            -> bit 62 is not set         => !LT
            !EQ, GT, !LT

Sometimes we need to convert PPC CR values to these 64 bit values. The
following convention is used in this case:
  * Bit 0 (LSB) is set iff !EQ
  * Bit 62 is set iff LT
  * Bit 63 is set iff !GT
  * Bit 32 always set to disambiguize between EQ and GT

Some more examples:
  * !EQ, GT, LT -> 0x4000000100000001 (!B63, B62, B32, B0)
                -> lower 32 bits not 0          => !EQ
                -> (s64)val is > 0              =>  GT
                -> bit 62 is set                =>  LT
  * EQ, GT, !LT -> 0x0000000100000000
                -> lower 32 bits are 0          =>  EQ
                -> (s64)val is > 0 (note: B32)  =>  GT
                -> bit 62 is not set            => !LT
2014-07-30 21:41:17 -07:00
Lioncash
f507827399 Merge pull request #681 from phire/non-sse4_1
Fix PPC_FP on non-sse4.1 code paths.
2014-07-31 00:31:02 -04:00
Scott Mansell
8c857b45f8 Fix PPC_FP on non-sse4.1 code paths.
The Invalid bit on the x87 fpu is sticky, so once a single NaN goes
through the old code on CPUs without sse4.1 all future floats are
mutilated.

Patch to emulate PTEST by Fiora.

Fixes issue 7237 and issue 7510.
2014-07-31 16:00:27 +12:00
Matthew Parlane
5516b0382c Merge pull request #699 from lioncash/enum
Core: Use an enum for the Gekko exception flags instead of defines
2014-07-30 13:53:58 +12:00
Matthew Parlane
a3ca3b0424 Merge pull request #696 from lioncash/more-forward-decls
Convert some more header inclusions into forward declarations
2014-07-30 13:53:48 +12:00
Lioncash
ad3ade1510 Core: Use an enum for the Gekko exception flags instead of defines 2014-07-29 21:51:30 -04:00
Lioncash
b03c12764d Really get rid of the MSVC 2005 workaround completely 2014-07-29 21:20:43 -04:00
Lioncash
522a5c35ad Convert some more header inclusions into forward declarations 2014-07-29 20:55:07 -04:00
Lioncash
3d95ed93f5 Core: Use a std::string in EXI_DeviceIPL instead of a char buffer
Allows getting rid of extra code.
2014-07-29 20:05:57 -04:00
Pierre Bourdon
c0e8d9879a Merge pull request #678 from lioncash/overflow
Fix a possible overflow in EXI_DeviceIPL.
2014-07-29 16:42:58 -07:00
Lioncash
412196a055 Core: Remove defines used to work around an MSVC 2005 bug 2014-07-29 19:33:08 -04:00
Pierre Bourdon
8ff3cf1838 Merge pull request #684 from lioncash/forward-decls
Core: Turn some includes into forward declarations.
2014-07-28 20:50:27 -07:00
Pierre Bourdon
062bce8b7e Merge pull request #659 from Parlane/classic_controller_fix2
Classic controller fix
2014-07-28 20:34:00 -07:00
Tony Wasserka
3fb829ca73 Merge pull request #589 from LPFaint99/gcifolder-fifo
Gcifolder use correct region for fifologs
2014-07-28 14:44:01 +02:00
Tony Wasserka
9c7d4b6408 Merge pull request #667 from RachelBryk/remove-audio-limit
Remove audio frame limit.
2014-07-28 14:38:35 +02:00
Matthew Parlane
3554a15180 Merge pull request #680 from lioncash/fakepoll-removal
Remove fakepoll.h
2014-07-28 21:06:37 +12:00
Lioncash
e225e3679a Merge pull request #685 from lioncash/invalid-reg
Core: Use the enum constant for an invalid reg in JitRegCache
2014-07-27 19:37:43 -04:00
Lioncash
0bb84a1f65 Core: Use the enum constant for an invalid reg in JitRegCache 2014-07-27 19:29:52 -04:00
Lioncash
eb3a1de3f6 Core: Turn some includes into forward declarations. 2014-07-27 13:37:09 -04:00
Tony Wasserka
38c8a4efb2 MMIO: Cleanup Mapping class by using templates instead of macros. 2014-07-27 19:23:19 +02:00
Lioncash
4fa71dd59e Remove fakepoll.h.
It was only used for Windows XP and lower.

This also bumps the _WIN32_WINNT define in the stdafx precompiled headers to set the minimum version as Windows Vista.
2014-07-26 22:53:40 -04:00
Lioncash
551cf4b2a2 Core: Remove the unused cycle parameter from DSPHLE update calls 2014-07-26 20:04:15 -04:00
Lioncash
0b8a6f852b Core: Use character literals within EXI_DeviceIPL 2014-07-26 19:07:19 -04:00