1.0.24.34: IR2: additional representation for predicates, conditional moves
[sbcl.git] / src / compiler / x86-64 / show.lisp
index f0e0201..b94e4bf 100644 (file)
 (define-vop (print)
   (:args (object :scs (descriptor-reg any-reg)))
   (:temporary (:sc unsigned-reg
-              :offset rax-offset
-              :target result
-              :from :eval
-              :to (:result 0))
-             rax)
+               :offset rax-offset
+               :target result
+               :from :eval
+               :to (:result 0))
+              rax)
   (:temporary (:sc unsigned-reg) call-target)
   (:results (result :scs (descriptor-reg)))
   (:save-p t)
   (:generator 100
-    (inst push object)
-    (inst lea rax (make-fixup (extern-alien-name "debug_print") :foreign))
+    (move rax object)
+    (inst push rbp-tn)
+    (inst mov rbp-tn rsp-tn)
+    (inst push rbp-tn)
+    (inst and rsp-tn -16)
+    (storew rax rsp-tn)
+    (inst lea rax (make-fixup "debug_print" :foreign))
     (inst lea call-target
-         (make-ea :qword
-                  :disp (make-fixup (extern-alien-name "call_into_c")
-                                    :foreign)))
+          (make-ea :qword
+                   :disp (make-fixup "call_into_c" :foreign)))
     (inst call call-target)
-    (inst add rsp-tn n-word-bytes)
+    (inst mov rsp-tn rbp-tn)
+    (inst pop rbp-tn)
     (move result rax)))