Interfejsowanie C w trybie 64 bitowym
Przekazywanie parametrów w trybach 64 bitowych (UNIX)
- pierwsze sześć argumentów, które są liczbami całkowitymi lub wskaźnikami (w kolejności od lewej do prawej)
są umieszczane kolejno w rejestrach
RDI, RSI, RDX, RCX, R8, R9
- Agumenty zmiennoprzecinkowe (poza
long double) są umieszczane w rejestrach SSE:
XMM0, XMM1, ..., XMM7
- Rejestr
RAX powinien zawierać liczbę liczb zmiennoprzecinkowych umieszczonych w SSE
- Pozostałe argumenty są umieszczane na stosie w kolejności od prawej do lewej.
- Funkcja musi zachowywać wartość rejestrów:
RBX, RBP, RSP, R12, R13, R14, R15
- Pozostałe rejestry (w tym zmiennoprzecinkowe) mogą być dowolnie modyfikowane,
- Wynik jest umieszczany w
RAX, RDX - całkowitoliczbowy, wskaźnik
XMM0,XMM1 - zmiennoprzecinkowy
ST0,ST1 - long double
- pamięci pod adresem wskazanym przez RDI jeżeli zwraca się typ złożony.
Pełna specyfikacja 64-bit ABI
Tomasz Kapela, Kraków 2011-2020