[PATCH] Add inline bsearch expansion
Andreas Jaeger
aj@suse.com
Sun Jan 6 19:28:00 GMT 2013
On 01/05/2013 04:26 PM, OndÅej BÃlka wrote:
> On Sat, Jan 05, 2013 at 02:19:37PM +0100, Jakub Jelinek wrote:
>> On Sat, Jan 05, 2013 at 01:51:30PM +0100, OndÅej BÃlka wrote:
>>> I looked into qsort/bsearch functions. Here I
>>> added inline version of bsearch.
>>>
>>> It saves multiplications instructions as size is
>>> most of time known in advance.
>>> When compiled with gcc-4.7.1 and icc 12.1.4 with -O2
>>> it can inline ccmp functions from example below.
>>> gcc-4.5.3 does not inline ccmp.
>>
>> I don't comment on whether it is a good idea or not etc.,
>> just nits that you should guard it with
>> #ifdef __USE_EXTERN_INLINES
>> and use
>> __extern_inline
>> instead of extern inline.
> OK
>>
>> Jakub
>
> I also added gcc-4.7 requirement as element size can be probably
> better handled separately. When I profiled my system bsearch was
> mostly used by firefox. There element sizes were from 90% 8,16,32
> and 10% 40,56.
>
> ---
> stdlib/stdlib.h | 33 +++++++++++++++++++++++++++++++++
> 1 files changed, 33 insertions(+), 0 deletions(-)
>
> diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
> index fc83f4e..bcb504e 100644
> --- a/stdlib/stdlib.h
> +++ b/stdlib/stdlib.h
> @@ -755,6 +755,39 @@ extern void *bsearch (const void *__key, const void *__base,
> size_t __nmemb, size_t __size, __compar_fn_t __compar)
> __nonnull ((1, 2, 5)) __wur;
>
> +
> +#ifdef __USE_EXTERN_INLINES
> +/* From gcc-4.7 we can inline __compar function. */
> +#if __GNUC_PREREQ (4, 7)
What exactly is the dependency on GCC 4.7? Just that 4.7 inlines this
and previous versions not?
What about other compilers that inline it?
I guess we can drop the dependency on 4.7, can't we?
Andreas
--
Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
More information about the Libc-alpha
mailing list