X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fvop.lisp;h=ae18a61183fca96fff76fe8afd8872c3924384b6;hb=8e4ec430504f0f563280be26034af590dff50d34;hp=5395e236321966721b4f262fc7acf0e19cd2b63b;hpb=fae139755a81c0431e7f12f2af9b5f3abc1326dc;p=sbcl.git diff --git a/src/compiler/vop.lisp b/src/compiler/vop.lisp index 5395e23..ae18a61 100644 --- a/src/compiler/vop.lisp +++ b/src/compiler/vop.lisp @@ -94,9 +94,9 @@ ;;; ;;; BASIC-COMBINATION-INFO ;;; The template chosen by LTN, or -;;; :FULL if this is definitely a full call. -;;; :FUNNY if this is an oddball thing with IR2-convert. -;;; :LOCAL if this is a local call. +;;; :FULL if this is definitely a full call. +;;; :FUNNY if this is an oddball thing with IR2-convert. +;;; :LOCAL if this is a local call. ;;; ;;; NODE-TAIL-P ;;; After LTN analysis, this is true only in combination nodes that are @@ -106,8 +106,8 @@ ;;; and after IR2 conversion. It is stored in the BLOCK-INFO slot for ;;; the associated block. (defstruct (ir2-block (:include block-annotation) - (:constructor make-ir2-block (block)) - (:copier nil)) + (:constructor make-ir2-block (block)) + (:copier nil)) ;; the IR2-BLOCK's number, which differs from BLOCK's BLOCK-NUMBER ;; if any blocks are split. This is assigned by lifetime analysis. (number nil :type (or index null)) @@ -152,21 +152,26 @@ ;; index for a TN is non-zero in WRITTEN if it is ever written in ;; the block, and in LIVE-OUT if the first reference is a read. (written (make-array local-tn-limit :element-type 'bit - :initial-element 0) - :type local-tn-bit-vector) + :initial-element 0) + :type local-tn-bit-vector) (live-out (make-array local-tn-limit :element-type 'bit) - :type local-tn-bit-vector) + :type local-tn-bit-vector) ;; This is similar to the above, but is updated by lifetime flow ;; analysis to have a 1 for LTN numbers of TNs live at the end of ;; the block. This takes into account all TNs that aren't :LIVE. (live-in (make-array local-tn-limit :element-type 'bit :initial-element 0) - :type local-tn-bit-vector) + :type local-tn-bit-vector) ;; a thread running through the global-conflicts structures for this ;; block, sorted by TN number (global-tns nil :type (or global-conflicts null)) ;; the assembler label that points to the beginning of the code for ;; this block, or NIL when we haven't assigned a label yet (%label nil) + ;; the assembler label that points to the trampoline for this block, + ;; or NIL if unassigned yet. Only meaningful for local call targets. + (%trampoline-label nil) + ;; T if the preceding block assumes it can drop thru to %label + (dropped-thru-to nil) ;; list of LOCATION-INFO structures describing all the interesting ;; (to the debugger) locations in this block (locations nil :type list)) @@ -182,8 +187,8 @@ ;;; An IR2-LVAR structure is used to annotate LVARs that are used as a ;;; function result LVARs or that receive MVs. (defstruct (ir2-lvar - (:constructor make-ir2-lvar (primitive-type)) - (:copier nil)) + (:constructor make-ir2-lvar (primitive-type)) + (:copier nil)) ;; If this is :DELAYED, then this is a single value LVAR for which ;; the evaluation of the use is to be postponed until the evaluation ;; of destination. This can be done for ref nodes or predicates @@ -215,13 +220,7 @@ ;; these TNs primitive type is only based on the proven type ;; information. (locs nil :type list) - #!+stack-grows-downward-not-upward (stack-pointer nil :type (or tn null))) -;; For upward growing stack start of stack block and start of object -;; differ only by lowtag. -#!-stack-grows-downward-not-upward -(defmacro ir2-lvar-stack-pointer (2lvar) - `(first (ir2-lvar-locs ,2lvar))) (defprinter (ir2-lvar) kind @@ -245,10 +244,6 @@ ;; SC and OFFSET are already filled in. ;; ;; CONSTANT-TNs are non-packed TNs that represent constants. - ;; :CONSTANT TNs may eventually be converted to :CACHED-CONSTANT - ;; normal TNs. - ;; - ;; FIXME: What is :CACHED-CONSTANT? (normal-tns nil :type (or tn null)) (restricted-tns nil :type (or tn null)) (wired-tns nil :type (or tn null)) @@ -281,7 +276,7 @@ ;; Is replaced by the code pointer for the specified function. ;; This is how compiled code (including DEFUN) gets its hands on ;; a function. is the XEP lambda for the called - ;; function; its LEAF-INFO should be an ENTRY-INFO structure. + ;; function; its LEAF-INFO should be an ENTRY-INFO structure. ;; ;; (:label .