summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorQiu Chaofan <qiucf@cn.ibm.com>2019-07-30 02:18:11 +0000
committerQiu Chaofan <qiucf@cn.ibm.com>2019-07-30 02:18:11 +0000
commit852d4446718e10301fc609760d2a2bd457bd59e0 (patch)
tree22865b9f8ef661553c25f16ff63be274cdf1e7ed /clang/lib
parenta171f6c9e1aea52effc95a57c4091c7ed14d5099 (diff)
downloadbcm5719-llvm-852d4446718e10301fc609760d2a2bd457bd59e0.tar.gz
bcm5719-llvm-852d4446718e10301fc609760d2a2bd457bd59e0.zip
[PowerPC] [Clang] Add platform guards to PPC vector intrinsics headers
Move the platform check out of PPC Linux toolchain code and add platform guards to the intrinsic headers, since they are supported currently only on 64-bit PowerPC targets. Reviewed By: Jinsong Ji Differential Revision: https://reviews.llvm.org/D64849 llvm-svn: 367281
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/ToolChains/PPCLinux.cpp5
-rw-r--r--clang/lib/Headers/ppc_wrappers/emmintrin.h6
-rw-r--r--clang/lib/Headers/ppc_wrappers/mm_malloc.h6
-rw-r--r--clang/lib/Headers/ppc_wrappers/mmintrin.h7
-rw-r--r--clang/lib/Headers/ppc_wrappers/xmmintrin.h6
5 files changed, 26 insertions, 4 deletions
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 5221e5d0e22..af2e3a21a0a 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -16,10 +16,7 @@ using namespace llvm::opt;
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);
diff --git a/clang/lib/Headers/ppc_wrappers/emmintrin.h b/clang/lib/Headers/ppc_wrappers/emmintrin.h
index 617ce24acd3..293276cc9be 100644
--- a/clang/lib/Headers/ppc_wrappers/emmintrin.h
+++ b/clang/lib/Headers/ppc_wrappers/emmintrin.h
@@ -35,6 +35,8 @@
#ifndef EMMINTRIN_H_
#define EMMINTRIN_H_
+#if defined(__linux__) && defined(__ppc64__)
+
#include <altivec.h>
/* We need definitions from the SSE header files. */
@@ -2315,4 +2317,8 @@ _mm_castsi128_pd(__m128i __A)
return (__m128d) __A;
}
+#else
+#include_next <emmintrin.h>
+#endif /* defined(__linux__) && defined(__ppc64__) */
+
#endif /* EMMINTRIN_H_ */
diff --git a/clang/lib/Headers/ppc_wrappers/mm_malloc.h b/clang/lib/Headers/ppc_wrappers/mm_malloc.h
index d91d7865c89..24b14c8e07c 100644
--- a/clang/lib/Headers/ppc_wrappers/mm_malloc.h
+++ b/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 <stdlib.h>
/* We can't depend on <stdlib.h> since the prototype of posix_memalign
@@ -41,4 +43,8 @@ _mm_free (void * ptr)
free (ptr);
}
+#else
+#include_next <mm_malloc.h>
+#endif
+
#endif /* _MM_MALLOC_H_INCLUDED */
diff --git a/clang/lib/Headers/ppc_wrappers/mmintrin.h b/clang/lib/Headers/ppc_wrappers/mmintrin.h
index b949653adf5..c55c44726f0 100644
--- a/clang/lib/Headers/ppc_wrappers/mmintrin.h
+++ b/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 <altivec.h>
/* The Intel API is flexible enough that we must allow aliasing with other
vector types, and their scalar components. */
@@ -1440,4 +1442,9 @@ extern __inline __m64
return (res.as_m64);
#endif
}
+
+#else
+#include_next <mmintrin.h>
+#endif /* defined(__linux__) && defined(__ppc64__) */
+
#endif /* _MMINTRIN_H_INCLUDED */
diff --git a/clang/lib/Headers/ppc_wrappers/xmmintrin.h b/clang/lib/Headers/ppc_wrappers/xmmintrin.h
index 1b322b66519..0f429fa0408 100644
--- a/clang/lib/Headers/ppc_wrappers/xmmintrin.h
+++ b/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 @@ do { \
/* For backward source compatibility. */
//# include <emmintrin.h>
+#else
+#include_next <xmmintrin.h>
+#endif /* defined(__linux__) && defined(__ppc64__) */
+
#endif /* _XMMINTRIN_H_INCLUDED */
OpenPOWER on IntegriCloud