- fixed how stack overflow check is performed (now using unsigned
arithmetic to compare the stack pointer with the redline). - disabled stack overflow check elimination due to a bug in the logic that assumes primitive calls are not recursive.
This commit is contained in:
		
							parent
							
								
									b9085e15da
								
							
						
					
					
						commit
						9b9464229a
					
				| 
						 | 
					@ -276,11 +276,11 @@
 | 
				
			||||||
      [(funcall rator arg*)       #t]
 | 
					      [(funcall rator arg*)       #t]
 | 
				
			||||||
      [(jmpcall label rator arg*) #t]
 | 
					      [(jmpcall label rator arg*) #t]
 | 
				
			||||||
      [(mvcall rator k)           #t] 
 | 
					      [(mvcall rator k)           #t] 
 | 
				
			||||||
 | 
					      [(primcall op arg*)     #t] ;;; (ormap A arg*)] PUNT!!! FIXME!
 | 
				
			||||||
      [(bind lhs* rhs* body)  (or (ormap NonTail rhs*) (NonTail body))]
 | 
					      [(bind lhs* rhs* body)  (or (ormap NonTail rhs*) (NonTail body))]
 | 
				
			||||||
      [(fix lhs* rhs* body)   (NonTail body)]
 | 
					      [(fix lhs* rhs* body)   (NonTail body)]
 | 
				
			||||||
      [(conditional e0 e1 e2) (or (NonTail e0) (NonTail e1) (NonTail e2))]
 | 
					      [(conditional e0 e1 e2) (or (NonTail e0) (NonTail e1) (NonTail e2))]
 | 
				
			||||||
      [(seq e0 e1)            (or (NonTail e0) (NonTail e1))]
 | 
					      [(seq e0 e1)            (or (NonTail e0) (NonTail e1))]
 | 
				
			||||||
      [(primcall op arg*)     (ormap A arg*)]
 | 
					 | 
				
			||||||
      [(forcall op arg*)      (ormap NonTail arg*)]
 | 
					      [(forcall op arg*)      (ormap NonTail arg*)]
 | 
				
			||||||
      [(known x t v) (NonTail x)]
 | 
					      [(known x t v) (NonTail x)]
 | 
				
			||||||
      [else (error who "invalid expr" x)]))
 | 
					      [else (error who "invalid expr" x)]))
 | 
				
			||||||
| 
						 | 
					@ -310,7 +310,7 @@
 | 
				
			||||||
      [(clambda label case* cp free* name)
 | 
					      [(clambda label case* cp free* name)
 | 
				
			||||||
       (make-clambda label (map ClambdaCase case*) cp free* name)]))
 | 
					       (make-clambda label (map ClambdaCase case*) cp free* name)]))
 | 
				
			||||||
  (define (Main x)
 | 
					  (define (Main x)
 | 
				
			||||||
    (if (Tail x) 
 | 
					    (if (Tail x)
 | 
				
			||||||
        (insert-check x) 
 | 
					        (insert-check x) 
 | 
				
			||||||
        x))
 | 
					        x))
 | 
				
			||||||
  (define (Program x)
 | 
					  (define (Program x)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2339,7 +2339,7 @@
 | 
				
			||||||
  [(E) 
 | 
					  [(E) 
 | 
				
			||||||
   (make-shortcut 
 | 
					   (make-shortcut 
 | 
				
			||||||
     (make-conditional 
 | 
					     (make-conditional 
 | 
				
			||||||
       (make-primcall '< 
 | 
					       (make-primcall 'u< 
 | 
				
			||||||
         (list esp (make-primcall 'mref
 | 
					         (list esp (make-primcall 'mref
 | 
				
			||||||
                     (list pcr (make-constant pcb-frame-redline)))))
 | 
					                     (list pcr (make-constant pcb-frame-redline)))))
 | 
				
			||||||
       (make-primcall 'interrupt '())
 | 
					       (make-primcall 'interrupt '())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue