From: Christophe R. <cr...@us...> - 2002-07-16 13:48:11
|
Update of /cvsroot/sbcl/sbcl/src/compiler/generic In directory usw-pr-cvs1:/tmp/cvs-serv22540/src/compiler/generic Modified Files: genesis.lisp Log Message: 0.7.5.13: Linux floating point fixes ... define an os_restore_fp_control() function in the runtime, and use it in signal handlers (protected by #ifdef LISP_FEATURE_LINUX in non-Linux-specific code) ... write useful definitions of it ... for x86 (probably correct) ... for ppc (works, but could do with fixing) ... delete a SET_FPU_CONTROL_WORD from initialization ... dunno why it was there; no observable symptoms. Shout if some early x86/Linux system no longer works. ... export to C (via sbcl.h) Lisp's view of the floating point control word ... delete some floating-point-related stale symbols and comments from package-data-list.lisp-expr Now floating point stuff mostly works (I think) on x86/Linux and ppc/Linux, as well as sparc/SunOS. Other platforms still probably don't work. Index: genesis.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/genesis.lisp,v retrieving revision 1.66 retrieving revision 1.67 diff -u -d -r1.66 -r1.67 --- genesis.lisp 15 Jun 2002 03:05:18 -0000 1.66 +++ genesis.lisp 16 Jul 2002 13:48:05 -0000 1.67 @@ -2747,6 +2747,14 @@ ;; pseudo-atomic-trap-number or pseudo-atomic-magic-constant ;; [possibly applicable to other platforms]) + (dolist (symbol '(sb!vm::float-traps-byte sb!vm::float-exceptions-byte sb!vm::float-sticky-bits sb!vm::float-rounding-mode)) + (format t "#define ~A_POSITION ~A /* ~:*0x~X */~%" + (substitute #\_ #\- (symbol-name symbol)) + (sb!xc:byte-position (symbol-value symbol))) + (format t "#define ~A_MASK 0x~X /* ~:*~A */~%" + (substitute #\_ #\- (symbol-name symbol)) + (sb!xc:mask-field (symbol-value symbol) -1))) + ;; writing primitive object layouts (let ((structs (sort (copy-list sb!vm:*primitive-objects*) #'string< :key (lambda (obj) |