0.pre7.129:
[sbcl.git] / src / compiler / meta-vmdef.lisp
index d814394..1b8c5ae 100644 (file)
   (declare (type list locations reserve-locations alternate-scs constant-scs))
   (declare (type boolean save-p))
   (unless (= (logcount alignment) 1)
-    (error "alignment not a power of two: ~D" alignment))
+    (error "alignment not a power of two: ~W" alignment))
 
   (let ((sb (meta-sb-or-lose sb-name)))
     (if (eq (sb-kind sb) :finite)
          (dolist (el locations)
            (declare (type unsigned-byte el))
            (unless (<= 1 (+ el element-size) size)
-             (error "SC element ~D out of bounds for ~S" el sb))))
+             (error "SC element ~W out of bounds for ~S" el sb))))
        (when locations
          (error ":LOCATIONS is meaningless in a ~S SB." (sb-kind sb))))
 
         (if (or (eq sb-name 'non-descriptor-stack)
                 (find 'non-descriptor-stack
                       (mapcar #'meta-sc-or-lose alternate-scs)
-                      :key #'(lambda (x)
-                               (sb-name (sc-sb x)))))
+                      :key (lambda (x)
+                             (sb-name (sc-sb x)))))
             t nil)))
     `(progn
        (eval-when (:compile-toplevel :load-toplevel :execute)
 
        (let ((old (svref *backend-sc-numbers* ',number)))
         (when (and old (not (eq (sc-name old) ',name)))
-          (warn "redefining SC number ~D from ~S to ~S" ',number
+          (warn "redefining SC number ~W from ~S to ~S" ',number
                 (sc-name old) ',name)))
 
        (setf (svref *backend-sc-numbers* ',number)
 ;;; of this move operation. The function is called with three
 ;;; arguments: the VOP (for context), and the source and destination
 ;;; TNs. An ASSEMBLE form is wrapped around the body. All uses of
-;;; DEFINE-MOVE-FUNCTION should be compiled before any uses of
+;;; DEFINE-MOVE-FUN should be compiled before any uses of
 ;;; DEFINE-VOP.
-(defmacro define-move-function ((name cost) lambda-list scs &body body)
+(defmacro define-move-fun ((name cost) lambda-list scs &body body)
   (declare (type index cost))
   (when (or (oddp (length scs)) (null scs))
     (error "malformed SCs spec: ~S" scs))
        (do-sc-pairs (from-sc to-sc ',scs)
         (unless (eq from-sc to-sc)
           (let ((num (sc-number from-sc)))
-            (setf (svref (sc-move-functions to-sc) num) ',name)
+            (setf (svref (sc-move-funs to-sc) num) ',name)
             (setf (svref (sc-load-costs to-sc) num) ',cost)))))
 
      (defun ,name ,lambda-list
 (defmacro !def-primitive-type (name scs &key (type name))
   (declare (type symbol name) (type list scs))
   (let ((scns (mapcar #'meta-sc-number-or-lose scs))
-       (get-type `(specifier-type ',type)))
+       (ctype-form `(specifier-type ',type)))
     `(progn
        (/show0 "doing !DEF-PRIMITIVE-TYPE, NAME=..")
        (/primitive-print ,(symbol-name name))
         (setf (gethash ',name *backend-meta-primitive-type-names*)
               (make-primitive-type :name ',name
                                    :scs ',scns
-                                   :type ,get-type)))
+                                   :type ,ctype-form)))
        ,(once-only ((n-old `(gethash ',name *backend-primitive-type-names*))
-                   (n-type get-type))
+                   (n-type ctype-form))
          `(progn
             ;; If the PRIMITIVE-TYPE structure already exists, we
             ;; destructively modify it so that existing references in
        (n-type (gensym)))
     `(let ((,n-vop (template-or-lose ',vop)))
        ,@(mapcar
-         #'(lambda (type)
-             `(let ((,n-type (primitive-type-or-lose ',type)))
-                ,@(mapcar
-                   #'(lambda (kind)
-                       (let ((slot (or (cdr (assoc kind
-                                                   *primitive-type-slot-alist*))
-                                       (error "unknown kind: ~S" kind))))
-                         `(setf (,slot ,n-type) ,n-vop)))
-                   kinds)))
+         (lambda (type)
+           `(let ((,n-type (primitive-type-or-lose ',type)))
+              ,@(mapcar
+                 (lambda (kind)
+                   (let ((slot (or (cdr (assoc kind
+                                               *primitive-type-slot-alist*))
+                                   (error "unknown kind: ~S" kind))))
+                     `(setf (,slot ,n-type) ,n-vop)))
+                 kinds)))
          types)
        nil)))
 
   ;; name of the operand (which we bind to the TN)
   (name nil :type symbol)
   ;; the way this operand is used:
-  (kind (required-argument)
+  (kind (missing-arg)
        :type (member :argument :result :temporary
                      :more-argument :more-result))
   ;; If true, the name of an operand that this operand is targeted to.
             (refs (cons (cons born t) index))))
          (incf index)))
       (let* ((sorted (sort (refs)
-                          #'(lambda (x y)
-                              (let ((x-time (car x))
-                                    (y-time (car y)))
-                                (if (time-spec-order x-time y-time)
-                                    (if (time-spec-order y-time x-time)
-                                        (and (not (cdr x)) (cdr y))
-                                        nil)
-                                    t)))
+                          (lambda (x y)
+                            (let ((x-time (car x))
+                                  (y-time (car y)))
+                              (if (time-spec-order x-time y-time)
+                                  (if (time-spec-order y-time x-time)
+                                      (and (not (cdr x)) (cdr y))
+                                      nil)
+                                  t)))
                           :key #'car))
             (oe-type '(mod #.max-vop-tn-refs)) ; :REF-ORDERING element type
             (te-type '(mod #.(* max-vop-tn-refs 2))) ; :TARGETS element type
 ;;; from to the move function used for loading those SCs. We quietly
 ;;; ignore restrictions to :non-packed (constant) and :unbounded SCs,
 ;;; since we don't load into those SCs.
-(defun find-move-functions (op load-p)
+(defun find-move-funs (op load-p)
   (collect ((funs))
     (dolist (sc-name (operand-parse-scs op))
       (let* ((sc (meta-sc-or-lose sc-name))
            (unless (member (sc-name alt) (operand-parse-scs op) :test #'eq)
              (let* ((altn (sc-number alt))
                     (name (if load-p
-                              (svref (sc-move-functions sc) altn)
-                              (svref (sc-move-functions alt) scn)))
+                              (svref (sc-move-funs sc) altn)
+                              (svref (sc-move-funs alt) scn)))
                     (found (or (assoc alt (funs) :test #'member)
                                (rassoc name (funs)))))
                (unless name
 ;;; move function, then we just call that when there is a load TN. If
 ;;; there are multiple possible move functions, then we dispatch off
 ;;; of the operand TN's type to see which move function to use.
-(defun call-move-function (parse op load-p)
-  (let ((funs (find-move-functions op load-p))
+(defun call-move-fun (parse op load-p)
+  (let ((funs (find-move-funs op load-p))
        (load-tn (operand-parse-load-tn op)))
     (if funs
        (let* ((tn `(tn-ref-tn ,(operand-parse-temp op)))
                          (setf (vop-parse-vop-var parse) (gensym))))
               (form (if (rest funs)
                         `(sc-case ,tn
-                           ,@(mapcar #'(lambda (x)
-                                         `(,(mapcar #'sc-name (car x))
-                                           ,(if load-p
-                                                `(,(cdr x) ,n-vop ,tn
-                                                  ,load-tn)
-                                                `(,(cdr x) ,n-vop ,load-tn
-                                                  ,tn))))
+                           ,@(mapcar (lambda (x)
+                                       `(,(mapcar #'sc-name (car x))
+                                         ,(if load-p
+                                              `(,(cdr x) ,n-vop ,tn
+                                                ,load-tn)
+                                              `(,(cdr x) ,n-vop ,load-tn
+                                                ,tn))))
                                      funs))
                         (if load-p
                             `(,(cdr (first funs)) ,n-vop ,tn ,load-tn)
                             (tn-ref-load-tn ,temp)))
                    (binds `(,name ,(decide-to-load parse op)))
                    (if (eq (operand-parse-kind op) :argument)
-                       (loads (call-move-function parse op t))
-                       (saves (call-move-function parse op nil))))
+                       (loads (call-move-fun parse op t))
+                       (saves (call-move-fun parse op nil))))
                   (t
                    (binds `(,name (tn-ref-tn ,temp)))))))
          (:temporary
                    (tn-ref-tn ,(operand-parse-temp op)))))
          ((:more-argument :more-result))))
 
-      `#'(lambda (,n-vop)
-          (let* (,@(access-operands (vop-parse-args parse)
-                                    (vop-parse-more-args parse)
-                                    `(vop-args ,n-vop))
+      `(lambda (,n-vop)
+        (let* (,@(access-operands (vop-parse-args parse)
+                                  (vop-parse-more-args parse)
+                                  `(vop-args ,n-vop))
                  ,@(access-operands (vop-parse-results parse)
                                     (vop-parse-more-results parse)
                                     `(vop-results ,n-vop))
                                     `(vop-temps ,n-vop))
                  ,@(when (vop-parse-info-args parse)
                      `((,n-info (vop-codegen-info ,n-vop))
-                       ,@(mapcar #'(lambda (x) `(,x (pop ,n-info)))
+                       ,@(mapcar (lambda (x) `(,x (pop ,n-info)))
                                  (vop-parse-info-args parse))))
                  ,@(when (vop-parse-variant-vars parse)
                      `((,n-variant (vop-info-variant (vop-info ,n-vop)))
-                       ,@(mapcar #'(lambda (x) `(,x (pop ,n-variant)))
+                       ,@(mapcar (lambda (x) `(,x (pop ,n-variant)))
                                  (vop-parse-variant-vars parse))))
                  ,@(when (vop-parse-node-var parse)
                      `((,(vop-parse-node-var parse) (vop-node ,n-vop))))
                  ,@(binds))
-            (declare (ignore ,@(vop-parse-ignores parse)))
-            ,@(loads)
-            (sb!assem:assemble (*code-segment* ,n-vop)
-              ,@(vop-parse-body parse))
-            ,@(saves))))))
+          (declare (ignore ,@(vop-parse-ignores parse)))
+          ,@(loads)
+          (sb!assem:assemble (*code-segment* ,n-vop)
+                             ,@(vop-parse-body parse))
+          ,@(saves))))))
 \f
 ;;; Given a list of operand specifications as given to DEFINE-VOP,
 ;;; return a list of OPERAND-PARSE structures describing the fixed
                            :key #'operand-parse-name))))))
   (values))
 \f
