* 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:
		
							parent
							
								
									5358680912
								
							
						
					
					
						commit
						bc3e216f63
					
				
							
								
								
									
										
											BIN
										
									
								
								bin/ikarus
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/ikarus
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -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;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue