Hello, it's Ivan.
I'd like to refresh information about my plans in this post. As you probably know, I worked on PPU/SPU recompilers. I'll try to give some detailed explanation for changes I plan to commit.
PPU function chunks. Compile bigger entities - currently, the maximal compiled entity for PPU code is a "basic block". Basic block is a small linear sequence of instruction which typically ends with a jump instruction. What I call "chunk" can contain multiple basic blocks or even the whole leaf function, thus allowing more optimizations to be made between different basic blocks. This concept has already been implemented in SPU LLVM recompiler but hasn't been ported to PPU yet. The principles for forming a chunk is concatenating as many basic blocks as possible while avoiding compiling the same basic block twice. Chunks break with function calls in order to keep host callstack from growing.
PPU executable code coverage. Current model which works in 99% cases relying on combined function detection mechanism which uses data from OPD tables found in PowerPC executables. Some games, however, are mean and do something weird. Since it's impossible to detect all weird cases we need a fallback mechanism which resorts to interpreter (as currently implemented) or JIT compilation (can introduce stutter and is undesirable). I want to try different approach for covering undetected functions and basic blocks at cost of compiling more data at startup. It's unclear how feasible it will be.
PPU memory constant loading. Old planned feature which should enable more optimizations.
PPU recompiler-based interpreters. Currently implemented for SPU (SPU Fast interpreter). I want to do similar thing for PPU interpreters, and likely remove old legacy interpreters. Recompiler-based interpreters will use the same code as recompilers to build interpreter functions at runtime. It has multiple benefits. There may be less code to maintain, easier to add accuracy options. Runtime-built interpreters can use host instruction extensions (AVX, FMA) more easily without breaking compatibility with older processors.
PPU and SPU accuracy options. There is a lot of work to be done there, mostly for floating point accuracy. I want to get rid of legacy interpreters first, to keep things simpler before implementing more advanced features.
Multiprocess support. Required by VSH, and PSP emulator to work.
There are much more things to do, and I cannot cover everything. I also decided to not talk about small fixes.
Thank you for support.