602 Commits

Author SHA1 Message Date
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
Mihai Parparita
2d90aff408 ppc: Remove unncesessary function declarations
ppc_opcode16 and other functions are only needed in the implementation in
ppcexec.cpp, they don't need to be in the header.

fp_return_double and fp_return_uint64 have no uses (as of 2141a72b873763995b3428353dc7fd9d5bb47abb)
can can thus be removed altogether.

Similarly ppc_fpu_off has no uses (as of bb3f4e596e3f18f9414daa94e3639d2c192e93ec)
and can be removed.
2024-11-28 22:12:16 +01:00
joevt
820da037da ppcmacros: Add missing space. 2024-11-28 07:25:23 -07:00
joevt
00f38133e9 ppcfpopcodes: fnabs fix.
fnabs sets the sign bit regardless of nan status.
2024-11-28 07:25:14 -07:00
joevt
e231dc4dec ppcfpopcodes: fabs fix.
fabs clears the sign bit regardless of nan status.
2024-11-28 07:25:06 -07:00
joevt
549cb2284c Revert "Tweaking conditional branch instructions"
This reverts commit 0835e6f9f474899bce7dd0c901b1119cc51cbfe4.
2024-11-27 08:20:05 -07:00
joevt
d41287c320 ppcfpopcodes: fneg fix.
fneg inverts the sign bit regardless of nan status.
2024-11-27 08:06:31 -07: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
Maxim Poliakovski
04280ecda4 Revert "Fix LR update in bc instructions"
This reverts commit 5a0a7b12e4c539ece5c6b745946bb140684554e7.
2024-11-25 21:56:32 +01:00
dingusdev
5a0a7b12e4 Fix LR update in bc instructions
Only executes when the branch path is taken.
2024-11-20 20:53:59 -07:00
dingusdev
0835e6f9f4 Tweaking conditional branch instructions 2024-11-20 18:23:03 -07:00
Mihai Parparita
f65f9b9845 Add a deterministic execution mode
Adds support for a --deterministic command-line option that makes
repeated runs the same:
- Keyboard and mouse input is ignored
- The sound server does a periodic pull from the DMA channel (so that
  it gets drained), but only does so via a periodic timer (instead of
  being driven by a cubeb callback, which could arrive at different
  times)
- Disk image writes are disabled (reads of a modified area still
  work via an in-memory copy)
- NVRAM writes are disabled
- The current time that ViaCuda initializes the guest OS is always the
  same.

This makes execution exactly the same each time, which should
make debugging of more subtle issues easier.

To validate that the deterministic mode is working, I've added a
periodic log of the current "time" (measured in cycle count), PC
and opcode. When comparing two runs with --log-no-uptime, the generated
log files are identical.
2024-11-09 22:48:06 -08:00
dingusdev
6ca5b738d5 More FPU refactoring
Now down to 520 tests
2024-11-01 21:28:13 -07:00
dingusdev
f660efcd54 Continued FPU fixes 2024-10-30 07:46:44 -07:00
dingusdev
5f826d6a9d More floating point fixes
Down to 752 failing tests
2024-10-27 12:51:16 -07:00
dingusdev
873f8632e4 More floating point fixes
Confirmed to partially fix Mac OS X installation screen errors
2024-10-26 16:16:52 -07:00
dingusdev
af7c22e7b3 Compile fixes, pt. 2 2024-10-17 19:50:15 -07:00
dingusdev
28ec650e4f Compile fixes 2024-10-17 19:41:58 -07:00
dingusdev
329bcc68b1 Floating-point fix-ups
Largely to fix setting flags, but partially to fix the incorrect nan emulation
2024-10-17 08:00:27 -07:00
dingusdev
02c8c8cde0 Fix bench + test compilation (again) 2024-09-30 20:35:33 -07:00
dingusdev
8c42685e26 Slight compile fix 2024-09-24 21:17:48 -07:00
dingusdev
01ceaef8d7 Slightly delaying a race condition 2024-09-24 21:10:10 -07:00
joevt
55d7c8f09d bench1 fix 2 2024-09-24 21:07:51 -07:00
joevt
e14ede2510 bench1: Add benchmark for ppc_exec. 2024-09-24 21:07:35 -07:00
dingusdev
e2ad753f4a More clean-up 2024-09-15 18:31:36 -07:00
dingusdev
2ab23546ea One-line fix-up 2024-09-08 15:22:04 -07:00
dingusdev
9d9e826bb3 More code clean-up 2024-09-08 13:19:07 -07:00
Rairii
8cc67b09c2 ppcmmu: Different expressions. 2024-09-03 06:09:45 -07:00
joevt
bb3e89e3af ppcexceptions: Remove unused label. 2024-09-03 06:09:10 -07:00
joevt
78da2457e8 ppcexec: Simplify next event time calculation. 2024-09-02 19:00:33 -07:00
joevt
7e70432495 ppcexec: Remove unused g_icycles_base. 2024-09-02 18:58:07 -07:00
joevt
f09710a5f7 viacuda: Do shutdown.
Shutdown will enter the debugger or quit depending on the execution mode.
Quit is different from shutdown since it is triggered outside the guest by using the host Quit menu item.
2024-08-31 18:09:12 -07:00
dingusdev
b5850f1cd2 Slight clean-up to ppcexec 2024-08-26 06:48:40 -07:00
Maxim Poliakovski
e1acf5d160 Rename ppc_effective_address to ea. 2024-08-19 21:11:22 +02:00
Mihai Parparita
bdbeb742d4 ppc: remove two unused global variables
Last use of grab_return was removed in f204caa9079aa94d90e1a8ef650b845283c1d46a.
grab_breakpoint was added in 2bd717e2931cba5be3152f92b3cca5e82e446759 but
never used.
2024-08-18 22:46:52 -07:00
Mihai Parparita
e7d8e71297 ppc: make ppc_effective_address into a local
There's no reason for it to be a global, we always set it and use it
in instruction implementations, and we never read it directly.

