mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-10 01:00:18 +02:00
A bunch of the AES operations take a zero register upfront and we currently materialize it for each instruction. Considering that most AES operations are used back to back, we can eliminate these materializations by caching it between instructions. Additionally removes a move in the optimal case when destination matches the state register, which is exactly what the SSE operation ends up doing. AESKeyGenAssist has an edge case that if the destination RA overlaps the zero register then we still need to eat a move, hopefully doesn't happen too frequently in practice. This is also the lesser used instruction so it isn't a big deal. RA constraints could solve that still.