* transition to non-consing add_one_tconc is done.

* Performance gains for making a hash table of 10,000,000 elements
  are:
  Before:    47secs       Now:  17secs.
This commit is contained in:
Abdulaziz Ghuloum 2007-06-29 01:53:18 +03:00
parent 5358680912
commit bc3e216f63
2 changed files with 5 additions and 5 deletions

Binary file not shown.

View File

@ -1771,13 +1771,14 @@ fix_new_pages(gc_t* gc){
static void static void
add_one_tconc(ikpcb* pcb, ikp tcbucket){ add_one_tconc(ikpcb* pcb, ikp p){
ikp tcbucket = ref(p,0);
ikp tc = ref(tcbucket, off_tcbucket_tconc); ikp tc = ref(tcbucket, off_tcbucket_tconc);
assert(tagof(tc) == pair_tag); assert(tagof(tc) == pair_tag);
ikp d = ref(tc, off_cdr); ikp d = ref(tc, off_cdr);
assert(tagof(d) == pair_tag); assert(tagof(d) == pair_tag);
/* Wrong MR! */ /* Wrong MR! */
ikp new_pair = ik_alloc(pcb, pair_size) + pair_tag; ikp new_pair = p + pair_tag; //ik_alloc(pcb, pair_size) + pair_tag;
ref(d, off_car) = tcbucket; ref(d, off_car) = tcbucket;
ref(d, off_cdr) = new_pair; ref(d, off_cdr) = new_pair;
ref(new_pair, off_car) = false_object; ref(new_pair, off_car) = false_object;
@ -1798,7 +1799,7 @@ gc_add_tconcs(gc_t* gc){
ikp p = gc->tconc_base; ikp p = gc->tconc_base;
ikp q = gc->tconc_ap; ikp q = gc->tconc_ap;
while(p < q){ while(p < q){
add_one_tconc(pcb, ref(p,0)); add_one_tconc(pcb, p);
p += 2*wordsize; p += 2*wordsize;
} }
} }
@ -1807,8 +1808,7 @@ gc_add_tconcs(gc_t* gc){
ikp p = qu->base; ikp p = qu->base;
ikp q = p + qu->size; ikp q = p + qu->size;
while(p < q){ while(p < q){
add_one_tconc(pcb, ref(p,0)); add_one_tconc(pcb, p);
ref(p,0) = 0;
p += 2*wordsize; p += 2*wordsize;
} }
ikpages* next = qu->next; ikpages* next = qu->next;