Hi everyone,
A small but good status update on psx4gp2x. I've actually been working on the psx4all ARM Dynarec (psx4gp2x) for some time now, off and on. After bothering Exophase enough, he is starting to come to his senses and help me out with psx4all.
Thanks to Exophase, a night full of coding (and lots of work for me to do in the day!) helped us produce a disassembler for the psx4all ARM Dynarec which produces not only the MIPS disassembly from the PSX side of things, but also the dynarec'd ARM disassembly for the corresponding MIPS code! This is going to be extremely helpful for improving the dynarec performance overall!
As you may notice from the above code (besides a bug or two in the output), the dynarec is saving and restoring two registers almost constantly on and off the stack! This can be easily changed for the better! Also see how much that small block of MIPS code is taking so many ARM instructions? This is due to many things, but a large chunk of it can be reduced by changing the way I handle the differences between direct/indirect branches, as well as IRQ checks. I'm outputting too much code for checking IRQs and since its done at the end of each block, with such small blocks, it's way too much overhead.
Then Exophase gave me a good idea to change the way IO is handled. Since I learned about PSX emulation mostly from FPSE/PCSX, they used a plugin model. My model, although it doesnt use plugins, is similar, and doesn't benefit from performance increases that can be had by using a more unified approach for moving IO data.
The short of things: Exophase has been a HUGE help already! Expect good things from psx4all to come. This work helps not only psx4gp2x, but other ARM based ports of psx4all as well.
A small but good status update on psx4gp2x. I've actually been working on the psx4all ARM Dynarec (psx4gp2x) for some time now, off and on. After bothering Exophase enough, he is starting to come to his senses and help me out with psx4all.
Thanks to Exophase, a night full of coding (and lots of work for me to do in the day!) helped us produce a disassembler for the psx4all ARM Dynarec which produces not only the MIPS disassembly from the PSX side of things, but also the dynarec'd ARM disassembly for the corresponding MIPS code! This is going to be extremely helpful for improving the dynarec performance overall!
As you may notice from the above code (besides a bug or two in the output), the dynarec is saving and restoring two registers almost constantly on and off the stack! This can be easily changed for the better! Also see how much that small block of MIPS code is taking so many ARM instructions? This is due to many things, but a large chunk of it can be reduced by changing the way I handle the differences between direct/indirect branches, as well as IRQ checks. I'm outputting too much code for checking IRQs and since its done at the end of each block, with such small blocks, it's way too much overhead.
Then Exophase gave me a good idea to change the way IO is handled. Since I learned about PSX emulation mostly from FPSE/PCSX, they used a plugin model. My model, although it doesnt use plugins, is similar, and doesn't benefit from performance increases that can be had by using a more unified approach for moving IO data.
The short of things: Exophase has been a HUGE help already! Expect good things from psx4all to come. This work helps not only psx4gp2x, but other ARM based ports of psx4all as well.