(defun foo(z) (declare (optimize (speed 3)(safety 0)) (type (simple-array single-float (*)) z) (inline aref)) (setf (aref z 0)(+ (aref z 1)(aref z 2))) t ;; can't return a float without putting it in a box... ;; so we return t instead ) This takes 80 bytes, and no "newfloats"... [4] USER(75): (disassemble 'foo) ;; disassembly of # ;; formals: ;; code vector @ #xe6bf0c: 0: save #x-88,%o6 4: sethi %o7,#x203 ; #x80c00, 527360 8: or #x1e7,%o7 12: move.l %o7,-12(%i6) 16: or #x8,%o7 20: move.l %o7,-16(%i6) 24: sethi %o7,#x203 ; #x80c00, 527360 28: or #x2b7,%o7 32: move.l %o7,-40(%i6) 36: or #x8,%o7 40: move.l %o7,-36(%i6) 44: move.s 2(%i0),%f28 48: move.s 6(%i0),%f30 52: ADD.S %f30,%f28,%f30 56: move.s %f30,-2(%i0) 60: move.l -37(%g4),%o0 ; T 64: move.l #x1,%g3 68: move.l %g0,-12(%i6) 72: jmpl 8(%i7),%g0 76: restore %g0,%o0