On Wed, 18 Apr 2001 11:54:37 +0800, you wrote:
I have attached full assembly listing of graphics/x11drv/pen.c produced by gcc. I removed -g option to reduce the output size and added -S -fverbose-asm.
Same as the dissassembly that I see here: | fnstcw -2(%edx) Store the CW in a temporary variable. |#NO_APP | movzwl -2(%edx),%eax | andb $243,%ah | orb $4,%ah This manipulates bits 10 and 11, that control the rounding behaviour. | movw %ax,-4(%edx) |#APP | fldcw -4(%edx) Load the CW with adjusted bits 10 and 11. | frndint Rounding the float value to int, which likely causes a lost precision exception. Because it does not, the PE mask must be set. | fldcw -2(%edx) Load original CW. Now the exception happens, which indicates the PE maskbit is cleared. I don't see how that can be. (you should check that the disassembly in winedbg is the same as this code) Moreover I cannot reproduce your failure (using gcc 2.95.4 and gnu as 2.11.90.0.1) If I set the variables to 0 and 0.0, no exception follows. Rein. -- Rein Klazes rklazes(a)xs4all.nl