0.8.17.17:
[sbcl.git] / src / compiler / mips / show.lisp
1 (in-package "SB!VM")
2
3
4 (define-vop (print)
5   (:args (object :scs (descriptor-reg) :target a0))
6   (:results (result :scs (descriptor-reg)))
7   (:save-p t)
8   (:temporary (:sc any-reg :offset cfunc-offset :target result :to (:result 0))
9               cfunc)
10   (:temporary (:sc descriptor-reg :offset 4 :from (:argument 0)) a0)
11   (:temporary (:sc control-stack :offset nfp-save-offset) nfp-save)
12   (:vop-var vop)
13   (:generator 0
14     (let ((cur-nfp (current-nfp-tn vop)))
15       (move a0 object)
16       (when cur-nfp
17         (store-stack-tn nfp-save cur-nfp))
18       (inst li cfunc (make-fixup "debug_print" :foreign))
19       (inst jal (make-fixup "call_into_c" :foreign))
20       (inst addu nsp-tn nsp-tn -16)
21       (inst addu nsp-tn nsp-tn 16)
22       (when cur-nfp
23         (load-stack-tn cur-nfp nfp-save))
24       (move result cfunc))))