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}