Commit Graph

85 Commits

Author SHA1 Message Date
Lioncash
8d98ac6509 CPU: Convert state enum to an enum class
Gets enum constants out of the immediate namespace. Also makes it
strongly typed like the other state enums.
2017-03-28 11:48:28 -04:00
Michael Maltese
64405f26a8 lint JitILCommon/IR.cpp 2017-02-07 12:08:25 -08:00
Michael Maltese
8048716efb JitIL/IR.cpp: add braces around std::array initalizers
Fixes the following warnings on macOS Clang:

```
Building CXX object Source/Core/Core/CMakeFiles/core.dir/PowerPC/JitILCommon/IR.cpp.o
Source/Core/Core/PowerPC/JitILCommon/IR.cpp:1374:9: warning: suggest braces around initialization of subobject [-Wmissing-braces]
        LoadCR,    LoadLink, LoadMSR,  LoadGReg,          LoadCTR, InterpreterBranch,
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Source/Core/Core/PowerPC/JitILCommon/IR.cpp:1378:9: warning: suggest braces around initialization of subobject [-Wmissing-braces]
        StoreLink,
        ^~~~~~~~~~
Source/Core/Core/PowerPC/JitILCommon/IR.cpp:1419:9: warning: suggest braces around initialization of subobject [-Wmissing-braces]
        BranchCond,
        ^~~~~~~~~~~
3 warnings generated.
```
2017-02-07 01:10:43 -08:00
Lioncash
bb49012445 IR: Deduplicate code in Reset and FoldFallbackToInterpreter 2017-01-17 20:35:02 -05:00
Lioncash
89473d5996 IR: Clean up getNumberOfOperands
- Use std::array
- Make arrays constexpr where their contents aren't modified.
2017-01-17 20:22:38 -05:00
Lioncash
d3aed03563 IR: Make trivial helper functions constexpr 2017-01-17 19:42:36 -05:00
Lioncash
d1f39185dd IR: Convert typedefs to using aliases 2017-01-17 19:40:56 -05:00
Lioncash
1516c22a22 JitILBase: Make the IRBuilder instance protected
There's no need to make it public.
2017-01-17 14:55:45 -05:00
Lioncash
e924814d62 JitILBase: Move protected members below public 2017-01-17 14:45:40 -05:00
Lioncash
8346f86ee4 IR: Remove unnecessary semicolon on namespace brace 2017-01-16 19:54:42 -05:00
Lioncash
67fc73e82c IR: Make getNumInsts return type size_t
There's no need to cast here.
2017-01-16 19:38:30 -05:00
Lioncash
459a6e73c3 IR: Remove unused function 2017-01-16 19:32:13 -05:00
Lioncash
cd12b2c55f IR: Make IRBuilder uncopyable
Hiding and not implementing the copy constructor is a pre-C++11 thing.
It should also be noted that a copy constructor, as defined by the
language, contains a const qualifier on its parameter, so this wouldn't
have prevented copies from being performed.
2017-01-16 18:59:17 -05:00
Lioncash
a8b2dd7fc3 IR: Use std::array instead of raw C arrays 2017-01-16 18:54:30 -05:00
Lioncash
ef3e6de875 IR: Move implementation of the constructor and Reset into the cpp file
Neither of these are intended to be called extremely frequently to warrant
this.
2017-01-16 18:36:11 -05:00
Lioncash
47fc72f0a8 IR: Get rid of an unimplemented member function prototype 2017-01-16 18:11:54 -05:00
Lioncash
4f75590fdb IR: Move private details below public details 2017-01-16 18:08:11 -05:00
Lioncash
94237b694b Jit64Common: Split Jit64Util contents into separate files
Much of Jit64Util consists of essentials, not utilities. Breaking these
out into their own files also prevents unrelated includes from being
present near other classes.

This also makes it easier to find and change certain components of the
x86-64 JIT, should it be necessary.
2016-12-18 02:27:58 -05:00
Lioncash
36c99df9f5 Jit: Move most x86-64-specific code out of JitCommon 2016-12-14 04:43:25 -05:00
Léo Lam
72e3f1ecec Remove unnecessary ConfigManager includes
Making changes to ConfigManager.h has always been a pain, because
it means rebuilding half of Dolphin, since a lot of files depend on
and include this header.

However, it turns out some includes are unnecessary. This commit
removes ConfigManager includes from files which don't contain
SConfig or GPUDeterminismMode or GPU_DETERMINISM (which means the
ConfigManager include is not used).

(I've also had to get rid of some indirect includes.)
2016-11-27 22:38:38 +01:00
degasus
0c67297ea0 ConfigManager: Drop SkipIdle option.
This option is safe + deterministic, so let's always enable it.
2016-10-04 08:31:43 +02:00
magumagu
d557310371 Support for dynamic BAT modification (dynamic-bat).
Fundamentally, all this does is enforce the invariant that we always
translate effective addresses based on the current BAT registers and
page table before we do anything else with them.

This change can be logically divided into three parts.  The first part is
creating a table to represent the current BAT state, and keeping it up to
date (PowerPC::IBATUpdated, PowerPC::DBATUpdated, etc.).  This does
nothing by itself, but it's necessary for the other parts.

The second part (mostly in MMU.cpp) is simply removing all the hardcoded
checks for specific untranslated addresses, and consistently translating
addresses using the current BAT configuration. Very straightforward, but a
lot of code changes because we hardcoded assumptions all over the place.

The third part (mostly in Memmap.cpp) is making the fastmem arena reflect
the current BAT configuration.  We do this by redoing the mapping (calling
memmap()) based on the BAT table whenever it changes.

One additional minor change is that translation can fail in two ways:
either the segment is a direct store segment, or page table lookup failed.
The difference doesn't usually matter, but the difference affects cache
instructions, like dcbz.
2016-09-06 08:43:22 +02:00
Pierre Bourdon
5fcb4bb3ab Further fixes to the formatting change. WX sucks. 2016-06-24 12:16:10 +02:00
Pierre Bourdon
3570c7f03a Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
EmptyChaos
c1922783f8 Core: Threadsafety Synchronization Fixes (Frame Advance / FifoPlayer)
Fix Frame Advance and FifoPlayer pause/unpause/stop.

CPU::EnableStepping is not atomic but is called from multiple threads
which races and leaves the system in a random state; also instruction
stepping was unstable, m_StepEvent had an almost random value because
of the dual purpose it served which could cause races where CPU::Run
would SingleStep when it was supposed to be sleeping.

FifoPlayer never FinishStateMove()d which was causing it to deadlock.
Rather than partially reimplementing CPU::Run, just use CPUCoreBase
and then call CPU::Run(). More DRY and less likely to have weird bugs
specific to the player (i.e the previous freezing on pause/stop).

Refactor PowerPC::state into CPU since it manages the state of the
CPU Thread which is controlled by CPU, not PowerPC. This simplifies
the architecture somewhat and eliminates races that can be caused by
calling PowerPC state functions directly instead of using CPU's
(because they bypassed the EnableStepping lock).
2016-05-13 09:23:44 +10:00
Lioncash
f8fcceb99e Jit: Get rid of indirect includes 2016-01-12 00:12:36 -05:00
Tillmann Karras
84b1e22246 PowerPC: rename fcmpx to fcmpX
lowercase: optional Rc bit
uppercase: generic placeholder
2015-12-16 21:17:36 +01:00
Lioncash
19459e827f Partially revert "General: Toss out PRI macro usage" 2015-09-11 09:49:00 -04:00
Scott Mansell
be4caa3dc0 Merge pull request #2961 from lioncash/printf
General: Toss out PRI macro usage
2015-09-06 21:02:22 +12:00
Lioncash
4fc71e9708 Common: Remove StdMakeUnique.h 2015-09-06 04:09:53 -04:00
Lioncash
633be0387d General: Remove unimplemented function prototypes 2015-09-05 22:01:07 -04:00
Lioncash
8fdb013d54 General: Toss out PRI macro usage
Now that VS supports more printf specifiers, these aren't necessary
2015-09-05 16:02:35 -04:00
degasus
c375111076 Options: merge SCoreStartupParameter into SConfig 2015-06-12 19:07:45 +02:00
Tillmann Karras
30ebb2459e Set copyright year to when a file was created 2015-05-25 13:22:31 +02:00
Tillmann Karras
cefcb0ace9 Update license headers to GPLv2+ 2015-05-25 13:22:31 +02:00
Lioncash
76bbd46829 Core: Remove some header inclusions in header files
Replaces them with forward declarations of used types, or removes them entirely if they aren't used at all. This also replaces certain Common headers with less inclusive ones (in terms of definitions they pull in).
2015-05-08 22:38:59 -04:00
comex
b84f6a55ab Automatically disable fastmem and enable memcheck when there are any watchpoints.
- Move JitState::memcheck to JitOptions because it's an option.
- Add JitOptions::fastmem; switch JIT code to checking that rather than
  bFastmem directly.
- Add JitBase::UpdateMemoryOptions(), which sets both two JIT options
  (replacing the duplicate lines in Jit64 and JitIL that set memcheck
  from bMMU).
  - (!) The ARM JITs both had some lines that checked js.memcheck
    despite it being uninitialized in their cases.  I've added
    UpdateMemoryOptions to both.  There is a chance this could make
    something slower compared to the old behavior if the uninitialized
    value happened to be nonzero... hdkr should check this.
- UpdateMemoryOptions forces jo.fastmem and jo.memcheck off and on,
  respectively, if there are any watchpoints set.
- Also call that function from ClearCache.
- Have MemChecks call ClearCache when the {first,last} watchpoint is
  {added,removed}.

Enabling jo.memcheck (bah, confusing names) is currently pointless
because hitting a watchpoint does not interrupt the basic block.  That
will change in the next commit.
2015-04-24 22:37:53 -04:00
Darius Goad
f4750804ab Add various loads and stores to JitIL 2015-03-03 11:17:25 -06:00
magumagu
985087c7e2 Make all unknown opcodes behave consistently.
Consistently fall back to the interpreter for unknown instructions, and
make sure GetOpInfo() always returns a non-null pointer.
2015-02-11 22:18:33 -08:00
magumagu
ac54c6a4e2 Make address translation respect the CPU translation mode.
The PowerPC CPU has bits in MSR (DR and IR) which control whether
addresses are translated. We should respect these instead of mixing
physical addresses and translated addresses into the same address space.

This is mostly mass-renaming calls to memory accesses APIs from places
which expect address translation to use a different version from those
which do not expect address translation.

This does very little on its own, but it's the first step to a correct BAT
implementation.
2015-02-11 13:56:22 -08:00
magumagu
1e370550c4 JIT: simplify ISI handling.
When we try to JIT from a block which doesn't exist, don't JIT any code;
just update the PPC state to indicate an ISI.  This is a little simpler,
and avoids abusing the JIT block cache.
2015-01-01 19:25:48 -08:00
Rohit Nirmal
b030d29067 Silence some -Wswitch-default warnings. 2014-12-11 22:23:05 -06:00
Stevoisiak
b25e1a2eb4 Various formatting and consistency fixes 2014-11-13 22:42:18 -05:00
Lioncash
30f97723db Core: Fix potentially uninitialized variable warnings 2014-11-03 22:21:10 -05:00
skidau
daf977e84e Disabled optimizations, block merging and instruction skipping code while the debugger is stepping. 2014-10-27 23:38:45 +11:00
Fiora
d7ff482618 Fix FPRF flag setting
Looks like I didn't quite change every place it needed to be renamed.
2014-10-21 04:56:35 -07:00
Scott Mansell
6956df79b2 Fix Fastmem in JitIL for massive speed gains.
JitIL's fastmem was stubbed out when Sonicadvance1 merged JitARMIL
into the tree. Since JitARMIL has been deleted, I simply re-arrange
the inheritance to base JitIL on Jitx86Base, so it can inherit the
backpatch function.

Povray Benchmark: 1985 seconds to 1316 seconds.
2014-09-14 16:21:54 +12:00
Scott Mansell
cf869fc24f Fix Idle Skipping in JitIL.
Has been broken since the flags-opt merge. The idle skipping code in
JitIL was very brittle and depended on the IL of it's inputs not
changing in any way.

flags-opt changed the IR generated by the cmp instruction, which is part
of the idle loop, causing JitIL to break in really weird ways, which
were almost impossible to track down.

This fixes various wii games crashing/not booting and the Regspill
error on (all?) gamecube mmu games.
2014-09-14 04:36:50 +12:00
Ryan Houdek
71cb09f1ca Merge pull request #1027 from rohit-n/change-include
Include CommonTypes.h instead of Common.h.
2014-09-10 00:35:16 -05:00
Rachel Bryk
f93aa7087c Kill Core::g_CoreStartupParameter. 2014-09-09 00:24:49 -04:00