[LLVMdev] Win64 Calling Convention problem
Stephan Reiter
stephan.reiter at gmail.com
Thu Dec 3 12:33:41 PST 2009
Hi!
>> When compiling this module with llc (Intel assembler syntax) I get the
>> following code. As you can see, the float4 argument is not passed to
>> the noise-function by pointer. Instead, noise is treated as if it
>> expected four individual floats as arguments, which are passed in the
>> registers XMM0-XMM3.
> That's correct behaviour. ABI under question is C/C++ ABI and it is a frontend
> responsibility to lower stuff like struct-by-value into ABI-compliant IR.
>
> So, in short - you need to pass pointer to the struct in your IR.
I don't know. I feel reluctant to generate different IRs for Win32 and
for Win64.
Since the C calling convention is the default for LLVM functions, I
thought that it would map to *the* Win64 calling convention (since
cdecl, fastcall and stdcall are all the same) when a 64-bit build was
used. This is quite confusing ...
More information about the llvm-dev
mailing list