merge from gcc
This commit is contained in:
parent
fcf29e5f0e
commit
bb6a587dd3
@ -1,3 +1,7 @@
|
||||
2004-04-22 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* hashtab.h (struct htab): Add size_prime_index.
|
||||
|
||||
2004-04-13 Jeff Law <law@redhat.com>
|
||||
|
||||
* hashtab.h (htab_remove_elt_with_hash): Prototype new function.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* An expandable hash tables datatype.
|
||||
Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
Contributed by Vladimir Makarov (vmakarov@cygnus.com).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@ -101,13 +101,13 @@ struct htab GTY(())
|
||||
/* Table itself. */
|
||||
PTR * GTY ((use_param, length ("%h.size"))) entries;
|
||||
|
||||
/* Current size (in entries) of the hash table */
|
||||
/* Current size (in entries) of the hash table. */
|
||||
size_t size;
|
||||
|
||||
/* Current number of elements including also deleted elements */
|
||||
/* Current number of elements including also deleted elements. */
|
||||
size_t n_elements;
|
||||
|
||||
/* Current number of deleted elements in the table */
|
||||
/* Current number of deleted elements in the table. */
|
||||
size_t n_deleted;
|
||||
|
||||
/* The following member is used for debugging. Its value is number
|
||||
@ -126,6 +126,10 @@ struct htab GTY(())
|
||||
PTR GTY((skip)) alloc_arg;
|
||||
htab_alloc_with_arg alloc_with_arg_f;
|
||||
htab_free_with_arg free_with_arg_f;
|
||||
|
||||
/* Current size (in entries) of the hash table, as an index into the
|
||||
table of primes. */
|
||||
unsigned int size_prime_index;
|
||||
};
|
||||
|
||||
typedef struct htab *htab_t;
|
||||
|
@ -1,3 +1,17 @@
|
||||
2004-04-22 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* hashtab.c: Include limits.h, stdint.h, ansidecl.h.
|
||||
(CHAR_BIT): Provide default.
|
||||
(struct prime_ent, prime_tab): New.
|
||||
(higher_prime_index): Rename from higher_prime_number, return index.
|
||||
(htab_mod_1): New.
|
||||
(htab_mod, htab_mod_m2): Use it.
|
||||
(htab_create_alloc, htab_create_alloc_ex): Store prime index.
|
||||
(htab_expand): Likewise.
|
||||
* configure.ac: Check for stdint.h.
|
||||
(UNSIGNED_64BIT_TYPE): New define and checks to fill it in.
|
||||
* config.in, configure: Rebuild.
|
||||
|
||||
2004-04-13 Ian Lance Taylor <ian@wasabisystems.com>
|
||||
|
||||
* strerror.c: Include config.h, and redefine sys_nerr and
|
||||
|
@ -353,6 +353,9 @@
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
/* Define to an unsigned 64-bit type available in the compiler. */
|
||||
#undef UNSIGNED_64BIT_TYPE
|
||||
|
||||
/* whether byteorder is bigendian */
|
||||
#undef WORDS_BIGENDIAN
|
||||
|
||||
|
267
libiberty/configure
vendored
267
libiberty/configure
vendored
@ -957,7 +957,7 @@ esac
|
||||
else
|
||||
echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
|
||||
fi
|
||||
cd $ac_popdir
|
||||
cd "$ac_popdir"
|
||||
done
|
||||
fi
|
||||
|
||||
@ -1304,6 +1304,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# This works around the fact that libtool configuration may change LD
|
||||
# for this particular configuration, but some shells, instead of
|
||||
@ -2329,8 +2330,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -2388,8 +2388,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -2505,8 +2504,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -2560,8 +2558,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -2606,8 +2603,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -2651,8 +2647,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -3108,8 +3103,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -3169,8 +3163,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -3246,8 +3239,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -3288,8 +3280,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -3538,7 +3529,8 @@ host_makefile_frag=${frag}
|
||||
|
||||
|
||||
|
||||
for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h
|
||||
|
||||
for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h
|
||||
do
|
||||
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
echo "$as_me:$LINENO: checking for $ac_header" >&5
|
||||
@ -3630,8 +3622,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -3695,8 +3686,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -3757,8 +3747,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -3838,8 +3827,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -4068,8 +4056,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -4102,6 +4089,167 @@ _ACEOF
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# Look for a 64-bit type.
|
||||
echo "$as_me:$LINENO: checking for a 64-bit type" >&5
|
||||
echo $ECHO_N "checking for a 64-bit type... $ECHO_C" >&6
|
||||
if test "${liberty_cv_uint64+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
/* confdefs.h. */
|
||||
_ACEOF
|
||||
cat confdefs.h >>conftest.$ac_ext
|
||||
cat >>conftest.$ac_ext <<_ACEOF
|
||||
/* end confdefs.h. */
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
int
|
||||
main ()
|
||||
{
|
||||
extern uint64_t foo;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
(eval $ac_compile) 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; } &&
|
||||
{ ac_try='test -s conftest.$ac_objext'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
liberty_cv_uint64=uint64_t
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
/* confdefs.h. */
|
||||
_ACEOF
|
||||
cat confdefs.h >>conftest.$ac_ext
|
||||
cat >>conftest.$ac_ext <<_ACEOF
|
||||
/* end confdefs.h. */
|
||||
#ifdef HAVE_LIMITS_H
|
||||
#include <limits.h>
|
||||
#endif
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8
|
||||
#endif
|
||||
int
|
||||
main ()
|
||||
{
|
||||
extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
(eval $ac_compile) 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; } &&
|
||||
{ ac_try='test -s conftest.$ac_objext'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
liberty_cv_uint64="unsigned long"
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
/* confdefs.h. */
|
||||
_ACEOF
|
||||
cat confdefs.h >>conftest.$ac_ext
|
||||
cat >>conftest.$ac_ext <<_ACEOF
|
||||
/* end confdefs.h. */
|
||||
#ifdef HAVE_LIMITS_H
|
||||
#include <limits.h>
|
||||
#endif
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8
|
||||
#endif
|
||||
int
|
||||
main ()
|
||||
{
|
||||
extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
(eval $ac_compile) 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; } &&
|
||||
{ ac_try='test -s conftest.$ac_objext'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
liberty_cv_uint64="unsigned long long"
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
liberty_cv_uint64=none
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
|
||||
echo "$as_me:$LINENO: result: $liberty_cv_uint64" >&5
|
||||
echo "${ECHO_T}$liberty_cv_uint64" >&6
|
||||
if test "$liberty_cv_uint64" != none; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_64BIT_TYPE $liberty_cv_uint64
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
# Given the above check, we always have uintptr_t or a fallback
|
||||
# definition. So define HAVE_UINTPTR_T in case any imported code
|
||||
# relies on it.
|
||||
@ -4143,8 +4291,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -4377,8 +4524,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -4792,8 +4938,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -4852,8 +4997,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -4953,8 +5097,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -5092,8 +5235,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -5314,8 +5456,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -5660,8 +5801,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -5772,8 +5912,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -5842,8 +5981,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -5908,8 +6046,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -6005,8 +6142,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -6082,8 +6218,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -6256,8 +6391,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } &&
|
||||
{ ac_try='test -z "$ac_c_werror_flag"
|
||||
|| test ! -s conftest.err'
|
||||
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
@ -6601,7 +6735,9 @@ LIBOBJS="$L"
|
||||
|
||||
# We need multilib support, but only if configuring for the target.
|
||||
ac_config_files="$ac_config_files Makefile testsuite/Makefile"
|
||||
|
||||
ac_config_commands="$ac_config_commands default"
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
# This file is a shell script that caches the results of configure
|
||||
# tests run on this system so they can be shared between configure
|
||||
@ -7444,11 +7580,6 @@ esac
|
||||
*) ac_INSTALL=$ac_top_builddir$INSTALL ;;
|
||||
esac
|
||||
|
||||
if test x"$ac_file" != x-; then
|
||||
{ echo "$as_me:$LINENO: creating $ac_file" >&5
|
||||
echo "$as_me: creating $ac_file" >&6;}
|
||||
rm -f "$ac_file"
|
||||
fi
|
||||
# Let's still pretend it is `configure' which instantiates (i.e., don't
|
||||
# use $as_me), people would be surprised to read:
|
||||
# /* config.h. Generated by config.status. */
|
||||
@ -7487,6 +7618,12 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
|
||||
fi;;
|
||||
esac
|
||||
done` || { (exit 1); exit 1; }
|
||||
|
||||
if test x"$ac_file" != x-; then
|
||||
{ echo "$as_me:$LINENO: creating $ac_file" >&5
|
||||
echo "$as_me: creating $ac_file" >&6;}
|
||||
rm -f "$ac_file"
|
||||
fi
|
||||
_ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF
|
||||
sed "$ac_vpsub
|
||||
|
@ -159,13 +159,47 @@ AC_SUBST_FILE(host_makefile_frag)
|
||||
# It's OK to check for header files. Although the compiler may not be
|
||||
# able to link anything, it had better be able to at least compile
|
||||
# something.
|
||||
AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h)
|
||||
AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h)
|
||||
AC_HEADER_SYS_WAIT
|
||||
AC_HEADER_TIME
|
||||
|
||||
libiberty_AC_DECLARE_ERRNO
|
||||
|
||||
AC_CHECK_TYPE(uintptr_t, unsigned long)
|
||||
|
||||
# Look for a 64-bit type.
|
||||
AC_MSG_CHECKING([for a 64-bit type])
|
||||
AC_CACHE_VAL(liberty_cv_uint64,
|
||||
[AC_TRY_COMPILE(
|
||||
[#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif],
|
||||
[extern uint64_t foo;],
|
||||
liberty_cv_uint64=uint64_t,
|
||||
[AC_TRY_COMPILE(
|
||||
[#ifdef HAVE_LIMITS_H
|
||||
#include <limits.h>
|
||||
#endif
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8
|
||||
#endif],
|
||||
[extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];],
|
||||
liberty_cv_uint64="unsigned long",
|
||||
[AC_TRY_COMPILE(
|
||||
[#ifdef HAVE_LIMITS_H
|
||||
#include <limits.h>
|
||||
#endif
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8
|
||||
#endif],
|
||||
[extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];],
|
||||
liberty_cv_uint64="unsigned long long", liberty_cv_uint64=none)])])])
|
||||
AC_MSG_RESULT($liberty_cv_uint64)
|
||||
if test "$liberty_cv_uint64" != none; then
|
||||
AC_DEFINE(UNSIGNED_64BIT_TYPE, $liberty_cv_uint64,
|
||||
[Define to an unsigned 64-bit type available in the compiler.])
|
||||
fi
|
||||
|
||||
# Given the above check, we always have uintptr_t or a fallback
|
||||
# definition. So define HAVE_UINTPTR_T in case any imported code
|
||||
# relies on it.
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* An expandable hash tables datatype.
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Vladimir Makarov (vmakarov@cygnus.com).
|
||||
|
||||
This file is part of the libiberty library.
|
||||
@ -40,20 +41,29 @@ Boston, MA 02111-1307, USA. */
|
||||
#ifdef HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MALLOC_H
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
#ifdef HAVE_LIMITS_H
|
||||
#include <limits.h>
|
||||
#endif
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "libiberty.h"
|
||||
#include "ansidecl.h"
|
||||
#include "hashtab.h"
|
||||
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8
|
||||
#endif
|
||||
|
||||
/* This macro defines reserved value for empty table entry. */
|
||||
|
||||
#define EMPTY_ENTRY ((PTR) 0)
|
||||
@ -63,7 +73,10 @@ Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define DELETED_ENTRY ((PTR) 1)
|
||||
|
||||
static unsigned long higher_prime_number PARAMS ((unsigned long));
|
||||
static unsigned int higher_prime_index PARAMS ((unsigned long));
|
||||
static hashval_t htab_mod_1 PARAMS ((hashval_t, hashval_t, hashval_t, int));
|
||||
static hashval_t htab_mod PARAMS ((hashval_t, htab_t));
|
||||
static hashval_t htab_mod_m2 PARAMS ((hashval_t, htab_t));
|
||||
static hashval_t hash_pointer PARAMS ((const void *));
|
||||
static int eq_pointer PARAMS ((const void *, const void *));
|
||||
static int htab_expand PARAMS ((htab_t));
|
||||
@ -75,69 +88,117 @@ static PTR *find_empty_slot_for_expand PARAMS ((htab_t, hashval_t));
|
||||
htab_hash htab_hash_pointer = hash_pointer;
|
||||
htab_eq htab_eq_pointer = eq_pointer;
|
||||
|
||||
/* The following function returns a nearest prime number which is
|
||||
greater than N, and near a power of two. */
|
||||
/* Table of primes and multiplicative inverses.
|
||||
|
||||
static unsigned long
|
||||
higher_prime_number (n)
|
||||
Note that these are not minimally reduced inverses. Unlike when generating
|
||||
code to divide by a constant, we want to be able to use the same algorithm
|
||||
all the time. All of these inverses (are implied to) have bit 32 set.
|
||||
|
||||
For the record, here's the function that computed the table; it's a
|
||||
vastly simplified version of the function of the same name from gcc. */
|
||||
|
||||
#if 0
|
||||
unsigned int
|
||||
ceil_log2 (unsigned int x)
|
||||
{
|
||||
int i;
|
||||
for (i = 31; i >= 0 ; --i)
|
||||
if (x > (1u << i))
|
||||
return i+1;
|
||||
abort ();
|
||||
}
|
||||
|
||||
unsigned int
|
||||
choose_multiplier (unsigned int d, unsigned int *mlp, unsigned char *shiftp)
|
||||
{
|
||||
unsigned long long mhigh;
|
||||
double nx;
|
||||
int lgup, post_shift;
|
||||
int pow, pow2;
|
||||
int n = 32, precision = 32;
|
||||
|
||||
lgup = ceil_log2 (d);
|
||||
pow = n + lgup;
|
||||
pow2 = n + lgup - precision;
|
||||
|
||||
nx = ldexp (1.0, pow) + ldexp (1.0, pow2);
|
||||
mhigh = nx / d;
|
||||
|
||||
*shiftp = lgup - 1;
|
||||
*mlp = mhigh;
|
||||
return mhigh >> 32;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct prime_ent
|
||||
{
|
||||
hashval_t prime;
|
||||
hashval_t inv;
|
||||
hashval_t inv_m2; /* inverse of prime-2 */
|
||||
hashval_t shift;
|
||||
};
|
||||
|
||||
static struct prime_ent const prime_tab[] = {
|
||||
{ 7, 0x24924925, 0x9999999b, 2 },
|
||||
{ 13, 0x3b13b13c, 0x745d1747, 3 },
|
||||
{ 31, 0x08421085, 0x1a7b9612, 4 },
|
||||
{ 61, 0x0c9714fc, 0x15b1e5f8, 5 },
|
||||
{ 127, 0x02040811, 0x0624dd30, 6 },
|
||||
{ 251, 0x05197f7e, 0x073260a5, 7 },
|
||||
{ 509, 0x01824366, 0x02864fc8, 8 },
|
||||
{ 1021, 0x00c0906d, 0x014191f7, 9 },
|
||||
{ 2039, 0x0121456f, 0x0161e69e, 10 },
|
||||
{ 4093, 0x00300902, 0x00501908, 11 },
|
||||
{ 8191, 0x00080041, 0x00180241, 12 },
|
||||
{ 16381, 0x000c0091, 0x00140191, 13 },
|
||||
{ 32749, 0x002605a5, 0x002a06e6, 14 },
|
||||
{ 65521, 0x000f00e2, 0x00110122, 15 },
|
||||
{ 131071, 0x00008001, 0x00018003, 16 },
|
||||
{ 262139, 0x00014002, 0x0001c004, 17 },
|
||||
{ 524287, 0x00002001, 0x00006001, 18 },
|
||||
{ 1048573, 0x00003001, 0x00005001, 19 },
|
||||
{ 2097143, 0x00004801, 0x00005801, 20 },
|
||||
{ 4194301, 0x00000c01, 0x00001401, 21 },
|
||||
{ 8388593, 0x00001e01, 0x00002201, 22 },
|
||||
{ 16777213, 0x00000301, 0x00000501, 23 },
|
||||
{ 33554393, 0x00001381, 0x00001481, 24 },
|
||||
{ 67108859, 0x00000141, 0x000001c1, 25 },
|
||||
{ 134217689, 0x000004e1, 0x00000521, 26 },
|
||||
{ 268435399, 0x00000391, 0x000003b1, 27 },
|
||||
{ 536870909, 0x00000019, 0x00000029, 28 },
|
||||
{ 1073741789, 0x0000008d, 0x00000095, 29 },
|
||||
{ 2147483647, 0x00000003, 0x00000007, 30 },
|
||||
/* Avoid "decimal constant so large it is unsigned" for 4294967291. */
|
||||
{ 0xfffffffb, 0x00000006, 0x00000008, 31 }
|
||||
};
|
||||
|
||||
/* The following function returns an index into the above table of the
|
||||
nearest prime number which is greater than N, and near a power of two. */
|
||||
|
||||
static unsigned int
|
||||
higher_prime_index (n)
|
||||
unsigned long n;
|
||||
{
|
||||
/* These are primes that are near, but slightly smaller than, a
|
||||
power of two. */
|
||||
static const unsigned long primes[] = {
|
||||
(unsigned long) 7,
|
||||
(unsigned long) 13,
|
||||
(unsigned long) 31,
|
||||
(unsigned long) 61,
|
||||
(unsigned long) 127,
|
||||
(unsigned long) 251,
|
||||
(unsigned long) 509,
|
||||
(unsigned long) 1021,
|
||||
(unsigned long) 2039,
|
||||
(unsigned long) 4093,
|
||||
(unsigned long) 8191,
|
||||
(unsigned long) 16381,
|
||||
(unsigned long) 32749,
|
||||
(unsigned long) 65521,
|
||||
(unsigned long) 131071,
|
||||
(unsigned long) 262139,
|
||||
(unsigned long) 524287,
|
||||
(unsigned long) 1048573,
|
||||
(unsigned long) 2097143,
|
||||
(unsigned long) 4194301,
|
||||
(unsigned long) 8388593,
|
||||
(unsigned long) 16777213,
|
||||
(unsigned long) 33554393,
|
||||
(unsigned long) 67108859,
|
||||
(unsigned long) 134217689,
|
||||
(unsigned long) 268435399,
|
||||
(unsigned long) 536870909,
|
||||
(unsigned long) 1073741789,
|
||||
(unsigned long) 2147483647,
|
||||
/* 4294967291L */
|
||||
((unsigned long) 2147483647) + ((unsigned long) 2147483644),
|
||||
};
|
||||
|
||||
const unsigned long *low = &primes[0];
|
||||
const unsigned long *high = &primes[sizeof(primes) / sizeof(primes[0])];
|
||||
unsigned int low = 0;
|
||||
unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]);
|
||||
|
||||
while (low != high)
|
||||
{
|
||||
const unsigned long *mid = low + (high - low) / 2;
|
||||
if (n > *mid)
|
||||
unsigned int mid = low + (high - low) / 2;
|
||||
if (n > prime_tab[mid].prime)
|
||||
low = mid + 1;
|
||||
else
|
||||
high = mid;
|
||||
}
|
||||
|
||||
/* If we've run out of primes, abort. */
|
||||
if (n > *low)
|
||||
if (n > prime_tab[low].prime)
|
||||
{
|
||||
fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
|
||||
abort ();
|
||||
}
|
||||
|
||||
return *low;
|
||||
return low;
|
||||
}
|
||||
|
||||
/* Returns a hash code for P. */
|
||||
@ -177,6 +238,36 @@ htab_elements (htab)
|
||||
return htab->n_elements - htab->n_deleted;
|
||||
}
|
||||
|
||||
/* Return X % Y. */
|
||||
|
||||
static inline hashval_t
|
||||
htab_mod_1 (x, y, inv, shift)
|
||||
hashval_t x, y, inv;
|
||||
int shift;
|
||||
{
|
||||
/* The multiplicative inverses computed above are for 32-bit types, and
|
||||
requires that we be able to compute a highpart multiply. */
|
||||
#ifdef UNSIGNED_64BIT_TYPE
|
||||
__extension__ typedef UNSIGNED_64BIT_TYPE ull;
|
||||
if (sizeof (hashval_t) * CHAR_BIT <= 32)
|
||||
{
|
||||
hashval_t t1, t2, t3, t4, q, r;
|
||||
|
||||
t1 = ((ull)x * inv) >> 32;
|
||||
t2 = x - t1;
|
||||
t3 = t2 >> 1;
|
||||
t4 = t1 + t3;
|
||||
q = t4 >> shift;
|
||||
r = x - (q * y);
|
||||
|
||||
return r;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Otherwise just use the native division routines. */
|
||||
return x % y;
|
||||
}
|
||||
|
||||
/* Compute the primary hash for HASH given HTAB's current size. */
|
||||
|
||||
static inline hashval_t
|
||||
@ -184,7 +275,8 @@ htab_mod (hash, htab)
|
||||
hashval_t hash;
|
||||
htab_t htab;
|
||||
{
|
||||
return hash % htab_size (htab);
|
||||
const struct prime_ent *p = &prime_tab[htab->size_prime_index];
|
||||
return htab_mod_1 (hash, p->prime, p->inv, p->shift);
|
||||
}
|
||||
|
||||
/* Compute the secondary hash for HASH given HTAB's current size. */
|
||||
@ -194,7 +286,8 @@ htab_mod_m2 (hash, htab)
|
||||
hashval_t hash;
|
||||
htab_t htab;
|
||||
{
|
||||
return 1 + hash % (htab_size (htab) - 2);
|
||||
const struct prime_ent *p = &prime_tab[htab->size_prime_index];
|
||||
return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift);
|
||||
}
|
||||
|
||||
/* This function creates table with length slightly longer than given
|
||||
@ -212,8 +305,11 @@ htab_create_alloc (size, hash_f, eq_f, del_f, alloc_f, free_f)
|
||||
htab_free free_f;
|
||||
{
|
||||
htab_t result;
|
||||
unsigned int size_prime_index;
|
||||
|
||||
size_prime_index = higher_prime_index (size);
|
||||
size = prime_tab[size_prime_index].prime;
|
||||
|
||||
size = higher_prime_number (size);
|
||||
result = (htab_t) (*alloc_f) (1, sizeof (struct htab));
|
||||
if (result == NULL)
|
||||
return NULL;
|
||||
@ -225,6 +321,7 @@ htab_create_alloc (size, hash_f, eq_f, del_f, alloc_f, free_f)
|
||||
return NULL;
|
||||
}
|
||||
result->size = size;
|
||||
result->size_prime_index = size_prime_index;
|
||||
result->hash_f = hash_f;
|
||||
result->eq_f = eq_f;
|
||||
result->del_f = del_f;
|
||||
@ -248,8 +345,11 @@ htab_create_alloc_ex (size, hash_f, eq_f, del_f, alloc_arg, alloc_f,
|
||||
htab_free_with_arg free_f;
|
||||
{
|
||||
htab_t result;
|
||||
unsigned int size_prime_index;
|
||||
|
||||
size_prime_index = higher_prime_index (size);
|
||||
size = prime_tab[size_prime_index].prime;
|
||||
|
||||
size = higher_prime_number (size);
|
||||
result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab));
|
||||
if (result == NULL)
|
||||
return NULL;
|
||||
@ -261,6 +361,7 @@ htab_create_alloc_ex (size, hash_f, eq_f, del_f, alloc_arg, alloc_f,
|
||||
return NULL;
|
||||
}
|
||||
result->size = size;
|
||||
result->size_prime_index = size_prime_index;
|
||||
result->hash_f = hash_f;
|
||||
result->eq_f = eq_f;
|
||||
result->del_f = del_f;
|
||||
@ -412,19 +513,27 @@ htab_expand (htab)
|
||||
PTR *olimit;
|
||||
PTR *p;
|
||||
PTR *nentries;
|
||||
size_t nsize;
|
||||
size_t nsize, osize, elts;
|
||||
unsigned int oindex, nindex;
|
||||
|
||||
oentries = htab->entries;
|
||||
olimit = oentries + htab->size;
|
||||
oindex = htab->size_prime_index;
|
||||
osize = htab->size;
|
||||
olimit = oentries + osize;
|
||||
elts = htab_elements (htab);
|
||||
|
||||
/* Resize only when table after removal of unused elements is either
|
||||
too full or too empty. */
|
||||
if ((htab->n_elements - htab->n_deleted) * 2 > htab->size
|
||||
|| ((htab->n_elements - htab->n_deleted) * 8 < htab->size
|
||||
&& htab->size > 32))
|
||||
nsize = higher_prime_number ((htab->n_elements - htab->n_deleted) * 2);
|
||||
if (elts * 2 > osize || (elts * 8 < osize && osize > 32))
|
||||
{
|
||||
nindex = higher_prime_index (elts * 2);
|
||||
nsize = prime_tab[nindex].prime;
|
||||
}
|
||||
else
|
||||
nsize = htab->size;
|
||||
{
|
||||
nindex = oindex;
|
||||
nsize = osize;
|
||||
}
|
||||
|
||||
if (htab->alloc_with_arg_f != NULL)
|
||||
nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
|
||||
@ -435,7 +544,7 @@ htab_expand (htab)
|
||||
return 0;
|
||||
htab->entries = nentries;
|
||||
htab->size = nsize;
|
||||
|
||||
htab->size_prime_index = nindex;
|
||||
htab->n_elements -= htab->n_deleted;
|
||||
htab->n_deleted = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user