I just hacked an immediate single float presentation for 64-bit SBCL.

CL-USER> (defun foo (x)
         (declare (single-float x))
         (* 20 x))
FOO
CL-USER> (defun bar ()
           (dotimes (i 10000)
             (let ((x 40))
               (dotimes (i 32)
                 (setf x (foo x))))))
BAR

Vanilla 64-bit SBCL:

CL-USER> (time (bar))
Evaluation took:
  0017 seconds of real time
  0012998 seconds of user run time
  0004 seconds of system run time
  0 page faults and
  5,116,048 bytes consed

With immediate single floats:

CL-USER> (time (bar))
Evaluation took:
  -0006 seconds of real time
  -0004999 seconds of user run time
  00 seconds of system run time
  0 page faults and
  0 bytes consed

Please ignore the negative runtimes and concentrate instead on the amount of bytes consed (I think there's a small bug in the new MOVE-FROM-SINGLE that can result in the sign bit flipping to negative randomly). Close enough for a proof of concept.