Index: clang/lib/Driver/ToolChains/PPCLinux.cpp =================================================================== --- clang/lib/Driver/ToolChains/PPCLinux.cpp +++ clang/lib/Driver/ToolChains/PPCLinux.cpp @@ -16,10 +16,7 @@ void PPCLinuxToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const { - // PPC wrapper headers are implementation of x86 intrinsics on PowerPC, which - // is not supported on PPC32 platform. - if (getArch() != llvm::Triple::ppc && - !DriverArgs.hasArg(clang::driver::options::OPT_nostdinc) && + if (!DriverArgs.hasArg(clang::driver::options::OPT_nostdinc) && !DriverArgs.hasArg(options::OPT_nobuiltininc)) { const Driver &D = getDriver(); SmallString<128> P(D.ResourceDir); Index: clang/lib/Headers/ppc_wrappers/emmintrin.h =================================================================== --- clang/lib/Headers/ppc_wrappers/emmintrin.h +++ clang/lib/Headers/ppc_wrappers/emmintrin.h @@ -35,6 +35,8 @@ #ifndef EMMINTRIN_H_ #define EMMINTRIN_H_ +#if defined(__linux__) && defined(__ppc64__) + #include /* We need definitions from the SSE header files. */ @@ -2315,4 +2317,8 @@ return (__m128d) __A; } +#else +#include_next +#endif /* defined(__linux__) && defined(__ppc64__) */ + #endif /* EMMINTRIN_H_ */ Index: clang/lib/Headers/ppc_wrappers/mm_malloc.h =================================================================== --- clang/lib/Headers/ppc_wrappers/mm_malloc.h +++ clang/lib/Headers/ppc_wrappers/mm_malloc.h @@ -10,6 +10,8 @@ #ifndef _MM_MALLOC_H_INCLUDED #define _MM_MALLOC_H_INCLUDED +#if defined(__linux__) && defined(__ppc64__) + #include /* We can't depend on since the prototype of posix_memalign @@ -45,4 +47,8 @@ free (ptr); } +#else +#include_next +#endif + #endif /* _MM_MALLOC_H_INCLUDED */ Index: clang/lib/Headers/ppc_wrappers/mmintrin.h =================================================================== --- clang/lib/Headers/ppc_wrappers/mmintrin.h +++ clang/lib/Headers/ppc_wrappers/mmintrin.h @@ -35,6 +35,8 @@ #ifndef _MMINTRIN_H_INCLUDED #define _MMINTRIN_H_INCLUDED +#if defined(__linux__) && defined(__ppc64__) + #include /* The Intel API is flexible enough that we must allow aliasing with other vector types, and their scalar components. */ @@ -1440,4 +1442,9 @@ return (res.as_m64); #endif } + +#else +#include_next +#endif /* defined(__linux__) && defined(__ppc64__) */ + #endif /* _MMINTRIN_H_INCLUDED */ Index: clang/lib/Headers/ppc_wrappers/xmmintrin.h =================================================================== --- clang/lib/Headers/ppc_wrappers/xmmintrin.h +++ clang/lib/Headers/ppc_wrappers/xmmintrin.h @@ -34,6 +34,8 @@ #ifndef _XMMINTRIN_H_INCLUDED #define _XMMINTRIN_H_INCLUDED +#if defined(__linux__) && defined(__ppc64__) + /* Define four value permute mask */ #define _MM_SHUFFLE(w,x,y,z) (((w) << 6) | ((x) << 4) | ((y) << 2) | (z)) @@ -1835,4 +1837,8 @@ /* For backward source compatibility. */ //# include +#else +#include_next +#endif /* defined(__linux__) && defined(__ppc64__) */ + #endif /* _XMMINTRIN_H_INCLUDED */