On Mon, May 16, 2005 at 05:26:36PM -0700, Mark Mitchell wrote: > 2005-05-16 Mark Mitchell <[EMAIL PROTECTED]> > > * gcc.dg/compat/generate-random.c (config.h): Do not include. > (limits.h): Include unconditionally. > (stdlib.h): Likewise. > * gcc.dg/compat/generate-random_r.c (config.h): Do not include. > (limits.h): Include unconditionally. > (stdlib.h): Likewise. > * gcc.dg/compat/struct-layout-1.exp: Do not link with libiberty. > * gcc.dg/compat/struct-layout-1_generate.c (config.h): Do not include. > (limits.h): Include unconditionally. > (stdlib.h): Likewise. > (hashtab.h): Do not include. > (getopt.h): Likewise. > (stddef.h): Include. > (hashval_t): Define. > (struct entry): Add "next" field. > (HASH_SIZE): New macro. > (hash_table): New variable. > (switchfiles): Do not use xmalloc. > (mix): New macro. > (iterative_hash): New function. > (hasht): Remove. > (e_exists): New function. > (e_insert): Likewise. > (output): Use, instead of libiberty hashtable functions. > (main): Do not use getopt. Do not call htab_create.
Thanks. > + static hashval_t > + iterative_hash (const void *k_in /* the key */, > + register size_t length /* the length of the key */, > + register hashval_t initval /* the previous hash, or > + an arbitrary value */) > + { > + register const unsigned char *k = (const unsigned char *)k_in; > + register hashval_t a,b,c,len; > + > + /* Set up the internal state */ > + 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. */ 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. > + 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)); > + mix(a,b,c); > + k += 12; len -= 12; > + } Jakub