From 40aa4eb7162dde58f42dd7615f0b220ddba71c10 Mon Sep 17 00:00:00 2001 From: Christophe Rhodes Date: Thu, 31 Jul 2003 14:42:06 +0000 Subject: [PATCH] 0.8.2.11: Oops. Fix the other half of the FreeBSD issue ... adjust CALL-OUT vop sufficiently that the system doesn't tie itself in knots when doing calls into C (from dtc via cmucl circa 1999 :-) --- src/compiler/x86/c-call.lisp | 32 ++++++++++++-------------------- version.lisp-expr | 2 +- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/src/compiler/x86/c-call.lisp b/src/compiler/x86/c-call.lisp index b85d5b9..d626ede 100644 --- a/src/compiler/x86/c-call.lisp +++ b/src/compiler/x86/c-call.lisp @@ -199,41 +199,33 @@ (:args (function :scs (sap-reg)) (args :more t)) (:results (results :more t)) - ;; eax is already wired - (:temporary (:sc unsigned-reg :offset ecx-offset) ecx) - (:temporary (:sc unsigned-reg :offset edx-offset) edx) + (:temporary (:sc unsigned-reg :offset eax-offset + :from :eval :to :result) eax) + (:temporary (:sc unsigned-reg :offset ecx-offset + :from :eval :to :result) ecx) + (:temporary (:sc unsigned-reg :offset edx-offset + :from :eval :to :result) edx) (:node-var node) (:vop-var vop) (:save-p t) (:ignore args ecx edx) (:generator 0 (cond ((policy node (> space speed)) - (move eax-tn function) + (move eax function) (inst call (make-fixup (extern-alien-name "call_into_c") :foreign))) (t ;; Setup the NPX for C; all the FP registers need to be ;; empty; pop them all. - (inst fstp fr0-tn) - (inst fstp fr0-tn) - (inst fstp fr0-tn) - (inst fstp fr0-tn) - (inst fstp fr0-tn) - (inst fstp fr0-tn) - (inst fstp fr0-tn) - (inst fstp fr0-tn) + (dotimes (i 8) + (inst fstp fr0-tn)) (inst call function) ;; To give the debugger a clue. XX not really internal-error? (note-this-location vop :internal-error) - ;; Restore the NPX for lisp. - (inst fldz) ; insure no regs are empty - (inst fldz) - (inst fldz) - (inst fldz) - (inst fldz) - (inst fldz) - (inst fldz) + ;; Restore the NPX for lisp; ensure no regs are empty + (dotimes (i 7) + (inst fldz)) (if (and results (location= (tn-ref-tn results) fr0-tn)) diff --git a/version.lisp-expr b/version.lisp-expr index 4c21280..cc2f9e3 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.2.10" +"0.8.2.11" -- 1.7.10.4