From 0b735c57b9b2b815d549491d24d659fd5afa9749 Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Wed, 5 Aug 1992 21:34:38 +0000 Subject: [PATCH] Add stack checks under control of compiler:generate-stack-checks? --- v7/src/compiler/machines/i386/lapgen.scm | 8 ++++++-- v7/src/compiler/machines/i386/rules3.scm | 21 +++++++++++++-------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/v7/src/compiler/machines/i386/lapgen.scm b/v7/src/compiler/machines/i386/lapgen.scm index 2f2f1ddf3..8ab625818 100644 --- a/v7/src/compiler/machines/i386/lapgen.scm +++ b/v7/src/compiler/machines/i386/lapgen.scm @@ -1,7 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/i386/lapgen.scm,v 1.20 1992/05/14 03:06:55 jinx Exp $ -$MC68020-Header: /scheme/compiler/bobcat/RCS/lapgen.scm,v 4.42 1991/05/28 19:14:26 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/i386/lapgen.scm,v 1.21 1992/08/05 21:34:38 jinx Exp $ Copyright (c) 1992 Massachusetts Institute of Technology @@ -401,6 +400,11 @@ MIT in each case. |# (offset-reference regnum:regs-pointer register-block/utility-arg4-offset)) +(define reg:stack-guard + (offset-reference regnum:regs-pointer + register-block/stack-guard-offset)) + + (let-syntax ((define-codes (macro (start . names) (define (loop names index) diff --git a/v7/src/compiler/machines/i386/rules3.scm b/v7/src/compiler/machines/i386/rules3.scm index 0556cbb03..0e181448d 100644 --- a/v7/src/compiler/machines/i386/rules3.scm +++ b/v7/src/compiler/machines/i386/rules3.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/i386/rules3.scm,v 1.22 1992/02/28 20:23:57 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/i386/rules3.scm,v 1.23 1992/08/05 21:32:27 jinx Exp $ $MC68020-Header: /scheme/compiler/bobcat/RCS/rules3.scm,v 4.31 1991/05/28 19:14:55 jinx Exp $ Copyright (c) 1992 Massachusetts Institute of Technology @@ -385,13 +385,20 @@ MIT in each case. |# ;;; interrupt handler that saves and restores the dynamic link ;;; register. -(define-integrable (simple-procedure-header code-word label entry) +(define (interrupt-check interrupt-label) + (LAP (CMP W (R ,regnum:free-pointer) ,reg:compiled-memtop) + (JGE (@PCR ,interrupt-label)) + ,@(if compiler:generate-stack-checks? + (LAP (CMP W (R ,regnum:stack-pointer) ,reg:stack-guard) + (JL (@PCR ,interrupt-label))) + (LAP)))) + +(define (simple-procedure-header code-word label entry) (let ((gc-label (generate-label))) (LAP (LABEL ,gc-label) ,@(invoke-hook/call entry) ,@(make-external-label code-word label) - (CMP W (R ,regnum:free-pointer) ,reg:compiled-memtop) - (JGE (@PCR ,gc-label))))) + ,@(interrupt-check gc-label)))) (define-rule statement (CONTINUATION-ENTRY (? internal-label)) @@ -414,8 +421,7 @@ MIT in each case. |# (LABEL ,gc-label) ,@(invoke-interface/call code:compiler-interrupt-ic-procedure) ,@(make-external-label expression-code-word internal-label) - (CMP W (R ,regnum:free-pointer) ,reg:compiled-memtop) - (JGE (@PCR ,gc-label)))))) + ,@(interrupt-check gc-label))))) (define-rule statement (OPEN-PROCEDURE-HEADER (? internal-label)) @@ -533,8 +539,7 @@ MIT in each case. |# (ADD W (@R ,esp) (&U ,(generate/make-magic-closure-constant entry))) (LABEL ,internal-label) - (CMP W (R ,regnum:free-pointer) ,reg:compiled-memtop) - (JGE (@PCR ,gc-label))))))) + ,@(interrupt-check gc-label)))))) (define (generate/make-magic-closure-constant entry) (- (make-non-pointer-literal (ucode-type compiled-entry) 0) -- 2.25.1