2001-09-06
2001-09-06 08:07:10 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>
-
e85df8e6b406ba7dcc8cef3633ad68adb3161c95
(48 lines)
(+33/-15)
[
Show
| Annotate
]
Branch: 7.9
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);