1 ;;;; This software is part of the SBCL system. See the README file for
4 ;;;; This software is derived from the CMU CL system, which was
5 ;;;; written at Carnegie Mellon University and released into the
6 ;;;; public domain. The software is in the public domain and is
7 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
8 ;;;; files for more information.
12 ;;; The :full-call assembly-routines must use the same full-call
13 ;;; unknown-values return convention as a normal call, as some
14 ;;; of the routines will tail-chain to a static-function. The
15 ;;; routines themselves, however, take all of their arguments
16 ;;; in registers (this will typically be one or two arguments,
17 ;;; and is one of the lower bounds on the number of argument-
18 ;;; passing registers), and thus don't need a call frame, which
19 ;;; simplifies things for the normal call/return case. When it
20 ;;; is neccessary for one of the assembly-functions to call a
21 ;;; static-function it will construct the required call frame.
22 ;;; Also, none of the assembly-routines return other than one
23 ;;; value, which again simplifies the return path.
24 ;;; -- AB, 2006/Feb/05.
26 (!def-vm-support-routine generate-call-sequence
(name style vop
)
30 `((inst call
(make-fixup ',name
:assembly-routine
)))
34 `((note-this-location ,vop
:call-site
)
35 (inst call
(make-fixup ',name
:assembly-routine
))
36 (note-this-location ,vop
:single-value-return
)
38 ((member :cmov
*backend-subfeatures
*)
39 (inst cmov
:c esp-tn ebx-tn
))
41 (let ((single-value (gen-label)))
42 (inst jmp
:nc single-value
)
44 (emit-label single-value
)))))
45 '((:save-p
:compute-only
))))))
47 (!def-vm-support-routine generate-return-sequence
(style)