[cfe-dev] [LLVMdev] Handling SRet on Windows x86

Timur Iskhodzhanov timurrrr at google.com
Wed Mar 20 17:04:29 PDT 2013


Anton,

[+Eric, Nick,
the e-mail thread context has been broken a few times, so you should
probably look at the llvmdev archives.
It all starts here:
http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-October/053961.html ]

So I've decided to make a new attempt to fix this issue.

We've discussed my patches with Eric and came up with the following idea:
a) IsTargetWindows should be true for all the targets that execute on
the Windows kernel, including Cygwin, MinGW and MSVC ABIs.

However, "Windows 32-bit ABI" usually implies "MSVC 32-bit ABI", so
it's Cygwin and MinGW (that are similar more similar to Itanium ABI
than to MSVC ABI) that should be exceptions from the general Win32
handling code.

That is,
b) We should add a IsTargetWin32 which is true if the MSVC 32-bit ABI
is used and false for Cygwin+MinGW.
c) We should add CC_X86_Win32_C and CC_X86_Win32_ThisCall and use them
only for MSVC 32-bit ABI.
d) Cygwin and MinGW should use the CC_X86_32_C

This way, Clang takes care of setting the SRet attribute wherever appropriate
and LLVM takes care of putting such return values onto stack in the
Win32/MSVC32 ABI.

What do you think about such a proposal?

One more data point: the ABI is wrong even in C!
http://llvm.org/bugs/show_bug.cgi?id=15556

--
Timur



More information about the cfe-dev mailing list