[LLVMdev] Win64 calling convention

NAKAMURA Takumi geek4civic at gmail.com
Wed Jan 12 04:43:01 PST 2011


Good evening, Jay.


2011/1/12 Jay Cornwall <jay at jcornwall.me.uk>:
>  Hi,
>
>  I've encountered a problem invoking LLVM-generated x86_64 code on
>  Windows from MSVC-compiled code. There seems to be disagreement between
>  the two compilers over the calling convention for passing a 12 or 16
>  byte structure by value. e.g.
>
>  struct aggregate { int a; int b; int c; int d; };
>  int test(aggregate byVal) { ... }
>
>  LLVM chooses to pass byVal with a and b packed into rcx and c and d
>  packed into rdx. MSVC (8 here) instead passes a reference to the
>  structure in rcx. My reading of the System V ABI spec is unclear,
>  although Microsoft already deviate in their choice of fastcall registers
>  so perhaps it is irrelevant.

I guess it might be a clang's issue.
ToT clang does not know Win64 calling conversion and it seems you saw
"amd64-like" cc.

>  Should I file a bug for this?

You may file one though I have patches for it.
I will post patches for clang soon.


...Takumi




More information about the llvm-dev mailing list