Sintendo
530475dce8
Jit64: divwx - Micro-optimize certain divisors
...
When the multiplier is positive (which is the most common case), we can
generate slightly better code.
- Division by 30307
Before:
49 63 C5 movsxd rax,r13d
48 69 C0 65 6B 32 45 imul rax,rax,45326B65h
4C 8B C0 mov r8,rax
48 C1 E8 3F shr rax,3Fh
49 C1 F8 2D sar r8,2Dh
44 03 C0 add r8d,eax
After:
49 63 C5 movsxd rax,r13d
4C 69 C0 65 6B 32 45 imul r8,rax,45326B65h
C1 E8 1F shr eax,1Fh
49 C1 F8 2D sar r8,2Dh
44 03 C0 add r8d,eax
2021-03-07 18:29:12 +01:00
Sintendo
95698c5ae1
Jit64: divwx - Optimize constant divisor
...
Optimize division by a constant into multiplication. This method is also
used by GCC and LLVM.
We also add optimized paths for divisors 0, 1, and -1, because they
don't work using this method. They don't occur very often, but are
necessary for correctness.
- Division by 1
Before:
41 BF 01 00 00 00 mov r15d,1
41 8B C5 mov eax,r13d
45 85 FF test r15d,r15d
74 0D je overflow
3D 00 00 00 80 cmp eax,80000000h
75 0E jne normal_path
41 83 FF FF cmp r15d,0FFFFFFFFh
75 08 jne normal_path
overflow:
C1 F8 1F sar eax,1Fh
44 8B F8 mov r15d,eax
EB 07 jmp done
normal_path:
99 cdq
41 F7 FF idiv eax,r15d
44 8B F8 mov r15d,eax
done:
After:
45 8B FD mov r15d,r13d
- Division by 30307
Before:
41 BA 63 76 00 00 mov r10d,7663h
41 8B C5 mov eax,r13d
45 85 D2 test r10d,r10d
74 0D je overflow
3D 00 00 00 80 cmp eax,80000000h
75 0E jne normal_path
41 83 FA FF cmp r10d,0FFFFFFFFh
75 08 jne normal_path
overflow:
C1 F8 1F sar eax,1Fh
44 8B C0 mov r8d,eax
EB 07 jmp done
normal_path:
99 cdq
41 F7 FA idiv eax,r10d
44 8B C0 mov r8d,eax
done:
After:
49 63 C5 movsxd rax,r13d
48 69 C0 65 6B 32 45 imul rax,rax,45326B65h
4C 8B C0 mov r8,rax
48 C1 E8 3F shr rax,3Fh
49 C1 F8 2D sar r8,2Dh
44 03 C0 add r8d,eax
- Division by 30323
Before:
41 BA 73 76 00 00 mov r10d,7673h
41 8B C5 mov eax,r13d
45 85 D2 test r10d,r10d
74 0D je overflow
3D 00 00 00 80 cmp eax,80000000h
75 0E jne normal_path
41 83 FA FF cmp r10d,0FFFFFFFFh
75 08 jne normal_path
overflow:
C1 F8 1F sar eax,1Fh
44 8B C0 mov r8d,eax
EB 07 jmp 00000000161737E7
normal_path:
99 cdq
41 F7 FA idiv eax,r10d
44 8B C0 mov r8d,eax
done:
After:
49 63 C5 movsxd rax,r13d
4C 69 C0 19 25 52 8A imul r8,rax,0FFFFFFFF8A522519h
49 C1 E8 20 shr r8,20h
44 03 C0 add r8d,eax
C1 E8 1F shr eax,1Fh
41 C1 F8 0E sar r8d,0Eh
44 03 C0 add r8d,eax
2021-03-07 18:29:01 +01:00
Sintendo
5bb8798df6
JitCommon: Signed 32-bit division magic constants
...
Add a function to calculate the magic constants required to optimize
signed 32-bit division.
Since this optimization is not exclusive to any particular architecture,
JitCommon seemed like a good place to put this.
2021-03-07 18:27:36 +01:00
Sintendo
c9adc60d73
Jit64: divwx - Special case dividend == 0
...
Zero divided by any number is still zero. For whatever reason, this case
shows up frequently too.
Before:
B8 00 00 00 00 mov eax,0
85 F6 test esi,esi
74 0C je overflow
3D 00 00 00 80 cmp eax,80000000h
75 0C jne normal_path
83 FE FF cmp esi,0FFFFFFFFh
75 07 jne normal_path
overflow:
C1 F8 1F sar eax,1Fh
8B F8 mov edi,eax
EB 05 jmp done
normal_path:
99 cdq
F7 FE idiv eax,esi
8B F8 mov edi,eax
done:
After:
Nothing!
2021-03-07 18:27:30 +01:00
Sintendo
c081e3f2b3
Jit64: divwx - Optimize constant dividend
...
When the dividend is known at compile time, we can eliminate some of the
branching and precompute the result for the overflow case.
Before:
B8 54 D3 E6 02 mov eax,2E6D354h
85 FF test edi,edi
74 0C je overflow
3D 00 00 00 80 cmp eax,80000000h
75 0C jne normal_path
83 FF FF cmp edi,0FFFFFFFFh
75 07 jne normal_path
overflow:
C1 F8 1F sar eax,1Fh
8B F8 mov edi,eax
EB 05 jmp done
normal_path:
99 cdq
F7 FF idiv eax,edi
8B F8 mov edi,eax
done:
After:
85 FF test edi,edi
75 04 jne normal_path
33 FF xor edi,edi
EB 0A jmp done
normal_path:
B8 54 D3 E6 02 mov eax,2E6D354h
99 cdq
F7 FF idiv eax,edi
8B F8 mov edi,eax
done:
Fairly common with constant dividend of zero. Non-zero values occur
frequently in Ocarina of Time Master Quest.
2021-03-07 18:25:08 +01:00
Sintendo
2454bd5ba6
Jit64: Add optional argument to GenerateOverflow
...
This allows setting the overflow flag based on any condition code.
Defaults to NO (no overflow).
2021-03-05 17:14:45 +01:00
Léo Lam
5f7d935b0a
Merge pull request #9533 from sepalani/mmu-is-ram
...
MMU: Fix IsRAMAddress not working
2021-03-05 11:49:55 +01:00
JMC47
fc86e554e0
Merge pull request #9559 from iwubcode/gdb-stub-raii
...
Common / Core: add raii object that cleans up WSA on destruction in gdb-stub
2021-03-05 05:28:31 -05:00
Léo Lam
adcdeda372
Merge pull request #9565 from sepalani/qt-blocker
...
BreakpointWidget: Use QSignalBlocker
2021-03-05 10:44:44 +01:00
Léo Lam
a4de2502c5
Merge pull request #9550 from endrift/gba-flush
...
SI/DeviceGBA: Ensure data socket isn't backed up
2021-03-05 10:38:55 +01:00
Sepalani
1e6dfc6b91
BreakpointWidget: Use QSignalBlocker
2021-03-05 13:35:33 +04:00
Sepalani
fd7eeb7221
BreakpointWidget: Fix delete deleting both MBP and BP at address
2021-03-05 13:01:32 +04:00
Léo Lam
1e3e5680db
Merge pull request #9561 from sepalani/fix-watches
...
Watches: Fix Save and Load from strings
2021-03-05 00:57:40 +01:00
iwubcode
7d5052896d
IOS: update network/ip/top to use the RAII winsock context
2021-03-04 13:55:20 -06:00
iwubcode
e4f74bea42
Core: Use RAII winsock object to cleanly create and destroy WSA in gdb-stub
2021-03-04 13:47:32 -06:00
iwubcode
00bc7e6b38
Common: Add RAII object that initializes and cleans up winsock
2021-03-04 13:44:12 -06:00
Sepalani
ef977123d5
BreakpointWidget: Emit BreakpointsChanged to update views
2021-03-04 21:10:37 +04:00
Sepalani
6786340a7c
Watches: Fix Save and Load from strings
2021-03-04 17:55:52 +04:00
Léo Lam
be500a98e2
Merge pull request #8779 from sepalani/open-dump
...
NetworkWidget: Reorganise SSL options group box
2021-03-04 13:37:10 +01:00
Léo Lam
511e9dcd2f
Merge pull request #9542 from InusualZ/toggle-bp
...
BreakpointWidget: Allow breakpoints to be toggled between enable/disable
2021-03-04 12:34:03 +01:00
Léo Lam
48a5846aee
Merge pull request #9548 from AdmiralCurtiss/fastmem-active-regions
...
Core/Memmap: Memory mapping logic fixes.
2021-03-04 12:18:59 +01:00
Léo Lam
9c6c77351f
Merge pull request #9556 from JosJuice/cmake-msvc-latest
...
CMake: Build with -std:c++latest for MSVC
2021-03-04 12:12:06 +01:00
Léo Lam
00db622d50
Merge pull request #9560 from JosJuice/cmake-msvc-wil
...
CMake: Include WIL headers
2021-03-04 12:08:05 +01:00
JosJuice
2cb3f663bc
CMake: Include WIL headers
...
MSBuild does this, so CMake should too. Fixes a Windows build error.
2021-03-04 10:26:31 +01:00
JosJuice
0cb71d3f47
CMake: Disable warning C5054 on DolphinQt
...
Same as 33c0abd
.
Also removing -D_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING
to match MSBuild. Qt is no longer triggering that warning.
2021-03-04 09:29:30 +01:00
Dentomologist
6e13d35026
DolphinQt: Removed unused this capture in lambda
...
The Host constructor sets a callback on a lambda that in turn calls
Host_UpdateDisasmDialog. Since that function is not a member function
capturing this is unnecessary.
Fixes -Wunused-lambda-capture warning on freebsd-x64.
2021-03-03 13:18:17 -08:00
JMC47
d2eb846e6a
Merge pull request #9549 from Dentomologist/ppcstate_off_to_s32
...
JitArm64: Fix unsigned/signed argument/parameter mismatch
2021-03-03 14:56:40 -05:00
JMC47
9843412440
Merge pull request #8996 from AdmiralCurtiss/memcard-save-import-export-refactor
...
Various improvements for the Memory Card Manager.
2021-03-03 14:51:31 -05:00
JMC47
a0be1c93ea
Merge pull request #9352 from Pokechu22/sw-line-point-width
...
Software: Implement line-width and point-width
2021-03-03 14:15:28 -05:00
InusualZ
5e1b3514f6
Allow to disable/enable from the BreakpointWidget
...
Added a context menu, for when a breakpoint is right-clicked
Removed the `itemClicked` behavior, since it would clash with the context menu
2021-03-03 15:55:22 +00:00
Vicki Pfau
f6e9003ddc
SI/DeviceGBA: Ensure data socket isn't backed up
...
When reading a reply from a message sent to the data socket there is
the possibility that the other side gets sent multiple messages
before replying to any of them, which can lead to multiple replies
sent in a row. Though this only happens when things time out, it's
quite possible for these timeouts to happen or build up over time,
especially when initiating the connection.
This change makes sure to flush any pending bytes that have not been
read yet out of the socket after a successful POLL reply is received,
since that is the most common time when backups occur, and as well as
using the exact number of bytes in an expected reply, to ensure
the received data and the message it's replying to do not get out of
sync.
2021-03-02 18:53:44 -08:00
Dentomologist
4807cb77fd
JitArm64: Fix unsigned/signed arg/param mismatch
...
The result of calls to PPCSTATE_OFF_PS0/1 were being cast to u32 and
passed to functions expecting s32 parameters. This changes the casts
to s32 instead.
One location was missing a cast and generated a warning with VS which
is now fixed.
2021-03-02 13:38:54 -08:00
InusualZ
4935e9b560
Allow to disable/enable breakpoints
...
Added `ToggleBreakPoint` to both interface BreakPoints/MemChecks. this would allow us to toggle the state of the breakpoint.
Also the TMemCheck::is_ranged is not longer serialized to string, since can be deduce by comparing the TMemCheck::start_address and TMemCheck::end_address
2021-03-02 21:11:53 +00:00
Admiral H. Curtiss
4b784576d9
Core/Memmap: Don't try to map logical memory from inactive physical regions.
2021-03-02 18:41:33 +01:00
Admiral H. Curtiss
8199825c6f
Core/Memmap: Store and check which physical regions are actually mapped instead of relying on SConfig staying the same.
2021-03-02 18:41:33 +01:00
Léo Lam
7712f0831f
Merge pull request #9535 from sepalani/threads-freeze
...
DebugInterface: Check visited addresses in GetThreads
2021-03-02 16:38:02 +01:00
Sepalani
8279613a49
DebugInterface: Check visited addresses in GetThreads
2021-03-02 19:29:47 +04:00
Léo Lam
59f4164411
Merge pull request #9539 from iwubcode/dynamic_input_tex_more_optimizations
...
InputCommon: dynamic input textures more optimizations
2021-03-02 02:53:22 +01:00
Léo Lam
0c9f11af47
Merge pull request #9537 from AdmiralCurtiss/fastmem-error-messages
...
Core/Memmap: Give more detailed error messages if memory mapping fails.
2021-03-02 02:47:12 +01:00
Admiral H. Curtiss
918f3d92e0
Core/Memmap: Give more detailed error messages if memory mapping fails.
2021-03-01 19:11:00 +01:00
Léo Lam
010279f4e6
Merge pull request #9513 from leoetlino/info-ios-version-qt
...
Qt: Re-add IOS version to the game info tab
2021-03-01 11:44:26 +01:00
Léo Lam
858f00b641
Merge pull request #9492 from nolange/fix_norandr_build
...
Cleanup X11 and XRANDR Macros
2021-03-01 11:36:39 +01:00
Léo Lam
26f0bf8f34
Merge pull request #9538 from JosJuice/qt-sw-gameid
...
DolphinQt: Fix <game_id> tag in SoftwareRendererWidget.cpp
2021-03-01 11:34:53 +01:00
iwubcode
32d584a0f5
InputCommon: reduce number of image loads and texture cache invalidations by only running dynamic input textures once for all controllers
2021-02-27 17:29:48 -06:00
JosJuice
c98144334f
DolphinQt: Fix <game_id> tag in SoftwareRendererWidget.cpp
...
Same problem and same fix as in e55342a
. Also changing <br />
to <br> for consistency with other strings while I'm at it.
2021-02-27 20:17:28 +01:00
iwubcode
158674c274
Common: Move 'GetSection' functions to be public
2021-02-27 12:21:23 -06:00
Léo Lam
9d0983c9c9
Merge pull request #9536 from Filoppi/config_fixes
...
Don't call OnConfigChanged() unless config actually changed
2021-02-26 01:56:01 +01:00
Filoppi
e020b2e8ea
Common: don't call OnConfigChanged() unless it has actually changed
...
DualShock UDP Client is the only place in the code that assumed OnConfigChanged()
is called at least once on startup or it won't load up the setting, so I took care of that
2021-02-26 01:14:00 +02:00
Sepalani
6982832f82
MMU: Fix IsRAMAddress not working
2021-02-24 22:19:26 +04:00
Admiral H. Curtiss
22b300336a
Core/MemoryWatcher: Use appropriate memory read function in ChasePointer().
2021-02-24 19:02:30 +01:00