Index: /branches/ia32/lib/ffi-darwinx8632.lisp
===================================================================
--- /branches/ia32/lib/ffi-darwinx8632.lisp	(revision 9404)
+++ /branches/ia32/lib/ffi-darwinx8632.lisp	(revision 9405)
@@ -106,6 +106,5 @@
       (do* ((argvars argvars (cdr argvars))
 	    (argspecs argspecs (cdr argspecs))
-	    (delta 4 4)
-	    (offset -4 (decf offset delta)))
+	    (offset 8 (incf offset 4)))
 	   ((null argvars)
 	    (values (rlets) (lets) (dynamic-extent-names) (inits) rtype nil 4))
@@ -113,5 +112,6 @@
 	       (spec (car argspecs))
 	       (argtype (parse-foreign-type spec))
-	       (bits (require-foreign-type-bits argtype)))
+	       (bits (require-foreign-type-bits argtype))
+	       (double nil))
 	  (if (typep argtype 'foreign-record-type)
 	    (progn
@@ -121,12 +121,11 @@
 			  (ecase (foreign-type-to-representation-type argtype)
 			    (:single-float '%get-single-float)
-			    (:double-float (incf offset 4)
-					   '%get-double-float)
-			    (:signed-doubleword (incf offset 4)
+			    (:double-float (setq double t) '%get-double-float)
+			    (:signed-doubleword (setq double t)
 						'%%get-signed-longlong)
 			    (:signed-fullword '%get-signed-long)
 			    (:signed-halfword '%get-signed-word)
 			    (:signed-byte '%get-signed-byte)
-			    (:unsigned-doubleword (incf offset 4)
+			    (:unsigned-doubleword (setq double t)
 						  '%%get-unsigned-longlong)
 			    (:unsigned-fullword '%get-unsigned-long)
@@ -135,5 +134,6 @@
 			    (:address '%get-ptr))
 			  ,stack-ptr
-			  ,offset)))))))))
+			  ,offset))))
+	  (when double (incf offset 4)))))))
 
 (defun x86-darwin32::generate-callback-return-value (stack-ptr fp-args-ptr result return-type struct-return-arg)
