comparison doc/manual/callconvs/callconv_mips.tex @ 110:9aa75a74614c

- working mips32 eabi callbacks - mips32 eabi doc update - switched some mips32 eabi call assembly to use more portable pseudo instructions for storing floats - fixed weird type use of var declaration in mips callbacks - ToDo update - converted some // comments to old c-style - test code build fix for some test suites on some platforms
author cslag
date Sat, 18 Jun 2016 19:38:22 +0200
parents bf8aef292216
children 6da2a7ee2a86
comparison
equal deleted inserted replaced
109:9e677d4c0b6b 110:9aa75a74614c
50 Name & Alias & Brief description\\ 50 Name & Alias & Brief description\\
51 \hline 51 \hline
52 {\bf \$0} & {\bf \$zero} & Hardware zero \\ 52 {\bf \$0} & {\bf \$zero} & Hardware zero \\
53 {\bf \$1} & {\bf \$at} & Assembler temporary \\ 53 {\bf \$1} & {\bf \$at} & Assembler temporary \\
54 {\bf \$2-\$3} & {\bf \$v0-\$v1} & Integer results \\ 54 {\bf \$2-\$3} & {\bf \$v0-\$v1} & Integer results \\
55 {\bf \$4-\$11} & {\bf \$a0-\$a7} & Integer arguments\\ 55 {\bf \$4-\$11} & {\bf \$a0-\$a7} & Integer arguments, or double precision float arguments\\
56 {\bf \$12-\$15,\$24} & {\bf \$t4-\$t7,\$t8} & Integer temporaries \\ 56 {\bf \$12-\$15,\$24} & {\bf \$t4-\$t7,\$t8} & Integer temporaries \\
57 {\bf \$25} & {\bf \$t9} & Integer temporary, hold the address of the called function for all PIC calls (by convention) \\ 57 {\bf \$25} & {\bf \$t9} & Integer temporary, hold the address of the called function for all PIC calls (by convention) \\
58 {\bf \$16-\$23} & {\bf \$s0-\$s7} & Preserved \\ 58 {\bf \$16-\$23} & {\bf \$s0-\$s7} & Preserved \\
59 {\bf \$26,\$27} & {\bf \$kt0,\$kt1} & Reserved for kernel \\ 59 {\bf \$26,\$27} & {\bf \$kt0,\$kt1} & Reserved for kernel \\
60 {\bf \$28} & {\bf \$gp} & Global pointer, preserve \\ 60 {\bf \$28} & {\bf \$gp} & Global pointer, preserve \\
62 {\bf \$30} & {\bf \$s8} & Frame pointer, preserve \\ 62 {\bf \$30} & {\bf \$s8} & Frame pointer, preserve \\
63 {\bf \$31} & {\bf \$ra} & Return address, preserve \\ 63 {\bf \$31} & {\bf \$ra} & Return address, preserve \\
64 {\bf hi, lo} & & Multiply/divide special registers \\ 64 {\bf hi, lo} & & Multiply/divide special registers \\
65 {\bf \$f0,\$f2} & & Float results \\ 65 {\bf \$f0,\$f2} & & Float results \\
66 {\bf \$f1,\$f3,\$f4-\$f11,\$f20-\$f23} & & Float temporaries \\ 66 {\bf \$f1,\$f3,\$f4-\$f11,\$f20-\$f23} & & Float temporaries \\
67 {\bf \$f12-\$f19} & & Float arguments \\ 67 {\bf \$f12-\$f19} & & Single precisition float arguments \\
68 \end{tabular*} 68 \end{tabular*}
69 \caption{Register usage on MIPS32 EABI calling convention} 69 \caption{Register usage on MIPS32 EABI calling convention}
70 \end{table} 70 \end{table}
71 71
72 \paragraph{Parameter passing} 72 \paragraph{Parameter passing}
73 73
74 \begin{itemize} 74 \begin{itemize}
75 \item Stack grows down 75 \item Stack grows down
76 \item Stack parameter order: right-to-left 76 \item Stack parameter order: right-to-left
77 \item Caller cleans up the stack 77 \item Caller cleans up the stack
78 \item Stack always aligned to 8 bytes. 78 \item Stack always aligned to 8 bytes
79 \item first 8 integers or floats are passed independently in registers using \$a0-\$a7 and \$f12-\$f19, respectively. 79 \item first 8 integers (<= 32bit) are passed in registers \$a0-\$a7
80 \item first 8 single precision floating point arguments are passed in registers \$f12-\$f19
80 \item if either integer or float registers are used up, the stack is used 81 \item if either integer or float registers are used up, the stack is used
81 \item 64-bit integers or floats are passed on two integer registers starting at an even register number, skipping one odd register. 82 \item 64-bit integers or double precision floats are passed on two general purpose registers starting at an even register number, skipping one odd register
82 \item \$a0-\$a7 and \$f12-\$f19 are not required to be preserved. 83 \item \$a0-\$a7 and \$f12-\$f19 are not required to be preserved
83 \item results are returned in \$v0 (32-bit), \$v0 and \$v1 (64-bit), \$f0 or \$f0 and \$f2 (2 $\times$ 32 bit float e.g. complex). 84 \item results are returned in \$v0 (32-bit), \$v0 and \$v1 (64-bit), \$f0 or \$f0 and \$f2 (2 $\times$ 32 bit float e.g. complex)
84 \end{itemize} 85 \end{itemize}
85 86
86 \paragraph{Stack layout} 87 \paragraph{Stack layout}
87 88
88 Stack directly after function prolog:\\ 89 Stack directly after function prolog:\\