Prepare generic x86 TargetABI for proper MSVC support

Based on Rainer's work in
3e36652c2c
This commit is contained in:
Martin 2015-12-06 18:47:16 +01:00
parent 5fce371c91
commit e7f26a94b0
7 changed files with 21 additions and 9 deletions

View file

@ -29,11 +29,15 @@ struct X86TargetABI : TargetABI {
: isOSX(global.params.isOSX),
isMSVC(global.params.targetTriple.isWindowsMSVCEnvironment()) {}
llvm::CallingConv::ID callingConv(llvm::FunctionType *ft, LINK l) override {
llvm::CallingConv::ID callingConv(llvm::FunctionType *ft, LINK l,
FuncDeclaration *fdecl = nullptr) override {
switch (l) {
case LINKc:
case LINKcpp:
return llvm::CallingConv::C;
case LINKcpp:
return isMSVC && !ft->isVarArg() && fdecl && fdecl->isThis()
? llvm::CallingConv::X86_ThisCall
: llvm::CallingConv::C;
case LINKd:
case LINKdefault:
case LINKpascal: