* intermediate step:
gc has tcbucket_size=16 compile allocates tcbucket_size=24
This commit is contained in:
		
							parent
							
								
									21f4ecb88d
								
							
						
					
					
						commit
						13e8f76f13
					
				
							
								
								
									
										
											BIN
										
									
								
								bin/ikarus
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/ikarus
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -1018,8 +1018,6 @@ add_object_proc(gc_t* gc, ikp x) | |||
|       ref(y,off_tcbucket_key) = key; | ||||
|       ref(y,off_tcbucket_val) = ref(x, off_tcbucket_val); | ||||
|       ref(y,off_tcbucket_next) = ref(x, off_tcbucket_next); | ||||
|       ref(y,off_tcbucket_dlink_next) = ref(x, off_tcbucket_dlink_next); | ||||
|       ref(y,off_tcbucket_dlink_prev) = ref(x, off_tcbucket_dlink_prev); | ||||
|       if((! is_fixnum(key)) && (tagof(key) != immediate_tag)){ | ||||
|         unsigned int kt = gc->segment_vector[page_index(key)]; | ||||
|         if((kt & gen_mask) <= gc->collect_gen){ | ||||
|  |  | |||
|  | @ -181,15 +181,11 @@ | |||
| #define disp_tcbucket_key          4 | ||||
| #define disp_tcbucket_val          8 | ||||
| #define disp_tcbucket_next        12 | ||||
| #define disp_tcbucket_dlink_prev  16 | ||||
| #define disp_tcbucket_dlink_next  20 | ||||
| #define tcbucket_size 24 | ||||
| #define tcbucket_size             16 | ||||
| #define off_tcbucket_tconc       (disp_tcbucket_tconc - vector_tag) | ||||
| #define off_tcbucket_key         (disp_tcbucket_key   - vector_tag) | ||||
| #define off_tcbucket_val         (disp_tcbucket_val   - vector_tag) | ||||
| #define off_tcbucket_next        (disp_tcbucket_next  - vector_tag) | ||||
| #define off_tcbucket_dlink_next  (disp_tcbucket_dlink_next  - vector_tag) | ||||
| #define off_tcbucket_dlink_prev  (disp_tcbucket_dlink_prev  - vector_tag) | ||||
| 
 | ||||
| 
 | ||||
| #define bignum_mask       0x7 | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								src/ikarus.boot
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								src/ikarus.boot
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -160,12 +160,8 @@ | |||
|     [$tcbucket-key        1   value] | ||||
|     [$tcbucket-val        1   value] | ||||
|     [$tcbucket-next       1   value] | ||||
|     [$tcbucket-dlink-next       1   value] | ||||
|     [$tcbucket-dlink-prev       1   value] | ||||
|     [$set-tcbucket-val!   2  effect] | ||||
|     [$set-tcbucket-next!  2  effect] | ||||
|     [$set-tcbucket-dlink-next!  2  effect] | ||||
|     [$set-tcbucket-dlink-prev!  2  effect] | ||||
|     [$set-tcbucket-tconc! 2  effect] | ||||
|     ;;; misc | ||||
|     [eof-object         0   value] | ||||
|  | @ -2038,11 +2034,7 @@ | |||
|         $make-record $record? $record/rtd? $record-rtd $record-ref $record-set! | ||||
|         primitive-set! primitive-ref | ||||
|         $make-tcbucket $tcbucket-key $tcbucket-val $tcbucket-next | ||||
|         $tcbucket-dlink-next  | ||||
|         $tcbucket-dlink-prev  | ||||
|         $set-tcbucket-val!  | ||||
|         $set-tcbucket-dlink-next!  | ||||
|         $set-tcbucket-dlink-prev!  | ||||
|         $set-tcbucket-next! $set-tcbucket-tconc!) | ||||
|        #t] | ||||
|       [else (error 'valid-arg-types? "unhandled op ~s" op)])) | ||||
|  | @ -3071,8 +3063,6 @@ | |||
|   (define disp-tcbucket-key   4) | ||||
|   (define disp-tcbucket-val   8) | ||||
|   (define disp-tcbucket-next 12) | ||||
|   (define disp-tcbucket-dlink-prev 16) | ||||
|   (define disp-tcbucket-dlink-next 20) | ||||
|   (define tcbucket-size      24) | ||||
|   (define record-ptag  5) | ||||
|   (define record-pmask 7) | ||||
|  | @ -3725,10 +3715,6 @@ | |||
|        (indirect-ref arg* (fx- disp-tcbucket-val vector-tag) ac)] | ||||
|       [($tcbucket-next)  | ||||
|        (indirect-ref arg* (fx- disp-tcbucket-next vector-tag) ac)] | ||||
|       [($tcbucket-dlink-next)  | ||||
|        (indirect-ref arg* (fx- disp-tcbucket-dlink-next vector-tag) ac)] | ||||
|       [($tcbucket-dlink-prev)  | ||||
|        (indirect-ref arg* (fx- disp-tcbucket-dlink-prev vector-tag) ac)] | ||||
|       [($port-handler)  | ||||
|        (indirect-ref arg* (fx- disp-port-handler vector-tag) ac)] | ||||
|       [($port-input-buffer)  | ||||
|  | @ -3947,8 +3933,8 @@ | |||
|               (movl eax (mem disp-tcbucket-val apr)) | ||||
|               (movl (Simple (cadddr arg*)) eax) | ||||
|               (movl eax (mem disp-tcbucket-next apr)) | ||||
|               (movl (int 0) (mem disp-tcbucket-dlink-prev apr)) | ||||
|               (movl (int 0) (mem disp-tcbucket-dlink-next apr)) | ||||
|               (movl (int 0) (mem 16 apr)) | ||||
|               (movl (int 0) (mem 20 apr)) | ||||
|               (movl apr eax) | ||||
|               (addl (int vector-tag) eax) | ||||
|               (addl (int (align tcbucket-size)) apr) | ||||
|  | @ -4180,10 +4166,6 @@ | |||
|        (indirect-assignment arg* (fx- disp-tcbucket-val vector-tag) ac)] | ||||
|       [($set-tcbucket-next!) | ||||
|        (indirect-assignment arg* (fx- disp-tcbucket-next vector-tag) ac)] | ||||
|       [($set-tcbucket-dlink-next!) | ||||
|        (indirect-assignment arg* (fx- disp-tcbucket-dlink-next vector-tag) ac)] | ||||
|       [($set-tcbucket-dlink-prev!) | ||||
|        (indirect-assignment arg* (fx- disp-tcbucket-dlink-prev vector-tag) ac)] | ||||
|       [($set-tcbucket-tconc!) | ||||
|        (indirect-assignment arg* (fx- disp-tcbucket-tconc vector-tag) ac)] | ||||
|       [($set-port-input-index!) | ||||
|  |  | |||
|  | @ -1,12 +1,11 @@ | |||
| 
 | ||||
| (let ([hash-rtd (make-record-type '"hash-table" '(hash-vec count tc dlink))]) | ||||
| (let ([hash-rtd (make-record-type '"hash-table" '(hash-vec count tc))]) | ||||
|   ;;; accessors | ||||
|   (define get-vec (record-field-accessor hash-rtd 0)) | ||||
|   (define set-vec! (record-field-mutator hash-rtd 0)) | ||||
|   (define get-count (record-field-accessor hash-rtd 1)) | ||||
|   (define set-count! (record-field-mutator hash-rtd 1)) | ||||
|   (define get-tc (record-field-accessor hash-rtd 2)) | ||||
|   (define get-dlink (record-field-accessor hash-rtd 3)) | ||||
|   ;;; implementation | ||||
| 
 | ||||
|   ;;; directly from Dybvig's paper | ||||
|  | @ -165,13 +164,7 @@ | |||
|                               [idx  | ||||
|                                ($fxlogand ih ($fx- ($vector-length vec) 1))]) | ||||
|                          ($set-tcbucket-next! bucket ($vector-ref vec idx)) | ||||
|                          ($vector-set! vec idx bucket))) | ||||
|                    (let ([b1 (get-dlink h)]) | ||||
|                      (let ([b2 ($tcbucket-dlink-next b1)]) | ||||
|                        ($set-tcbucket-dlink-next! bucket b2) | ||||
|                        ($set-tcbucket-dlink-prev! bucket b1) | ||||
|                        ($set-tcbucket-dlink-next! b1 bucket) | ||||
|                        ($set-tcbucket-dlink-prev! b2 bucket)))) | ||||
|                          ($vector-set! vec idx bucket)))) | ||||
|                  (let ([ct (get-count h)]) | ||||
|                    (set-count! h ($fxadd1 ct)) | ||||
|                    (when ($fx> ct ($vector-length vec)) | ||||
|  | @ -227,11 +220,7 @@ | |||
|       (lambda () | ||||
|         (let ([x (cons #f #f)]) | ||||
|           (let ([tc (cons x x)]) | ||||
|             (make (make-base-vec 32) 0 tc | ||||
|                   (let ([b ($make-tcbucket tc #f #f #f)]) | ||||
|                     ($set-tcbucket-dlink-next! b b) | ||||
|                     ($set-tcbucket-dlink-prev! b b) | ||||
|                     b))))))) | ||||
|             (make (make-base-vec 32) 0 tc)))))) | ||||
|   (primitive-set! 'get-hash-table | ||||
|     (lambda (h x v) | ||||
|       (if (hash-table? h) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Abdulaziz Ghuloum
						Abdulaziz Ghuloum