Commit Graph

9693 Commits

Author SHA1 Message Date
Léo Lam 4fd1674c49 Core: Only init Wii FS contents in Wii mode
There's no filesystem when not in Wii mode, so... bad things
would happen.
2018-05-23 13:39:53 +02:00
Léo Lam da03ff2e25
Merge pull request #6944 from leoetlino/init-fs-contents
Move Wii FS content init to happen after Boot
2018-05-23 11:37:10 +02:00
JosJuice 58743416bb Make the support for unencrypted Wii disc images less broken
These disc images are only used on dev units and not retail units.
There are two important differences compared to normal Wii disc images:

- The data starts 0x8000 bytes into each partition instead of 0x20000
- The data of a partition is stored unencrypted and contains no hashes

Our old implementation was just guesswork and doesn't work at all.
According to testing by GerbilSoft, this commit's implementation
is able to read and extract files in the filesystem correctly,
but the tested game still isn't able to boot. (It's thanks to their
info about unencrypted disc images that I was able to make this commit.)
2018-05-23 08:40:37 +02:00
Lioncash 6a4f12d785 JitArm64: Correct negative overflow handling for divw 2018-05-22 13:52:56 -04:00
Lioncash 5abe6c264a Jit64: Correct negative overflow handling for divw 2018-05-22 13:52:51 -04:00
Léo Lam 0e9255c469
Merge pull request #6932 from sepalani/debug-patches
DebugInterface: MemoryPatches methods added
2018-05-22 19:15:51 +02:00
Léo Lam 593f58be6c Move Wii FS content init to happen after Boot
Initialising Wii filesystem contents should be done after Boot and
not in HW to ensure that we operate with the correct title context
and to make sure required title directories exist (so that Movie and
Netplay code can copy data from and to the temporary NAND).
2018-05-22 19:05:45 +02:00
Lioncash 2ca1ac3370 Interpreter_Integer: Correct negative overflow handling for divw
Previously, given cases such as 0x80000000 / 0xFFFFFFFF we'd incorrectly
set the destination register value to zero. If the dividend is negative,
then the destination should be set to -1 (0xFFFFFFFF), however if the
dividend is positive, then the destination should be set to 0.

Note that the 750CL documents state that:

"If an attempt is made to perform either of the divisions --
0x80000000 / -1 or <anything> / 0, then the contents of rD are
undefined, as are the contents of the LT, GT, and EQ bits of the CR0
field (if Rc = 1). In this case, if OE = 1 then OV is set."

So this is a particular behavior of the hardware itself.
2018-05-22 10:39:08 -04:00
Lioncash 22ece80f19 BreakPoints: Make OverlapsMemcheck() a const member function
This doesn't modify class state, it only queries said state.
2018-05-22 09:42:20 -04:00
Sepalani 8fa898fe9a DebugInterface: MemoryPatches methods added
CodeView: Restore instruction added
2018-05-22 10:31:31 +04:00
Lioncash 9a088e008f Interpreter: Check processor privilege level when executing supervisor instructions
Executing a supervisor-level instruction in user mode is supposed to
cause a program exception to occur.

The following supervisor instructions are present:

- dcbi
- mfmsr
- mfspr
- mfsr
- mfsrin
- mtmsr
- mtspr
- mtsr
- mtsrin
- rfi
- tlbie
- tlbsync

In 0337ca116a checks within mfspr and
mtspr were added. This change adds the trivial checks to the other
instructions.
2018-05-21 23:47:49 -04:00
Lioncash 3e996dc0f1 Interpreter_SystemRegisters: Get rid of implicit sign conversions
Keeps signed values out of bit arithmetic (not that there's any issues
that could arise from it in these situations, but it does look more
consistent, and silences compiler warnings)
2018-05-21 13:45:47 -04:00
Léo Lam cb850707c0 WiiSave: Fix typo 2018-05-21 16:41:15 +02:00
Léo Lam af97df74e1
Merge pull request #6895 from leoetlino/hardcoded
IOSC: Fix hardcoded MS and CA IDs
2018-05-21 15:27:31 +02:00
Léo Lam 12e2012465 IOSC: Fix hardcoded MS and CA IDs
The values that are used for the MS and CA IDs come from the SEEPROM.
Also, the default CA and MS values are respectively 2 and 3,
not 1 and 2.
2018-05-21 15:11:25 +02:00
Lioncash 3edf0f1cf9 Interpreter: Move common exception functions to ExceptionUtils.h
Keeps all of the interpreter-specific exception handling functions
together in a reusable way across translation units, similar to
FPUtils.h for reusable floating-point functions.
2018-05-20 18:25:32 -04:00
Léo Lam 3d8e63fffd
Merge pull request #6914 from leoetlino/verifysign
ES: Implement VerifySign (last remaining unimplemented, actually used ioctlv)
2018-05-20 23:11:49 +02:00
Léo Lam 79edd57b96
Merge pull request #6920 from lioncash/priv
Interpreter_SystemRegisters: Check processor privilege level in mfspr and mtspr
2018-05-20 23:08:59 +02:00
Lioncash edb38ff144 MMU: Avoid sign conversions in EFB_Read and EFB_Write
There's no reason to use int here as opposed to an unsigned value.
Video_AccessEFB() takes its arguments as u32 values, so we'd be doing
sign conversions for no reason here (along with causing avoidable
compiler warnings).
2018-05-20 16:13:53 -04:00
Lioncash 0337ca116a Interpreter_SystemRegisters: Check processor privilege level in mfspr and mtspr
If a program executing in user mode tries to write to any SPRs other than
XER, LR, or CTR registers, then a program exception occurs. Similarly
this also applies for reading SPRs as well, however the upper and lower
timebase halves can also be read (but not written to).
2018-05-20 15:51:52 -04:00
Léo Lam 4284952538
Merge pull request #6919 from lioncash/nop
Interpreter_LoadStore: No-op dcbt and dcbtst if HID0.NOOPTI is set
2018-05-20 20:33:38 +02:00
Lioncash d05c1b257c Interpreter_LoadStore: No-op dcbt and dcbtst if HID0.NOOPTI is set
If HID0.NOOPTI is set, then dcbt and dcbtst are no-oped globally. We
currently don't perform data cache emulation, but we put this in anyway
so this detail isn't forgotten about if data cache emulation is
introduced at some point in the future.
2018-05-20 14:23:51 -04:00
Léo Lam 5ce1b83d97
Merge pull request #6918 from lioncash/cast
Interpreter_LoadStore: Remove unnecessary cast in lhzx()
2018-05-20 20:21:16 +02:00
Lioncash 940f41f593 Interpreter_LoadStore: Remove unnecessary cast in lhzx()
This is only moving a smaller unsigned integral type into a larger
unsigned integral type, so there's no loss of information that could
occur.
2018-05-20 14:06:59 -04:00
Léo Lam 4b0f8d9f85 ES: Implement VerifySign
This implements ES_VerifySign which is notably used by the system menu
when importing saves.

Now *all* ES commands that are actually used by titles are implemented.
2018-05-20 20:04:53 +02:00
Léo Lam cec7fded60 IOSC: Implement VerifyPublicKeySign for ECC 2018-05-20 20:04:53 +02:00
Léo Lam b86f1ea7b3 ES / IOSC: Add support for ECC certificates 2018-05-20 20:04:53 +02:00
Léo Lam 355b1b5d5b ec: Improve readability and clarity
- Move all of the ec functions into the Common::ec namespace.

- Give the public functions better names and some usage information.

- Move all of the "elt" related functions into an "elt" class including
  all of the arithmetic operations, so that the logic becomes clearer
  and feels less like assembly.

  This also makes it much more obvious what the parameters are, instead
  of only using unsigned char* (which doesn't tell anything about what
  the pointer is used for or the size).

- Similarly, add a new "Point" class and move point functions there.
  Overload the arithmetic operators to make calculations easier to read
2018-05-20 19:59:26 +02:00
Léo Lam e83591f188 ec: Avoid exposing internal function 2018-05-20 19:59:26 +02:00
Lioncash ced806a00a PPCAnalyst: Replace memset usages with list initialization
Allows the use of non-trivially-copyable objects within the relevant
structs should it ever be needed.
2018-05-19 18:37:54 -04:00
Lioncash 5de99288bf PPCAnalyst: Clean up indexing expressions in Analyze()
Given we just access the same member repeatedly, just use a reference
and avoid repeated unnecessary indexing.
2018-05-19 15:31:38 -04:00
Tillmann Karras 1993eb436c Fix -Wignored-qualifiers warnings 2018-05-19 17:18:45 +01:00
Léo Lam fc525bdf8f
Merge pull request #6898 from leoetlino/certreader
ES/Formats: Deduplicate signed blob reading code
2018-05-19 12:11:02 +02:00
Léo Lam d399b0f59e
Merge pull request #6900 from lioncash/buffer
PPCAnalyst: Make CodeBuffer an alias for std::vector<CodeOp>
2018-05-19 12:10:19 +02:00
Lioncash 9ad7d9ff87 Jit64/JitArm64: Remove unnecessary code buffer parameter for DoJit()
This function in both JITs is only ever called by passing the JIT's code
buffer into it. Given this is already accessible, since the functions
are part of the respective JIT class, we can just remove this parameter.
This also cleans up accesses with the new code buffer, as we don't need
to do janky looking dereference-then-index expressions.
2018-05-18 17:19:49 -04:00
Lioncash 3a8a67025e PPCAnalyst: Make CodeBuffer an alias for std::vector<CodeOp>
This class effectively acted as a "discount vector", that would simply
allocate memory and then delete it in the destructor when it goes out of
scope.

We can just use a std::vector directly to reduce this boilerplate.
2018-05-18 17:19:45 -04:00
Léo Lam 33c5fd6f5a IOSC: Verify that RSA signature size is correct 2018-05-18 23:12:07 +02:00
Léo Lam 964d00447d IOSC: Reuse CertReader for cert imports 2018-05-18 23:12:07 +02:00
Léo Lam 90e86fa9a6 ES/Formats: Move sha1 calculation to SignedBlobReader 2018-05-18 22:40:38 +02:00
Léo Lam fbf79f837f
Merge pull request #6896 from leoetlino/title-import
ES: Fix content check in ImportTitleDone
2018-05-18 22:38:55 +02:00
Lioncash dc788042ef MMU: Use Common::BitCast where applicable
Gets rid of more memcpy boilerplate for properly reinterpreting bits.
2018-05-18 16:05:49 -04:00
Léo Lam f82e2f0b92 ES: Fix content check in ImportTitleDone
ImportTitleDone only checks if all required contents have been imported
for system titles.

