[linux-audio-dev] Traps in floating point code
Tim Goetze
tim at quitte.de
Thu Jul 1 12:41:13 UTC 2004
[Ruben van Royen]
>please note that SSE2 has support for 64bit floats (doubles) and contains an
>instruction that truncates to int, irregardless of controlwords. A new enough
>gcc with (-march=pentium4 or -msse2) and -mfpmath=sse will use sse instead of
>the old fp unit. This has more advantages, since sse math uses normal
>registers instead of the stack in the old fp unit.
>
>The disadvantage is of course that it does not run on older processors. I'm
>also not sure what level of sse athlon currently supports. The last time I
>looked, it only supported sse. This is also good, but it lacks support for
>double precision floatingpoint.
afaik, the athlon XP here only has SSE (not ~2), but the instruction
set includes this (quote taken from the NASM documentation, section
B.4):
CVTTSD2SI reg32,xmm/mem32 ; F3 0F 2C /r [KATMAI,SSE]
CVTTSS2SI converts a single-precision FP value in the source operand
to a signed doubleword in the destination operand. If the result is
inexact, it is truncated (rounded toward zero).
The destination operand is a general purpose register. The source can
be either an XMM register or a 32-bit memory location. If the source
is a register, the input value is in the low doubleword.
-
the operand requirements are quite different from "fistpl" so
replacing one with the other requires some additional instructions
to move the data around.
tim
More information about the Linux-audio-dev
mailing list