From 708084ec379ea8f409fbae6ba5d4154ea469f25a Mon Sep 17 00:00:00 2001 From: Qiu Chaofan Date: Thu, 21 Jul 2022 16:33:41 +0800 Subject: [PowerPC] Support x86 compatible intrinsics on AIX These headers used to be guarded only on PowerPC64 Linux or FreeBSD, but they can also be enabled for AIX OS target since it's big-endian ready. Reviewed By: shchenz Differential Revision: https://reviews.llvm.org/D129461 --- clang/lib/Driver/ToolChains/AIX.cpp | 8 +++++--- clang/lib/Headers/ppc_wrappers/emmintrin.h | 7 ++++--- clang/lib/Headers/ppc_wrappers/mm_malloc.h | 3 ++- clang/lib/Headers/ppc_wrappers/mmintrin.h | 7 ++++--- clang/lib/Headers/ppc_wrappers/pmmintrin.h | 7 ++++--- clang/lib/Headers/ppc_wrappers/smmintrin.h | 7 ++++--- clang/lib/Headers/ppc_wrappers/tmmintrin.h | 7 ++++--- clang/lib/Headers/ppc_wrappers/xmmintrin.h | 7 ++++--- 8 files changed, 31 insertions(+), 22 deletions(-) (limited to 'clang/lib') diff --git a/clang/lib/Driver/ToolChains/AIX.cpp b/clang/lib/Driver/ToolChains/AIX.cpp index 19054ae..64be5fe 100644 --- a/clang/lib/Driver/ToolChains/AIX.cpp +++ b/clang/lib/Driver/ToolChains/AIX.cpp @@ -222,11 +222,13 @@ void AIX::AddClangSystemIncludeArgs(const ArgList &DriverArgs, llvm::StringRef Sysroot = GetHeaderSysroot(DriverArgs); const Driver &D = getDriver(); - // Add the Clang builtin headers (/include). if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) { SmallString<128> P(D.ResourceDir); - path::append(P, "/include"); - addSystemInclude(DriverArgs, CC1Args, P.str()); + // Add the PowerPC intrinsic headers (/include/ppc_wrappers) + path::append(P, "include", "ppc_wrappers"); + addSystemInclude(DriverArgs, CC1Args, P); + // Add the Clang builtin headers (/include) + addSystemInclude(DriverArgs, CC1Args, path::parent_path(P.str())); } // Return if -nostdlibinc is specified as a driver option. diff --git a/clang/lib/Headers/ppc_wrappers/emmintrin.h b/clang/lib/Headers/ppc_wrappers/emmintrin.h index 8c6aa23..a4c458a 100644 --- a/clang/lib/Headers/ppc_wrappers/emmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/emmintrin.h @@ -36,7 +36,8 @@ #ifndef EMMINTRIN_H_ #define EMMINTRIN_H_ -#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) +#if defined(__ppc64__) && \ + (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) #include @@ -2261,7 +2262,7 @@ extern __inline __m128d #else #include_next -#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ - */ +#endif /* defined(__ppc64__) && + * (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) */ #endif /* EMMINTRIN_H_ */ diff --git a/clang/lib/Headers/ppc_wrappers/mm_malloc.h b/clang/lib/Headers/ppc_wrappers/mm_malloc.h index 29c1de4..6592091 100644 --- a/clang/lib/Headers/ppc_wrappers/mm_malloc.h +++ b/clang/lib/Headers/ppc_wrappers/mm_malloc.h @@ -10,7 +10,8 @@ #ifndef _MM_MALLOC_H_INCLUDED #define _MM_MALLOC_H_INCLUDED -#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) +#if defined(__ppc64__) && \ + (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) #include diff --git a/clang/lib/Headers/ppc_wrappers/mmintrin.h b/clang/lib/Headers/ppc_wrappers/mmintrin.h index 6f9c137..70e8b81 100644 --- a/clang/lib/Headers/ppc_wrappers/mmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/mmintrin.h @@ -35,7 +35,8 @@ #ifndef _MMINTRIN_H_INCLUDED #define _MMINTRIN_H_INCLUDED -#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) +#if defined(__ppc64__) && \ + (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) #include /* The Intel API is flexible enough that we must allow aliasing with other @@ -1446,7 +1447,7 @@ extern __inline __m64 #else #include_next -#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ - */ +#endif /* defined(__ppc64__) && + * (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) */ #endif /* _MMINTRIN_H_INCLUDED */ diff --git a/clang/lib/Headers/ppc_wrappers/pmmintrin.h b/clang/lib/Headers/ppc_wrappers/pmmintrin.h index 889f57a..fda39ed 100644 --- a/clang/lib/Headers/ppc_wrappers/pmmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/pmmintrin.h @@ -39,7 +39,8 @@ #ifndef PMMINTRIN_H_ #define PMMINTRIN_H_ -#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) +#if defined(__ppc64__) && \ + (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) /* We need definitions from the SSE2 and SSE header files*/ #include @@ -138,7 +139,7 @@ extern __inline __m128i #else #include_next -#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ - */ +#endif /* defined(__ppc64__) && + * (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) */ #endif /* PMMINTRIN_H_ */ diff --git a/clang/lib/Headers/ppc_wrappers/smmintrin.h b/clang/lib/Headers/ppc_wrappers/smmintrin.h index 694d5aa..6fe6c8a 100644 --- a/clang/lib/Headers/ppc_wrappers/smmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/smmintrin.h @@ -29,7 +29,8 @@ #ifndef SMMINTRIN_H_ #define SMMINTRIN_H_ -#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) +#if defined(__ppc64__) && \ + (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) #include #include @@ -656,7 +657,7 @@ extern __inline __m128i #else #include_next -#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ - */ +#endif /* defined(__ppc64__) && + * (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) */ #endif /* SMMINTRIN_H_ */ diff --git a/clang/lib/Headers/ppc_wrappers/tmmintrin.h b/clang/lib/Headers/ppc_wrappers/tmmintrin.h index 1725eb9..6185ca1 100644 --- a/clang/lib/Headers/ppc_wrappers/tmmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/tmmintrin.h @@ -25,7 +25,8 @@ #ifndef TMMINTRIN_H_ #define TMMINTRIN_H_ -#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) +#if defined(__ppc64__) && \ + (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) #include @@ -446,7 +447,7 @@ extern __inline __m64 #else #include_next -#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ - */ +#endif /* defined(__ppc64__) && + * (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) */ #endif /* TMMINTRIN_H_ */ diff --git a/clang/lib/Headers/ppc_wrappers/xmmintrin.h b/clang/lib/Headers/ppc_wrappers/xmmintrin.h index 8bf2977..ee0032c 100644 --- a/clang/lib/Headers/ppc_wrappers/xmmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/xmmintrin.h @@ -35,7 +35,8 @@ #ifndef XMMINTRIN_H_ #define XMMINTRIN_H_ -#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) +#if defined(__ppc64__) && \ + (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) /* Define four value permute mask */ #define _MM_SHUFFLE(w, x, y, z) (((w) << 6) | ((x) << 4) | ((y) << 2) | (z)) @@ -1820,7 +1821,7 @@ extern __inline void #else #include_next -#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ - */ +#endif /* defined(__ppc64__) && + * (defined(__linux__) || defined(__FreeBSD__) || defined(_AIX)) */ #endif /* XMMINTRIN_H_ */ -- cgit v1.1