Mercurial > pub > dyncall > dyncall
comparison doc/manual/callconvs/callconv_mips64.tex @ 119:f1cc11a9eb98
- mips64 manual appendix clarifications
author | cslag |
---|---|
date | Mon, 04 Jul 2016 00:59:59 +0200 |
parents | 4a64b733dc76 |
children | d203ba52c246 |
comparison
equal
deleted
inserted
replaced
118:f0437f85091b | 119:f1cc11a9eb98 |
---|---|
65 | 65 |
66 \begin{itemize} | 66 \begin{itemize} |
67 \item Stack grows down | 67 \item Stack grows down |
68 \item Stack parameter order: right-to-left | 68 \item Stack parameter order: right-to-left |
69 \item Caller cleans up the stack | 69 \item Caller cleans up the stack |
70 \item first 8 integers (<= 64-bit)are passed in registers \$a0-\$a7 | 70 \item first 8 params \textgreater=\ 64-bit are passed in registers \$a0-\$a7 for integers and \$f12-\$f19 for floats - with mixed float and int parameters, |
71 \item first 8 floating point arguments (single or double precision) are passed in registers \$f12-\$f19 | 71 some registers are left out (e.g. first parameter ends up in \$a0 or \$f12, second in \$a1 or \$f13, etc.) |
72 \item if either integer or float registers are used up, the stack is used | 72 \item subsequent arguments are pushed onto the stack |
73 \item all stack entries are 64-bit aligned | 73 \item all stack entries are 64-bit aligned |
74 \item all stack regions are 16-byte aligned | |
74 \item results are returned in \$v0, and for a second one \$v1 is used | 75 \item results are returned in \$v0, and for a second one \$v1 is used |
75 \item float arguments passed in the variable part of a vararg call are passed like integers | 76 \item float arguments passed in the variable part of a vararg call are passed like integers |
76 \end{itemize} | 77 \end{itemize} |
77 | 78 |
78 \paragraph{Stack layout} | 79 \paragraph{Stack layout} |
79 | 80 |
80 Stack directly after function prolog:\\ | 81 Stack directly after function prolog:\\ |
82 @@@ WIP, might be wrong | |
81 | 83 |
82 \begin{figure}[h] | 84 \begin{figure}[h] |
83 \begin{tabular}{5|3|1 1} | 85 \begin{tabular}{5|3|1 1} |
84 \hhline{~-~~} | 86 \hhline{~-~~} |
85 & \vdots & & \\ | 87 & \vdots & & \\ |
90 \hhline{~-~~} | 92 \hhline{~-~~} |
91 \mrlbrace{3}{parameter area} & \ldots & \mrrbrace{3}{stack parameters} & \\ | 93 \mrlbrace{3}{parameter area} & \ldots & \mrrbrace{3}{stack parameters} & \\ |
92 & \ldots & & \\ | 94 & \ldots & & \\ |
93 & \ldots & & \\ | 95 & \ldots & & \\ |
94 \hhline{~=~~} | 96 \hhline{~=~~} |
95 register save area & padding? @@@ & & \mrrbrace{7}{current frame} \\ | 97 register save area & padding & & \mrrbrace{7}{current frame} \\ |
96 & \$ra & & \\ | 98 & \$ra & & \\ |
97 & \$s8 & & \\ | 99 & \$s8 & & \\ |
98 & \$gp & & \\ | 100 & \$gp & & \\ |
99 \hhline{~-~~} | 101 \hhline{~-~~} |
100 local data & & & \\ | 102 local data & & & \\ |