Jakub Jelinek wrote:
+ #ifndef WORDS_BIGENDIAN + /* On a little-endian machine, if the data is 4-byte aligned we can hash + by word for better speed. This gives nondeterministic results on + big-endian machines. */
WORDS_BIGENDIAN is not being defined in the headers that are included. I think best would be just to kill this hunk and unconditionally do it the slower way.
Good point! I checked in this patch, on mainline and 4.0 branches, after testing on x86_64-unknown-linux-gnu.
-- Mark Mitchell CodeSourcery, LLC [EMAIL PROTECTED] (916) 791-8304
2005-05-17 Mark Mitchell <[EMAIL PROTECTED]>
* gcc.dg/compat/struct-layout-1_generate.c (iterative_hash): Remove little-endian optimizations. Index: struct-layout-1_generate.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c,v retrieving revision 1.5 diff -c -5 -p -r1.5 struct-layout-1_generate.c *** struct-layout-1_generate.c 16 May 2005 22:52:26 -0000 1.5 --- struct-layout-1_generate.c 17 May 2005 18:22:25 -0000 *************** iterative_hash (const void *k_in /* the *** 1223,1247 **** len = length; a = b = 0x9e3779b9; /* the golden ratio; an arbitrary value */ c = initval; /* the previous hash value */ /*---------------------------------------- handle most of the key */ - #ifndef WORDS_BIGENDIAN - /* On a little-endian machine, if the data is 4-byte aligned we can hash - by word for better speed. This gives nondeterministic results on - big-endian machines. */ - if (sizeof (hashval_t) == 4 && (((size_t)k)&3) == 0) - while (len >= 12) /* aligned */ - { - a += *(hashval_t *)(k+0); - b += *(hashval_t *)(k+4); - c += *(hashval_t *)(k+8); - mix(a,b,c); - k += 12; len -= 12; - } - else /* unaligned */ - #endif while (len >= 12) { a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24)); b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24)); c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24)); --- 1223,1232 ----