From: Christophe Rhodes Date: Thu, 10 Jun 2004 13:33:18 +0000 (+0000) Subject: 0.8.11.5: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=9585846595949e36ffc0090ec42444987f1f6c20;p=sbcl.git 0.8.11.5: 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 --- diff --git a/src/compiler/x86/c-call.lisp b/src/compiler/x86/c-call.lisp index cb7f2da..e3fd9d0 100644 --- a/src/compiler/x86/c-call.lisp +++ b/src/compiler/x86/c-call.lisp @@ -260,6 +260,8 @@ (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) diff --git a/version.lisp-expr b/version.lisp-expr index 3a188a4..dec6ac4 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.11.4" +"0.8.11.5"