This fixes the system menu not being able to recreate title directories
to copy a save back to the NAND by using title import functionality.
2018-05-18 20:59:33 +02:00
Léo Lam 473cbfa951 ES: Add more logging in title import functions
...to make troubleshooting easier.
2018-05-18 20:59:29 +02:00
Lioncash 9911e51c8f Interpreter_Branch: Make type of the bitmask in rfi a u32 instead of int
Given this is a bitmask, we should be using an unsigned type to store it
(especially given it's outside the range an int can represent properly
without being considered negative).

No behavior change is caused by this, it just silences a sign conversion
warning.
2018-05-18 13:39:56 -04:00
Lioncash b9aad3310e PowerPC: Move MMU-specifics from PowerPC.h to MMU.h
PowerPC.h at this point is pretty much a general glob of stuff, and it's
unfortunate, since it means pulling in a lot of unrelated header
dependencies and a bunch of other things that don't need to be seen by
things that just want to read memory.

Breaking this out into its own header keeps all the MMU-related stuff
together and also limits the amount of header dependencies being
included (the primary motivation for this being the former reason).
2018-05-17 19:18:55 -04:00
Lioncash dbe550f7ef Interpreter_LoadStorePaired: Use Common::BitCast where applicable
Gets rid of more memcpy boilerplate code to reinterpret bits. This also
allows us to make variables const where applicable as well.
2018-05-17 15:27:07 -04:00
Markus Wick 87a29eb602
Merge pull request #6881 from lioncash/build
Interpreter_FloatingPoint: Fix build in frspx()
2018-05-17 11:05:18 +02:00
Lioncash abefbf032e Interpreter_FloatingPoint: Fix build in frspx()
Github didn't detect conflicts here, however, since the float handling
functions were moved into the Common namespace, this would cause a build
failure.
2018-05-17 04:55:48 -04:00
Markus Wick bc8d87bbfd
Merge pull request #6880 from lioncash/macro
PowerPC: Parenthesize GQR macro argument
2018-05-17 10:55:19 +02:00
Lioncash ddbe292d54 PowerPC: Parenthesize GQR macro argument
Ideally none of these macros would exist (long-term goal), however in
the meantime at least make sure expressions always evaluate correctly
(thankfully no current usages rely on this).
2018-05-17 04:48:29 -04:00
Markus Wick 6ed3f8b474
Merge pull request #6634 from lioncash/frsp
Interpreter_FloatingPoint: Handle SNaNs and QNaNs properly in frsp
2018-05-17 10:43:14 +02:00
Markus Wick 3e6a706858
Merge pull request #6878 from lioncash/type
PowerPC/Interpreter: Avoid sign conversion with utility functions
2018-05-17 10:04:26 +02:00
Markus Wick 1424964678
Merge pull request #6856 from lioncash/cached-hook
PowerPC: Factor common part of function hooking code out of the interpreter and JITs
2018-05-17 09:45:17 +02:00
Lioncash 3f19aa6469 PowerPC/Interpreter: Avoid sign conversion with utility functions
Given we're operating with flags and bit representations, lets avoid
signed values here. It lessens the amount of sign conversion warnings
and lessens the amount of things to think about screwing you over when
making changes to the interpreter among other things.
2018-05-16 22:21:26 -04:00
Tilka 5b96abf7aa
Merge pull request #6872 from lioncash/exi
EXI_DeviceEthernet: Minor cleanup
2018-05-17 02:17:22 +01:00
Tilka 82d9dea245
Merge pull request #6873 from lioncash/bit
Interpreter_FPUtils: Use Common::BitCast where applicable
2018-05-17 02:12:07 +01:00
Tilka 975a10b3bd
Merge pull request #6876 from lioncash/var
Interpreter_SystemRegisters: Clean up variable naming
2018-05-17 02:09:25 +01:00
Jonathan Hamilton 8be5cdfcad Make the arbitrary mipmap detection threshold configureable
This is likely a "superuser" option at best, but I want to be able to play with
it without rebuilding if I want to tweak the heuristics
2018-05-16 17:49:19 -07:00
Lioncash d80552b34a Interpreter_SystemRegisters: Clean up variable naming
Cleans up remnant instances of Hungarian notation being used in variable
names along with other spotted deviations.
2018-05-16 20:41:34 -04:00
Jonathan Hamilton 29b7e33c14 Make arbitrary mipmap detection a config option
Under GFX::Enhancements::ArbitraryMipmapDetection - default enabled
2018-05-16 17:15:38 -07:00
Lioncash b29b56c61a Interpreter_Integer: Clean up casting in mulhwx() and mulhwux()
These can be expressed in a slightly cleaner manner without so many
casts. While we're at it, also get rid of unnecessary indexing (we
already have the result nearby).
2018-05-16 19:45:17 -04:00
Lioncash 3400165171 Jit64: Factor function hooking out of DoJit() 2018-05-16 19:00:39 -04:00
Lioncash f3c13402e8 Interpreter: Factor function hooking code out of SingleStepInner() 2018-05-16 18:56:40 -04:00
Lioncash 4b25538f2f CachedInterpreter: Factor function hooking code out of Jit()
Extracts the self-contained code into its own function to clean up the
flow of Jit() a little more.

This also introduces a helper function to HLE.h that will be used to
reduce the boilerplate here and in the interpreter and Jit64 in the
following commits.

This function performs all of the preliminary checks required prior to
attempting to hook/replace a function at a given address. The function then
calls a provided object that satisfies the FunctionObject concept in the
C++ standard library. This can be a lambda, a regular function pointer,
an object with an overloaded function call operator, etc. The only
requirement is that the function return a bool, indicating whether or
not the function was replaced, and that it can take parameters in the
form: fn(u32 function, HLE::HookType type)
2018-05-16 18:55:49 -04:00
Lioncash c7cd1424f4 Interpreter_FPUtils: Use Common::BitCast where applicable
Gets rid of now-unnecessary memcpy boilerplating for different bit
representations between integral and fp types.
2018-05-16 17:48:30 -04:00
Lioncash e7403e121e EXI_DeviceEthernet: In-class initialize members
Gets rid of a second pair of ifdefs in the constructor. This also makes
sure the fd on Unix/BSD platforms is uniformly initialized. Previously
fd would be in an inconsistent state on FreeBSD or OpenBSD due to the
BSD OS checks not being present in the #elif within the constructor.
2018-05-16 16:55:07 -04:00
Lioncash fc78a4c993 EXI_DeviceEthernet: Make internal members and functions private
Previously, the entirety of CEXIETHERNET was exposed publically, which
wasn't necessary. We simply make the thread function part of the
internal interface, which gives it access to internal data members,
while keeping everything else outside of it.
2018-05-16 16:55:02 -04:00
Markus Wick b547f72878
Merge pull request #6871 from lioncash/virtual
DSPHLE/UCodes: Replace unnecessary virtual keywords with override
2018-05-16 22:16:26 +02:00
Lioncash a7b8b15e7f DSPHLE/UCodes: Replace unnecessary virtual keywords with override
Given these HLE classes inherit from a common base with a virtual
destructor, override is more appropriate here, as virtual propagates to
these destructors anyway.

This is also safer. If the base class' destructor is ever made
non-virtual, then these classes will cause a compilation error if they
aren't taken into account, as they'd be overriding a non-virtual
function (the destructor).
2018-05-16 15:57:55 -04:00
Lioncash 011ee110bc Common/Hash: Namespace code under the Common namespace
Brings more common code under the Common namespace.
2018-05-16 15:39:23 -04:00
Lioncash 947fa271be Common: Add MemArena.h/cpp to the Common namespace
Brings more common code under the Common namespace.
2018-05-15 18:27:32 -04:00
Markus Wick b4324847fb
Merge pull request #6863 from booto/jit-ps-dsi
Prevent paired singles routines clobbering PC,SRR0
2018-05-15 11:07:21 +02:00
booto c880302c6b Prevent paired singles routines clobbering PC,SRR0
Paired single (ps) instructions can call asm_routines that try to update
PowerPC::ppcState.pc. At the time the asm_routine is built, emulation has
not started and the PC is invalid (0). If the ps instruction causes an
exception (e.g. DSI), SRR0 gets clobbered with the invalid PC.

This change makes the relevant ps instructions store PC before calling out
to asm_routines, and prevents the asm_routine from trying to store PC
itself.
2018-05-14 20:49:13 -04:00
Markus Wick db4d8d7ad3
Merge pull request #6854 from lioncash/access
Jit/CachedInterpreter: Minor cleanup to code buffer accesses
2018-05-14 07:49:22 +02:00
Lioncash 7437f2efdc JitArm64: Clean up code buffer accesses in DoJit()
Done for the same reason this was done for Jit64. Avoids constantly
indexing for the same known object instance over and over.
2018-05-13 22:11:01 -04:00
Lioncash f4affa3d1d CachedInterpreter: Clean up code buffer accesses in Jit()
Done similarly for the reasons Jit64 was done. Localizes indexing to one
place instead of repeatedly indexing the same place.
2018-05-13 22:11:01 -04:00
Lioncash a16c0a6e16 Jit64: Clean up code buffer accesses in DoJit()
Moves the codebuffer access variables closer to their first use, and
gets rid of multiple indexing expressions. We already know which op
we're accessing in particular, so just make a reference to it and access
it instead of duplicating the expression all over the place.
2018-05-13 22:10:56 -04:00
Léo Lam f8e5e7126c
Merge pull request #6849 from leoetlino/oops
WiiSave: Fix out-of-bounds read
2018-05-13 23:34:32 +02:00
Léo Lam 3fbfa4335e WiiSave: Fix out-of-bounds read
Fixes the count argument for WriteArray. (I used it like WriteBytes.)
Whoops.
2018-05-13 23:18:28 +02:00
spycrab c7a0b6c9f8
Merge pull request #6831 from spycrab/qt_memcard_fixes
Qt/GCMemcardManager: Fix multiple issues
2018-05-13 23:14:46 +02:00
Léo Lam 2be8c35d6d
Merge pull request #6844 from leoetlino/wii-save-cleanup2
WiiSave: Reuse IOS services where possible
2018-05-13 23:08:28 +02:00
Lioncash 5fd8cec7ea PatchEngine: Add s_ prefix to file-scope variables
Brings the translation unit in line with the convention used elsewhere
in the codebase.
2018-05-13 15:46:55 -04:00
Lioncash 0995cfef6a PatchEngine: Make PatchType an enum class
Makes the enum strongly typed. A function for retrieving the string
representation of the enum is also added, which allows hiding the array
that contains all of the strings from view (i.e. we operate on the API,
not the exposed internals). This also allows us to bounds check any
querying for the strings.
2018-05-13 15:46:51 -04:00
Léo Lam b405a1fbb1 WiiSave: Reuse ES::GetInstalledTitles
Same thing, less code, no manual FS access.
2018-05-13 21:28:35 +02:00
Léo Lam a2ffe010f3 WiiSave: Reuse IOSC::Sign for signing 2018-05-13 21:28:35 +02:00
Léo Lam 07caac1d23 WiiSave: Reuse IOSC for AES decryption/encryption
The SD key is already in IOSC.

