Commit graph

23 commits

Author SHA1 Message Date
Exzap
972d0ed05d PPCRec: Clean up code and optimize 2025-04-26 00:24:43 +02:00
Exzap
25794f70fa PPCRec: Added dump option for recompiled functions + more fixes 2025-04-26 00:24:42 +02:00
Exzap
b55785a0a0 PPCRec: Support for arbitrary function calls in the IR
Used for MFTBU/MFTBL instruction
2025-04-26 00:22:37 +02:00
Exzap
aa946ae42d PPCRec: Add RA support for instructions with register constraints
Also make interval tracking more fine grained and differentiate between input and output edges of each instruction
2025-04-26 00:22:37 +02:00
Exzap
675c802cc1 PPCRec: Simplify RA code and clean it up a bit 2025-04-26 00:22:37 +02:00
Exzap
f55b842773 PPCRec: Dead code elimination + reintroduce pre-rework optimizations 2025-04-26 00:22:37 +02:00
Exzap
c419bfc451 Fix compile errors due to rebase 2025-04-26 00:22:37 +02:00
Exzap
9dd4f9b9a3 PPCRec: FPRs now use the shared register allocator 2025-04-26 00:22:37 +02:00
Exzap
c786ba0ebb PPCRec: Further work on support for typed registers in RA
Additionally there is no more range limit for virtual RegIDs, making the entire uint16 space available in theory
2025-04-26 00:22:37 +02:00
Exzap
c891abcb74 PPCRec: Partial support for typed registers in RA 2025-04-26 00:22:37 +02:00
Exzap
e9c161c508 PPCRec: Initial support for typed registers 2025-04-26 00:22:37 +02:00
Exzap
86b82be8ef PPCRec: Use agnostic breakpoints 2025-04-26 00:22:36 +02:00
Exzap
948e33f9bf PPCRec: Unify code + misc RA preparation
Whoopsie
2025-04-26 00:22:36 +02:00
Exzap
429413d88e PPCRec: Use IMLReg in more places, unify and simplify var names 2025-04-26 00:22:36 +02:00
Exzap
f305a2ba17 PPCRec: Rework carry bit and generalize carry IML instructions
Carry bit is now resident in a register-allocated GPR instead of being backed directly into IML instructions

All the PowerPC carry ADD* and SUB* instructions as well as SRAW/SRAWI have been reworked to use more generalized IML instructions for handling carry

IML instructions now support two named output registers instead of only one (easily extendable to arbitrary count)
2025-04-26 00:22:36 +02:00
Exzap
a51a8bb7d5 PPCRec: New compare and cond jump instrs, update RA
Storing the condition result in a register instead of imitating PPC CR lets us simplify the backend a lot. Only implemented as PoC for BDZ/BDNZ so far.
2025-04-26 00:22:36 +02:00
Exzap
d420622da7 PPCRec: Make register pool for RA configurable 2025-04-26 00:22:35 +02:00
Exzap
c4fb7b74f8 PPCRec: Make LSWI/STWSI more generic + GPR temporaries storage 2025-04-26 00:22:35 +02:00
Exzap
bb6b18d78f PPCRec: Unify BCCTR and BCLR code
Instead of having fixed macros for BCCTR/BCCTRL/BCLR/BCLRL we now have only one single macro instruction that takes the jump destination as a register parameter.
This also allows us to reuse an already loaded LR register (by something like MTLR) instead of loading it again from memory.

As a necessary requirement for this: The register allocator now has support for read operations in suffix instructions
2025-04-26 00:22:35 +02:00
Exzap
e1e710e3f5 PPCRec: Reworked IML builder to work with basic-blocks
Intermediate commit while I'm still fixing things but I didn't want to pile on too many changes in a single commit.
New:
Reworked PPC->IML converter to first create a graph of basic blocks and then turn those into IML segment(s). This was mainly done to decouple IML design from having PPC specific knowledge like branch target addresses. The previous design also didn't allow to preserve cycle counting properly in all cases since it was based on IML instruction counting.
The new solution supports functions with non-continuous body. A pretty common example for this is when functions end with a trailing B instruction to some other place.

Current limitations:
- BL inlining not implemented
- MFTB not implemented
- BCCTR and BCLR are only partially implemented

Undo vcpkg change
2025-04-26 00:22:35 +02:00
Exzap
0622631868 PPCRec: Move X64 files into subdirectory and rename 2025-04-26 00:22:35 +02:00
Exzap
da08eda506 PPCRec: Emit x86 movd for non-AVX + more restructuring 2025-04-26 00:22:35 +02:00
Exzap
411a83799c PPCRec: Move IML register allocator 2025-04-26 00:22:35 +02:00
Renamed from src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator.cpp (Browse further)