(in-package "SB!VM")
-(file-comment
- "$Header$")
-
(define-vop (static-function-template)
(:save-p t)
(:policy :safe)
(moves)))
(defun static-function-template-vop (num-args num-results)
- (assert (and (<= num-args register-arg-count)
+ (unless (and (<= num-args register-arg-count)
(<= num-results register-arg-count))
- (num-args num-results)
- "Either too many args (~D) or too many results (~D). Max = ~D"
- num-args num-results register-arg-count)
+ (error "either too many args (~D) or too many results (~D); max = ~D"
+ num-args num-results register-arg-count))
(let ((num-temps (max num-args num-results)))
(collect ((temp-names) (temps) (arg-names) (args) (result-names) (results))
(dotimes (i num-results)
(let ((temp-name (intern (format nil "TEMP-~D" i))))
(temp-names temp-name)
(temps `(:temporary (:sc descriptor-reg
- :offset ,(nth i register-arg-offsets)
+ :offset ,(nth i *register-arg-offsets*)
:from ,(if (< i num-args)
`(:argument ,i)
'(:eval 1))
;; low tag of 3 is added the resulting value points to the
;; raw address slot of the fdefn (at +4).
(inst call (make-ea :dword
- :disp (+ *nil-value*
+ :disp (+ nil-value
(static-function-offset function))))
,(collect ((bindings) (links))
(do ((temp (temp-names) (cdr temp))
,num-results)))
,@(moves (result-names) (temp-names)))))))
-) ; eval-when (compile load eval)
+) ; EVAL-WHEN
(macrolet ((frob (num-args num-res)
(static-function-template-vop (eval num-args) (eval num-res))))