Commit graph

24 commits

Author SHA1 Message Date
Exzap
dad18c4a37 PPCRec: Optimizations 2025-04-26 00:27:15 +02:00
Exzap
f11cfa0dc5 PPCRec: Rework RLWIMI 2025-04-26 00:27:15 +02:00
Exzap
05e3cfe5c9 PPCRec: Code cleanup 2025-04-26 00:27:14 +02:00
Exzap
2fe2799d96 PPCRec: Clean up some outdated code 2025-04-26 00:24:43 +02:00
Exzap
f94f99546d PPCRec: Fixes and optimizations + rework FRES/FRSQRTE 2025-04-26 00:24:43 +02:00
Exzap
89f8f9bd2a PPCRec: Implement MCRF, rework DCBZ 2025-04-26 00:24:43 +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
f55b842773 PPCRec: Dead code elimination + reintroduce pre-rework optimizations 2025-04-26 00:22:37 +02:00
Exzap
1cc458c543 PPCRec: Implement MFCR and MTCRF 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
e9c161c508 PPCRec: Initial support for typed registers 2025-04-26 00:22:37 +02:00
Exzap
1f6f74d6ac PPCRec: Simplify PPC and IML logic instructions
Also implement PPC NAND instruction
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
81fd7c8d1f PPCRec: Refactoring and clean up 2025-04-26 00:22:36 +02:00
Exzap
ce9a48b987 PPCRec: Rework CR bit handling
CR bits are now resident in registers instead of being baked into the instruction definitions. Same for XER SO, and LWARX reservation EA and value.

Reworked LWARX/STWCX, CRxx ops, compare and branch instructions. As well as RC bit handling. Not all CR-related instructions are reimplemented yet.

Introduced atomic_cmp_store operation to allow implementing STWCX in architecture agnostic IML

Removed legacy CR-based compare and jump operations
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
c5ef9a5a98 PPCRec: Streamline instructions + unify code for CR updates 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
d724dded8e PPCRec: Clean up unused flags 2025-04-26 00:22:35 +02:00
Exzap
0f1d7532a1 PPCRec: Remove now unused PPC_ENTER and jumpMarkAddress 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
231b5c5dc3 PPCRec: Move IML optimizer file 2025-04-26 00:22:35 +02:00
Exzap
14d82ae4a5 PPCRec: Move analyzer file + move some funcs to IMLInstruction 2025-04-26 00:22:35 +02:00
Exzap
4abd5127c0 PPCRec: Move Segment and Instruction struct into separate files 2025-04-26 00:22:34 +02:00