X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fppc%2Fc-call.lisp;h=340600ae1812a3f92ecf220e4e01ed56a3c3899a;hb=f6b2e375747a54a1bfa34ead9f9af2d4e8b5aa38;hp=46c76a12560e68ff0d5ce05ac3763cde386c2534;hpb=4e6200853a661da5e73d0843a4afca9077a06fa8;p=sbcl.git diff --git a/src/compiler/ppc/c-call.lisp b/src/compiler/ppc/c-call.lisp index 46c76a1..340600a 100644 --- a/src/compiler/ppc/c-call.lisp +++ b/src/compiler/ppc/c-call.lisp @@ -63,7 +63,7 @@ ;;; a double. ;;; ;;; gcc does: -;;; +;;; ;;; Excess floats stored on the stack are stored as floats. ;;; ;;; We follow gcc. @@ -195,7 +195,7 @@ (values 'unsigned-byte-32 'unsigned-reg)) (my-make-wired-tn ptype reg-sc (result-reg-offset num-results))))) -(!def-vm-support-routine make-call-out-tns (type) +(defun make-call-out-tns (type) (declare (type alien-fun-type type)) (let ((arg-state (make-arg-state))) (collect ((arg-tns)) @@ -265,12 +265,6 @@ (new-arg-types (parse-alien-type '(unsigned 32) (sb!kernel:make-null-lexenv)))) - ((alien-integer-type-p type) - (if (< gprs 8) - (incf gprs 1) - (incf stack 1)) - (new-args arg) - (new-arg-types type)) ((alien-single-float-type-p type) (if (< fprs 8) (incf fprs) @@ -285,7 +279,10 @@ (incf stack 2))) ; the stack. (new-args arg) (new-arg-types type)) - (t + (t ;; integer or SAP + (if (< gprs 8) + (incf gprs 1) + (incf stack 1)) (new-args arg) (new-arg-types type))))) (cond ((and (alien-integer-type-p result-type) @@ -428,6 +425,7 @@ (define-vop (alloc-number-stack-space) (:info amount) (:results (result :scs (sap-reg any-reg))) + (:result-types system-area-pointer) (:temporary (:scs (unsigned-reg) :to (:result 0)) temp) (:generator 0 (unless (zerop amount) @@ -662,7 +660,11 @@ (inst stwu stack-pointer stack-pointer (- frame-size)) ;; And make the call. - (load-address-into r0 (foreign-symbol-address "funcall3")) + (load-address-into + r0 + (foreign-symbol-address + #!-sb-safepoint "funcall3" + #!+sb-safepoint "callback_wrapper_trampoline")) (inst mtlr r0) (inst blrl)