Pprinter doesn't format define-vop or sc-case nicely.
Consider this macro (modeled after a macrolet from float-sse2.lisp):
(defmacro frob (name sc ptype)
`(c:define-vop (,name float-op)
(:args (x :scs (,sc) :target r)
(y :scs (,sc)))
(:results (r :scs (,sc)))
(:arg-types ,ptype ,ptype)
(:result-types ,ptype)
(:generator 3
(c::sc-case y
(c::double-reg
:double)
(c::descriptor-reg
:desc)))))
When it's expanded we get something like:
* (macroexpand-1 '(frob double-float-op double-reg double-float))
(C:DEFINE-VOP (DOUBLE-FLOAT-OP FLOAT-OP)
(:ARGS (X :SCS (DOUBLE-REG) :TARGET R) (Y :SCS (DOUBLE-REG)))
(:RESULTS (R :SCS (DOUBLE-REG)))
(:ARG-TYPES DOUBLE-FLOAT DOUBLE-FLOAT)
(:RESULT-TYPES DOUBLE-FLOAT)
(:GENERATOR 3
(C:SC-CASE Y (C::DOUBLE-REG :DOUBLE) (C::DESCRIPTOR-REG :DESC))))
It would be really nice if it were indented more like:
(C:DEFINE-VOP (DOUBLE-FLOAT-OP FLOAT-OP)
(:ARGS (X :SCS (DOUBLE-REG) :TARGET R)
(Y :SCS (DOUBLE-REG)))
(:RESULTS (R :SCS (DOUBLE-REG)))
(:ARG-TYPES DOUBLE-FLOAT DOUBLE-FLOAT)
(:RESULT-TYPES DOUBLE-FLOAT)
(:GENERATOR 3
(C:SC-CASE Y
(C::DOUBLE-REG :DOUBLE)
(C::DESCRIPTOR-REG :DESC))))
Basically define-vop
should be indented more like a defun
, and
sc-case
should be like cond
or case
.