Mercurial > pub > dyncall > dyncall
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:\\ |