11416 Commits

Author SHA1 Message Date
Sintendo
363f3f82bb DSPJitRegCache: Simplify WriteReg
The intent here is to generate a more compact instruction if a 32-bit
immediate can be zero-extended to the desired 64-bit immediate.

Nowadays the emitter is smart enough to do this for us, so this logic is
redundant.
2020-08-05 10:23:28 +02:00
Sintendo
618d261b91 DSPJitMultiplier: addpaxz - AND constant directly
There's no need to load the 64-bit immediate into a temporary register.
x64 will sign-extend 32-bit immediates to 64 bits, giving us the exact
value we need in this case.

48 C7 C0 00 00 FF FF    mov         rax,0FFFFFFFFFFFF0000h
48 21 C2                and         rdx,rax

48 81 E2 00 00 FF FF    and         rdx,0FFFFFFFFFFFF0000h
2020-08-05 10:22:51 +02:00
Sintendo
49a4e09719 DSPJit: Replace/optimize LEAs
- LEA is a bit silly when the source and the destination are the same. A
simple ADD or SHL will do in those cases.

66 8D 04 45 00 00 00 00 lea         ax,[rax*2]
66 03 C0                add         ax,ax

48 8D 04 00             lea         rax,[rax+rax]
48 03 C0                add         rax,rax

66 8D 14 D5 00 00 00 00 lea         dx,[rdx*8]
66 C1 E2 03             shl         dx,3

- When scaling by 2, consider summing the register with itself instead.
The former always needs a 32-bit displacement, so the sum is more
compact.

66 8D 14 45 00 00 00 00 lea dx,[rax*2]
66 8D 14 00             lea dx,[rax+rax]
2020-08-05 10:22:50 +02:00
JosJuice
b0f9bb9f13 Port some settings to the new config system
Other than the controller settings and JIT debug settings,
these are the only settings which were defined in Java code
but not defined in the new config system in C++. (There are
still a lot of settings that are defined in the new config
system but not yet saveable in the new config system, though.)
2020-08-03 15:07:53 +02:00
JosJuice
a41166bb37 Make netplay's "same game" check more robust
Instead of comparing the game ID, revision, disc number and name,
we can compare a hash of important parts of the disc including
all the aforementioned data but also additional data such as the
FST. The primary reason why I'm making this change is to let us
catch more desyncs before they happen, but this should also fix
https://bugs.dolphin-emu.org/issues/12115. As a bonus, the UI can
now distinguish the case where a client doesn't have the game at
all from the case where a client has the wrong version of the game.
2020-08-02 22:46:53 +02:00
Sintendo
08bdeefe05 Jit64AsmCommon: Use AVX in ConvertDoubleToSingle
Using AVX we can eliminate another MOVAPS instruction here.

Before:
0F 28 C8                movaps      xmm1,xmm0
66 0F DB 0D CF 2C 00 00 pand        xmm1,xmmword ptr [1F8D283B220h]

After:
C5 F9 DB 0D D2 2C 00 00 vpand       xmm1,xmm0,xmmword ptr [271835FB220h]
2020-08-02 18:07:47 +02:00
Tilka
dbacffd75d
Merge pull request #8731 from Pokechu22/dsp-lle-cpu-int-crash
Fix crash when using DSP LLE with CPU interpreter (or fastmem off)
2020-08-01 15:26:27 +01:00
Pokechu22
9183c0c482 Bump state version 2020-07-29 16:57:37 -07:00
Pokechu22
e5e23c6b27 Mark several DVDInterface functions as static 2020-07-29 16:57:36 -07:00
Pokechu22
4415df463f Remove DVDInterface::Reset
It only resets the registers, which isn't something that needs to be done except for in DVDInterface::Init
2020-07-29 16:57:36 -07:00
Pokechu22
0fa96df818 Remove DriveState::DiscChangeDetected hack
Since both GameCube and Wii resets now work correctly, this hack is not needed anymore.
2020-07-29 16:57:36 -07:00
Pokechu22
a73eaf5712 Fix DVDLowReset spinup flag being read incorrectly 2020-07-29 16:57:35 -07:00
Pokechu22
9a8d426645 Implement PI_RESET_CODE resetting DI 2020-07-29 16:57:35 -07:00
Pokechu22
b8715b42d2 Only reset drive chip state (not DI registers) when changing discs
Resetting the DI registers disables interrupts, which means any errors reported (for instance) are just not sent though.
2020-07-29 16:57:35 -07:00
Pokechu22
537e40afb5 Only update DIMAR and DILENGTH if transfer completed without error
Turns out, Gamecube games actually do check DILENGTH, and if DILENGTH is at 0, they'll think the transfer completed successfully even if DEINT is used, since after all, surely that means everything was sent.  That caused all sorts of issues, from audio looping when a disc is removed since it's re-using the same buffer to just flat-out crashing instead of showing the disc removed screen.
2020-07-29 16:57:35 -07:00
Pokechu22
fba51b2956 Split drive state and drive error into 2 fields, and fix some inaccuracies
In particular:
- Trying to play audio in a non-ready state returns the state-specific error, not an audio buf error
- Audio status cannot be requested in non-ready states
- The audio buffer cannot be configured in states other than ReadyNoReadsMade
- Using the stop motor command while the motor is already stopped doesn't change states

