Commit Graph

419 Commits

Author SHA1 Message Date
JosJuice 07605bf67c
Merge pull request #13090 from mitaclaw/ranges-modernization-1-trivial
Ranges Algorithms Modernization - Trivial
2024-10-15 17:08:55 +02:00
mitaclaw e4fb837f4b Modernize `std::find_if` with ranges
In BTEmu.cpp, `std::mem_fn` was not necessary for the predicate to compile.
2024-10-10 15:28:11 -07:00
mitaclaw 9bd1dae41d Modernize `std::fill` with ranges
In DSPCore.cpp, there were two `std::fill` uses that could be simplified using `std::fill_n`. Due to their proximity with other `std::fill` algorithms being modernized with ranges, I chose to make these examples into the rare `std::ranges::fill_n`.
2024-10-10 00:53:48 -07:00
Lioncash e52109a356 DSPJitRegCache: Take DynamicReg instances by reference in FlushRegs()
A DynamicReg instance is 80 bytes in size, so this just gets rid of some
unnecessary copy churn.
2024-02-28 10:27:35 -05:00
Admiral H. Curtiss 07c035e659
Core/SystemTimers: Refactor to class, move to System. 2024-01-04 23:35:19 +01:00
Lioncache 1764b13423 Core/DSP/DSPTables: Make pdregname() and pdregnamelong() return std::string
Keeps the interface consistent.
2023-12-18 13:08:57 -05:00
Lioncache 62740d97a8 Core/DSP/DSPTables: Make use of fmt::format in pdname()
Resolves a deprecation warning on macOS. Also, we can convert
the function to just return a std::string instead of using a
static internal buffer, which is gross and thread-unsafe.
2023-12-18 13:08:57 -05:00
Lioncash ecd7fa4380 DSPInterpreter: Mark IsProperlySignExtended() as [[maybe_unused]]
This function is used in debug asserts, so in release builds this will
go unused and otherwise generate a warning
2023-12-12 21:02:15 -05:00
Zopolis4 f0d2ce4683
Remove _M_X86 in favour of _M_X86_64 2023-11-28 23:03:20 +11:00
get 07ad75f34f EnumUtils: Add Common::ToUnderlying
Mirrors the C++23 <utility> function, std::to_underlying
2023-06-17 07:15:33 -05:00
Dentomologist 4c2759f541 XEmitter: Add enum class Jump
Replace the bool parameter force5bytes in J, JMP, and J_CC with an enum
class Jump::Short/Near. Many callers set that parameter to the literal
'true', which was unclear if you didn't already know what it did.
2023-06-12 13:04:18 -07:00
Pokechu22 a244cb868b DSPTool: Fix missing error when redefining labels
The logging was broken in 958cbf38a4 (DSPTool doesn't use dolphin's logging system, so it just produced nothing; the same thing affected comparing before 693a29f8ce).

AssemblerError::LabelAlreadyExists (previously ERR_LABEL_EXISTS) simply was never used.
2023-02-04 17:31:06 -08:00
Admiral H. Curtiss c9558ecb4c
CoreTiming: Refactor to class. 2022-11-27 03:47:12 +01:00
Pokechu22 cc5640245c Fix build errors related to formatting non-scoped enums 2022-11-23 13:45:43 -08:00
Minty-Meeo 69e32dea52 Resolve GCC Warnings 2022-06-30 15:26:48 -05:00
Pierre Bourdon c8e716234e
Merge pull request #10732 from Pokechu22/dsp-init
Increase accuracy of DSP initialization process
2022-06-22 14:36:04 +02:00
Pierre Bourdon ceef02ed2a
Merge pull request #10750 from Pokechu22/hermes-test
Enhance DSPAssemblyTest, and fix various DSPTool bugs discovered while doing so
2022-06-22 14:26:50 +02:00
Admiral H. Curtiss f441e3ab98
Merge pull request #10723 from Pokechu22/dsp-lle-unsigned-loop-counter
DSP LLE Recompiler: Fix LOOP and BLOOP when the counter is between 0x8001 and 0xFFFF
2022-06-21 02:01:13 +02:00
Pokechu22 c317f7fd22 DSPLLE: Don't log when DIRQ is set to 0
No interrupt is generated in this case. The homebrew liband uCode writes zero fairly frequently, so logging it results in spam.
2022-06-19 10:46:41 -07:00
Pokechu22 072913bbad DSPLLE: More accurately handle initialization behavior 2022-06-16 12:18:05 -07:00
Pokechu22 c38c2b1aaa DSPLLE: Fix debug logging in ReadMailboxLow
The # option means that 0x is prepended already, so the old code resulted in 0x0xDEADBEEF instead of the intended 0xDEADBEEF. WriteMailboxLow was already correct.
2022-06-16 12:18:05 -07:00
Pokechu22 3ceda1df8c DSPLLE: Rename cr to control_reg
Before, there were two distinct fields called cr and r.cr, which is needlessly confusing (see the comment in DSPCore.h).
2022-06-16 12:18:05 -07:00
Pokechu22 41939eeaf9 DSPDisassembler: Fix disassembly of LSR and ASR
Before, both 1441 and 147f would disassemble as `lsr $acc0, #1`, when the second should be `lsr $acc0, #-1`, and both 14c1 and 14ff would be `asr $acc0, #1` when the second should be `asr $acc0, #-1`. I'm not entirely sure whether the minus signs actually make sense here, but this change is consistent with the assembler so that's an improvement at least.

