comparison doc/manual/callconvs/callconv_arm32.tex @ 50:9bd3c5219505

- minor test code fix - doc - cleanups
author cslag
date Sun, 20 Dec 2015 15:38:14 +0100
parents c4de113dc1e9
children 9e9d6a90492a
comparison
equal deleted inserted replaced
49:4388e27eadd7 50:9bd3c5219505
336 \item caller cleans up the stack 336 \item caller cleans up the stack
337 \item first four non-floating-point words are passed using r0-r3 337 \item first four non-floating-point words are passed using r0-r3
338 \item first 16 single-precision, or 8 double-precision arguments are passed via s0-s15 or d0-d7, respectively (note that since s and d registers are aliased, already used ones are skipped) 338 \item first 16 single-precision, or 8 double-precision arguments are passed via s0-s15 or d0-d7, respectively (note that since s and d registers are aliased, already used ones are skipped)
339 \item subsequent parameters are pushed onto the stack (in right to left order, such that the stack pointer points to the first of the remaining parameters) 339 \item subsequent parameters are pushed onto the stack (in right to left order, such that the stack pointer points to the first of the remaining parameters)
340 \item note that as soon one floating point parameter is passed via the stack, subsequent single precision floating point parameters are also pushed onto the stack even if there are still free S* registers 340 \item note that as soon one floating point parameter is passed via the stack, subsequent single precision floating point parameters are also pushed onto the stack even if there are still free S* registers
341 \item if the callee takes the address of one of the parameters and uses it to address other parameters (e.g. varargs) it has to copy - in its prolog - the first four words to a reserved stack area adjacent to the other parameters on the stack @@@?check spilling of float args, also 341 \item floating point vararg parameters (only doubles, b/c of promotion) are pushed onth the stack, never passed via registers
342 \item if the callee takes the address of one of the parameters and uses it to address other parameters (e.g. varargs) it has to copy - in its prolog - the first four words (for first 4 integer arguments) to a reserved stack area adjacent to the other parameters on the stack
342 \item parameters \textless=\ 32 bits are passed as 32 bit words 343 \item parameters \textless=\ 32 bits are passed as 32 bit words
343 \item structures and unions are passed by value, with the first four words of the parameters in r0-r3 @@@?check doc 344 \item structures and unions are passed by value, with the first four words of the parameters in r0-r3 @@@?check doc
344 \item if return value is a structure, a pointer pointing to the return value's space is passed in r0, the first parameter in r1, etc. (see {\bf return values}) 345 \item if return value is a structure, a pointer pointing to the return value's space is passed in r0, the first parameter in r1, etc. (see {\bf return values})
345 \end{itemize} 346 \end{itemize}
346 347