A lot of lisps end up writing their own assemblers, the lisp model of 80/20ing your own compiler with every compiler step being a different set of s-expressions as sorts of intermediate representations works best holistically. On the old lisp machines even the microcode source would be specific s-expressions that as a final pass would be converted into the actual bit pattern needed by the machine.
This paradigm is well seen in the GOAL (Game Oriented Assembly Lisp) code for Jak & Daxter that could mix relatively standard lisp, MIPS asm, and PS2 custom vector asm all within the same function: https://web.archive.org/web/20070127022728/http://lists.midn...