Index: /branches/ia32/compiler/X86/X8632/x8632-arch.lisp
===================================================================
--- /branches/ia32/compiler/X86/X8632/x8632-arch.lisp	(revision 7877)
+++ /branches/ia32/compiler/X86/X8632/x8632-arch.lisp	(revision 7878)
@@ -675,4 +675,21 @@
   (let* ((pos (position name x86::*x86-nilreg-relative-symbols* :test #'eq)))
     (if pos (* (1- pos) symbol.size))))
+
+(defmacro with-stack-short-floats (specs &body body)
+  (ccl::collect ((binds)
+                 (inits)
+                 (names))
+                (dolist (spec specs)
+                  (let ((name (first spec)))
+                    (binds `(,name (ccl::%make-sfloat)))
+                    (names name)
+                    (let ((init (second spec)))
+                      (when init
+                        (inits `(ccl::%short-float ,init ,name))))))
+                `(let* ,(binds)
+                  (declare (dynamic-extent ,@(names))
+                           (short-float ,@(names)))
+                  ,@(inits)
+                  ,@body)))
 
 (defparameter *x8632-target-uvector-subtags*
