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)