Closed MonsterDruide1 closed 1 month ago
This would be great to add, but the current limiting factor is finding (or creating) a complete enough aarch64 disassembler in Rust. Existing options:
Hopefully this changes in the near future, or someone works on finishing SIMD support for one of the above. I guess another question is: Would it still be useful to add ARM64 without SIMD?
For automatically diffing the resulting decompiled functions, we're currently using a mix of bad64
and capstone
, feel free to look into that:
https://github.com/open-ead/nx-decomp-tools/blob/master/viking/Cargo.toml
I assume that SIMD would mean NEON on the Switch. It is used in some very specific functions, but not too heavily across entire games. The only occurence I came over that were not hidden deep within some math-heavy functions were matrix-multiplications, apart from those it always uses the standard floating point registers/functions. So, it would still be useful having the architecture supported without SIMD, although we couldn't use objdiff
as full replacement for asm-differ
then.
Here's something else I ran across today: https://github.com/emproof-com/nyxstone
This seems to provide rust bindings for disassembling any architecture supported by LLVM, which should also include AARCH64.
I realized yaxpeax-arm
supports ARMv8 SIMD, so I implemented an experimental backend in 424434edd6564a6c2afaea051d8f2c43ae755d2a. This required a lot of custom code, and not a lot of relocations are handled yet, so please provide feedback if you try it!
Thanks for taking care of this! It seems like I need more help setting up the project for me though, is there something like a Discord server for this to allow easier communication?
Well, not much else to say about it ... I'd want to try using this on a decomp project for Nintendo Switch, which uses AARCH64.
I'm currently happy with using
asm-differ
, so feel free to sort this to being a low-priority issue.