Branch: Tag:

2001-09-06

2001-09-06 08:07:10 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

another (very) minor optimization

Rev: src/stralloc.c:1.134

27:   #define HUGE HUGE_VAL   #endif /*!HUGE*/    - RCSID("$Id: stralloc.c,v 1.133 2001/09/05 01:42:47 hubbe Exp $"); + RCSID("$Id: stralloc.c,v 1.134 2001/09/06 08:07:10 hubbe Exp $");    -  + /* #define STRALLOC_USE_PRIMES */ +  + #ifdef STRALLOC_USE_PRIMES +  + #define SET_HSIZE(X) htable_size=hashprimes[(X)] + #define HMODULO(X) ((X) % htable_size) +  + #else +  + #define SET_HSIZE(X) htable_mask=(htable_size=(1<<(X)))-1 + #define HMODULO(X) ((X) & (htable_mask)) +  + unsigned INT32 htable_mask; +  + #endif +  +    #if PIKE_RUN_UNLOCKED   /* Make this bigger when we get lightweight threads */   #define BUCKET_LOCKS 2048   static PIKE_MUTEX_T *bucket_locks;      #define BUCKETLOCK(HVAL) \ -  (bucket_locks + ((hval__ % htable_size) & (BUCKET_LOCKS-1))) +  (bucket_locks + (HMODULO(hval__) & (BUCKET_LOCKS-1)))      #define LOCK_BUCKET(HVAL) do { \    size_t hval__=(HVAL); \
341:   #endif    size_t h;    LOCK_BUCKET(hval); -  h=hval % htable_size; +  h=HMODULO(hval);    for(base = prev = base_table + h;( curr=*prev ); prev=&curr->next)    {   #ifdef PIKE_DEBUG
432:    ptrdiff_t h;    if(!s) return;    rehash_string_backwards(s->next); -  h = s->hval % htable_size; +  h = HMODULO(s->hval);    s->next=base_table[h];    base_table[h]=s;   }
461:    for(h=1;h<BUCKET_LOCKS;h++) mt_lock(bucket_locks+h);   #endif    -  htable_size=hashprimes[++hashprimes_entry]; +  SET_HSIZE( ++hashprimes_entry );       base_table=(struct pike_string **)xalloc(sizeof(struct pike_string *)*htable_size);    MEMSET((char *)base_table,0,sizeof(struct pike_string *)*htable_size);
553:   {    size_t h;    LOCK_BUCKET(hval); -  h=hval % htable_size; +  h=HMODULO(hval);    s->refs = 0;    s->next = base_table[h];    base_table[h] = s;
598: Inside #if undefined(HASH_PREFIX)
   tmp=tmp2->next;       tmp2->hval=do_hash(tmp2); /* compute new hash value */ -  h2=tmp2->hval % htable_size; +  h2=HMODULO(tmp2->hval);       tmp2->next=base_table[h2]; /* and re-hash */    base_table[h2]=tmp2;
878:   {    size_t h;    LOCK_BUCKET(s->hval); -  h= s->hval % htable_size; +  h= HMODULO(s->hval);    propagate_shared_string(s,h);   #ifdef PIKE_DEBUG    if (base_table[h] != s) {
1068: Inside #if defined(PIKE_DEBUG)
   if(do_hash(s) != s->hval)    fatal("Shared string hashed to other number.\n");    -  if((s->hval % htable_size) != e) +  if(HMODULO(s->hval) != e)    {    locate_problem(wrong_hash);    fatal("Shared string hashed to wrong place.\n");
1113: Inside #if defined(PIKE_DEBUG)
  PMOD_EXPORT struct pike_string *debug_findstring(const struct pike_string *foo)   {    struct pike_string *tmp; -  tmp=propagate_shared_string(foo, foo->hval % htable_size); +  tmp=propagate_shared_string(foo, HMODULO(foo->hval));      #if 0    if(!tmp)
1128: Inside #if defined(PIKE_DEBUG) and #if 0
      LOCK_BUCKET(foo->hval);    fprintf(stderr,"------ %p %ld\n", -  base_table[foo->hval %htable_size], +  base_table[HMODULO(foo->hval)],    foo->hval); -  for(tmp2=base_table[foo->hval % htable_size];tmp2;tmp2=tmp2->next) +  for(tmp2=base_table[HMODULO(foo->hval)];tmp2;tmp2=tmp2->next)    {    if(tmp2 == tmp)    fprintf(stderr,"!!%p!!->",tmp2);
1148: Inside #if defined(PIKE_DEBUG) and #if 0
   if(tmp2 == tmp)    fprintf(stderr,"String found in hashbin %ld (not %ld)\n",    (long)e, -  (long)(foo->hval % htable_size)); +  (long)HMODULO(foo->hval));    }    UNLOCK_BUCKET(e);    }
1772:    init_short_pike_string1_blocks();    init_short_pike_string2_blocks();    for(hashprimes_entry=0;hashprimes[hashprimes_entry]<BEGIN_HASH_SIZE;hashprimes_entry++); -  htable_size=hashprimes[hashprimes_entry]; +  SET_HSIZE(hashprimes_entry);    base_table=(struct pike_string **)xalloc(sizeof(struct pike_string *)*htable_size);    MEMSET((char *)base_table,0,sizeof(struct pike_string *)*htable_size);   #ifdef PIKE_RUN_UNLOCKED
1903:    do {    h++;    LOCK_BUCKET(h); -  h %= htable_size; +  h = HMODULO(h);    next = base_table[h];    UNLOCK_BUCKET(h);    } while (!next);