, "Abi64". MASM, , Windows, , , "64" , 64- , . , 64- Windows. - __vectorcall, - Microsoft x64 (, , , hellip;).
Microsoft x64 , __vectorcall , , . . , , f1 f2, . f1 - , f2, f2 - f1. :
f1:
rex_jmp r8 ; third parameter (pointer to f2) is passed in r8
, , .
v1 v2, , :
f1:
inc ecx ; increment v1 (passed in ecx)
; multiply v2 (xmm1) by v1 (ecx)
movd xmm0, ecx
cvtdq2ps xmm0, xmm0
mulss xmm1, xmm0
rex_jmp r8 ; third parameter (pointer to f2) is passed in r8
- , :
f1:
sub rsp, 40 ; allocate the required space on the stack
call r8 ; call f2 through the pointer, passed in r8
add rsp, 40 ; clean up the stack
ret
, /, , , .
, , ! Microsoft x64 RCX, RDX, R8 R9. . XMM0, XMM1, XMM2 XMM3. , .
, "", 4 , fp. :
βββββββββββββ¦βββββββββββββββββββββββββββ
β β TYPE β
β PARAMETER β ββββββββββ¦βββββββββββββββββ£
β β Integer β Floating-Point β
β ββββββββββββ¬ββββββββββ¬βββββββββββββββββ£
β First β RCX β XMM0 β
β ββββββββββββ¬ββββββββββ¬βββββββββββββββββ£
β Second β RDX β XMM1 β
β ββββββββββββ¬ββββββββββ¬βββββββββββββββββ£
β Third β R8 β XMM2 β
β ββββββββββββ¬ββββββββββ¬βββββββββββββββββ£
β Fourth β R9 β XMM3 β
β ββββββββββββ¬ββββββββββ©βββββββββββββββββ£
β (rest) β on stack β
βββββββββββββ©βββββββββββββββββββββββββββ
, . XMM0, , XMM1, , , "". ( x86-64 System V ABI, 6 args , FP args).
Windows , .