Mercurial > pub > dyncall > dyncall
changeset 322:a1fcb3e02270
- doc: stack layout fix for mips/o32
author | Tassilo Philipp |
---|---|
date | Sat, 16 Nov 2019 00:12:32 +0100 |
parents | 72b450cc3be8 |
children | 6ffb6a00cf55 |
files | doc/manual/callconvs/callconv_mips32.tex |
diffstat | 1 files changed, 38 insertions(+), 40 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/manual/callconvs/callconv_mips32.tex Sat Nov 16 00:14:47 2019 +0100 +++ b/doc/manual/callconvs/callconv_mips32.tex Sat Nov 16 00:12:32 2019 +0100 @@ -49,22 +49,22 @@ \begin{tabular*}{0.95\textwidth}{lll} Name & Alias & Brief description\\ \hline -{\bf \$0} & {\bf \$zero} & Hardware zero \\ -{\bf \$1} & {\bf \$at} & Assembler temporary \\ -{\bf \$2-\$3} & {\bf \$v0-\$v1} & Integer results \\ -{\bf \$4-\$11} & {\bf \$a0-\$a7} & Integer arguments, or double precision float arguments\\ -{\bf \$12-\$15,\$24} & {\bf \$t4-\$t7,\$t8} & Integer temporaries \\ -{\bf \$25} & {\bf \$t9} & Integer temporary, holds address of called function for PIC calls (by convention) \\ -{\bf \$16-\$23} & {\bf \$s0-\$s7} & Preserved \\ -{\bf \$26,\$27} & {\bf \$kt0,\$kt1} & Reserved for kernel \\ -{\bf \$28} & {\bf \$gp} & Global pointer, preserve \\ -{\bf \$29} & {\bf \$sp} & Stack pointer, preserve \\ -{\bf \$30} & {\bf \$s8} & Frame pointer, preserve \\ -{\bf \$31} & {\bf \$ra} & Return address, preserve \\ -{\bf hi, lo} & & Multiply/divide special registers \\ -{\bf \$f0,\$f2} & & Float results \\ -{\bf \$f1,\$f3,\$f4-\$f11,\$f20-\$f23} & & Float temporaries \\ -{\bf \$f12-\$f19} & & Single precision float arguments \\ +{\bf \$0} & {\bf \$zero} & hardware zero \\ +{\bf \$1} & {\bf \$at} & assembler temporary \\ +{\bf \$2-\$3} & {\bf \$v0-\$v1} & integer results \\ +{\bf \$4-\$11} & {\bf \$a0-\$a7} & integer arguments, or double precision float arguments\\ +{\bf \$12-\$15,\$24} & {\bf \$t4-\$t7,\$t8} & integer temporaries \\ +{\bf \$25} & {\bf \$t9} & integer temporary, holds address of called function for PIC calls (by convention) \\ +{\bf \$16-\$23} & {\bf \$s0-\$s7} & preserved \\ +{\bf \$26,\$27} & {\bf \$kt0,\$kt1} & reserved for kernel \\ +{\bf \$28} & {\bf \$gp} & global pointer, preserve \\ +{\bf \$29} & {\bf \$sp} & stack pointer, preserve \\ +{\bf \$30} & {\bf \$s8} & frame pointer, preserve \\ +{\bf \$31} & {\bf \$ra} & return address, preserve \\ +{\bf hi, lo} & & multiply/divide special registers \\ +{\bf \$f0,\$f2} & & float results \\ +{\bf \$f1,\$f3,\$f4-\$f11,\$f20-\$f23} & & float temporaries \\ +{\bf \$f12-\$f19} & & single precision float arguments \\ \end{tabular*} \caption{Register usage on MIPS32 EABI calling convention} \end{table} @@ -158,7 +158,7 @@ \item only on hard-float targets: if the very first call argument is a float, up to 2 floats or doubles can be passed via \$f12 and \$f14, respectively, for first and second argument \item only on hard-float targets: if any arguments are passed via float registers, skip \$a0-\$a3 for subsequent arguments as if the values were passed via them \item only on hard-float targets: note that if the first argument is not a float, but the second, it'll get passed via the \$a? registers -\item results are returned in \$v0 and \$v1, with \$v0 for all values < 64bit (only integer on hard-float targets) +\item results are returned in \$v0 and \$v1, with \$v0 for all values \textless\ 64bit (only integer on hard-float targets) \item only on hard-float targets: floating point results are returned in \$f0 (32-bit float), or \$f0 and \$f3 (64bit float) \item single precision float parameters (32 bit) are right-justified in their 8-byte slot on the stack on big endian targets, as they aren't promoted @@@ \end{itemize} @@ -170,29 +170,27 @@ \begin{figure}[h] \begin{tabular}{5|3|1 1} \hhline{~-~~} - & \vdots & & \\ -\hhline{~=~~} -local data & \hspace{4cm} & & \mrrbrace{12}{caller's frame} \\ -\hhline{~-~~} -register save area & return address & & \\ - & s7 & & \\ - & \vdots & & \\ - & s0 & & \\ -\hhline{~-~~} -\mrlbrace{7}{parameter area} & \ldots & \mrrbrace{3}{stack parameters} & \\ - & \ldots & & \\ - & \ldots & & \\ - & a3 & \mrrbrace{4}{spill area} & \\ - & a2 & & \\ - & a1 & & \\ - & a0 & & \\ -\hhline{~=~~} -local data & & & \mrrbrace{5}{current frame} \\ -\hhline{~-~~} -register save area (with return address) & & & \\ -\hhline{~-~~} -parameter area & & & \\ - & \vdots & & \\ + & \vdots & & \\ +\hhline{~=~~} +register save area (and padding) & \hspace{4cm} & & \\ +\hhline{~-~~} +local data (and padding) & & & \mrrbrace{10}{caller's frame} \\ +\hhline{~-~~} +\mrlbrace{8}{parameter area} & padding (if needed) & & \\ + & \ldots & \mrrbrace{3}{stack parameters} & \\ + & \ldots & & \\ + & \ldots & & \\ + & \$a3 & \mrrbrace{4}{spill area} & \\ + & \$a2 & & \\ + & \$a1 & & \\ + & \$a0 & & \\ +\hhline{~-~~} +register save area (with return address) & & & \\ +\hhline{~=~~} +local data & & & \mrrbrace{5}{current frame} \\ +\hhline{~-~~} +parameter area & & & \\ + & \vdots & & \\ \hhline{~-~~} \end{tabular} \caption{Stack layout on MIPS O32 calling convention}