Fixed bug that caused mvcalls to lose their live masks.
This commit is contained in:
		
							parent
							
								
									a8e1b860bb
								
							
						
					
					
						commit
						eb24d17049
					
				|  | @ -1,6 +1,6 @@ | |||
| 
 | ||||
| #CFLAGS = -I/opt/local/include -Wall -DNDEBUG -O3 #-fomit-frame-pointer
 | ||||
| CFLAGS = -I/opt/local/include -Wall -g | ||||
| CFLAGS = -I/opt/local/include -Wall -DNDEBUG -O3 #-fomit-frame-pointer | ||||
| #CFLAGS = -I/opt/local/include -Wall -g
 | ||||
| LDFLAGS = -L/opt/local/lib -g -ldl -lgmp #-rdynamic | ||||
| CC = gcc | ||||
| all: ikarus | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								bin/ikarus
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/ikarus
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/ikarus.boot
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								src/ikarus.boot
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -505,7 +505,7 @@ | |||
|       [(primref op) | ||||
|        (case op | ||||
|          ;;; FIXME HERE | ||||
|          #;[(call-with-values) | ||||
|          [(call-with-values) | ||||
|           (cond | ||||
|             [(fx= (length rand*) 2) | ||||
|              (let ([producer (inline (car rand*) '())]  | ||||
|  | @ -2549,7 +2549,8 @@ | |||
|         [(primref? x) #f]  ;;;; PRIMREF CHECK | ||||
|         [(closure? x) #f] | ||||
|         [else         #t])) | ||||
|     (define (do-new-frame label op rand* si r call-convention rp-convention orig-live) | ||||
|     (define (do-new-frame label op rand* si r  | ||||
|               call-convention rp-convention orig-live) | ||||
|       (let ([start-si (if save-cp? (fxadd1 si) si)]) | ||||
|         (make-new-frame start-si (fx+ (length rand*) 2) | ||||
|           (let f ([r* rand*] [nsi (fxadd1 start-si)] [live orig-live]) | ||||
|  | @ -2619,6 +2620,27 @@ | |||
|              (f (cdr l*) (cons v nlhs*) (fxadd1 si)  | ||||
|                 (cons (cons (car l*) v) r) | ||||
|                 (cons si live)))]))) | ||||
|     (define (do-tail-frame-unoptimized label op rand* si r call-conv live) | ||||
|       (let f ([i si] [r* rand*] [live live]) | ||||
|         (cond | ||||
|           [(null? r*) | ||||
|            (make-seq | ||||
|              (make-eval-cp (check? op) (Expr op i r live)) | ||||
|              (let f ([i 1] [j si] [r* rand*]) | ||||
|                (cond | ||||
|                  [(null? r*)  | ||||
|                   (make-tailcall-cp call-conv label (length rand*))] | ||||
|                  [else | ||||
|                   (make-seq | ||||
|                     (make-assign (make-frame-var i) | ||||
|                                  (make-frame-var j)) | ||||
|                     (f (fxadd1 i) (fxadd1 j) (cdr r*)))])))] | ||||
|           [else | ||||
|            (let ([fv (make-frame-var i)] | ||||
|                  [rhs (Expr (car r*) i r live)]) | ||||
|              (make-seq | ||||
|                (make-assign fv rhs) | ||||
|                (f (fxadd1 i) (cdr r*) (cons i live))))]))) | ||||
|     (define (do-tail-frame label op rand* si r call-conv live) | ||||
|       (define (const? x) | ||||
|         (record-case x | ||||
|  | @ -2696,10 +2718,8 @@ | |||
|                [(case-info label fml* proper) | ||||
|                 (let-values ([(fml* si r live)  | ||||
|                               (bind-fml* fml*  | ||||
|                                          (if save-cp? | ||||
|                                              (fx+ si 2) | ||||
|                                              (fx+ si 1))  | ||||
|                                          r)]) | ||||
|                                 (if save-cp? (fx+ si 2) (fx+ si 1))  | ||||
|                                 r live)]) | ||||
|                   (make-clambda-case | ||||
|                     (make-case-info label fml* proper) | ||||
|                     (k body si r live)))])])) | ||||
|  | @ -2786,10 +2806,10 @@ | |||
|          (do-mvcall p c x si r live Expr)] | ||||
|         [else (error who "invalid expression ~s" (unparse x))])) | ||||
|     (Tail orig-x orig-si orig-r orig-live)) | ||||
|   (define (bind-fml* fml* si  r) | ||||
|   (define (bind-fml* fml* si r live) | ||||
|     (let f ([si si] [fml* fml*]) | ||||
|       (cond | ||||
|         [(null? fml*) (values '() si r '())] | ||||
|         [(null? fml*) (values '() si r live)] | ||||
|         [else | ||||
|           (let-values ([(nfml* nsi r live) | ||||
|                         (f (fxadd1 si) (cdr fml*))]) | ||||
|  | @ -2812,7 +2832,7 @@ | |||
|           [(clambda-case info body) | ||||
|            (record-case info | ||||
|              [(case-info label fml* proper) | ||||
|               (let-values ([(fml* si r live) (bind-fml* fml* 1 r)]) | ||||
|               (let-values ([(fml* si r live) (bind-fml* fml* 1 r '())]) | ||||
|                 (make-clambda-case  | ||||
|                   (make-case-info label fml* proper) | ||||
|                   (Body body si r live save-cp?)))])])))) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Abdulaziz Ghuloum
						Abdulaziz Ghuloum