Commit 9a68f59e authored by Bill Wendling's avatar Bill Wendling
Browse files

- r127238 mingw-w64 should define __MINGW32__, too.

 - r127329 declarations of __builtin_ia32_crc32**()
 - r127652 Tweak InitHeaderSearch.cpp for mingw-w64-gcc
 - r127654 _mm_malloc tweak
 - r127655 Tweak __declspec and __attribute__ for mingw

--- Merging r127238 into '.':
U    lib/Basic/Targets.cpp
--- Merging r127329 into '.':
A    test/Sema/builtins-decl.c
U    include/clang/Basic/BuiltinsX86.def
--- Merging r127652 into '.':
U    lib/Frontend/InitHeaderSearch.cpp
--- Merging r127654 into '.':
U    lib/Headers/mm_malloc.h
--- Merging r127655 into '.':
G    lib/Basic/Targets.cpp

llvm-svn: 128046
parent 59fb1a05
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -342,10 +342,10 @@ BUILTIN(__builtin_ia32_pcmpestriz128, "iV16ciV16cic","")

BUILTIN(__builtin_ia32_pcmpgtq, "V2LLiV2LLiV2LLi", "")

BUILTIN(__builtin_ia32_crc32qi, "iic", "")
BUILTIN(__builtin_ia32_crc32hi, "iis", "")
BUILTIN(__builtin_ia32_crc32si, "iii", "")
BUILTIN(__builtin_ia32_crc32di, "LLiLLiLLi", "")
BUILTIN(__builtin_ia32_crc32qi, "UiUiUc", "")
BUILTIN(__builtin_ia32_crc32hi, "UiUiUs", "")
BUILTIN(__builtin_ia32_crc32si, "UiUiUi", "")
BUILTIN(__builtin_ia32_crc32di, "ULLiULLiULLi", "")

// AES
BUILTIN(__builtin_ia32_aesenc128, "V2LLiV2LLiV2LLi", "")
+19 −2
Original line number Diff line number Diff line
@@ -1481,7 +1481,15 @@ public:
    Builder.defineMacro("_X86_");
    Builder.defineMacro("__MSVCRT__");
    Builder.defineMacro("__MINGW32__");

    // mingw32-gcc provides __declspec(a) as alias of __attribute__((a)).
    // In contrast, clang-cc1 provides __declspec(a) with -fms-extensions.
    if (Opts.Microsoft)
      // Provide "as-is" __declspec.
      Builder.defineMacro("__declspec", "__declspec");
    else
      // Provide alias of __attribute__ like mingw32-gcc.
      Builder.defineMacro("__declspec(a)", "__attribute__((a))");
  }
};
} // end anonymous namespace
@@ -1629,8 +1637,17 @@ public:
    WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);
    DefineStd(Builder, "WIN64", Opts);
    Builder.defineMacro("__MSVCRT__");
    Builder.defineMacro("__MINGW32__");
    Builder.defineMacro("__MINGW64__");

    // mingw32-gcc provides __declspec(a) as alias of __attribute__((a)).
    // In contrast, clang-cc1 provides __declspec(a) with -fms-extensions.
    if (Opts.Microsoft)
      // Provide "as-is" __declspec.
      Builder.defineMacro("__declspec", "__declspec");
    else
      // Provide alias of __attribute__ like mingw32-gcc.
      Builder.defineMacro("__declspec(a)", "__attribute__((a))");
  }
};
} // end anonymous namespace
+24 −12
Original line number Diff line number Diff line
@@ -76,6 +76,10 @@ public:
                                     llvm::StringRef Arch,
                                     llvm::StringRef Version);

  /// AddMinGW64CXXPaths - Add the necessary paths to support
  /// libstdc++ of x86_64-w64-mingw32 aka mingw-w64.
  void AddMinGW64CXXPaths(llvm::StringRef Base);

  /// AddDelimitedPaths - Add a list of paths delimited by the system PATH
  /// separator. The processing follows that of the CPATH variable for gcc.
  void AddDelimitedPaths(llvm::StringRef String);
@@ -207,6 +211,15 @@ void InitHeaderSearch::AddMinGWCPlusPlusIncludePaths(llvm::StringRef Base,
          CXXSystem, true, false, false);
}

void InitHeaderSearch::AddMinGW64CXXPaths(llvm::StringRef Base) {
  AddPath(Base,
          CXXSystem, true, false, false);
  AddPath(Base + "/x86_64-w64-mingw32",
          CXXSystem, true, false, false);
  AddPath(Base + "/backward",
          CXXSystem, true, false, false);
}

  // FIXME: This probably should goto to some platform utils place.
#ifdef _MSC_VER

@@ -534,6 +547,10 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
    AddPath("/usr/include/w32api", System, true, false, false);
    break;
  case llvm::Triple::MinGW32:
    // FIXME: We should be aware of i686-w64-mingw32.
    if (triple.getArch() == llvm::Triple::x86_64)
      AddPath("c:/mingw/x86_64-w64-mingw32/include",
              System, true, false, false);
    AddPath("/mingw/include", System, true, false, false);
    AddPath("c:/mingw/include", System, true, false, false);
    break;
@@ -571,18 +588,13 @@ AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple) {
    AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "3.4.4");
    break;
  case llvm::Triple::MinGW32:
    // FIXME: We should be aware of i686-w64-mingw32.
    if (triple.getArch() == llvm::Triple::x86_64) {
      // mingw-w64-20110207
    AddPath("c:/MinGW/include/c++/4.5.3", CXXSystem, true, false, false);
    AddPath("c:/MinGW/include/c++/4.5.3/x86_64-w64-mingw32", CXXSystem, true,
            false, false);
    AddPath("c:/MinGW/include/c++/4.5.3/backward", CXXSystem, true, false,
            false);
      AddMinGW64CXXPaths("c:/mingw/x86_64-w64-mingw32/include/c++/4.5.3");
      // mingw-w64-20101129
    AddPath("c:/MinGW/include/c++/4.5.2", CXXSystem, true, false, false);
    AddPath("c:/MinGW/include/c++/4.5.2/x86_64-w64-mingw32", CXXSystem, true,
            false, false);
    AddPath("c:/MinGW/include/c++/4.5.2/backward", CXXSystem, true, false,
            false);
      AddMinGW64CXXPaths("c:/mingw/x86_64-w64-mingw32/include/c++/4.5.2");
    }
    // Try gcc 4.5.2 (MSYS)
    AddMinGWCPlusPlusIncludePaths("/mingw/lib/gcc", "mingw32", "4.5.2");
    // Try gcc 4.5.0
+2 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ extern "C" int posix_memalign(void **memptr, size_t alignment, size_t size);
#endif
#endif

#if !(defined(_WIN32) && defined(_mm_malloc))
static __inline__ void *__attribute__((__always_inline__, __nodebug__,
                                       __malloc__))
_mm_malloc(size_t size, size_t align)
@@ -67,5 +68,6 @@ _mm_free(void *p)
{
  free(p);
}
#endif

#endif /* __MM_MALLOC_H */
+8 −0
Original line number Diff line number Diff line
// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=i686-mingw32
// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-mingw32

// mingw-w64's intrin.h has decls below.
// we should accept them.
extern unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char);
extern unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short);
extern unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int);