Index: /trunk/ccl/level-0/PPC/ppc-def.lisp
===================================================================
--- /trunk/ccl/level-0/PPC/ppc-def.lisp	(revision 5853)
+++ /trunk/ccl/level-0/PPC/ppc-def.lisp	(revision 5854)
@@ -1006,7 +1006,9 @@
 
   ;;; This is just here so that we can jump to a subprim from lisp.
-    (defppclapfunction %do-ff-call ((monitor arg_y) (entry arg_z))
-      (cmpdi monitor nil)
-      (beqa .SPpoweropen-ffcall)
+    (defppclapfunction %do-ff-call ((monitor arg_x) (regbuf arg_y) (entry arg_z))
+      (cmpdi cr0 regbuf nil)
+      (cmpdi cr1 monitor nil)
+      (bnea cr0 .SPpoweropen-ffcall-return-registers)
+      (beqa cr1 .SPpoweropen-ffcall)
       (ba .SPpoweropen-ffcallx))
   
@@ -1015,5 +1017,6 @@
       (let* ((len (length specs-and-vals))
              (total-words 0)
-             (monitor (eq (car specs-and-vals) :monitor-exception-ports)))
+             (monitor (eq (car specs-and-vals) :monitor-exception-ports))
+             (registers nil))
         (declare (fixnum len total-words))
         (when monitor
@@ -1036,4 +1039,5 @@
                (declare (fixnum i))
                (case spec
+                 (:registers nil)
                  ((:address :unsigned-doubleword :signed-doubleword
                             :single-float :double-float
@@ -1060,4 +1064,5 @@
                          (declare (fixnum i))
                          (case spec
+                           (:registers (setq registers val))
                            (:address (setf (%get-ptr argptr offset) val)
                                      (incf offset 8))
@@ -1090,5 +1095,5 @@
                                 (incf offset 8))))))
                        (%load-fp-arg-regs n-fp-args fp-args)
-                       (%do-ff-call monitor entry)
+                       (%do-ff-call monitor registers entry)
                        (values (%%ff-result result-spec)))))))))))
 
