[RFC] [BZ15384] Enchance finite and isfinite.

Ondřej Bílka neleai@seznam.cz
Fri Apr 26 16:50:00 GMT 2013


On Fri, Apr 26, 2013 at 03:03:00AM -0400, David Miller wrote:
> From: Ondřej Bílka <neleai@seznam.cz>
> Date: Fri, 26 Apr 2013 08:17:32 +0200
> 
> > Following should generic version be tried on other archs. I could get
> > 20% speedup on sparc on this benchmark. 
> > 
> > run with
> > for i in `seq 0 7`; do echo finite$i;  gcc finite_bench.c -O3 -Wall -W -fno-builtin-finite -Dfinite=finite$i; for j in `seq 1 8`; do /usr/bin/time -f "%U" ./a.out; done; done
> 
> That'll only be faster on sparc 32-bit where floating point
> values are passed in integer registers.
> 
> For 64-bit, where floating point values are passed in floating point
> registers, the assembler in glibc will always be faster because GCC
> isn't smart enough to avoid allocating a register window when a stack
> slot is needed to move values between float and integer registers.

My benchmark tries to measure speed of inlined version when used in
condition. As 99% of uses are in condition this looks reasonable. Idealy
gcc should simplify condition based on expansion and have it smaller
than function call. 

> Also, the sparc 64-bit multiarch variants make use of the VIS3
> float-int move instructions when available.

Without testing I do not know how much this helps.



More information about the Libc-alpha mailing list