[Top][All Lists]
[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
- [PATCH 0/9] sys-file-reader fixes and tests, Ben Pfaff, 2011/01/30
- [PATCH 3/9] sys-file-reader: Check that multiple response set names begin with `$'., Ben Pfaff, 2011/01/30
- [PATCH 2/9] sys-file-reader: Fix double-free on read of partial record., Ben Pfaff, 2011/01/30
- [PATCH 7/9] sys-file-reader: Avoid redundant "within system file" in messages., Ben Pfaff, 2011/01/30
- [PATCH 4/9] sys-file-reader: Add missing periods at end of error messages., Ben Pfaff, 2011/01/30
- [PATCH 6/9] sys-file-reader: Improve debugging usefulness of error messages., Ben Pfaff, 2011/01/30
- [PATCH 1/9] hash-functions: Use C instead of preprocessor to test size of double.,
Ben Pfaff <=
- [PATCH 5/9] sys-file-reader: Really enable warnings for invalid variable formats., Ben Pfaff, 2011/01/30
- [PATCH 8/9] sys-file-reader: Elevate invalid number of labels from warning to error., Ben Pfaff, 2011/01/30
- [PATCH 9/9] sys-file-reader: Add tests., Ben Pfaff, 2011/01/30