Commit Graph

938 Commits

Author SHA1 Message Date
1b01911c01 Jit64: indent far code because it looks nice 2015-05-14 19:12:58 +02:00
6c5e5cc7b8 PowerPC: clean up instruction tables 2015-05-14 19:12:54 +02:00
accefbf0a5 JitBase: small cleanup 2015-05-14 19:08:07 +02:00
5b023b83ec Jit64: rename twx to twX
We use the lower-case x to signal an optional Rc bit.
2015-05-14 19:08:07 +02:00
2074abbe86 Jit64: drop unused argument from SetFPRFIfNeeded 2015-05-14 19:08:05 +02:00
9723a4e2ed Interpreter: use IntDouble instead of casts 2015-05-14 18:59:05 +02:00
2d47a159ab [AArch64] Disable psq_l.
Causes flickering in games ever since PR #2172.
No idea why
2015-05-11 00:11:40 -05:00
294629fa9e Merge pull request #2368 from randomstuff/gdb-unix
GDB stub over UNIX socket
2015-05-11 14:42:34 +10:00
c651906134 Jit64[IL]: remove some unused stuff 2015-05-09 17:17:49 +02:00
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
04cb6fccd6 GDB stub over UNIX socket
This is available with the `GDBSocket` option in
`~/.dolphin-emu/Config/Dolphin.ini`.

GDB can connect to it with:

    $ powerpc-eabi-gdb
    (gdb) target remote |socat STDIO UNIX:foo.sock

Because I don't like so much binding the GDB stub socket to 0.0.0.0.
On Linux, with a suitable umask, we can make sure that another local
user cannot connect to the socket.
2015-05-08 14:23:37 +02:00
42ebf5b3bf Merge pull request #2333 from lioncash/virt
InputCommon/Core: Get rid of some virtual destructor warnings
2015-04-28 15:41:48 +12:00
9603fb6ccd Interpreter_LoadStorePaired: Silence uninitialized variable warnings 2015-04-27 22:54:58 -04:00
d39b519850 InputCommon/Core: Get rid of some virtual destructor warnings
These classes have virtual methods, but no virtual destructor, which causes warnings on some compilers.
2015-04-27 21:41:59 -04:00
472e281445 Merge pull request #2316 from comex/fix-watch
Fix watchpoints ("memory breakpoints") with JIT
2015-04-27 19:42:13 +10:00
dea88ef5a1 ITYM PowerPC::Write_U{8,16}, not Memory::
PowerPC does exceptions and hardware and stuff, Memory doesn't.

I did not realize until a few minutes ago that there were two versions of these functions.  This is why namespaces suck.  Anyway, these were added by Mullin earlier this year.
2015-04-24 22:41:10 -04:00
132e1068ce Remove checks that disable fastmem if debugging and ENABLE_MEM_CHECK are enabled.
They weren't sufficient and are made redundant by previous commits; they
also (on master) caused breakage due to Jit64::psq_stXX assuming writes
would be fastmem and not clobber a register under certain conditions.

That really needs to be refactored, but for now, this works.
2015-04-24 22:37:54 -04:00
2264e7b087 Use a fake exception to exit early in case of memory breakpoints.
Change TMemCheck::Action to return whether to break rather than calling
PPCDebugInterface::BreakNow, as this simplified the implementation; then
remove said method, as that was its only caller.  One "interface" method
down, many to go...
2015-04-24 22:37:54 -04:00
dd7ab4812b On x86, disabling fastmem isn't enough actually.
Without fastmem, the JIT code still does an inline check for RAM
addresses.  With watchpoints we have to disable that too.  (Hardware
watchpoints would avoid all the slow, but be complicated to implement
and limited in number - I doubt most people debugging games care much if
they run slower.)

With this change and watchpoints enabled, Melee runs at no more than 40%
speed, despite running at full speed without them.  Oh well.  Better
works slowly than doesn't bloody work.

Incidentally, I'm getting an unrelated crash in
PowerPC::HostIsRAMAddress when shutting down a game.  This code sucks.
2015-04-24 22:37:54 -04:00
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
b3aaa46d42 Merge pull request #2088 from Sintendo/diecmp
Emit 'TEST reg, reg' for 'CMP reg, 0' automatically
2015-04-23 16:34:23 -04:00
ad95454d04 Merge pull request #2223 from phire/imm
Cleanup OpArg, make immediates more explicit.
2015-04-23 01:53:18 -04:00
56df9b7508 GPFifo: Remove unused parameters from Write[x] functions 2015-04-21 23:01:25 -04:00
5dbfebcd30 Merge pull request #2216 from Sonicadvance1/aarch64_dirty_dirty
[AArch64] Implement dirty register tracking.
2015-03-22 11:32:43 -05:00
c19482c9a3 Add function to emit CMP, or TEST when possible
Also, a spelling mistake.
2015-03-22 17:22:27 +01:00
1fc1880ca5 Interpreter/Jit Tables: Merge table31 and table31_2 2015-03-20 20:39:51 -04:00
1052863bb9 Interpreter/JIT: Add missing overflow variants into the tables. 2015-03-20 19:20:38 -04:00
627b77e982 Restore masking to gather pipe address checks.
Apparently it's necessary. Issue 8386.
2015-03-17 12:01:37 -07:00
858ff69c01 Make OpArg.offset and operandReg private.
Also cleaned up WriteRest function.
2015-03-17 18:49:30 +13:00
6262a9bcbe Make immediates more explicit
Instead of just casting OpArg::offset when needed, add some
accessor functions.

