I am trying to learn the calling conventions in DMD, I am sure I will have more than one question about them so as I come across them I will ask them in this thread. I am mainly reading the MSDN docs on the x64 calls and looking at disassemblies to confirm what I learn.

While I was looking at a call of the form void foo(float), I get the following disassembly:

movss       xmm0,dword ptr [_TMP0]
sub         rsp,20h
movd        rcx,xmm0
call        void main.foo(float)
add         rsp,20h


My question is, why is it passed twice, both in xmm0 and rcx? The MSDN docs say floating point are passed in xmm registers, why is it also copied in into rcx? Is it necessary for anything? If it was skipped would anything break?


Thanks

Reply via email to