Andreas Schwab <[EMAIL PROTECTED]> writes:

> on m68k-linux alignof(type) will always be at most 2, but you
> get better performance with a 4-byte aligned pointer.

Thanks for mentioning that.  I installed this further patch.

(I used alignof because md5.c uses it, but with md5.c the performance
tradeoffs are different and possibly alignof makes more sense there.)

2004-07-29  Paul Eggert  <[EMAIL PROTECTED]>

        * memchr.c (UNALIGNED_P): Use sizeof, not alignof, for better
        performance on m68k-linux.  Reported by Andreas Schwab in
        <http://lists.gnu.org/archive/html/bug-coreutils/2004-07/msg00104.html>.
        * memrchr.c (UNALIGNED_P): Likewise.

Index: lib/memchr.c
===================================================================
RCS file: /home/eggert/coreutils/cu/lib/memchr.c,v
retrieving revision 1.17
diff -p -u -r1.17 memchr.c
--- lib/memchr.c        28 Jul 2004 22:20:56 -0000      1.17
+++ lib/memchr.c        29 Jul 2004 17:27:49 -0000
@@ -48,9 +48,11 @@ USA.  */
 # include <stdint.h>
 #endif
 
-#define alignof(type) offsetof (struct { char c; type x; }, x)
+/* Use sizeof, not alignof, for better performance on some hosts.  For
+   example, on m68k-linux alignof (type) will always be at most 2, but
+   you get better performance with a 4-byte aligned pointer.  */
 #ifdef UINTPTR_MAX
-# define UNALIGNED_P(p) (((uintptr_t) p) % alignof (unsigned long int) != 0)
+# define UNALIGNED_P(p) (((uintptr_t) p) % sizeof (unsigned long int) != 0)
 #else
 # define UNALIGNED_P(p) 1
 #endif
Index: lib/memrchr.c
===================================================================
RCS file: /home/eggert/coreutils/cu/lib/memrchr.c,v
retrieving revision 1.5
diff -p -u -r1.5 memrchr.c
--- lib/memrchr.c       28 Jul 2004 22:21:18 -0000      1.5
+++ lib/memrchr.c       29 Jul 2004 17:28:23 -0000
@@ -46,9 +46,11 @@
 # include <stdint.h>
 #endif
 
-#define alignof(type) offsetof (struct { char c; type x; }, x)
+/* Use sizeof, not alignof, for better performance on some hosts.  For
+   example, on m68k-linux alignof (type) will always be at most 2, but
+   you get better performance with a 4-byte aligned pointer.  */
 #ifdef UINTPTR_MAX
-# define UNALIGNED_P(p) (((uintptr_t) p) % alignof (unsigned long int) != 0)
+# define UNALIGNED_P(p) (((uintptr_t) p) % sizeof (unsigned long int) != 0)
 #else
 # define UNALIGNED_P(p) 1
 #endif


_______________________________________________
Bug-coreutils mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/bug-coreutils

Reply via email to