This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Do not provide inlines for GCC build-in functions


On Tue, May 15, 2012 at 3:36 PM, Andreas Jaeger <aj@suse.de> wrote:
>
> As mentioned previously
> (http://sourceware.org/ml/libc-alpha/2012-05/msg00106.html), GCC 3.4
> introduced builtin functions and thus the inlines are not needed at all.
>
> Patch was tested on Linux/x86-64 and I compared libc.so and libm.so and
> found no difference in the assembly.
>
> Looking at math/test-idouble I found a couple of places where GCC used
> now the builtins - instead of a function call like previously. So, GCC
> does a better job than the inlines.
>
> Ok to commit?
>
> Andreas
>
> 2012-05-15 ?Andreas Jaeger ?<aj@suse.de>
>
> ? ? ? ?* sysdeps/x86_64/fpu/bits/mathinline.h (lrintf): Make inline
> ? ? ? ?function only available for GCCs before 3.4 since GCC 3.4
> ? ? ? ?introduced a builtin.
> ? ? ? ?(lrint): Likewise.
> ? ? ? ?(llrintf): Likewise.
> ? ? ? ?(llrint): Likewise.
> ? ? ? ?(fmaxf): Likewise.
> ? ? ? ?(fmax): Likewise.
> ? ? ? ?(fminf): Likewise.
> ? ? ? ?(fmin): Likewise.
> ? ? ? ?(rint): Likewise.
> ? ? ? ?(rintf): Likewise.
> ? ? ? ?(nearbyint): Likewise.
> ? ? ? ?(nearbyintf): Likewise.
> ? ? ? ?(ceil): Likewise.
> ? ? ? ?(ceilf): Likewise.
> ? ? ? ?(floor): Likewise.
> ? ? ? ?(floorf): Likewise.
>
> diff --git a/sysdeps/x86_64/fpu/bits/mathinline.h b/sysdeps/x86_64/fpu/bits/mathinline.h
> index 49a199b..310fcad 100644
> --- a/sysdeps/x86_64/fpu/bits/mathinline.h
> +++ b/sysdeps/x86_64/fpu/bits/mathinline.h
> @@ -68,7 +68,10 @@ __END_NAMESPACE_C99
> ?#endif
>
>
> -#if __GNUC_PREREQ (2, 8) && !defined __NO_MATH_INLINES && defined __OPTIMIZE__
> +#if __GNUC_PREREQ (2, 8) && !__GNUC_PREREQ (3, 4) \
> + ? ?&& !defined __NO_MATH_INLINES && defined __OPTIMIZE__
> +/* GCC 3.4 introduced builtins for all functions below, so
> + ? there's no need to define any of these inline functions. ?*/
>
> ?# ifdef __USE_ISOC99
> ?__BEGIN_NAMESPACE_C99

Looks good to me.

I double checked that GCC 3.3 doesn't have the builtins and GCC 3.4 does.

I find it a bit lame that we go from a math inline to a builtin behind
the users back, but this seems to be common practice, and I don't see
a better solution.

Cheers,
Carlos.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]