devkitPro previously changed the formatting to not require negative signs for lsr and asr; this is probably something we should do in the future: 8a65c85c9b

This fixes the HermesText and HermesBinary tests (HermesText already wrote `lsr $ACC0, #-5`, so this is consistent with what it used before.)
2022-06-14 12:22:06 -07:00
Pokechu22 2d774010c3 DSPCodeUtil: Include the PC and hex in the "Extra code words" section
It's included in the section before, so it's helpful to supply here too.
2022-06-14 12:22:06 -07:00
Pokechu22 087d89225c DSPCodeUtil: Give better output when comparing instructions with large immediates 2022-06-14 12:22:06 -07:00
Pokechu22 cad9801ded DSPDisassembler: Fix out-of-bounds read when the last word is an instruction with a large immediate
For instance, ending with 0x009e (which you can do with CW 0x009e) indicates a LRI $ac0.m instruction, but there is no immediate value to load, so before whatever garbage in memory existed after the end of the file was used.

The bounds-checking also previously assumed that IRAM or IROM was being used, both of which were exactly 0x1000 long.
2022-06-14 12:22:06 -07:00
Pokechu22 693a29f8ce DSPCodeUtil: Use fmt::print instead of logging in DSP::Compare 2022-06-14 12:22:05 -07:00
Pokechu22 d03b277403 DSP LLE Recompiler: Fix LOOP and BLOOP when the counter is between 0x8001 and 0xFFFF 2022-06-05 19:34:31 -07:00
Admiral H. Curtiss 96f9d1000d
Merge pull request #10721 from Dentomologist/fix_warnings_on_generic_builder
Fix warnings on generic builder
2022-06-04 21:51:58 +02:00
Dentomologist 92af703f29 DSPAssembler: Fix -Wswitch warning 2022-06-04 12:08:09 -07:00
Tilka d7cda67462
Merge pull request #10716 from Pokechu22/dsp-lle-loop-saturation
DSP LLE: Apply saturation to LOOP and BLOOP with $ac0.m and $ac1.m
2022-06-04 15:30:06 +01:00
Mai M f7f47d3cd0
Merge pull request #10692 from Pokechu22/dsp-manual-set40-and-write-backlog
docs/DSP: Add sections on 16-bit and 40-bit modes and on main and extended opcode writing to the same register
2022-06-02 20:26:31 -04:00
Pokechu22 4bc42ded80 DSP LLE Interpreter: Remove OpReadRegisterAndSaturate
Instead, saturate in OpReadRegister, as all uses of OpReadRegisterAndSaturate called OpReadRegister for other registers (and there isn't anything that writes to $ac0.m or $ac1.m without saturation).
2022-06-01 22:01:49 -07:00
Pokechu22 928f745e36 DSP LLE Interpreter: Fix typo in 'LS
This was introduced in fc1db5eaa0.
2022-06-01 22:01:49 -07:00
Pokechu22 e7f78379ec DSP LLE Recompiler: Apply saturation to LOOP and BLOOP with $ac0.m and $ac1.m 2022-06-01 22:01:49 -07:00
Pokechu22 bc206b7a27 DSP LLE Interpreter: Apply saturation to LOOP and BLOOP with $ac0.m and $ac1.m 2022-06-01 22:01:49 -07:00
Pokechu22 f88b7ab6b3 DSP LLE JIT: Fix Update_SR_Register16_OverS32
There were 3 bugs here:

- The input register for the full register wasn't actually being used; it was read into RCX but RCX wasn't used by Update_SR_Register16_OverS32 (except as a scratch register).  The way the DSP LLE recompiler uses registers is in general confusing, so this commit changes a few uses to have a variable for the register being used, to make code a bit more readable.  (Default parameter values were also removed so that they needed to be explicitly specified).
- Update_SR_Register16 was doing a 64-bit test, when it should have been doing a 16-bit test.  For the most part this doesn't matter due to sign-extension, but it does come up with e.g. `ORI` or `ANDI`.
- Update_SR_Register16_OverS32 did the over s32 check, and then called Update_SR_Register16.  Update_SR_Register16 masks $sr with ~SR_CMP_MASK, clearing the over s32 bit.  Now the over s32 check is performed after calling Update_SR_Register16 (without masking a second time).  No official uCode cares about the over s32 bit.
2022-05-30 20:10:55 -07:00
Pokechu22 7c63bd1893 docs/DSP: Fix inconsistency with ADDI and CMPI
We don't have anything called $amD, though we do have $acsD.  However, these instructions affect flags based on the whole accumulator, so it's better to just use $acD.
2022-05-29 15:00:09 -07:00
Pokechu22 baf2c710ff DSP: Fix typo with TST 2022-05-29 15:00:09 -07:00
Pokechu22 4dc7208195 docs/DSP: Fix typo with arithmetic instructions that take a 16-bit immediate
These instructions used an 'r' in their bit list, but a 'd' in the operands.
2022-05-29 15:00:09 -07:00
Pokechu22 b349254ff4 docs/DSP: Document the behavior when main and extended opcodes both write to the same register (the write backlog)
For more information, ApplyWriteBackLog, WriteToBackLog, and ZeroWriteBackLog were added in b787f5f8f7 and the explanatory comment was added in fd40513fed, although it did not mention the specific instructions that could trigger this edge case. The statements about which registers can be written by main opcodes and extension opcodes are based on my own checking of all instructions in the manual.
2022-05-29 15:00:09 -07:00
Tilka e17a4f49f5
Merge pull request #10668 from Dentomologist/convert_pointerwrap_mode_to_enum_class
Convert PointerWrap::Mode to enum class
2022-05-29 00:57:43 +01:00
Tilka 3dbc18060b
Merge pull request #10694 from Pokechu22/dsp-assembler-error-messages-etc
DSPAssembler: Rework errors and warnings, and related cleanup
2022-05-29 00:16:23 +01:00
Pokechu22 d307c34af1 DSP LLE: Rename CMPAR to CMPAXH 2022-05-27 18:22:38 -07:00
Dentomologist f6b9acccfc Common: Refactor PointerWrap 2022-05-25 13:06:41 -07:00
Pokechu22 bd3173e344 DSPAssembler: Rework errors and warnings
Among other things, this trims trailing newline characters. Before (on windows) the \r would corrupt the output and make them very hard to understand (as the error message would be drawn over the code line, but part of the code line would peek out from behind it).
2022-05-23 20:27:17 -07:00
Pokechu22 db3d457e5f DSPDisassembler: Remove redundant definition of CW
CW is used as a fallback to write a full instruction as hex, but we already declare it in DSPTables.h for the assembler.
2022-05-23 19:36:47 -07:00
Pokechu22 b06d38389b DSP: Remove some magic numbers for register IDs 2022-05-23 19:36:47 -07:00
Pokechu22 8b52c7315b DSP: Fix assembling x8/x9/xA/xB conditions
The assembler upper-cases the mnemonic internally, so it never would match the lower-case x.
2022-05-23 19:36:47 -07:00
Pokechu22 e7f6e19c61 DSPAssembler: Slightly improve readability of AssemblePass
This should result in no behavior differences.
2022-05-23 19:36:47 -07:00