0.8.11.5:
authorChristophe Rhodes <csr21@cam.ac.uk>
Thu, 10 Jun 2004 13:33:18 +0000 (13:33 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Thu, 10 Jun 2004 13:33:18 +0000 (13:33 +0000)
Storing a floating point control word on the stack, then calling
out to C, is not guaranteed to behave when the called function
is likely to be messing around with the stack (purify() in
particular).
... reload the floating point control word before setting the
precision.  This differs slightly in semantics from
before: changes caused by the C code will be propagated
to Lisp

src/compiler/x86/c-call.lisp
version.lisp-expr

index cb7f2da..e3fd9d0 100644 (file)
       (let ((delta (logandc2 (+ amount 3) 3)))
        (inst add esp-tn delta)))
     (when (policy node (= sb!c::float-accuracy 3))
+      (inst fnstcw (make-ea :word :base esp-tn))
+      (inst wait)
       (inst and (make-ea :word :base esp-tn) #xfeff)
       (inst fldcw (make-ea :word :base esp-tn))
       (inst wait)
index 3a188a4..dec6ac4 100644 (file)
@@ -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.11.4"
+"0.8.11.5"