There is a function in SBCL, which restores FP state when SBCL returns from signal handler:<br><br>> void<br>> os_restore_fp_control(os_context_t *context)<br>> {<br>> struct envxmm *ex = (struct envxmm*)(&context->uc_mcontext.mc_fpregs);<br>
> /* reset exception flags and restore control flags on SSE2 FPU */<br>> unsigned int temp = (ex->en_mxcsr) & ~0x3F;<br>> asm ("ldmxcsr %0" : : "m" (temp));<br>> /* same for x87 FPU. */<br>
> asm ("fldcw %0" : : "m" (ex->en_cw));<br>>}<br><br>As you can see, it restores both mxcsr and x87 FPU control word. Do we still need it after this commit?<br><br><a href="http://gitweb.dragonflybsd.org/dragonfly.git/commit/e6e019a801e99ba7888ed009c5c3b3c7b047af1e">http://gitweb.dragonflybsd.org/dragonfly.git/commit/e6e019a801e99ba7888ed009c5c3b3c7b047af1e</a><br>
<br>P.S. It is curious, what my old SBCL build stopped working after I rebuild recent DragonFly. git bisect says that this commit was the cause. But after I rebuild it with clisp it began to work again. It seems that some kind of binary incompatibility has place.<br>