Improve basic block ordering for some loops.
[sbcl.git] / src / compiler / x86 / show.lisp
1 ;;;; VOPs which are useful for following the progress of the system
2 ;;;; early in boot
3
4 ;;;; This software is part of the SBCL system. See the README file for
5 ;;;; more information.
6 ;;;;
7 ;;;; This software is derived from the CMU CL system, which was
8 ;;;; written at Carnegie Mellon University and released into the
9 ;;;; public domain. The software is in the public domain and is
10 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
11 ;;;; files for more information.
12
13 (in-package "SB!VM")
14
15 ;;; FIXME: should probably become conditional on #!+SB-SHOW
16 ;;; FIXME: should be called DEBUG-PRINT or COLD-PRINT
17 (define-vop (print)
18   (:args (object :scs (descriptor-reg any-reg)))
19   (:temporary (:sc unsigned-reg
20                :offset eax-offset
21                :target result
22                :from :eval
23                :to (:result 0))
24               eax)
25   #!+darwin
26   (:temporary (:sc unsigned-reg
27                    :offset esi-offset)
28               prev-stack-pointer)
29   (:results (result :scs (descriptor-reg)))
30   (:save-p t)
31   (:generator 100
32     #!-darwin
33     (inst push object)
34     #!+darwin
35     (progn
36       ;; the stack should be 16-byte aligned on Darwin
37       (inst mov prev-stack-pointer esp-tn)
38       (inst sub esp-tn n-word-bytes)
39       (align-stack-pointer esp-tn)
40       (storew object esp-tn))
41     (inst lea eax (make-fixup "debug_print" :foreign))
42     (inst call (make-fixup "call_into_c" :foreign))
43     #!-darwin
44     (inst add esp-tn n-word-bytes)
45     #!+darwin
46     (inst mov esp-tn prev-stack-pointer)
47     (move result eax)))