Also add some safety asserts to catch any mistakes.
2015-03-17 18:49:26 +13:00
629fb8fb49 Merge pull request #2222 from Tilka/fix_warnings
Fix warnings
2015-03-16 17:41:46 -07:00
b103aa7122 Merge pull request #2189 from magumagu/paired-loadstore-cleanup
Fix paired loadstore to use correct load/store calls.
2015-03-17 11:26:01 +11:00
f82afd1b2f Fix warnings 2015-03-16 19:02:30 +01:00
ad64336137 quiet some warnings which appear on vs2015.
quieted warnings include shadowed variable names and integer extensions.
2015-03-15 19:28:47 -07:00
3e946b1bf7 [AArch64] Implement dirty register tracking.
Using BindToRegister from the register caches causes the register bound to be marked dirty.
Using the regular R() function from the register caches loads the registers without being dirty.

When implementing new instructions make sure to BindToRegister registers that become dirty.
2015-03-15 20:09:30 -05:00
5e0b9179db Merge pull request #2186 from Sonicadvance1/aarch64_optimize_paired_slowmem
[AArch64] Optimize slowmem paired stores.
2015-03-15 14:37:21 -05:00
5e6d49d96b Merge pull request #2209 from magumagu/remove-hle-opcode
Remove remnants of old fake opcodes.
2015-03-15 07:13:07 -05:00
48ec42d4a0 Core: Change NULLs to nullptrs. 2015-03-14 20:20:41 -05:00
87dcda5785 Remove remnants of old fake opcodes.
These are illegal opcodes, and should be treated as such.
2015-03-14 16:59:12 -07:00
dda5e610eb Fix paired loadstore to use correct load/store calls.
psq_st performs one store, and psq_ld one load, from the perspective of the
MMU; getting this wrong leads to potentially incorrect behavior (incorrect page
faults, weirdness with the gather pipe, etc.).  Fix this, and stop masking
the address when checking for gather pipe writes.

Also a bunch of cleanup.
2015-03-11 17:06:18 -07:00
a1dbe8e463 Merge pull request #2166 from MoochMcGee/master
Add various loads and stores to JitIL
2015-03-08 17:12:52 -07:00
859c1123ba Fix typo in usage of IsOptimizableMMIOAccess. 2015-03-08 16:20:17 -07:00
7f50cc0873 [AArch64] Optimize slowmem paired stores.
This came up from the discussion we were having prior about dumping half of a kilobyte of VFP registers to the stack is insanity.
This was due to me basically copying exactly what I did on ARMv7's paired loadstores, where the impact is less since we only use the bottom 64bits of
the VFP registers.

So I decided to think about how to improve upon this since I got called out on my terrible code.
The solution I have come up with is instead of jumping to the common ASM routine and having that check if it needs to take the fastmem or slowmem
routes, just inline the check in to the JIT block and jump to either a fastmem or slowmem handler.
Fairly simple, and this allows us to only flush the registers that are required when doing so. Should give a reasonable increase in performance for
games that use the slowmem path quite a lot.
2015-03-08 16:12:49 -05:00
a9622c247b Merge pull request #2146 from Sonicadvance1/aarch64_optimize_fpr_push_pop
[AArch64] Optimize FPR pushing and popping.
2015-03-08 08:51:45 -05:00
9c045e2496 Merge pull request #2094 from lioncash/flags
Interpreter: Flag cleanups/fixes.
2015-03-07 17:38:00 -08:00
45dbcf0ed2 Jit64: use MRegSum where appropriate 2015-03-05 21:58:28 +01:00
e27fae22d8 Jit64: drop a FIXME that has been fixed for years
See 6cdb40a194.
2015-03-05 21:58:28 +01:00
a11bbe6fea PPCTables: Remove FL_OUT_S.
This is unused, and since it had the same value as FL_OUT_D, it was unnecessarily setting the rS register as an output, even on instructions that only have FL_OUT_D set.
2015-03-03 16:23:28 -05:00
139dbcb8e2 Interpreter_Tables: Fix wrong flags and add missing ones 2015-03-03 16:23:21 -05:00
f4750804ab Add various loads and stores to JitIL 2015-03-03 11:17:25 -06:00