Additionally, the internal state IDs are used (which distinguish ReadyNoReadsMade and Ready), instead of the state IDs exposed in request error.  This makes some of the weird behavior a bit more obvious.

State and error behavior of the seek command was not implemented in this commit.
2020-07-29 16:57:34 -07:00
JosJuice
2e8c5b4521 DolphinQt: Show a warning when launching an NKit disc image
It is my opinion that nobody should use NKit disc images without
being aware of the drawbacks of them. Since it seems like almost
nobody who is using NKit disc images knows what NKit is (hmm, now
how could that have happened...?), I am adding a warning to Dolphin
so that you can't run NKit disc images without finding out about the
drawbacks. In case someone really does want to use NKit disc images,
the warning has a "Don't show this again" option. Unfortunately, I
can't retroactively add the warning where it's most needed:
in Dolphin 5.0, which does not support Wii NKit disc images.
2020-07-29 21:05:57 +02:00
Sintendo
31755bc13a Jit64: fselx - Optimize SSE4.1 packed
Pretty much the same optimization we did for AVX, although slightly more
constrained because we're stuck with the two-operand instruction where
destination and source have to match.

We could also specialize the case where registers b, c, and d are all
distinct, but I decided against it since I couldn't find any game that
does this.

Before:
66 0F 57 C0          xorpd       xmm0,xmm0
66 41 0F C2 C1 06    cmpnlepd    xmm0,xmm9
41 0F 28 CE          movaps      xmm1,xmm14
66 41 0F 38 15 CC    blendvpd    xmm1,xmm12,xmm0
44 0F 28 F1          movaps      xmm14,xmm1

After:
66 0F 57 C0          xorpd       xmm0,xmm0
66 41 0F C2 C1 06    cmpnlepd    xmm0,xmm9
66 45 0F 38 15 F4    blendvpd    xmm14,xmm12,xmm0
2020-07-29 17:28:48 +02:00
Sintendo
afb86a12ab Jit64: fselx - Optimize AVX packed
For the packed variant, we can skip the final MOVAPS and write the
result directly into the destination register.

Before:
66 0F 57 C0          xorpd       xmm0,xmm0
66 41 0F C2 C1 06    cmpnlepd    xmm0,xmm9
C4 C3 09 4B CC 00    vblendvpd   xmm1,xmm14,xmm12,xmm0
44 0F 28 F1          movaps      xmm14,xmm1

After:
66 0F 57 C0          xorpd       xmm0,xmm0
66 41 0F C2 C1 06    cmpnlepd    xmm0,xmm9
C4 43 09 4B F4 00    vblendvpd   xmm14,xmm14,xmm12,xmm0
2020-07-29 17:06:52 +02:00
LC
b354e343a7
Merge pull request #8988 from JosJuice/no-refresh-rate-round
VideoCommon: Don't round the refresh rate
2020-07-28 17:17:34 -04:00
Sintendo
a52774ca63 Jit64: fselx - Add AVX path
AVX has a four-operand VBLENDVPD instruction, which allows for the first
input and the destination to be different. By taking advantage of this,
we no longer need to copy one of the inputs around and we can just
reference it directly, provided it's already in a register (I have yet
to see this not be the case).

Before:
66 0F 57 C0          xorpd       xmm0,xmm0
F2 41 0F C2 C6 06    cmpnlesd    xmm0,xmm14
41 0F 28 CE          movaps      xmm1,xmm14
66 41 0F 38 15 CA    blendvpd    xmm1,xmm10,xmm0
F2 44 0F 10 F1       movsd       xmm14,xmm1

