- 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:
Abdulaziz Ghuloum 2008-08-13 22:28:22 -07:00
parent b9085e15da
commit 9b9464229a
2 changed files with 3 additions and 3 deletions

View File

@ -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)

View File

@ -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 '())