Mercurial > pub > dyncall > dyncall
comparison doc/manual/callconvs/callconv_arm32.tex @ 45:e5cdf4b4d813
- armhf callback fix for calls with >= 64byte of floating point params where d7 is filled before all args are pushed
author | cslag |
---|---|
date | Sat, 19 Dec 2015 23:24:35 +0100 |
parents | ecc9403e214a |
children | c4de113dc1e9 |
comparison
equal
deleted
inserted
replaced
44:b8f16ad80e34 | 45:e5cdf4b4d813 |
---|---|
335 \item stack parameter order: right-to-left | 335 \item stack parameter order: right-to-left |
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 as d7 is used, subsequent single precision floating point parameters are also pushed onto the stack, even if there are still free S* registers | |
340 \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 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 parameters \textless=\ 32 bits are passed as 32 bit words | 342 \item parameters \textless=\ 32 bits are passed as 32 bit words |
342 \item structures and unions are passed by value, with the first four words of the parameters in r0-r3 @@@?check doc | 343 \item structures and unions are passed by value, with the first four words of the parameters in r0-r3 @@@?check doc |
343 \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}) | 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}) |
344 \end{itemize} | 345 \end{itemize} |