Perhaps the compiler could optimize this away, but it's better to be
simpler (and also be easier to read).
2024-08-18 22:38:50 -07:00
Mihai Parparita
76824fb602 ppcmmu: skip over mode 1 entries when doing PAT flushes
Mode 1 contains real addressing mode entries, which by definition cannot
be using segment registers. By skipping over them, we can shave off a
couple of seconds from the 10.2 boot time.
2024-07-31 23:08:36 -07:00
Mihai Parparita
31d7b056af ppcopcodes: avoid TLB flushes for noop SR changes
They happen surprisingly often, and flushing the TLB is expensive
because we need to walk over all entries.

Takes booting 10.2 on a Beige G3 from binary start to "Welcome to Macintosh"
from 58s to 38s on my machine.
2024-07-28 13:28:05 -07:00
dingusdev
17cdcc5560 Fixes issue #97 2024-06-30 06:53:44 -07:00
dingusdev
606c9dd9a8 More compiler warning fixes 2024-06-24 19:40:20 -07:00
kth5
742662e4fc Fix missing std::find_if and others with GCC 14.1.1 2024-06-24 23:41:55 +02:00
dingusdev
d3096ebaac Fixing compiler warnings, pt. 1 2024-06-21 08:01:21 -07:00
Mihai Parparita
50018010c7 Add instruction counters to CPU profiler
Keeps track of instructions (including operands) that are executed,
to see if there are any hotspots that could be optimized or fastpaths
that should be added.

Also adds a mode where CPU profiler data is periodically output, to
make it easier to get at these instruction counts during startup.
2024-06-14 19:55:42 +02:00
dingusdev
ce9a1a6d9e A bit more clean-up 2024-05-09 19:09:06 -07:00
dingusdev
a95b06f703 Minor code clean-up 2024-05-08 07:07:32 -07:00
joevt
30afcb6ddc ppcmmu: Allow map dma for last byte of region.
cur_dma_rgn->end is the last byte of a region. It is not the byte after the region. Therefore, subtract 1 from size before doing compare.

Also add more detail to the abort messages.
2024-04-24 06:50:53 -07:00
joevt
ad45ce8499 ppcmmu: Make dummy pages two pages.
In case we need a write to span a page boundary.
2024-04-24 06:49:11 -07:00
joevt
a8023bb41b ppcmmu: Remove last_dma_area.
DMA may happen on CPU and audio threads but update of last_dma_area is not thread safe.
2024-04-21 09:13:42 -07:00
joevt
5022ac89b4 ppcexec: Improve realtime. 2024-04-21 07:16:47 -07:00
joevt
e8ce805f2a poweropcodes: Remove power_setsoov.
None of the POWER opcodes uses it now, plus it is a duplicate of ppc_setsoov (though ppc_setsoov is inline so it would have to be moved to be able to use it in poweropcodes.cpp?
2024-04-10 07:30:06 -07:00