From 0d70c17f4c6882749c68f71bfe10f81bc9d390b6 Mon Sep 17 00:00:00 2001 From: dtc <dtc> Date: Wed, 4 Mar 1998 14:53:33 +0000 Subject: [PATCH] Update the MIPS and HPPA ports to use the new VM support routine make-nlx-entry-argument-start-location. Update the xep-allocate-frame VOP on the MIPS and HPPA ports to accept the new copy-more-arg-follows argument; the related VOPS need a re-write to actually make use of this argument and avoid more-arg stack problems. --- compiler/backend.lisp | 4 ++-- compiler/hppa/call.lisp | 5 +++-- compiler/hppa/nlx.lisp | 9 ++++++++- compiler/ir2tran.lisp | 23 +++++++++-------------- compiler/mips/call.lisp | 5 +++-- compiler/mips/nlx.lisp | 9 ++++++++- 6 files changed, 33 insertions(+), 22 deletions(-) diff --git a/compiler/backend.lisp b/compiler/backend.lisp index 16b6cc625..2d4c67b8f 100644 --- a/compiler/backend.lisp +++ b/compiler/backend.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/backend.lisp,v 1.31 1998/01/26 15:54:17 pw Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/backend.lisp,v 1.32 1998/03/04 14:53:22 dtc Rel $") ;;; ;;; ********************************************************************** ;;; @@ -85,7 +85,7 @@ ;; From NLX.LISP make-nlx-sp-tn make-dynamic-state-tns - #+(or x86 sparc alpha) make-nlx-entry-argument-start-location + make-nlx-entry-argument-start-location ;; From SUPPORT.LISP generate-call-sequence diff --git a/compiler/hppa/call.lisp b/compiler/hppa/call.lisp index 41c1dab23..5156c9b5f 100644 --- a/compiler/hppa/call.lisp +++ b/compiler/hppa/call.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/hppa/call.lisp,v 1.10 1994/10/31 04:42:45 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/hppa/call.lisp,v 1.11 1998/03/04 14:53:33 dtc Exp $") ;;; ;;; ********************************************************************** ;;; @@ -162,7 +162,8 @@ nfp val))))) (define-vop (xep-allocate-frame) - (:info start-lab) + (:info start-lab copy-more-arg-follows) + (:ignore copy-more-arg-follows) (:vop-var vop) (:temporary (:scs (non-descriptor-reg)) temp) (:generator 1 diff --git a/compiler/hppa/nlx.lisp b/compiler/hppa/nlx.lisp index 033d3ca76..e53efa2d1 100644 --- a/compiler/hppa/nlx.lisp +++ b/compiler/hppa/nlx.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/hppa/nlx.lisp,v 1.3 1994/10/31 04:42:45 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/hppa/nlx.lisp,v 1.4 1998/03/04 14:53:32 dtc Exp $") ;;; ;;; ********************************************************************** ;;; @@ -25,6 +25,13 @@ (make-representation-tn *fixnum-primitive-type* immediate-arg-scn) env)) +;;; Make-NLX-Entry-Argument-Start-Location -- Interface +;;; +;;; Make a TN for the argument count passing location for a +;;; non-local entry. +;;; +(def-vm-support-routine make-nlx-entry-argument-start-location () + (make-wired-tn *fixnum-primitive-type* immediate-arg-scn ocfp-offset)) ;;; Save and restore dynamic environment. diff --git a/compiler/ir2tran.lisp b/compiler/ir2tran.lisp index 209fb39b2..7fcf09526 100644 --- a/compiler/ir2tran.lisp +++ b/compiler/ir2tran.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir2tran.lisp,v 1.65 1998/01/26 15:54:20 pw Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir2tran.lisp,v 1.66 1998/03/04 14:53:24 dtc Exp $") ;;; ;;; ********************************************************************** ;;; @@ -1140,17 +1140,13 @@ (let ((start-label (entry-info-offset (leaf-info fun))) (env (environment-info (node-environment node)))) (let ((ef (functional-entry-function fun))) - (if (and (optional-dispatch-p ef) - (optional-dispatch-more-entry ef)) - ;; Special case the xep-allocate-frame + copy-more-arg case. - (progn - (vop xep-allocate-frame node block start-label - #+(or x86 sparc alpha) t) - (vop copy-more-arg node block (optional-dispatch-max-args ef))) - ;; No more args, so normal entry. - (vop xep-allocate-frame node block start-label - #+(or x86 sparc alpha) nil)) - + (cond ((and (optional-dispatch-p ef) (optional-dispatch-more-entry ef)) + ;; Special case the xep-allocate-frame + copy-more-arg case. + (vop xep-allocate-frame node block start-label t) + (vop copy-more-arg node block (optional-dispatch-max-args ef))) + (t + ;; No more args, so normal entry. + (vop xep-allocate-frame node block start-label nil))) (if (ir2-environment-environment env) (let ((closure (make-normal-tn (backend-any-primitive-type *backend*)))) @@ -1609,8 +1605,7 @@ (2cont (continuation-info cont)) (2info (nlx-info-info info)) (top-loc (ir2-nlx-info-save-sp 2info)) - (start-loc #-(or x86 sparc alpha) (make-old-fp-passing-location t) - #+(or x86 sparc alpha) (make-nlx-entry-argument-start-location)) + (start-loc (make-nlx-entry-argument-start-location)) (count-loc (make-argument-count-location)) (target (ir2-nlx-info-target 2info))) diff --git a/compiler/mips/call.lisp b/compiler/mips/call.lisp index 9fc3c5be6..7ffdb78af 100644 --- a/compiler/mips/call.lisp +++ b/compiler/mips/call.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/call.lisp,v 1.62 1994/10/31 04:44:16 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/call.lisp,v 1.63 1998/03/04 14:53:29 dtc Exp $") ;;; ;;; ********************************************************************** ;;; @@ -170,7 +170,8 @@ (define-vop (xep-allocate-frame) - (:info start-lab) + (:info start-lab copy-more-arg-follows) + (:ignore copy-more-arg-follows) (:vop-var vop) (:temporary (:scs (non-descriptor-reg)) temp) (:generator 1 diff --git a/compiler/mips/nlx.lisp b/compiler/mips/nlx.lisp index 22471eb5f..4b9bf8e17 100644 --- a/compiler/mips/nlx.lisp +++ b/compiler/mips/nlx.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/nlx.lisp,v 1.20 1994/10/31 04:44:16 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/nlx.lisp,v 1.21 1998/03/04 14:53:27 dtc Exp $") ;;; ;;; ********************************************************************** ;;; @@ -25,6 +25,13 @@ (make-representation-tn *fixnum-primitive-type* immediate-arg-scn) env)) +;;; Make-NLX-Entry-Argument-Start-Location -- Interface +;;; +;;; Make a TN for the argument count passing location for a +;;; non-local entry. +;;; +(def-vm-support-routine make-nlx-entry-argument-start-location () + (make-wired-tn *fixnum-primitive-type* immediate-arg-scn ocfp-offset)) ;;; Save and restore dynamic environment. -- GitLab