I have now thoroughly tested the aarch64 backend and am unaware of any bugs (there are some potential ones such as if you try to compile a Mu function that has a branch to block too far away). It has passed all the rust tests and the python ones (including the RPython ones). It should now be as complete and working as the x86-64 backend, so I believe it is ready to merge into the master branch.
I have also made some modifications to the x86-64 backend (specifically in the way it handles callee saved registers). In addition there are some minor changes made to the non-architecture dependent parts:
- I have modified the register allocator in the way that it handles callee saved registers.
- I have modified how some things are formatted (like instructions and Value's) to make them more readable (feel free to discard these changes..)
- I have modified the tests where I noticed they were using invalid Mu code (like calling a function with a parameter of the wrong type)
- I have made some tests architecture dependent (so that they will test what they are trying to test on aarch64, which has more registers then x86-64)
- I have replaced the FREM entry point with FREM32 and FREM64 so that 32-bit and 64-bit FREM's can be implemented
- I have added some additional utility functions and constants for CmpOp and MuType