From: Christophe R. <cr...@us...> - 2003-09-15 15:09:06
|
Update of /cvsroot/sbcl/sbcl/src/runtime In directory sc8-pr-cvs1:/tmp/cvs-serv17810/src/runtime Modified Files: alpha-linux-os.c Log Message: 0.8.3.68: Kludge around an apparent problem in hardware/kernel/somewhere to do with denormalized float traps... ... explicitly clear that bit in os_restore_fp_control(); ... document in BUGS; ... handle ARITHMETIC-ERROR, not just DIVISION-BY-ZERO, so that ports without fp words in sigcontext pass the test Index: alpha-linux-os.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/alpha-linux-os.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- alpha-linux-os.c 15 Sep 2003 13:45:17 -0000 1.9 +++ alpha-linux-os.c 15 Sep 2003 15:09:03 -0000 1.10 @@ -88,9 +88,17 @@ os_restore_fp_control(os_context_t *context) { /* FIXME: 0x7E0000 is defined as something useful in constants.h, - but without the L, which would probably lead to 32/64-bit + but without the UL, which would probably lead to 32/64-bit errors if we simply used it here. Ugh. CSR, 2003-09-15 */ - arch_set_fp_control(os_context_fp_control(context) & ~(0x7e0000L)); + arch_set_fp_control(os_context_fp_control(context) & ~(0x7e0000UL) & + /* KLUDGE: for some reason that I don't + understand, by the time we get here the + "enable denormalized traps" bit in the fp + control word is set. Since we really don't + want to tra every time someone types + LEAST-POSITIVE-SINGLE-FLOAT into the repl, + mask that bit out. -- CSR, 2003-09-15 */ + ~(0x1UL<<6)); } void os_flush_icache(os_vm_address_t address, os_vm_size_t length) |