Предаване на параметри, 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