Hi, all.
In parallel with Dan's work on Very High Level Languages in Bordeaux, I
think I have mostly got floating point errors working satisfactorily.
Attached (yes, really, I _will_ remember to attach it) is a patch
(mostly to the runtime) that attempts to get this right. I haven't
tested it much, and not at all on anything other than x86/linux (I shall
set off a powerpc build this afternoon; sparc isn't close enough to sane
that my patch makes any difference -- sparc/sunos was working already,
and the sparc/linux in the patch are whitespace noise). I've left the
alpha stuff open to anyone with an alpha to fix, but I believe that it
should _build_ with my patch (though with unimproved behaviour).
So with all this, my major question mark is over the behaviour of the
*BSDs, and specifically what is needed to (a) get at the floating point
state from an os_context_t, and (b) restore it if necessary.
Cheers,
Christophe
PS: For those who are unaware of the problem, it seems to be a result of
Linux (and possibly other OSes but definitely not SunOS) blanking out
the FPU control word when delivering a signal. If it isn't restored when
we go back into Lisp, then subsequent floating point behaviour will not
necessarily be the same.
PPS: Relevant to this patch are some messages from cmucl-imp that I have
yet to chase up.
--
Jesus College, Cambridge, CB5 8BL +44 1223 510 299
http://www-jcsu.jesus.cam.ac.uk/~csr21/ (defun pling-dollar
(str schar arg) (first (last +))) (make-dispatch-macro-character #\! t)
(set-dispatch-macro-character #\! #\$ #'pling-dollar)