Next: Local Calls, Up: Calling Convention
;;; The :full-call assembly-routines must use the same full-call ;;; unknown-values return convention as a normal call, as some ;;; of the routines will tail-chain to a static-function. The ;;; routines themselves, however, take all of their arguments ;;; in registers (this will typically be one or two arguments, ;;; and is one of the lower bounds on the number of argument- ;;; passing registers), and thus don't need a call frame, which ;;; simplifies things for the normal call/return case. When it ;;; is neccessary for one of the assembly-functions to call a ;;; static-function it will construct the required call frame. ;;; Also, none of the assembly-routines return other than one ;;; value, which again simplifies the return path. ;;; -- AB, 2006/Feb/05.
There are a couple of assembly-routines that implement parts of
the process of returning or tail-calling with a variable number
of values. These are return-multiple
and tail-call-variable
in
src/assembly/x86/assem-rtns.lisp. They have their own calling
convention for invocation from a VOP, but implement various
block-move operations on the stack contents followed by a return
or tail-call operation.
That's about all I have to say about the assembly-routines.