------- Comment #3 from uros at kss-loka dot si  2006-10-04 06:46 -------

> I'm afraid you're missing my point.
> The problem is that for 64-bit and 32-bit floating-point to integer 
> conversion,
> x86 (32bit) target uses fistp* whereas x86_64 (64-bit) target uses cvt* WHEN
> -mfpmath=387.
> This defeats the purpose of the option -mfpmath=387 which is supposed to make
> floating-point computations to use 387, instead of SSE2.

If SSE is available, then SSE cvt* is used in order to avoid long control-word
setting sequences. This is cheaper even if we have to move value from x87
register, as cvt* can handle mem->reg transformations.

If you really need fistp* sequence, you can try with -mno-sse2 (you can't just
disable sse on x86_64 target) or perhaps use -msse3, where fisttp insn will be
generated.

Saying that, I wonder where excess precision effects come into play here. We
are talking about truncate-to-integer instruction, so I would really like to
see an example of this effect.
> 


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29337

Reply via email to