This also prevents WiiSave from exposing an external library as part
of its interface.
2018-05-13 21:25:58 +02:00
Lioncash a166cf2481 PatchEngine: Give Patch and PatchEntry default member initializers
Avoids potentially using the values uninitialized. While we're at it,
also drop the prefixed underscores from one of the constructors.
2018-05-13 15:08:32 -04:00
Léo Lam 80b3d7ccb8 WiiSave: Allow users to specify export directory
Export and ExportAll now open a directory picker (that defaults to the
previous default directory, i.e. the Dolphin user dir).

Also removes the need to return the path in the export functions since
the user knows which path they chose.
2018-05-13 17:42:56 +02:00
Léo Lam 87e5cd73dc WiiSave: Use std::array instead of C arrays
Makes copying, comparing more readable
2018-05-13 17:42:55 +02:00
Léo Lam a93d816c28 WiiSave: Move dialogs to UI code
This moves the result dialogs to DolphinQt2, since WiiSave should not
really be responsible for interacting with the user as a simple
Wii save importing/exporting class.

This also fixes Wii save import/export showing result dialogs twice,
once from WiiSave, and another time from DolphinQt2.
2018-05-13 17:42:55 +02:00
Léo Lam 41c4486c65 WiiSave: Clean up constructors
Move the import/export operation into separate functions, as it doesn't
really make sense for the constructor to do *everything*, including
printing success/failure message boxes.

The existing constructor was split into two: one that takes a path,
and another taking a title ID. This makes it more obvious what is
actually done when a path/TID is passed and also clarifies what
parameters should be passed. (No more magic 0 or "" value.)
2018-05-13 17:42:55 +02:00
Léo Lam fbf36b85d2 WiiSave: Remove unused Extract() member function 2018-05-13 17:42:55 +02:00
Léo Lam 956df21bd7 WiiSave: Use Common::BigEndianValue to simplify parsing
Gets rid of the need to manually cast when reading/writing, which is
error prone and repetitive.
2018-05-13 17:42:55 +02:00
Léo Lam fb39efbf90 WiiSave: Fix struct member naming 2018-05-13 17:42:55 +02:00
Léo Lam bae8bcde0a WiiSave: Do not expose internal constants 2018-05-13 17:42:55 +02:00
Léo Lam 00bc1f28f2 Rename CWiiSaveCrypted to WiiSave 2018-05-13 17:42:55 +02:00
Léo Lam 5564150dd6
Merge pull request #6833 from leoetlino/dns
Use resolver to get default DNS nameserver
2018-05-13 15:49:50 +02:00
Dexter Gerig 73bc20ead4 Use resolver to get default DNS nameserver 2018-05-13 14:05:23 +02:00
Léo Lam ad5a69be79
Merge pull request #6826 from spycrab/qt_netplay2
Qt/NetPlayDialog: Improve player list
2018-05-13 01:17:51 +02:00
Mat M a4de3922e9
Merge pull request #6832 from leoetlino/wiiroot
WiiRoot: Copy initial NAND files with proper metadata
2018-05-12 18:25:21 -04:00
Lioncash 411fc01262 DolReader/ElfReader: Remove unnecessary FileUtil.h includes
These can be replace with File.h, as the only file-related things
necessary is the declaration of IOFile (which resides in File.h).
2018-05-12 17:41:17 -04:00
Lioncash f7bc75ae6d Boot: Make BootExecutableReader's constructor take a std::vector by value
This allows avoiding two copies of the executable data being created in
the following scenario (using pseudocode):

some_function()
{
  std::vector<u8> data = ...;
  DolReader reader{data};

  ...
}

In this scenario, if we only use the data for passing it to DolReader,
then we have to perform a copy, as the constructor takes the std::vector
as a constant reference -- you cannot move from a constant reference,
and so we copy data into the DolReader, and perform another copy in the
constructor itself when assigning the data to the m_bytes member
variable. However, we can do better.

Now, the following is allowable as well:

some_function()
{
  std::vector<u8> data = ...;
  DolReader reader{std::move(data)};

  ...
}

and now we perform no copy at any point in the reader's construction, as
we just std::move the data all the way through to m_bytes.

In the case where we *do* want to keep the executable data around after
constructing the reader, then we can just pass the vector without
std::move-ing it, and we only perform a copy once (as we'll std::move
said copy into m_bytes). Therefore, we get a more flexible interface
resource-wise out of it.
2018-05-12 17:40:34 -04:00
Léo Lam 48fa835bd3 WiiRoot: Copy initial NAND files with proper metadata 2018-05-12 22:54:34 +02:00
Léo Lam f91b729b61
Merge pull request #6825 from leoetlino/onion-types
Config: Fix implicit conversions/enum config types
2018-05-12 21:59:43 +02:00
Léo Lam e1169ef9ee
Merge pull request #6824 from aldelaro5/custom-rtc-no-bias
RTC: Write 0 to the counter bias if we are on custom RTC
2018-05-12 21:59:13 +02:00
spycrab b094cda929 Core/GCMemcard: Fix checksums after modifying the memcard 2018-05-12 21:39:13 +02:00
Lioncash 5677e5d74a SettingsHandler: Namespace code under the Common namespace
Adds another file in Common to the Common namespace.
2018-05-12 13:39:37 -04:00
spycrab d8a95834f3 Qt/NetPlayDialog: Improve player list 2018-05-12 18:25:38 +02:00
Léo Lam 6763a3fce1 Config: Add support for enums
This makes it possible to use enums as the config type.
Default values are now clearer and there's no need for casts
when calling Config::Get/Set anymore.

In order to add support for enums, the common code was updated to
handle enums by using the underlying type when loading/saving settings.

A copy constructor is also provided for conversions from
`ConfigInfo<Enum>` to `ConfigInfo<underlying_type<Enum>>`
so that enum settings can still easily work with code that doesn't care
about the actual enum values (like Graphics{Choice,Radio} in DolphinQt2
which only treat the setting as an integer).
2018-05-12 18:10:26 +02:00
Léo Lam 94dc746351 Copy Wii NAND data to user NAND in WiiRoot
Dolphin doesn't use any of the WC24 files, so this can be done when
actually starting emulation in WiiRoot. The benefit of moving the
copy is that we don't need to handle temporary NANDs in a special way.
2018-05-12 17:08:50 +02:00
Léo Lam 5f567b38fe WiiRoot: Move content manipulation to separate functions
{Initialize,Shutdown}WiiRoot should only be responsible for setting the
SESSION_WII_ROOT or managing the temporary NAND directory.

Move all the content manipulation out of these functions to ensure
separation of concerns and call them after/before WiiRoot init/shutdown
to make sure they operate on the correct root.
2018-05-12 17:06:31 +02:00
Stenzek a446b096cb Jit64: Invalidate cached constant values w/o host register on flush
If we don't flush the values, they persist in the register cache,
potentially resulting in the values being out of sync with PPCSTATE.

This was causing random crashes in games, mainly booting, when certain
JIT instructions were disabled, or forced to fall back to interpreter.
2018-05-13 00:50:31 +10:00
Léo Lam 7dca7c237e Config: Fix template deduction for implicit conversions
This excludes the second argument from template deduction.