After:
66 0F 57 C0          xorpd       xmm0,xmm0
F2 41 0F C2 C6 06    cmpnlesd    xmm0,xmm14
C4 C3 09 4B CA 00    vblendvpd   xmm1,xmm14,xmm10,xmm0
F2 44 0F 10 F1       movsd       xmm14,xmm1
2020-07-28 23:17:18 +02:00
JosJuice
f72b756778 VideoCommon: Don't round the refresh rate
We now provide a double to the FPS counter and exact values
to FIFO recording and frame dumping.
2020-07-28 21:01:38 +02:00
Jordan Woyak
bdfb320b3d WiimoteEmu: Don't check extension button press for wii remote reconnection. A real remote doesn't. We won't either. 2020-07-26 11:20:23 -05:00
Pokechu22
1ca3710bd2 DSPLLE: Use Memory functions isntead of directly using Memory::physical_base
Fixes bug 11980
2020-07-24 15:06:39 -07:00
Pokechu22
59dc7cfe7d Use size_t in some DSP code code 2020-07-24 15:06:39 -07:00
Lioncash
f9b856aeda WiimoteEmu: Mark several getters as const
These don't modify internal class state, so they can be made const.
2020-07-24 15:48:27 -04:00
Tillmann Karras
04b31e7eee IOS: work around incorrect -Wunused-but-set-variable warning
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96311
2020-07-24 16:38:54 +01:00
Tillmann Karras
fbd34f72ad EXI: fix -Wunused-variable warning 2020-07-24 15:35:35 +01:00
Tillmann Karras
7b2e93eea8 EXI: fix -Wreorder warning 2020-07-24 15:35:24 +01:00
JMC47
781662c6ad
Merge pull request #8793 from iwubcode/dump-texture-options
DolphinQt / VideoCommon: Add additional texture dumping options
2020-07-24 01:38:10 -04:00
JosJuice
213c1841f7
Merge pull request #8903 from AdmiralCurtiss/gcmemcard-file-identity-check
GCMemcard: Change behavior of TitlePresent() to more closely resemble how saves are actually identified.
2020-07-23 17:44:16 +02:00
iwubcode
9c8338ec4c DolphinQt / VideoCommon: Add additional texture dumping options. Specifically, this enables users to choose whether to dump mip maps, base level textures, or both. 2020-07-22 19:30:27 -05:00
JosJuice
26536832c3 Config: Simplify IsSettingSaveable
Should make it both easier to edit and faster to run.
2020-07-22 11:46:47 +02:00
Jordan Woyak
ae44f17667 HW/GCPadEmu: Adjust gate radius values to more closely match the real hardware. 2020-07-19 09:45:33 -05:00
LC
487cd7abd9
Merge pull request #8905 from JosJuice/jni-encoding
Android: Use correct encoding when converting strings
2020-07-18 22:13:14 -04:00
Filip Gawin
0ede5d1537 Use range loop (if possible) 2020-07-18 18:29:16 -05:00
Techjar
037aa2192f NetPlay: Limit nickname length
Ridiculously long nicknames cause UI silliness, so 30 characters seems
like a reasonable limit, as it's the same as the forum.
2020-07-16 19:03:54 -04:00
Admiral H. Curtiss
556e93f357 GCMemcard: Change behavior of TitlePresent() to more closely resemble how saves are actually identified.
This modifies GCMemcard::TitlePresent() to match my findings of how the GC BIOS and various games behave when you alter the fields in the directory entry.

It looks like for a save to be recognized by a game, the following have to be true:
- Game code and maker code must exactly match what the game expects.
- Filename is only checked up to the first null byte. All bytes afterwards can be whatever.

The BIOS itself does a full compare of the filename when checking for whether it should allow copying a file from one card to another, but behaves oddly in some cases when there's non-null bytes after the first null. See the big comment in `HasSameIdentity()` for details.
2020-07-15 19:17:22 +02:00
Jordan Woyak
d9e7d0514c WiimoteEmu: Allow writes of the i2c bus to play speaker data. 2020-07-11 21:19:16 -05:00
Rena Kunisaki
a553f22385 Add Break On Hit and Log On Hit for instruction breakpoints 2020-07-11 13:38:58 -04:00
JosJuice
15d9fab0bb Common: Rename UTF16ToUTF8
This function does *not* always convert from UTF-16. It converts
from UTF-16 on Windows and UTF-32 on other operating systems.

Also renaming UTF8ToUTF16 for consistency, even though it
technically doesn't have the same problem since it only was
implemented on Windows.
2020-07-08 14:51:35 +02:00
LC
4c50eadf34
Merge pull request #8908 from jordan-woyak/wiimote-battery-hax
WiimoteCommon: Tweak battery level math.
2020-07-08 08:46:58 -04:00
JosJuice
327b985718 DVDInterface: Increase the latency for read commands
Hardware tested using cached reads.

Fixes Ed, Edd n Eddy. https://bugs.dolphin-emu.org/issues/10373
2020-07-05 18:57:39 +02:00
JosJuice
e1e57fc359 DolphinQt: Expose SYSCONF sound setting 2020-07-02 22:25:41 +02:00
MerryMage
a10447eae2 JitArm64_Paired: Fix ps_msub when d == b 2020-07-01 20:11:54 +01:00
Tillmann Karras
a04ac23794 JitArm64: no intermediate rounding for paired FMA 2020-07-01 00:24:08 +01:00
Tillmann Karras
2a46c1f86f JitArm64: annotate intentional fallthrough 2020-07-01 00:10:15 +01:00
Markus Wick
4095fb6c20
Merge pull request #8911 from OatmealDome/arm64-fastmem-off
JitArm64: Don't assume fastmem arena is available
2020-06-29 09:20:19 +02:00
OatmealDome
089ffb9ef4 JitArm64: Don't assume fastmem arena is available 2020-06-29 00:42:56 -04:00
OatmealDome
0a22df3a9d Analytics: Remove deprecated usage of Gestalt to get macOS version 2020-06-29 00:37:50 -04:00