Commit Graph
32 Commits
Author SHA1 Message Date
dingusdevandjoevt e1a0adde8b Fixing compilation
Co-Authored-By: joevt <950609+joevt@users.noreply.github.com>
2024-12-21 14:06:40 -07:00
Mihai Parparita b759f25d87 ppc: Use a unified opcode lookup table
Instead of a primary opcode lookup table with 64 entries and a few
smaller tables with 4-2048 entries, use a single 64 * 2048 (128K)
entry table to dispatch opcodes.

Helps with performance, since we avoid the function call overhead for
some frequently-used instructions (e.g. branch, integer, floating point).
Saves ~2 seconds from the time to Welcome to Macintosh (same measurement
methodology as #125)

Secondarily also makes opcode registration/decoding a bit more uniform,
and scannable, since it's now all in initialize_ppc_opcode_table.
2024-11-30 20:37:26 +01:00
Mihai Parparita 564c43c907 Remove ppc_cur_instruction global variable
Replace it wth an explicit opcode parameter that is passed around. That
is both slightly easier to reason about (to trace where it comes from)
and slightly faster, since it can be read from a register.

On my machine takes booting to "Welcome to Macintosh" being output in
a verbose boot of Mac OS X 10.2.8 from 31.8s to 30.6s (average of 5
runs, measured using deterministic mode and looking at when execution
reaches PC 0x90004a88).
2024-11-28 23:41:38 +01:00
joevt b38b1731a0 ppcopcodes: Don't change MQ if not MPC601.
MQ should not be writable if not doing MPC601.
Fix is_601 and include_601.
This fixes risu tests.
2024-11-27 07:59:19 -07:00
dingusdev 02c8c8cde0 Fix bench + test compilation (again) 2024-09-30 20:35:33 -07:00
joevt 4f45d7de35 cpu: Add cpu options to ppc_cpu_init.
The first option is a flag that enables MPC601 (POWER) instructions for CPUs that are not MPC601.
This can be useful for the following reasons:
1) To produce results similar to classic Mac OS which emulates MPC601 instructions on CPUs that don't implement MPC601 instructions. This option is used to compare the risu traces produced in Mac OS 9 on a G3 or G4 with DPPC.
2) May increase performance in apps that use POWER instructions on emulated machines with CPUs that are not MPC601. It is not known if any such apps exist but there could be since Apple included MPC601 emulation in classic Mac OS.
2024-04-10 06:43:18 -07:00
joevt 566706dd62 ppctests: Fix compiler warnings. 2024-03-28 07:17:38 -07:00
joevt 267a9448ea ppctest: Fix floating-point tests.
genppctests.py
- Fix incorrect bits for some floating-point instruction opcodes or fields.
- Use separate register for FP results like DolphinPPCTests does.
- Remove extra FMULS.
- Use a regular expression for parsing ppcfloattest.txt. Don't parse the values, just put them in the output ppcloattests.csv file.

ppcfloattest.txt
- Clear crf0 and crf7 because we only care about crf1.
- Use values from DolphinPPCTests (0.0, 0.5, 1.0, 3.5, DBL_MAX, FLT_MAX, 2.4679999352, 4.9359998704, etc.). Some of the values were rounded. This will un-round them. Specify snan or qnan instead of nan.
- One of the FCMPO and FCMPU tests had qnan instead of snan input values.

ppcfloattest.csv
- Regenerate this file using the updated genppctests.py which uses the updated ppcfloattest.txt.

ppctests
- Update double_from_string to be able to parse the new values (snan, qnan, FLT_MAX, DBL_MAX).
2024-02-10 14:56:21 -07:00
dingusdev a5ce6a806f CPU clean-up 2024-01-07 17:04:51 -07:00
dingusdev 924b80574a Further fix from last commit 2024-01-05 15:53:56 -07:00
dingusdev f3a759c80d CPU code clean-up 2024-01-05 15:11:37 -07:00
Maxim Poliakovski a1d8f8aa4e ppctests: fix test cases with SNaN/QNaN operands. 2023-11-30 17:44:46 +01:00
Maxim Poliakovski 6abb07e61b Add rounding control for the host FPU. 2023-11-30 12:06:44 +01:00
dingusdev 87b8a8e0a0 Correcting multiply tests 2023-11-28 19:02:48 -07:00
dingusdev c2a63bab09 FP Opcode Test Fixes 2021-10-30 16:43:13 -07:00
Maxim Poliakovski c0cd6eb38f Add missing licence headers, update license date. 2021-10-23 21:00:31 +02:00
dingusdev fb277945c2 Floating point test fixes 2021-10-19 07:16:15 -07:00
dingusdev 3c7fc58ac0 Small test case fixes for floating points 2021-10-16 22:33:56 -07:00
dingusdev 7d7a4b453f Partial test file reading fix 2021-10-15 06:28:11 -07:00
dingusdev 7ce94a6ab5 Further fixing the test code 2021-10-14 21:05:58 -07:00
dingusdev 9251745d6f Fixed floating-point test generation 2021-10-14 07:19:04 -07:00
dingusdev 07a4166eef Preliminary work on floating point tests 2021-06-25 21:20:53 -07:00
dingusdev dc58386237 Started re-refactoring opcode retrieval 2020-10-17 14:30:37 -07:00
Waqar Ahmed 0ab9380be3 clang-format everything 2020-05-12 23:55:45 +05:00
dingusdev e31f7873f5 Fixed redunant variable names for PPC emulation. 2020-03-04 21:29:04 -07:00
dingusdev e9a616ffeb Started working on incorporating loguru 2020-02-23 20:59:10 -07:00
Maxim Poliakovski 24652de392 Integrate disassembler tests. 2020-02-12 22:58:24 +01:00
Maxim Poliakovski 36fc7a9aaa Add XER[OV] clear tests. 2020-02-10 19:34:03 +01:00
Maxim Poliakovski d25ce6a244 Add tests for shifts and fix their emulation. 2020-02-03 22:59:47 +01:00
Maxim Poliakovski a27d7436ad Fix ppctests.cpp and add more instructions. 2020-01-31 21:53:02 +01:00
Maxim Poliakovski b007dbc743 More PPC instruction tests. 2020-01-31 18:04:50 +01:00
Maxim Poliakovski 7d7b0b7de3 Initial PPC emulation tests. 2020-01-31 04:10:53 +01:00