pspp-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/9] hash-functions: Use C instead of preprocessor to test size o


From: Ben Pfaff
Subject: [PATCH 1/9] hash-functions: Use C instead of preprocessor to test size of double.
Date: Sun, 30 Jan 2011 20:37:32 -0800

I don't see a reason that this has to be done as an #if directive.  The
compiler should be easily able to optimize out the branch that will never
be taken.  This allows us to get rid of a configure check, so it seems
worthwhile to me.
---
 configure.ac                 |    2 --
 src/libpspp/hash-functions.c |   27 ++++++++++++++-------------
 2 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/configure.ac b/configure.ac
index 09a2e3e..fa1f26c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -303,8 +303,6 @@ gl_INIT
 
 AC_C_INLINE
 
-AC_CHECK_SIZEOF(double)
-
 AC_C_BIGENDIAN
 
 AC_CHECK_FUNCS([__setfpucw fork execl execlp isinf isnan finite getpid 
feholdexcept fpsetmask popen round])
diff --git a/src/libpspp/hash-functions.c b/src/libpspp/hash-functions.c
index a72ee06..af8b4c2 100644
--- a/src/libpspp/hash-functions.c
+++ b/src/libpspp/hash-functions.c
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2008, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2008, 2009, 2010, 2011 Free Software 
Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -157,20 +157,21 @@ hash_int (int x, unsigned int basis)
 unsigned int
 hash_double (double d, unsigned int basis)
 {
-#if SIZEOF_DOUBLE == 8
-  uint32_t tmp[2];
-  uint32_t a, b, c;
+  if (sizeof (double) == 8)
+    {
+      uint32_t tmp[2];
+      uint32_t a, b, c;
 
-  a = b = c = 0xdeadbeef + 8 + basis;
+      a = b = c = 0xdeadbeef + 8 + basis;
 
-  memcpy (tmp, &d, 8);
-  a += tmp[0];
-  b += tmp[1];
-  HASH_FINAL (a, b, c);
-  return c;
-#else /* SIZEOF_DOUBLE != 8 */
-  return hash_bytes (&d, sizeof d, basis);
-#endif /* SIZEOF_DOUBLE != 8 */
+      memcpy (tmp, &d, 8);
+      a += tmp[0];
+      b += tmp[1];
+      HASH_FINAL (a, b, c);
+      return c;
+    }
+  else
+    return hash_bytes (&d, sizeof d, basis);
 }
 
 /* Returns a hash value for pointer P, starting from BASIS. */
-- 
1.7.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]