Otherwise, it is required to manually cast the second argument to
the ConfigInfo type (because implicit conversions won't work).

e.g. to set the value for a ConfigInfo<std::string> from a string
literal, you'd need a ugly `std::string("yourstring")`.
2018-05-12 14:30:18 +02:00
aldelaro5 4b2906c569
RTC: Write 0 tot he counter bias if we are on custom RTC
This can be considered a hack, but it essentially neuter the bias applied on boot for both console on the RTC.  This avoids having the time on boot be changes significantly while the user would want a specific RTC and it also avoids possible underflow of the RTC if it is near the epoch.
2018-05-12 01:37:48 -04:00
Anthony 968779e623
Merge pull request #6814 from lioncash/sd
SDCardUtil: Minor changes
2018-05-11 12:39:17 -07:00
Léo Lam 1b070c4b6f IOS/KD: Migrate to new filesystem interface 2018-05-11 20:30:22 +02:00
Lioncash 3b0139b258
SDCardUtil: Namespace SDCardUtil
Brings yet another header in the common library under the Common
namespace.
2018-05-11 09:19:30 -04:00
Léo Lam e1866d35e5
Merge pull request #6807 from leoetlino/boot
Boot: Migrate to new filesystem interface
2018-05-11 10:41:00 +02:00
Lioncash ba01f6dba3 CommonFuncs: Convert ROUND_UP_POW2 macro to a function
Also move it to MathUtils where it belongs with the rest of the
power-of-two functions. This gets rid of pollution of the current scope
of any translation unit with b<value> macros that aren't intended to be
used directly.
2018-05-10 19:42:20 -04:00
Léo Lam a977a56434 Boot: Migrate to new filesystem interface 2018-05-10 22:34:03 +02:00
Léo Lam e6c489f1d4 ES: Move title dir creation logic into separate function
Since we're going to need it in the boot code, move it out to a
separate, easily reusable function. This also makes the InitImport
logic clearer.
2018-05-10 22:33:49 +02:00
Léo Lam 09d2afa91f SettingsHandler: Migrate to new filesystem interface
Change SettingsHandler to take a buffer instead of assuming that the
setting file to read is always on the host filesystem for more
flexibility and make it possible to use the new filesystem interface.
2018-05-10 21:35:27 +02:00
Léo Lam e56387970a Move all UID constants to a single file
Keeps them all next to each other and deduplicates a few constants,
notably the PPC UIDs. Apparently I forgot that I already added them
for SetupStreamKey.
2018-05-09 21:08:24 +02:00
Léo Lam 274f418f4b
Merge pull request #6789 from leoetlino/rename-bug
IOS/FS: Fix rename not handling existing target correctly
2018-05-09 19:07:39 +02:00
Léo Lam 1016674242
Merge pull request #6791 from aldelaro5/wii-epoch-fix
Wii: Fix the Wii epoch and make the IPL.CB 0 by default
2018-05-09 19:06:25 +02:00
aldelaro5 224a9426db
Fix the Wii epoch and make the IPL.CB 0 by default
It was off by about 8 years because it was actually the same as the GC epoch, however, the reason it worked all this time was because the default RTC counter bias of the Wii was not 0, but a value that is about 8 years in seconds.  This broke custom RTC as a custom RTC of the gc epoch was underflowing b ecause the wii epoch was thought to be much later.
2018-05-09 02:45:56 -04:00
Léo Lam 7feabcd096 IOS/FS: Fix rename not handling existing target correctly
The existing backend did not handle cases where the target exists
correctly.

This is a bug that has been around forever but was only recently
exposed when ES started to use our FS code.

Also adds some unit tests to make sure this won't get broken again.
2018-05-08 23:55:13 +02:00
Léo Lam 71afe6b4a6 IOS: Make file creation + open more concise
Creating a file then opening it in read write mode is a pretty common
operation. This commit adds a helper function that makes it easier
to read and clearer.
2018-05-08 13:07:30 +02:00
Léo Lam 90f869e940
Merge pull request #6772 from leoetlino/fs-es
IOS/ES: Migrate to new filesystem interface
2018-05-08 11:55:52 +02:00
Lioncash 86018b503b Common: Move floating-point utility functions to FloatUtils.h/.cpp
Keeps all of the floating-point utility functions in their own file to
keep them all together. This also provides a place for other
general-purpose floating-point functions to be added in the future,
which will be necessary when improving the flag-setting within the
interpreter.
2018-05-07 02:56:32 -04:00
Markus Wick 756ef54ab6
Merge pull request #6770 from lioncash/ile
PowerPC: Fix copying of the MSR.ILE bit to MSR.LE
2018-05-07 08:52:05 +02:00
Markus Wick b007210761
Merge pull request #6774 from lioncash/enum
Interpreter_FPUtils: Make FPCC enum an enum class
2018-05-07 08:48:22 +02:00
Markus Wick 6ec1e742ae
Merge pull request #6773 from lioncash/fpscr
PowerPC: Make the PowerPCState's fpscr member variable a UReg_FPSCR instance
2018-05-07 08:47:14 +02:00
Lioncash 64d1865448 Interpreter_FPUtils: Properly update the FPSCR's FEX bit in UpdateFPSCR()
FPSCR.FEX is supposed to be a logical OR of all floating-point exception
bits masked by their respective enable bits.

Currently UpdateFPSCR() isn't called by anything in the interpreter
except for mcrfs and mffs, so this doesn't alter existing behavior that much.
However, this will be necessary in future PRs when making the interpreter more
accurate in how it sets flags.
2018-05-06 21:40:00 -04:00
Lioncash d5de49f9aa Interpreter_FPUtils: Make FPCC enum an enum class
Avoids dumping two letter identifiers into global scope
2018-05-06 19:32:09 -04:00
Lioncash 69a0aaebd4 Gekko: Make UReg_FPSCR's single argument constructor explicit
Prevent implicit conversions to UReg_FPSCR. Given the semantics of a
random magic value and the FPSCR are different, make explicit
conversions a requirement to signify intent.
2018-05-06 18:46:57 -04:00
Lioncash cb5926c1ca PowerPC: Make the PowerPCState's fpscr member variable a UReg_FPSCR instance
Gets rid of the need to cast the actual member to access information without bit shifts and masking.
2018-05-06 18:46:52 -04:00
Léo Lam 606d25213b ES: Create system directories with correct metadata 2018-05-06 23:19:34 +02:00
Léo Lam f47f916afb ES: Use new filesystem interface in main code 2018-05-06 23:19:34 +02:00
Léo Lam 923b450268 ES: Use new filesystem interface in TitleManagement 2018-05-06 23:19:34 +02:00
Léo Lam 9ee2654be6 ES: Use new filesystem interface in NandUtils 2018-05-06 23:16:35 +02:00
Léo Lam 359a5dcb54 ES: Use new filesystem interface for content handling 2018-05-06 23:16:35 +02:00
Léo Lam 3dafc66c36 ESFormats: Migrate to new filesystem interface 2018-05-06 23:16:35 +02:00
Léo Lam 5dbf6cd0c9 IOS/FS: Make ConvertResult usable from ES
ES makes extensive use of FS and most of the time returns its error
codes directly.
2018-05-06 22:08:31 +02:00
Lioncash 707615ef82 PowerPC: Fix copying of the MSR.ILE bit to MSR.LE
The MSR.LE bit is supposed to be set to the value of MSR.ILE upon
entering an exception vector to control whether the environment in said
vector operates as little endian or big endian. If this bit is ORed into
the LE bit, then the scenario of operating in little endian but wanting
to take exceptions in big endian will be incorrectly handled.
2018-05-06 14:24:58 -04:00
Léo Lam fb1d075330 IOS/NCD: Migrate to new filesystem interface
A followup for the migration work started in 8317a66
2018-05-06 14:26:51 +02:00
Léo Lam 89713c5889 IOS/FS: Add CreateFullPath helper
Analogous to File::CreateFullPath, but for the Wii filesystem so this
ensures that directories and files receive proper attributes.

(This function is technically not part of the FS sysmodule but it's in
an internal FS library that is reused in several IOS sysmodules.)
2018-05-06 14:22:44 +02:00
Léo Lam 8e3cad948c
Merge pull request #6758 from leoetlino/fs-wiiutils
WiiUtils: Migrate to new filesystem interface
2018-05-06 14:04:30 +02:00
Léo Lam 76b031184c
Merge pull request #6341 from sepalani/debug-watches
DebugInterface: Watches methods added
2018-05-06 13:25:26 +02:00
Léo Lam 32235f974d
Merge pull request #6612 from leoetlino/movie-array
Movie: Replace some C style arrays with std::array
2018-05-06 13:23:45 +02:00
Lioncash 0043b77ccd Gekko: Make UReg_MSR's single-argument constructor explicit
Prevents implicit construction of MSR instances from integral values.
This is beneficial, considering MSR values have an intended
representation while a regular magic value doesn't. So make these
conversions required to be explicit.
2018-05-05 17:59:45 -04:00
Lioncash ffcf107dd2 PowerPC: Make the PowerPCState's msr member variable a UReg_MSR instance
Gets rid of the need to construct UReg_MSR values around the the actual
member in order to query information from it (without using shifts and
masks). This makes it more concise in some areas, while helping with
readability in some other places (such as copying the ILE bit to the LE
bit in the exception checking functions).
2018-05-05 17:59:30 -04:00
Léo Lam 75d056bc48 Movie: Replace some C style arrays with std::array
This replaces some C style arrays with std::array to make copying
and comparing arrays slightly nicer.
2018-05-05 23:40:23 +02:00
Léo Lam 72a6674b73 WiiUtils: Migrate to new filesystem interface
A followup for the migration work started in 8317a66e
2018-05-05 19:21:56 +02:00
Tillmann Karras 41a553e33e Jit64: warn about code cache flushing
The game Go Vacation (SGVEAF) currently stutters a lot because it keeps
overflowing the far code cache and all code needs to be re-jitted.
Logging this warning gives a useful hint as to what is causing the
stuttering.
2018-05-05 14:21:57 +01:00
Léo Lam d8549d172c
Merge pull request #6651 from leoetlino/nand-paths
NandPaths: Return paths that are relative to Wii NAND
2018-05-05 11:01:35 +02:00
Léo Lam 983d500d14
Merge pull request #6614 from leoetlino/auto-close
IOS: Do not manually close devices in destructor
2018-05-05 10:53:06 +02:00
aldelaro5 fee92cd4fc
INI: Create a new INI setting for toggling the debugger UI
Qt introduced a checkbox to toggle the debugger UI, this makes it work into a setting stored in the INI, it also makes the -d argument only in effect when enabled, in such case, it will override the INI by overriding it.
2018-05-04 19:23:03 -04:00
Léo Lam 8317a66ea5 NandPaths: Return paths that are relative to Wii NAND
Since all FS access will go through the new FS interface (PR #6421)
in order to keep track of metadata properly, there is no need to return
absolute paths anymore.

In fact, returning host paths is a roadblock to using the FS interface.

This starts the migration work by adding a way to get paths that are
relative to the Wii NAND instead of always getting absolute paths
on the host FS.

To prepare for future changes, this commit also makes returned paths
canonical by removing the trailing slash when it's unneeded.

Eventually, once everything has been migrated to the new interface,
we can remove the "from" parameter.
2018-05-04 19:52:17 +02:00
Ryan Meredith c2355d4f63 Android Interface submenu: Add Show OSD Messages 2018-05-03 16:05:22 -04:00
Ryan Meredith 25179258b7 Android: Initial implementation of Interface submenu 2018-05-03 16:05:22 -04:00
Mat M a2c12f1503
Merge pull request #6735 from JosJuice/ui-ini
Remove code related to UI.ini
2018-05-02 15:47:28 -04:00
JosJuice 6e96f62b41 Remove code related to UI.ini
We don't use it for anything, we just create it and leave it empty.
2018-05-02 18:18:27 +02:00
spycrab a984d18a14 Core/ConfigManager: Rename Track to UpdateTrack 2018-05-02 17:23:41 +02:00
Stenzek c46882142b
Merge pull request #6369 from stenzek/xfb-copy-filter
Implement copy filter (deflickering/brightness) and XFB gamma
2018-05-01 19:31:54 +10:00
Stenzek 9e798eec94 Implement EFB copy filter and gamma in hardware backends
Also makes y_scale a dynamic parameter for EFB copies, as it doesn't
make sense to keep it as part of the uid, otherwise we're generating
redundant shaders.
2018-04-29 19:05:20 +10:00
Lioncash 167b92ff2c Jit_Integer: Make arrays const in MultiplyImmediate() and twX()
These are only ever read from, so make the data immutable to be explicit about that
2018-04-28 14:13:02 -04:00
Mat M 0cd46f4d21
Merge pull request #6690 from lioncash/nand
Common/NandPaths: Minor cleanup
2018-04-28 13:43:33 -04:00
Tilka 6bb880457f
Merge pull request #6711 from lioncash/handler
Common/MemTools: Make handler function internally linked on Windows
2018-04-28 18:41:10 +01:00
Lioncash 8183360832 Common/MemTools: Make handler function internally linked on Windows
This doesn't need to be an externally linked function.
2018-04-28 12:55:38 -04:00
Sepalani 74d4a4478f DebugInterface: Watches methods added
Move Watches to Common
2018-04-28 17:46:51 +04:00
Léo Lam 4f427de924 IOS/SO: Clean up variable declarations
Move them closer to their usage and fix the naming.
2018-04-28 11:13:03 +02:00
Léo Lam 393663a0a3 IOS/SO: Use an enum for result codes 2018-04-27 23:35:40 +02:00
Léo Lam 32d51f1699 IOS/SO: Re-implement GetInterfaceOpt(0x4003)
Use the newly added GetSystemDefaultInterfaceOrFallback() to return
actual information for the default interface, not just dummy
interface details.

This also fixes GetInterfaceOpt(0x4003) and gethostid() returning
inconsistent information. Prior to this change, GetInterfaceOpt(0x4003)
would return 10.0.1.30 and gethostid would give a totally unrelated IP.
2018-04-27 23:35:40 +02:00
Léo Lam 3ce271991b IOS/SO: Implement GetSystemDefaultInterface for non-Windows
This fixes gethostid on non-Windows platforms.

Except on Android, where this is left unimplemented because Android
does not support getifaddrs.
2018-04-27 23:35:40 +02:00
Léo Lam 25b198cac8 IOS/SO: Move default interface code into a separate function
...so that the function can be more easily reused.
2018-04-27 23:35:40 +02:00
Léo Lam e4276f2983 IOS/SO: Handle invalid GetInterfaceOpt requests 2018-04-27 23:35:40 +02:00
spycrab 7749e18ecc ConfigManager: Enable Auto-Updater by default 2018-04-26 15:12:15 +02:00
Lioncash 62242331d8 NandPaths: Remove unused header inclusions 2018-04-22 23:49:16 -04:00
Léo Lam 2fcc633c28
Merge pull request #6649 from leoetlino/fs-tests
UnitTests: Add tests for the Wii filesystem
2018-04-20 21:34:06 +02:00
Tilka 4c8de9638a
Merge pull request #6674 from Tilka/jit64
Jit64: avoid an unnecessary load
2018-04-20 19:23:28 +01:00
Léo Lam f9340424c8
Merge pull request #6669 from lioncash/thread-local
Core: Use thread_local directly
2018-04-20 18:11:32 +02:00
Léo Lam 1176ae6512 IOS/FS: Fix ReadDirectory file list copying
Each entry can take up to 13 bytes (including the terminating null
character) but should not be aligned to 13 bytes.
2018-04-20 00:02:32 +02:00
Léo Lam 4c47417a0e IOS/FS: Fix ReadDir returning wrong number of entries
ReadDir should always write the actual number of entries in the
directory list (`min(max_count, number_of_entries_on_nand)`).
2018-04-20 00:02:32 +02:00
Tillmann Karras 1737f1bee8 Jit64: avoid an unnecessary load 2018-04-19 21:49:12 +01:00
Léo Lam 396204248d
Merge pull request #6667 from lioncash/si
SI: Remove unnecessary declarations of internally linked functions
2018-04-18 18:49:44 +02:00
Lioncash e6405f7b2b
Core: Use thread_local directly
Both Android and OSX now support it, allowing us to remove the fallback code.
2018-04-17 19:03:24 -04:00
Mat M df44aa7335
Merge pull request #6668 from JosJuice/remove-hybrid-wiimote
Remove Hybrid Wii Remote
2018-04-17 18:09:58 -04:00
JosJuice 2953cf201d Remove Hybrid Wii Remote
It simply doesn't seem to work for anything useful, and nobody seems
to care about maintaining it.
2018-04-17 22:40:21 +02:00
Lioncash d1d8300a46
SI: Remove unnecessary declarations of internally linked functions
These aren't dependent on calling order so we can just organize all of the statics together
instead of splitting them up over the file. This also allows us to organize a common spot for
file static variables as well.
2018-04-17 16:33:11 -04:00
Mat M 8bb0e0ee96
Merge pull request #6662 from Tilka/fix_warnings
Fix some warnings
2018-04-17 10:17:01 -04:00
Tillmann Karras 4cfd900c67 Fix some warnings 2018-04-17 14:10:05 +01:00
Sepalani 04cfddca33 HLE_VarArgs: PowerPC::HostRead_F64 used 2018-04-17 16:25:43 +04:00
Mat M c78b3f6ab6
Merge pull request #4507 from sepalani/host_f
PowerPC: HostR/W float/double added
2018-04-17 08:02:07 -04:00
Sepalani 048513183e PowerPC: HostR/W float/double added 2018-04-17 08:29:47 +04:00
Lioncash ca6a2970ea
TraversalClient: Make data externally read-only members private
These are only ever queried for state, not written. Therefore, prevent writing to the members
and make them private.
2018-04-16 16:46:44 -04:00
JosJuice 0efbaebe17 Minor fixes to translatable strings
The usual deduplication between DolphinWX and DolphinQt2, plus the removal
of a now unused ubershader string and a fix for the Euphoria i18n comment.
2018-04-16 19:08:58 +02:00
Mat M 6224b9bd37
Merge pull request #6642 from leoetlino/stm
IOS/STM: Reset the event hook at the correct time
2018-04-16 09:04:12 -04:00
Léo Lam 3355ddcfb3 FileSystem: Fix member destruction order 2018-04-15 14:29:27 +02:00
Léo Lam 0a481c0663 WiimoteEmu: Fix turntable_button_names size
Three elements were removed, but because of an oversight the array
size was not changed to match.
2018-04-14 23:52:10 +02:00
Léo Lam 371f807e67
Merge pull request #6615 from leoetlino/sysconf
SysConf: Migrate to new filesystem interface
2018-04-14 23:29:25 +02:00
Léo Lam ee955e37a9
Merge pull request #6564 from JosJuice/translate-certain-button-names
Translate certain button names but not all
2018-04-14 23:20:39 +02:00
Léo Lam 8bae4b7e51 IOS/STM: Reset the event hook at the correct time
Just re-disassembled STM and found out I have made a mistake when
I changed STM stuff back in 2016.

I accidentally made STM reset the event hook on close when it should
have been done in the destructor (i.e. when IOS gets reset on console).

Verified in IDA that STM just `IOS_ResourceReply(request, IOS_OK)`
without ever resetting the hook.
2018-04-13 23:34:35 +02:00
Léo Lam 52905a5fae
Merge pull request #6627 from sepalani/map-strip
PPCSymbolDB: Do not truncate fixed size symbols
2018-04-13 20:48:28 +02:00
Lioncash b256f873ca
CMakeLists: Link in zlib privately where applicable
Also, use the target name introduced via find_package(ZLIB) instead
of hardcoding the 'z' name in the link libraries.
2018-04-13 08:29:46 -04:00
JosJuice 7ed28297b2 ControllerEmu: Use enum instead of bool for translatability 2018-04-13 13:04:26 +02:00
JosJuice 3f13dbe087 Translate certain button names but not all
Some button names should be translated, for instance Up, Left and such.
At the same time, some other button names shouldn't be translated,
for reasons that might be less obvious. In 0146456af, I removed the
_trans markers for button names that never need to be translated
(such as A and B), but that isn't actually enough to ensure that
DolphinWX won't try to translate them anyway. This commit adds a bool
that explicitly tells the GUI whether a button name should be translated.
Otherwise we'll have problems like the GUI treating the button name "B"
(which isn't supposed to be translated) as matching the translatable
string "B" (being an abbreviation of "bytes"), meaning that the button
"B" will be labeled "o" when running Dolphin in French (after
translations get pulled from Transifex the next time).

By the way, while it turned out that DolphinWX translated all button
names, it also turned out that DolphinQt2 translated *no* button names.
Go figure. This commit makes them consistent with each other.
2018-04-13 13:04:26 +02:00
JosJuice e604641b12 Remove leftovers of projection hack support 2018-04-13 12:52:42 +02:00
Markus Wick 71dd2d9d4c
Merge pull request #6632 from lioncash/fp
Interpreter: Don't use a union to type-pun between integral and FP types
2018-04-13 11:12:01 +02:00
Lioncash a36bf438cd
Interpreter_FloatingPoint: Handle QNaNs properly in frsp
Essentially the same behavior as the SNaN path, minus the conditional result and setting of the VXSNAN FPSCR bit.
2018-04-12 19:47:10 -04:00
Lioncash 965b963a6f
Interpreter_FloatingPoint: Handle SNaNs properly in frsp
If FPSCR[VE] is set, a result isn't supposed to be written to the destination,
just the FPSCR[VXSNAN] bit gets set, and FPSCR[FR] and FPSCR[FI] get set to zero.

If FPSCR[VE] isn't set, then we do write out a result, however, the FPSCR[FPRF]
field is updated to signify a QNaN (yes, a QNaN, the FPRF field doesn't have
a bit configuration for SNaNs).
2018-04-12 19:47:06 -04:00
Lioncash e28d063539 x64Emitter: Make the Align* functions return a non-const data pointer
There's no real requirement to make this const, and this should also
be decided by the calling code, considering we had places that would
simply cast away the const and carry on.
2018-04-12 19:46:55 -04:00
Lioncash ab25eb6449 Interpreter_LoadStorePaired: Don't use a union to type-pun between integral and FP types 2018-04-12 19:44:31 -04:00
Lioncash 7a3158a693 Interpreter_FPUtils: Don't use a union to type-pun between integral and FP types
The previous code invokes undefined behavior. memcpy will optimize away
to the relevant loads and stores while maintaining well-defined
behavior.
2018-04-12 19:44:31 -04:00
Léo Lam a287bbc3bd Move SysConf to Core
It's not common code that could be reused for, say, Citra;
it's absolutely specific to Wii emulation and only used by the Dolphin
core, so let's move it there.

Another reason for doing this is to avoid having Common depend on Core.
2018-04-12 22:16:37 +02:00
Léo Lam 0856d4a68a SysConf: Migrate to new filesystem interface
It was discovered that some titles rely on filesystem metadata to work
properly. Currently, in master they either simply won't find their
save files (for example Bolt) or will complain about the Wii system
memory being corrupted (on first use or every time depending on
the title).

In order to even be able to keep track of file metadata, we first need
to eliminate all direct accesses to the NAND and make all kinds of
operations go through the filesystem code added in PR 6421.

This commit starts the migration process by making SysConf use
the new FS interface.
2018-04-12 22:16:37 +02:00
Léo Lam 3744a6d3f5 FileSystem: Add some more wrappers for convenience 2018-04-12 22:16:37 +02:00
Léo Lam 95aae11164 IOS: Do not manually close devices in destructor
This used to be necessary for properly cleaning up the FS state because
the old FS implementation used static state and only performed cleanup
in the close function, not in the destructor.

Now that the static state is gone, we do not need to close devices
manually anymore.
2018-04-12 22:16:10 +02:00
spycrab 40bb9974f2 Reformat all the things! 2018-04-12 21:28:39 +02:00
Sepalani 7d36165489 PPCSymbolDB: Do not truncate fixed size symbols
Fix comparison warning
2018-04-10 21:50:33 +04:00
Sepalani 9b8866ba78 PPCSymbolDB: Replace alert with LOG message 2018-04-10 21:49:47 +04:00
Markus Wick 0bfeb37a1f
Merge pull request #6604 from lioncash/dcbz_l
Interpreter_LoadStore: Generate a program exception if dcbz_l is executed when HID2[LCE] is zero
2018-04-09 23:04:09 +02:00
JosJuice 7aaaf44229
Merge pull request #6611 from leoetlino/remove-workaround
Boot_WiiWAD: Remove a timing issue workaround
2018-04-09 15:46:39 +02:00
Léo Lam 67f8e6e60a
Merge pull request #6620 from lioncash/dvd
DVDInterface: Deduplicate code in UpdateInterrupts()
2018-04-09 12:52:38 +02:00
Léo Lam cb88e1256f
Merge pull request #6617 from lioncash/ppcanalyst
PPCAnalyst: Minor cleanup
2018-04-09 12:48:16 +02:00
Léo Lam 783cbef638
Merge pull request #6618 from lioncash/symboldb
PPCSymbolDB: Minor cleanup
2018-04-09 12:46:28 +02:00
Lioncash 1b3dae918a StreamADPCM: Turn the ADPCM decoder into a class
Migrates the state to be instance-based as opposed to being a flat
namespace. This keeps behavior localized to its own instantiable unit
(and forces uses of the class to also be localized, lest they cart around
an instance all over the place).
2018-04-09 03:49:18 -04:00
Lioncash a8088b7365 ProcessorInterface: Remove prefixed underscores from parameters
These are reserved by the implementation for any use.
2018-04-09 03:21:59 -04:00
Lioncash 419ed1b46a DVDInterface: Deduplicate code in UpdateInterrupts() 2018-04-09 03:18:51 -04:00
Lioncash a0f943178b Profiler: Move BlockStat and ProfileStats structures into the Profiler namespace
These should be part of the namespaced API and not be sitting in the
global namespace.
2018-04-08 22:29:48 -04:00
Lioncash 0461709c8d PPCSymbolDB: Use auto for iterators where applicable 2018-04-08 22:03:11 -04:00
Lioncash b44eb90ee4 PPCSymbolDB: Default destructor and pass to member variables in the constructor initializer-list 2018-04-08 21:56:24 -04:00
Lioncash d6d17eea60 PPCSymbolDB: Remove unused function pointer typedef 2018-04-08 21:54:50 -04:00
Lioncash 9c5115a627 PPCAnalyst: Simplify boolean assignments in SetInstructionStats()
Ternaries here aren't necessary if all we're checking against is if
something is non-zero
2018-04-08 21:42:43 -04:00
Lioncash f2b2f5b4c7 PPCAnalyst: Make ReorderType an enum class
Makes the values strongly typed and doesn't dump them into the class
itself.
2018-04-08 21:38:19 -04:00
Lioncash 5e5a56bd9b PPCAnalyst: Remove unnecessary includes from header 2018-04-08 21:34:12 -04:00
Lioncash 4bd3b28823 PPCAnalyst: in-class initialize PPCAnalyzer's members
Eliminates the need to assign in the constructor initializer list.
2018-04-08 21:32:15 -04:00
Lioncash 433a56636b PPCAnalyst: Move public interface above private interface 2018-04-08 21:31:19 -04:00
Léo Lam 8894b902df Boot_WiiWAD: Remove a timing issue workaround
This was necessary to work around a FS timing issue which caused small
writes to take much longer than they should.

Now that we emulate timings for the FS module including its file cache,
we don't need to maintain this workaround anymore.
2018-04-08 11:23:18 +02:00
Léo Lam 9dbc760bb7
Merge pull request #6606 from lioncash/bochs
CMakeLists: Link bochs in privately where applicable
2018-04-08 11:08:12 +02:00
Lioncash f1be7cd4a0
CMakeLists: Link bochs in privately where applicable
Everything that links in core doesn't need to see anything related to bochs, because it's only used internally.
Anything else that relies on bochs should be linking it in explicitly.
2018-04-08 04:59:58 -04:00
Léo Lam 0a290f5d11
Merge pull request #6607 from lioncash/ppc
PPCDebugInterface: Remove redundant HostRead_U32() call in Disassemble()
2018-04-08 10:25:43 +02:00
Léo Lam 2a535d5a55
Merge pull request #6608 from lioncash/gekko
Gekko: In-class initialize members where applicable
2018-04-08 10:23:42 +02:00
Lioncash 5d1349f9c7 Gekko: Remove unused UFPR union
Using this in its current form would invoke undefined behavior, as it's
using a union to type pun between data types. It's also, well, unused,
so we don't need to keep it around.
2018-04-07 22:30:26 -04:00
Lioncash d5555b49e9 Gekko: In-class initialize members where applicable
Allows defaulting the default constructor. Also moves assignment to
initializer lists where applicable as well.
2018-04-07 22:26:24 -04:00
Lioncash 3e50b0e320 PPCDebugInterface: Remove redundant HostRead_U32() call in Disassemble()
We already read the necessary information with the
HostRead_Instruction() call. Internally, it calls HostRead_U32() as
well, so there's no difference in behavior.
2018-04-07 22:20:59 -04:00
Léo Lam f4a2ad3c88 IOS/FS: Emulate read/write/close/seek timing
Also bumps up the state version.
2018-04-07 23:35:28 +02:00
Léo Lam 42983c0bd3 IOS/FS: Emulate superblock write timing 2018-04-07 23:35:28 +02:00
Léo Lam b74577ff43 IOS/FS: Emulate GetAttr() timing 2018-04-07 23:35:28 +02:00
Léo Lam 896d875187 IOS/FS: Emulate Open() timing 2018-04-07 23:35:28 +02:00
Léo Lam 32b1409cbd IOS/FS: Use hardware tested minimum reply time
...instead of an arbitrary guess.
2018-04-07 23:35:28 +02:00
Léo Lam 7dff069659
Merge pull request #6605 from spycrab/gc_fix_rumble
[RFC] Core/GC: Fix rumble for "Luigi's Mansion"
2018-04-07 23:23:30 +02:00
spycrab eed066e8a7 Core/GC: Fix rumble for "Luigi's Mansion" 2018-04-07 22:13:01 +02:00
Lioncash 181539e049
Interpreter_LoadStore: Generate a program exception if dcbz_l is executed when HID2[LCE] is zero
If the locked cache isn't enabled, dcbz_l is illegal to execute
(locked cache is off, locked cache instructions don't work, makes sense)

This makes exception handling more accurate. It was previously possible to hit the DSI exception
handler when HID2[LCE] is set to zero, which isn't correct.

With this change we no longer hit the DSI handler, however we still have a lingering issue elsewhere
likely to do with exception precedence, we seem to hit the Floating Point exception handler instead
in some cases. This isn't due to the instruction itself directly however, so this is just another bug
to fix elsewhere.
2018-04-06 23:53:44 -04:00
Léo Lam a957bd1ecc
Merge pull request #6421 from leoetlino/fs-interface
IOS: Refactor the filesystem code
2018-04-06 12:17:09 +02:00
Markus Wick a9cd67125c
Merge pull request #6597 from lioncash/fp-load-store
Interpreter_LoadStore: Generate alignment exceptions if an FP load/store instruction's effective address is not word aligned
2018-04-05 09:55:49 +02:00
Lioncash 912c9490c0 Interpreter_LoadStore: Generate alignment exceptions if an FP load/store instruction's effective address is not word aligned
This is one of the conditions for an alignment exception documented in
the 750CL architecture reference manual in section 4.5.6, which also
applies to the Gekko microprocessor.
2018-04-05 00:30:53 -04:00
Lioncash 980f1641b5 Interpreter_LoadStore: Generate alignment exceptions if dcbz or dcbz_l are executed with the data cache disabled
This is an exception condition documented within section 4.5.6 in the
architecture reference manual for the PPC 750CL, which also applies to
the Gekko microprocessor.

Also moves dcbz_l's implementation out of Interpreter_Paired and beside
dcbz where it belongs.
2018-04-04 18:44:17 -04:00
Markus Wick c6d0d9a01f
Merge pull request #6578 from JosJuice/remove-projection-hacks
Remove support for projection hacks
2018-04-04 09:10:32 +02:00
Lioncash 3ea0a37d72 Interpreter_LoadStore: Generate alignment exceptions if lmw, lswi, lswx, stmw, stswi, or stswx is executed when the MSR[LE] bit is set
Improves exception accuracy regarding an admittedly very unlikely
scenario.
2018-04-03 20:47:40 -04:00
Markus Wick 1e0f72f2da
Merge pull request #6585 from lioncash/exception
Interpreter_LoadStore: Handle alignment exceptions in lmw, lwarx, stmw, and stwcx + fixes for eciwx and ecowx
2018-04-03 09:52:36 +02:00
Lioncash de0ed1a5fb
Interpreter_LoadStore: Update the DAR if a DSI exception occurs in eciwx and ecowx
Also once a DSI exception occurs, execution is supposed to leave the
instruction immediately. It doesn't finish execution.
2018-04-02 08:34:32 -04:00
Lioncash a013638dcb
Interpreter_LoadStore: Properly update the DAR whenever an alignment exception occurs within eciwx and ecowx
These should be updating the DAR when an alignment exception occurs,
just like every other instruction that can cause an alignment exception.
2018-04-02 08:34:32 -04:00
Lioncash c1b78106e7
Interpreter_LoadStore: Flag alignment exceptions on misaligned addresses in lwarx, lmw, stmw, and stwcx
The effective address given to these instructions must be word (4 byte) aligned,
and if the address is not aligned like that, then an alignment exception
gets triggered.

We currently don't update the DSISR in this case properly, since we
didn't really handle alignment exceptions outside of ecowx and eciwx,
and even then the handling of it isn't really that great, considering
the DAR isn't updated with the address that caused the exception to
occur.

The DSISR will eventually be amended to be properly updated.
2018-04-02 08:34:26 -04:00
Markus Wick 2449be7f0c
Merge pull request #6571 from lioncash/rotate
CommonFuncs: Generify rotation functions and move them to BitUtils.h
2018-04-02 12:18:22 +02:00
Léo Lam bf8ffe5bfb
Merge pull request #6582 from lioncash/const
Jit64/JitRegCache: Make member functions const qualified where applicable
2018-04-01 23:32:58 +02:00
Léo Lam 7d561c7e0e
Merge pull request #6579 from lioncash/socket
IOS/Socket: Minor changes to WiiSocket
2018-04-01 23:31:47 +02:00
Lioncash 0f6c3c7b35 Jit64/JitRegCache: Make member functions const qualified where applicable
None of these member functions modify class state.

Also makes the parameter name for ScoreRegister's implementation
consistent with its declaration.
2018-04-01 16:53:00 -04:00
JosJuice c6931ee5b8
Merge pull request #6577 from lioncash/memcard
EXI_DeviceMemoryCard: Get rid of magic number in SetCS()
2018-04-01 22:08:36 +02:00
JosJuice 621e1758fb
Merge pull request #6581 from lioncash/const
DSPJitRegCache: Make FindFreeReg() a const member function
2018-04-01 22:05:48 +02:00
Lioncash 6cfa9fda6b DSPJitRegCache: Make FindFreeReg() a const member function
This member function doesn't modify class state.
2018-04-01 16:01:25 -04:00
Lioncash fe9d989765 DSPJitRegCache: Remove unnecessary casts in FlushRegs()
We can just use the proper printf specifiers instead.
2018-04-01 15:49:21 -04:00
JosJuice 91732e2baf Remove support for projection hacks
This isn't really useful for anything anymore as far as I know.
2018-04-01 21:41:18 +02:00
Lioncash ad17d9a979 IOS/Socket: Delete WiiSocket's copy constructor
If the copy assignment operator is deleted, then the copy constructor
should be deleted as well, otherwise it's a hole in the API where copies
can be made (and if this were an intended case, it should be
documented).

So we delete the copy constructor and explicitly default the move
assignment and move constructor to signify this is intended to be a
move-only type.
2018-04-01 15:38:37 -04:00
Lioncash ad575a1556 IOS/Socket: Place WiiSocket's private interface below the public interface
In the rest of the codebase we try to position the private interface
below the public interface (unless it's otherwise not possible).
2018-04-01 15:38:33 -04:00
Lioncash abb33637a3 IOS/Socket: In-class initialize WiiSocket members 2018-04-01 15:27:58 -04:00
Lioncash 8fbd6e2a87 EXI_DeviceMemoryCard: Get rid of magic number in SetCS()
Keeps the code consistent with other usages of the same constant
2018-04-01 15:21:20 -04:00
Léo Lam aaf9f4759f
Merge pull request #6570 from lioncash/lzo
CMakeLists: Remove lzo from the LIBS variable and make linkage private
2018-04-01 11:51:06 +02:00
Lioncash a4420d6d94 Jit64: Make CheckMergedBranch() a const member function
This function doesn't modify class state.
2018-03-31 20:12:53 -04:00
Lioncash c3483a1823 CommonFuncs: Generify rotation functions and move them to BitUtils.h
These are bit manipulation functions, so they belong within BitUtils.

This also gets rid of duplicated code and avoids relying on compiler
reserved names existing or not existing to determine whether or not we
define a set of functions.

Optimizers are smart enough in GCC and clang to transform the code to a
ROR or ROL instruction in the respective functions.
2018-03-31 18:09:45 -04:00
Lioncash eee32c030b
CMakeLists: Remove lzo from the LIBS variable and make linkage private
The only place this library is needed (core) is already linked in the core target.
Also make the linkage private to create linkage failures if the dependency isn't
explicitly linked in elsewhere where it should be.

Reduces the dependency on the LIBS variable.
2018-03-31 15:01:05 -04:00
Mat M 76e1a5b892
Merge pull request #6569 from JosJuice/kill-emu-state
Remove EmuState
2018-03-31 14:04:30 -04:00
Shawn Hoffman 6a0c15491b Remove EmuState 2018-03-31 16:21:17 +02:00
Léo Lam c82da2b978 Remove dead code
Unused, old code that is intended to be removed should not be left in
comments -- that is what version control is for.
2018-03-31 14:56:27 +02:00
Léo Lam 329622120f
Merge pull request #6567 from JosJuice/discio-enums-case
DiscIO: Don't use all uppercase for enum values
2018-03-31 14:37:26 +02:00
JosJuice 4387432436 DiscIO: Don't use all uppercase for enum values
Also removing some prefixes that we don't need now that we're
using enum classes instead of plain enums.
2018-03-31 14:11:32 +02:00
Léo Lam 4e547772da IOS/FS: Make the NAND root path a parameter
Cleaner than having the backend figure out which NAND root to use.
2018-03-31 10:58:49 +02:00
Léo Lam c56f31906c IOS/FS: Remove some redundant log messages
The FS IPC code already logs all commands, so keeping the log messages
in the backend is redundant.
2018-03-31 10:58:49 +02:00
Léo Lam 2d8be6a77d IOS/FS: Make it harder to forget closing FDs
Return a FileHandle which will automatically close the FD when
the handle goes out of scope. For the rare cases where this behaviour
is undesirable, the FD can be released from the handle.
2018-03-31 10:58:48 +02:00
Léo Lam de15e09a4f Log: Rename IOS_FILEIO to IOS_FS
Let's use the actual name of the system module.

Also, the FS code is not all about files.
2018-03-31 10:58:37 +02:00
Léo Lam 5a7b966b6d IOS: Rewrite FS to use FileSystem
This is the large change in the branch.

This lets us use either the host filesystem or (in the future) a NAND
image exactly the same way, and make sure the IPC emulation code
behaves identically. Less duplicated code.

Note that "FileIO" and "FS" were merged, because it actually doesn't
make a lot of sense to split them: IOS handles requests for both
/dev/fs and files in the same resource manager, and as it turns out,
/dev/fs commands can *also* be sent to non /dev/fs file descriptors!
If we kept /dev/fs and files split, there would be no way to
emulate that correctly. I'm not aware of anything that does that (yet?)
but I think it's important to be correct.
2018-03-31 10:58:37 +02:00
Léo Lam 78478a651d Boot: Move CreateVirtualFATFilesystem to Boot_WiiWAD
It has nothing to do in the filesystem code.

(It also smells like a workaround for some kind of timing issue.)
2018-03-31 10:58:37 +02:00
Léo Lam fcfe4e2a26 IOS: Change GetFS() to return a FileSystem
Now that we have a proper filesystem interface, it makes more sense
to return it instead of the emulated IOS device (which isn't
really usable for any purpose other than emulated IPC).
2018-03-31 10:45:44 +02:00
Léo Lam 1eec459e30 IOS: Extract existing FS code into a host backend
Extract the existing FS code into a HostBackend implementing
the filesystem interface.

Compared to the original code, this uses less static state.
The open host files map is now a member variable
as it should have been. Filesystem handles are now also easier
to savestate. Some variable names and log messages were cleaned up.
Nothing else has been changed.
2018-03-31 10:45:44 +02:00
Léo Lam f1dbb8952c IOS: Introduce a new FileSystem interface
Add a new FileSystem class that can be used to perform operations
on the emulated Wii filesystem.

This will allow separating the IPC code (reading from and writing to
memory to handle IOS FS commands) and the actual filesystem code
in a much better way.

This also paves the way for implementing another filesystem backend
in the future -- NAND images for more complete emulation, including
filesystem metadata like permissions or file orders, which some games
and homebrew actually care about -- without needing to make any more
changes to the other parts of the codebase, in addition to making
filesystem behaviour tests easier to write.
2018-03-31 10:45:44 +02:00
Lioncash e93159e54a
CMakeLists: Link in system framework libraries explicitly on macOS
Makes our libraries explicitly link in which libraries they need.
This makes our dependencies explicit and removes the reliance on the
LIBS variable to contain the libraries that they need.
2018-03-30 16:14:10 -04:00
JosJuice b065f86270 Translate the netplay chat info message about QoS 2018-03-29 22:44:23 +02:00
JMC47 3cd9465f91 Fix JIT64 mtsmsr issue after PIE support again. 2018-03-28 04:16:41 -04:00
spycrab 016ef43b27 Core: Check for initialized GCPad before resetting rumble 2018-03-27 16:26:36 +02:00
Markus Wick 9b5726fc23
Merge pull request #6534 from lioncash/dspjit
DSPEmitter: Remove uses of the DSP JIT global in CompileCurrent()
2018-03-26 21:12:46 +02:00
Léo Lam 2e1edb49b0
Merge pull request #6524 from lioncash/global
JitArm64/JitAsm: Remove usages of the JIT global
2018-03-26 18:59:05 +02:00
Léo Lam 674ab6a8ef
Merge pull request #6532 from lioncash/interp
Interpreter: Remove static state within SingleStepInner()
2018-03-26 18:50:26 +02:00
Lioncash 4a4538abbf
Interpreter_LoadStore: Amend variable naming
Amends variable names to follow our code style. Also makes code const correct where possible.
2018-03-26 07:47:50 -04:00
Léo Lam 97e4d3d56f
Merge pull request #6523 from lioncash/cast
Interpreter_LoadStore: Remove unnecessary casts
2018-03-26 12:47:09 +02:00
Léo Lam eb489c0a5e
Merge pull request #6529 from lioncash/utils
DSPCodeUtil: Don't return data via an out parameter
2018-03-26 12:46:16 +02:00
Léo Lam 3272fda3ee
Merge pull request #6525 from lioncash/dead-code
Jit64/Jit_Integer: Remove dead code in arithXex()
2018-03-26 12:43:01 +02:00
Léo Lam ccfdea696a
Merge pull request #6527 from lioncash/typedef
DSPTables: Remove opc_t typedef
2018-03-26 12:39:27 +02:00
Léo Lam 8e8603fcc9
Merge pull request #6528 from lioncash/enum-asm
DSPAssembler: Make error code enum an enum class
2018-03-26 12:38:06 +02:00
Léo Lam ea5808759e
Merge pull request #6531 from lioncash/mmu-enum
MMU: Make TLBLookupResult and XCheckTLBFlag enum classes
2018-03-26 11:39:37 +02:00
Lioncash 1519e4dbb3 DSPEmitter: Remove uses of the DSP JIT global in CompileCurrent()
With this, the DSPEmitter itself no longer makes use of the DSP JIT global
2018-03-26 01:14:17 -04:00
Kekker-git d40ae9f569 Fix indefinite rumble on emulation pause 2018-03-26 00:04:58 -04:00
Lioncash 8b29997ed1 Interpreter: Remove an unnecessary UReg_MSR& cast from SingleStepInner
This is technically undefined behavior, but regardless of that, it's not
even necessary since we can just make a temporary around the MSR value
and just discard it when done with it, since all we do is query the FP
bit value with it.
2018-03-25 21:36:39 -04:00
Lioncash b0efcdc8ef Interpreter: Get rid of static state within SingleStepInner()
Given how the hooking operates, we may not execute an instruction.
Instead of making the state a static local to the function, just make it
part of the lifecycle of the Interpreter class.
2018-03-25 21:30:00 -04:00
Lioncash c4a597171c MMU: Make XCheckTLBFlag an enum class 2018-03-25 19:51:47 -04:00
Lioncash 9967c24f5d MMU: Make TLBLookupResult an enum class 2018-03-25 19:44:14 -04:00
Lioncash 0f25627614 DSPCodeUtil: Don't return data via an out parameter
We can just return directly in these cases.
2018-03-25 18:55:08 -04:00
Lioncash e42db3594b DSPAssembler: Make error code enum an enum class
Prevents the error codes from littering the surrounding scope.
2018-03-25 18:19:08 -04:00
Lioncash 8c421ffbb7 DSPTables: Remove opc_t typedef
This was only ever used by the DSP assembler, and even then it was
sparsely used. Get rid of it to be consistent with types in other
sections of the DSP code.
2018-03-25 17:53:23 -04:00
Lioncash 7bd41a3b55 Jit64/Jit_Integer: Remove dead code in arithXex()
The conditional this code is within already checks whether d == b, so this
conditional will never be true.
2018-03-25 15:35:02 -04:00
Lioncash efcdb3debb JitArm64/JitAsm: Remove usages of the JIT global
With this, the entire ARM JIT makes no use of the JIT global whatsoever.
2018-03-25 15:23:49 -04:00
Lioncash a45631c4ca Interpreter_LoadStore: Remove unnecessary casts
These aren't necessary as the type being stored into a u32 are of the
same signedness and are smaller in data size, so there's no truncation
being performed.
2018-03-25 15:09:32 -04:00
Stenzek 2f1a7cbee1 Implement "Skip" ubershader mode
Skip ubershader mode works the same as hybrid ubershaders in that the
shaders are compiled asynchronously. However, instead of using the
ubershader to draw the object, it skips it entirely until the
specialized shader is made available.

This mode will likely result in broken effects where a game creates an
EFB copy, and does not redraw it every frame. Therefore, it is not a
recommended option, however, it may result in better performance on
low-end systems.
2018-03-26 01:57:41 +10:00
Léo Lam 5c83e18fbd
Merge pull request #6515 from lioncash/cast
Interpreter_FPUtils: Get rid of a pointer cast
2018-03-25 11:27:38 +02:00
Léo Lam e9976c27c0
Merge pull request #6518 from lioncash/namespace
Interpreter: Don't dump the MathUtils namespace into scope in Interpreter_FloatingPoint and Interpreter_Paired
2018-03-25 11:24:24 +02:00
Lioncash 48e2e9a41d CachedInterpreter: Use using aliases instead of typedef 2018-03-25 02:57:25 -04:00
Lioncash 9829083241 CachedInterpreter: Use an enum class for instruction type 2018-03-25 02:57:16 -04:00
Lioncash 89df65aa25 Interpreter_Integer: Correct precedence of overflow check in nego
The overflow check needs to occur before the condition register update
due to the fact that the summary overflow (SO) bit is used in the
updating of the condition register. If we set any overflow bits after
updating the CR, then we can potentially incorrectly report that an
overflow did not happen (in the case the SO bit wasn't set previously).
2018-03-24 20:48:05 -04:00
Lioncash 96014e74a3 Interpreter_Paired: Don't dump the entire MathUtils namespace into scope
Functions from the namespace are only used four times within the entire
file.
2018-03-24 19:42:14 -04:00
Lioncash 46f61a48c7 Interpreter_FloatingPoint: Don't dump the entire MathUtils namespace into scope
Given functions from the MathUtils namespace are only used six times in
the whole file, dumping the namespace seems a little excessive.
2018-03-24 19:40:22 -04:00
Lioncash 27611d55ff Interpreter_FPUtils: Get rid of a pointer cast
This is undefined behavior according to the standard. We can just use
the built in means of retrieving a quiet NaN.
2018-03-24 19:33:44 -04:00
Léo Lam 328ac424c0
Merge pull request #6517 from lioncash/ppctables
PPCTables: Namespace all exposed functions
2018-03-24 22:17:36 +01:00
Lioncash 8a7abd72b4 PPCTables: Remove prefixed underscores from parameter names 2018-03-24 16:46:49 -04:00
Lioncash 2381aeecc3 PPCTables: Namespace all exposed functions
It's somewhat inconsistent to have two straggler functions outside the
namespace.
2018-03-24 16:46:12 -04:00
Lioncash 397b3fb976 CPUCoreBase: Make the GetName() member function const qualified
This function should have no need to modify internal class state.
2018-03-24 16:17:39 -04:00
Lioncash c738ddc4aa CPUCoreBase: Default the virtual destructor 2018-03-24 16:09:19 -04:00
Lioncash ef6e747a68 PowerPC: Remove commented out PanicAlert 2018-03-24 14:52:22 -04:00
Lioncash 3dc3b0caa5 Interpreter_LoadStore: Remove commented out code
Also removes long separation lines that aren't really necessary.
2018-03-24 14:49:18 -04:00
Lioncash f9e0645b99 Interpreter_SystemRegisters: Remove commented out code 2018-03-24 14:45:46 -04:00
Lioncash 288b579c09 Interpreter_Integer: Remove commented out code in subfic 2018-03-24 14:43:25 -04:00
Markus Wick 3ab88742fd
Merge pull request #6492 from lioncash/nop
Jit_Integer: Make NOP check more flexible for ori and expand NOP checking to oris, xori, and xoris
2018-03-24 08:53:21 +01:00
Pierre Bourdon 894d4c99a8
Merge pull request #6495 from lioncash/namespace
PowerPC: Namespace all header contents for PowerPC.h
2018-03-23 12:09:09 +01:00
Lioncash fc16a78f6a Jit_Integer: Handle NOP case for xori and xoris
Like ori and oris, xori and xoris can also be used to introduce a NOP.
In that case, just don't do anything.
2018-03-22 22:51:43 -04:00
Lioncash 007f9e5309 Jit_Integer: Handle NOP case for oris as well
Like ori, this can also be used as a NOP under the same conditions.
2018-03-22 22:49:02 -04:00
Lioncash 42fce74f39 Jit_Integer: Handle NOP case where RA == RS for ori
ori can be used as a NOP if the two register operands are the same, and
the immediate is zero, not only if the two register operands are r0.

Also removes the check for !inst.Rc, as ori only has one encoding, and
said encoding doesn't even have a record bit in it.
2018-03-22 22:47:19 -04:00
Mat M 71846a6daa
Merge pull request #6469 from lioncash/cmake
Core/CMakeLists: Migrate off add_dolphin_library
2018-03-22 21:52:44 -04:00
Lioncash 4c97deb364 PowerPC: Namespace all header contents for PowerPC.h
Puts everything under the same namespace. Previously the header was only
partially namespaced, which is inconsistent.
2018-03-22 19:01:47 -04:00
Léo Lam 5e76f3a6d4
Merge pull request #6488 from aldelaro5/symbols-log
LOG: Add a log type for Symbols
2018-03-22 22:06:04 +01:00
aldelaro5 c54e56793a
Add a log type for Symbols and move symbols related logs to it
This fix the awkwardness of having the symbols detection, parsing and loading related logs be in OS HLE while they don't have anything to do with that.
2018-03-22 14:57:28 -04:00
Lioncash 796d67e1ec Interpreter_Integer: Handle OE bit for subf, subfc, subfe, subfme, and subfze
With this, overflow flag support is now fully implemented for all
instructions that support it.
2018-03-22 13:08:03 -04:00
Markus Wick 59c5bc964f
Merge pull request #6486 from lioncash/add-oe
Interpreter_Integer: Handle overflow flag when OE bit is set in add, addc, adde, addme, and addze
2018-03-22 14:15:58 +01:00