Предаване на параметри, Microsoft Docs
Първите 4 целочислени аргумента се предават в регистрите. Целочислените стойности се предават по ред (отляво надясно) в RCX, RDX, R8 и R9. По-високите аргументи са 5 и в стека.
Аргументите за стойност с плаваща запетая и двойна точност се предават на XMM0 - XMM3 (до 4), като се използва целочисленият сокет (RCX, RDX, R8 и R9), който обикновено се използва, докато кардиналния сокет се отхвърля (вижте примера) и обратно.
__m128 типове, масиви и низове никога не се предават директно и се предава указател в разпределената памет от извикващия. Предават се структури или обединения с размер 8, 16, 32 или 64 - и __m64, ако са цели числа със същия размер. Структури или обединения, различни от тези размери, се предават като указател към разпределената памет от извикващия. За тези агрегатни типове, предавани като указател ( включително __m128), паметта не трябва да е от 16-та категория.
Вградените функции, които не разпределят пространство в стека и не извикват други функции, могат да използват други променливи регистри, за да предават допълнителни аргументи към регистрите, тъй като има тясна връзка между компилатора и изпълнението на вградената функция. Това е допълнителна полза от производителността.
Извикваният е отговорен за изчистването на параметрите на регистъра в пространството на сенките, ако е необходимо.
Следната таблица обобщава предаването на параметри:
плаваща запетая
Първите 4 параметъра са от XMM0 до XMM3. Останалите се предават в стека.
Първите 4 параметъра са RCX, RDX, R8, R9. Останалите се предават в стека.
Обобщени параметри (8, 16, 32 или 64 бита) и __m64
Първите 4 параметъра са RCX, RDX, R8, R9. Останалите се предават в стека.
Обобщени параметри (други)
Указател. Първите 4 параметъра, предадени като указатели към RCX, RDX, R8 и R9
Указател. Първите 4 параметъра, предадени като указатели към RCX, RDX, R8 и R9