configure: don't bother to run checks which can be done at the compile time.
authorAlexei Sheplyakov <varg@theor.jinr.ru>
Sun, 7 Sep 2008 18:47:01 +0000 (22:47 +0400)
committerAlexei Sheplyakov <varg@theor.jinr.ru>
Tue, 9 Sep 2008 10:17:08 +0000 (14:17 +0400)
Don't check for sizeof of various types, this can be done at the compile time.
GCC optimizes away these checks, so the actual code is the same.

configure.ac
ginac/utils.h

index 75a644b..576a72b 100644 (file)
@@ -71,12 +71,6 @@ AM_PROG_LIBTOOL
 AM_PROG_LEX
 AC_PROG_YACC
 
-dnl Check for data types which are needed by the hash function 
-dnl (golden_ratio_hash).
-AC_CHECK_SIZEOF(int)
-AC_CHECK_SIZEOF(long)
-AC_CHECK_SIZEOF(long long)
-AC_CHECK_SIZEOF(void *)
 
 dnl Switch to C++ language mode for the following libraries and headers.
 AC_LANG([C++])
@@ -84,6 +78,10 @@ AC_LANG([C++])
 dnl Make sure all the necessary standard headers are installed on the system.
 GINAC_STD_CXX_HEADERS
 
+dnl Check for data types which are needed by the hash function 
+dnl (golden_ratio_hash).
+AC_CHECK_TYPE(long long)
+
 dnl Check for stuff needed for building the GiNaC interactive shell (ginsh).
 AC_CHECK_HEADERS(unistd.h)
 GINAC_HAVE_RUSAGE
index eaa9a72..3c293ea 100644 (file)
@@ -81,24 +81,26 @@ inline unsigned golden_ratio_hash(p_int n)
 {
        // This function works much better when fast arithmetic with at
        // least 64 significant bits is available.
-#if SIZEOF_LONG >= 8
+       if (sizeof(long) >= 8) {
        // So 'long' has 64 bits.  Excellent!  We prefer it because it might be
        // more efficient than 'long long'.
        unsigned long l = n * 0x4f1bbcddUL;
        return (unsigned)l;
-#elif SIZEOF_LONG_LONG >= 8
+       }
+#ifdef HAVE_LONG_LONG
+       else if (sizeof(long long) >= 8) {
        // This requires 'long long' (or an equivalent 64 bit type)---which is,
        // unfortunately, not ANSI-C++-compliant.
        // (Yet C99 demands it, which is reason for hope.)
        unsigned long long l = n * 0x4f1bbcddULL;
        return (unsigned)l;
-#else
+       }
+#endif
        // Without a type with 64 significant bits do the multiplication manually
        // by splitting n up into the lower and upper two bytes.
        const unsigned n0 = (n & 0x0000ffffU);
        const unsigned n1 = (n & 0xffff0000U) >> 16;
        return (n0 * 0x0000bcddU) + ((n1 * 0x0000bcddU + n0 * 0x00004f1bU) << 16);
-#endif
 }
 
 /* Compute the sign of a permutation of a container, with and without an