Plaster

common-lisp
CL-USER> (defmacro multiply-add (add mul1 mul2) `(+ ,add (* ,mul1 ,mul2))) MULTIPLY-ADD CL-USER> (disassemble (lambda (a b c) (multiply-add a b c))) ; disassembly for (LAMBDA (A B C)) ; Size: 45 bytes. Origin: #x52DB0922 ; 22: 498B5D60 MOV RBX, [R13+96] ; no-arg-parsing entry point ; thread.binding-stack-pointer ; 26: 48895DF8 MOV [RBP-8], RBX ; 2A: 488B55E8 MOV RDX, [RBP-24] ; 2E: 488B7DE0 MOV RDI, [RBP-32] ; 32: FF1425C0001052 CALL QWORD PTR [#x521000C0] ; GENERIC-* ; 39: 488BFA MOV RDI, RDX ; 3C: 488B55F0 MOV RDX, [RBP-16] ; 40: FF1425B0001052 CALL QWORD PTR [#x521000B0] ; GENERIC-+ ; 47: 488BE5 MOV RSP, RBP ; 4A: F8 CLC ; 4B: 5D POP RBP ; 4C: C3 RET ; 4D: CC0F BREAK 15 ; Invalid argument count trap