(declaim (inline u+)) (defun u+ (x y) (declare (type (unsigned-byte 32) x y)) (ldb (byte 32 0) (+ x y))) (declaim (inline u*)) (defun u* (x y) (declare (type (unsigned-byte 32) x y)) (ldb (byte 32 0) (* x y))) (defun f (x y) (declare (type (unsigned-byte 32) x y)) (u+ x (u* y 2))) CL-USER> (disassemble #'f) ; disassembly for F ; Size: 56 bytes. Origin: #x1003A1935D ; 5D: 498B4D60 MOV RCX, [R13+96] ; no-arg-parsing entry point ; thread.binding-stack-pointer ; 61: 48894DF8 MOV [RBP-8], RCX ; 65: 488BF7 MOV RSI, RDI ; 68: 488D1C36 LEA RBX, [RSI+RSI] ; 6C: 48231D55FFFFFF AND RBX, [RIP-171] ; [#x1003A192C8] = #x1FFFFFFFE ; 73: 4D8BCA MOV R9, R10 ; 76: 4C8BC3 MOV R8, RBX ; 79: 49837D6800 CMP QWORD PTR [R13+104], 0 ; thread.stepping ; 7E: 7402 JEQ L0 ; 80: CC0E BREAK 14 ; single-step trap (before) ; 82: L0: 4B8D1401 LEA RDX, [R9+R8] ; 86: 4823153BFFFFFF AND RDX, [RIP-197] ; [#x1003A192C8] = #x1FFFFFFFE ; 8D: 488BE5 MOV RSP, RBP ; 90: F8 CLC ; 91: 5D POP RBP ; 92: C3 RET ; 93: CC0F BREAK 15 ; Invalid argument count trap