;; since type checking is the responsibility of the values receiver,
;; these TNs primitive type is only based on the proven type
;; information.
- (locs nil :type list))
+ (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
;;; A VOP is a Virtual Operation. It represents an operation and the
;;; operands to the operation.
-(defstruct (vop (:constructor make-vop (block node info args results))
- (:copier nil))
+(def!struct (vop (:constructor make-vop (block node info args results))
+ (:copier nil))
;; VOP-INFO structure containing static info about the operation
(info nil :type (or vop-info null))
;; the IR2-BLOCK this VOP is in
;;; A TN-REF object contains information about a particular reference
;;; to a TN. The information in TN-REFs largely determines how TNs are
;;; packed.
-(defstruct (tn-ref (:constructor make-tn-ref (tn write-p))
- (:copier nil))
+(def!struct (tn-ref (:constructor make-tn-ref (tn write-p))
+ (:copier nil))
;; the TN referenced
(tn (missing-arg) :type tn)
;; Is this is a write reference? (as opposed to a read reference)
;;; the SC structure holds the storage base that storage is allocated
;;; in and information used to select locations within the SB
-(defstruct (sc (:copier nil))
+(def!struct (sc (:copier nil))
;; name, for printing and reference
(name nil :type symbol)
;; the number used to index SC cost vectors
\f
;;;; TNs
-(defstruct (tn (:include sset-element)
+(def!struct (tn (:include sset-element)
(:constructor make-random-tn)
(:constructor make-tn (number kind primitive-type sc))
(:copier nil))