-;;; the top-level parse function: clobber PARSE to represent the
+;;; the top level parse function: clobber PARSE to represent the
 ;;; specified options.
 (defun parse-define-vop (parse specs)
   (declare (type vop-parse parse) (list specs))
           (type (or operand-parse null) more-op))
   (unless (eq types :unspecified)
     (let ((num (+ (length ops) (if more-op 1 0))))
-      (unless (= (count-if-not #'(lambda (x)
-                                  (and (consp x)
-                                       (eq (car x) :constant)))
+      (unless (= (count-if-not (lambda (x)
+                                (and (consp x)
+                                     (eq (car x) :constant)))
                               types)
                 num)
-       (error "expected ~D ~:[result~;argument~] type~P: ~S"
+       (error "expected ~W ~:[result~;argument~] type~P: ~S"
               num load-p types num)))
 
     (when more-op
 
   (when (vop-parse-translate parse)
     (let ((types (specify-operand-types types ops more-op)))
-      (mapc #'(lambda (x y)
-               (check-operand-type-scs parse x y load-p))
+      (mapc (lambda (x y)
+             (check-operand-type-scs parse x y load-p))
            (if more-op (butlast ops) ops)
-           (remove-if #'(lambda (x)
-                          (and (consp x)
-                               (eq (car x) ':constant)))
+           (remove-if (lambda (x)
+                        (and (consp x)
+                             (eq (car x) ':constant)))
                       (if more-op (butlast types) types)))))
 
   (values))
 ;;; set the Predicate attribute for each translated function when the
 ;;; VOP is conditional, causing IR1 conversion to ensure that a call
 ;;; to the translated is always used in a predicate position.
-(defun set-up-function-translation (parse n-template)
+(defun !set-up-fun-translation (parse n-template)
   (declare (type vop-parse parse))
-  (mapcar #'(lambda (name)
-             `(let ((info (function-info-or-lose ',name)))
-                (setf (function-info-templates info)
-                      (adjoin-template ,n-template
-                                       (function-info-templates info)))
-                ,@(when (vop-parse-conditional-p parse)
-                    '((setf (function-info-attributes info)
-                            (attributes-union
-                             (ir1-attributes predicate)
-                             (function-info-attributes info)))))))
+  (mapcar (lambda (name)
+           `(let ((info (fun-info-or-lose ',name)))
+              (setf (fun-info-templates info)
+                    (adjoin-template ,n-template (fun-info-templates info)))
+              ,@(when (vop-parse-conditional-p parse)
+                  '((setf (fun-info-attributes info)
+                          (attributes-union
+                           (ir1-attributes predicate)
+                           (fun-info-attributes info)))))))
          (vop-parse-translate parse)))
 
 ;;; Return a form that can be evaluated to get the TEMPLATE operand type
        (t
         (ecase (first type)
           (:or
-           ``(:or ,,@(mapcar #'(lambda (type)
-                                  `(primitive-type-or-lose ',type))
-                              (rest type))))
+           ``(:or ,,@(mapcar (lambda (type)
+                               `(primitive-type-or-lose ',type))
+                             (rest type))))
           (:constant
            ``(:constant ,#'(lambda (x)
                              (typep x ',(second type)))
 
     (let ((nvars (length (vop-parse-variant-vars parse))))
       (unless (= (length variant) nvars)
-       (error "expected ~D variant values: ~S" nvars variant)))
+       (error "expected ~W variant values: ~S" nvars variant)))
 
     `(make-vop-info
       :name ',(vop-parse-name parse)
       ,@(make-vop-info-types parse)
       :guard ,(when (vop-parse-guard parse)
-               `#'(lambda () ,(vop-parse-guard parse)))
+               `(lambda () ,(vop-parse-guard parse)))
       :note ',(vop-parse-note parse)
       :info-arg-count ,(length (vop-parse-info-args parse))
       :ltn-policy ',(vop-parse-ltn-policy parse)
         (setf (gethash ',name *backend-template-names*) ,n-res)
         (setf (template-type ,n-res)
               (specifier-type (template-type-specifier ,n-res)))
-        ,@(set-up-function-translation parse n-res))
+        ,@(!set-up-fun-translation parse n-res))
        ',name)))
 \f
 ;;;; emission macros
     (when (or (vop-parse-more-args parse) (vop-parse-more-results parse))
       (error "cannot use VOP with variable operand count templates"))
     (unless (= noperands (length operands))
-      (error "called with ~D operands, but was expecting ~D"
+      (error "called with ~W operands, but was expecting ~W"
             (length operands) noperands))
 
     (multiple-value-bind (acode abinds n-args)
                (<= (length fixed-results) result-count))
       (error "too many fixed results"))
     (unless (= (length info) info-count)
-      (error "expected ~D info args" info-count))
+      (error "expected ~W info args" info-count))
 
     (multiple-value-bind (acode abinds n-args)
        (make-operand-list fixed-args (car (last args)) nil)
                (error "T case is not last in SC-Case."))
              (clauses `(t nil ,@(rest case)))
              (return))
-           (clauses `((or ,@(mapcar #'(lambda (x)
-                                        `(eql ,(meta-sc-number-or-lose x)
-                                              ,n-sc))
+           (clauses `((or ,@(mapcar (lambda (x)
+                                      `(eql ,(meta-sc-number-or-lose x)
+                                            ,n-sc))
                                     (if (atom head) (list head) head)))
                       nil ,@(rest case))))))
 
 ;;; Return true if TNs SC is any of the named SCs, false otherwise.
 (defmacro sc-is (tn &rest scs)
   (once-only ((n-sc `(sc-number (tn-sc ,tn))))
-    `(or ,@(mapcar #'(lambda (x)
-                      `(eql ,n-sc ,(meta-sc-number-or-lose x)))
+    `(or ,@(mapcar (lambda (x)
+                    `(eql ,n-sc ,(meta-sc-number-or-lose x)))
                   scs))))
 
 ;;; Iterate over the IR2 blocks in component, in emission order.
 (defmacro do-physenv-ir2-blocks ((block-var physenv &optional result)
                                 &body body)
   (once-only ((n-physenv physenv))
-    (once-only ((n-first `(node-block
-                          (lambda-bind
-                           (physenv-function ,n-physenv)))))
+    (once-only ((n-first `(lambda-block (physenv-lambda ,n-physenv))))
       (once-only ((n-tail `(block-info
                            (component-tail
                             (block-component ,n-first)))))