This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
lrint lrintf problems
- From: Bernd Roesch <nospamname at web dot de>
- To: gcc at gcc dot gnu dot org
- Date: Fri, 06 Mar 2009 13:27:03 +0200
- Subject: lrint lrintf problems
Hi,
I see in compiler source there is in builtin.c lrint lrintf.so the gcc need
no extern linker lib when i understand right.
But get linker error when use them.I test compiler 3.4.0 4.3.2 and 4.4.0
I also link with libgcc.but does not help
also my includes-fixed/math.h
contain a declaration but it is long int.
extern long int lrint _PARAMS((double));
This mean 64 bit int ?
But i use 32 bit 68k compiler and as far i see lrint return a long in docu.
only solution i find short is add in library.
long lrintf(float x)
{
return (long)x;
}
But when do this code, then there should be used current rounding.68k for
example support a simple fmove.l fp0,d0 and use current rounding to convert
from float.
But gcc (test with 4.3.2)output this code in -m68020 -m68881 -03.
FMOVE.S #+1.2344999E+4,FP0
FADD.L D4,FP0
FINTRZ.X FP0
FMOVE.L FP0,-(A7)
But i think there is no fintrz need and this code do the same job and use
the correct rounding setting.
FMOVE.S #+1.2344999E+4,FP0
FADD.L D4,FP0
FMOVE.L FP0,-(A7)
Or i am wrong ?.Or is "return (long)x;" specified to always round to zero ?
How can i then implement lrint func without asm Code ?
please help