I'm working on a dynamic ARM assembler for Rust. dynasm is too restrictive: it uses static register names, and iced-x86 is x86/x64 only.
It allows to define
add x1, x2, w3, sxth 2
add x2, x3, x4, lsr 8
as
...
add(X1, X2, X3).extend(ExtendMode::SXTH, 2), // yes, it is X3, not W3.
add(X2, X3, X4).shift(ShiftMode::LSR, 8),
...
Still haven't published the repo as I can't pick a cool name...