From 22f1f5505b304916d79b57d4c8c44e50f78e6eaf Mon Sep 17 00:00:00 2001 From: toy <toy> Date: Fri, 16 May 2003 12:20:58 +0000 Subject: [PATCH] Oops. The 64-bit result should go to the %i registers, not the %o! --- compiler/sparc/c-call.lisp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/compiler/sparc/c-call.lisp b/compiler/sparc/c-call.lisp index 75d3da257..48364e75b 100644 --- a/compiler/sparc/c-call.lisp +++ b/compiler/sparc/c-call.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/c-call.lisp,v 1.19 2003/05/15 12:16:14 toy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/c-call.lisp,v 1.20 2003/05/16 12:20:58 toy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -425,12 +425,14 @@ pointer to the arguments." (inst jal %o7 %l0 (ldb (byte 10 0) addr)) (inst nop)) - ;; Ok, we're back. The value returned is actually stored in the args + ;; Ok, we're back. The value returned is actually + ;; stored in the return area. Need to get that into + ;; the right registers for return. (etypecase return-type (alien::integer-64$ ;; A 64-bit bignum, stored big-endian - (inst ld %o0 %fp (- return-value-size)) - (inst ld %o1 %fp (- (- return-value-size vm:word-bytes)))) + (inst ld %i0 %fp (- return-value-size)) + (inst ld %i1 %fp (- (- return-value-size vm:word-bytes)))) ((or alien::integer$ alien::pointer$ alien::sap$) (inst ld %i0 %fp (- return-value-size))) (alien::single$ -- GitLab