From: Christophe R. <cr...@us...> - 2003-07-31 15:30:49
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86 In directory sc8-pr-cvs1:/tmp/cvs-serv31035/src/compiler/x86 Modified Files: c-call.lisp Log Message: 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 :-) Index: c-call.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/c-call.lisp,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- c-call.lisp 30 Jul 2003 15:56:30 -0000 1.16 +++ c-call.lisp 31 Jul 2003 14:42:07 -0000 1.17 @@ -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)) |