Hello Stas, > Which means that the comment in > do_vm86.c about fnsave is wrong, and the > code that restores the dosemu FPU state > should likely to be returned. You can, > for example, memset the vm86_fpu_state > to 0 in fpu_reset() and see the SIGFPE > coming from all around the sound code > (no other code use FPU in dosemu). I've been looking at this. The SIGFPEs don't happen for i386 (default FP), only for x86-64 or when explicitly compiling with SSE floating point (using gcc -msse2 -mfpmath=sse). The "fnsave" instruction really re-initializes the FPU (it's documented), but with SSE one needs to use "fxsave" and "fninit", and that still doesn't reinitialize the SIMD part. Adding an "ldmxcsr" instruction solved that problem. I still think that a simple FPU environment reset is sufficient, no need to restore all the registers, because the DOSEMU FPU code is not interrupted by DOS code. The fpu save/restore operations aren't cheap, so perhaps one could only use them around the sound code instead of for every vm86 call. Though that could be messy. > Also, I found no docs about this FPU > init/reset stuff, so everything in this > patch is just a wild guesses based on > a look into a bochs code. > Also, there is a need to add the handling > for exception 0x13 (SIMD FPE), which is > what the SIGFPE is about today. I mean, > at least print_exception_info() should > write something meaningfull about SIGFPE > instead of "Unknown exception". I've done that now. Bart -- To unsubscribe from this list: send the line "unsubscribe linux-msdos" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html