X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fvop.lisp;h=035a215aa2ac5844dbbb28737a8d9ac804bab5c0;hb=5cf3c4259d529e180d75d4d140f344e600d2b06b;hp=4b0366072bd02cdba01255e6fc859f11676779bb;hpb=cb83aa22932bf4b9bc74ac6f0fcd91db1702ad33;p=sbcl.git diff --git a/src/compiler/vop.lisp b/src/compiler/vop.lisp index 4b03660..035a215 100644 --- a/src/compiler/vop.lisp +++ b/src/compiler/vop.lisp @@ -239,10 +239,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)) @@ -434,7 +430,7 @@ ;; ;; :STRANGE ;; A segment of a "strange loop" in a non-reducible flow graph. - (kind (required-argument) :type (member :outer :natural :strange)) + (kind (missing-arg) :type (member :outer :natural :strange)) ;; The first and last blocks in the loop. There may be more than one tail, ;; since there may be multiple back branches to the same head. (head nil :type (or cblock null)) @@ -450,7 +446,9 @@ (depth 0 :type fixnum) ;; The head of the list of blocks directly within this loop. We must recurse ;; on INFERIORS to find all the blocks. - (blocks nil :type (or null cblock))) + (blocks nil :type (or null cblock)) + ;; Backend saves the first emitted block of each loop here. + (info nil)) (defprinter (cloop :conc-name loop-) kind @@ -561,8 +559,12 @@ ;; conditional that yields its result as a control transfer. The ;; emit function takes two info arguments: the target label and a ;; boolean flag indicating whether to negate the sense of the test. + ;; + ;; If RESULT-TYPES is a cons whose car is :CONDITIONAL, then this is + ;; a flag-setting VOP. The rest is a list of condition descriptors to + ;; be interpreted by the BRANCH-IF VOP (see $ARCH/pred.lisp). (arg-types nil :type list) - (result-types nil :type (or list (member :conditional))) + (result-types nil :type (or list (member :conditional) (cons (eql :conditional)))) ;; the primitive type restriction applied to each extra argument or ;; result following the fixed operands. If NIL, no extra ;; args/results are allowed. Otherwise, either * or a (:OR ...) list