logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

CVS: sbcl/src/compiler/x86 c-call.lisp,1.16,1.17: msg#00191

Subject: CVS: sbcl/src/compiler/x86 c-call.lisp,1.16,1.17
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))



-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01


<Prev in Thread] Current Thread [Next in Thread>