- ;; Locations used to hold the values of the continuation. If the
- ;; number of values if fixed, then there is one TN per value. If the
- ;; number of values is unknown, then this is a two-list of TNs
- ;; holding the start of the values glob and the number of values.
- ;; Note that 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))
+ ;; Locations used to hold the values of the LVAR. If the number of
+ ;; values if fixed, then there is one TN per value. If the number of
+ ;; values is unknown, then this is a two-list of TNs holding the
+ ;; start of the values glob and the number of values. Note that
+ ;; 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)
+ #!+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)))