SPRAC71B February 2019 – October 2023
Any arguments not passed in registers are placed on the stack in reverse order. Each argument is placed at the next available address correctly aligned for its type, subject to the following additional considerations:
For a variadic C function (that is, a function declared with an ellipsis indicating that it is called with varying numbers of arguments), the last explicitly declared argument and all remaining arguments are passed on the stack, so that its stack address can act as a reference for accessing the undeclared arguments.
Undeclared scalar arguments to a variadic function that are smaller than int are promoted to and passed as int, in accordance with the C language.
Alignment "holes" can occur between arguments passed on the stack, but "back-fill" does not occur.