diff options
Diffstat (limited to 'clang/lib/Headers')
-rw-r--r-- | clang/lib/Headers/altivec.h | 60 | ||||
-rw-r--r-- | clang/lib/Headers/ppc_wrappers/emmintrin.h | 5 | ||||
-rw-r--r-- | clang/lib/Headers/ppc_wrappers/mm_malloc.h | 2 | ||||
-rw-r--r-- | clang/lib/Headers/ppc_wrappers/mmintrin.h | 5 | ||||
-rw-r--r-- | clang/lib/Headers/ppc_wrappers/pmmintrin.h | 5 | ||||
-rw-r--r-- | clang/lib/Headers/ppc_wrappers/smmintrin.h | 5 | ||||
-rw-r--r-- | clang/lib/Headers/ppc_wrappers/tmmintrin.h | 5 | ||||
-rw-r--r-- | clang/lib/Headers/ppc_wrappers/xmmintrin.h | 5 | ||||
-rw-r--r-- | clang/lib/Headers/stdatomic.h | 6 |
9 files changed, 84 insertions, 14 deletions
diff --git a/clang/lib/Headers/altivec.h b/clang/lib/Headers/altivec.h index fb808d7b0a4f..55195b0781fb 100644 --- a/clang/lib/Headers/altivec.h +++ b/clang/lib/Headers/altivec.h @@ -19,6 +19,10 @@ #define __CR6_EQ_REV 1 #define __CR6_LT 2 #define __CR6_LT_REV 3 +#define __CR6_GT 4 +#define __CR6_GT_REV 5 +#define __CR6_SO 6 +#define __CR6_SO_REV 7 /* Constants for vec_test_data_class */ #define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0) @@ -8413,9 +8417,20 @@ static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) { } #ifdef __VSX__ +#ifdef __XL_COMPAT_ALTIVEC__ +static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a); +static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) { + double __fpscr = __builtin_readflm(); + __builtin_setrnd(0); + vector double __rounded = vec_rint(__a); + __builtin_setflm(__fpscr); + return __rounded; +} +#else static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) { return __builtin_vsx_xvrdpi(__a); } +#endif /* vec_rint */ @@ -19026,6 +19041,51 @@ vec_sra(vector signed __int128 __a, vector unsigned __int128 __b) { #endif /* __SIZEOF_INT128__ */ #endif /* __POWER10_VECTOR__ */ +#ifdef __POWER8_VECTOR__ +#define __bcdadd(__a, __b, __ps) __builtin_ppc_bcdadd((__a), (__b), (__ps)) +#define __bcdsub(__a, __b, __ps) __builtin_ppc_bcdsub((__a), (__b), (__ps)) + +static __inline__ long __bcdadd_ofl(vector unsigned char __a, + vector unsigned char __b) { + return __builtin_ppc_bcdadd_p(__CR6_SO, __a, __b); +} + +static __inline__ long __bcdsub_ofl(vector unsigned char __a, + vector unsigned char __b) { + return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __b); +} + +static __inline__ long __bcd_invalid(vector unsigned char __a) { + return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __a); +} + +static __inline__ long __bcdcmpeq(vector unsigned char __a, + vector unsigned char __b) { + return __builtin_ppc_bcdsub_p(__CR6_EQ, __a, __b); +} + +static __inline__ long __bcdcmplt(vector unsigned char __a, + vector unsigned char __b) { + return __builtin_ppc_bcdsub_p(__CR6_LT, __a, __b); +} + +static __inline__ long __bcdcmpgt(vector unsigned char __a, + vector unsigned char __b) { + return __builtin_ppc_bcdsub_p(__CR6_GT, __a, __b); +} + +static __inline__ long __bcdcmple(vector unsigned char __a, + vector unsigned char __b) { + return __builtin_ppc_bcdsub_p(__CR6_GT_REV, __a, __b); +} + +static __inline__ long __bcdcmpge(vector unsigned char __a, + vector unsigned char __b) { + return __builtin_ppc_bcdsub_p(__CR6_LT_REV, __a, __b); +} + +#endif // __POWER8_VECTOR__ + #undef __ATTRS_o_ai #endif /* __ALTIVEC_H */ diff --git a/clang/lib/Headers/ppc_wrappers/emmintrin.h b/clang/lib/Headers/ppc_wrappers/emmintrin.h index 4dcb8485e2e9..82a71788b27a 100644 --- a/clang/lib/Headers/ppc_wrappers/emmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/emmintrin.h @@ -35,7 +35,7 @@ #ifndef EMMINTRIN_H_ #define EMMINTRIN_H_ -#if defined(__linux__) && defined(__ppc64__) +#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) #include <altivec.h> @@ -2319,6 +2319,7 @@ _mm_castsi128_pd(__m128i __A) #else #include_next <emmintrin.h> -#endif /* defined(__linux__) && defined(__ppc64__) */ +#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ + */ #endif /* EMMINTRIN_H_ */ diff --git a/clang/lib/Headers/ppc_wrappers/mm_malloc.h b/clang/lib/Headers/ppc_wrappers/mm_malloc.h index 24b14c8e07c0..86cf1a0f7618 100644 --- a/clang/lib/Headers/ppc_wrappers/mm_malloc.h +++ b/clang/lib/Headers/ppc_wrappers/mm_malloc.h @@ -10,7 +10,7 @@ #ifndef _MM_MALLOC_H_INCLUDED #define _MM_MALLOC_H_INCLUDED -#if defined(__linux__) && defined(__ppc64__) +#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) #include <stdlib.h> diff --git a/clang/lib/Headers/ppc_wrappers/mmintrin.h b/clang/lib/Headers/ppc_wrappers/mmintrin.h index c55c44726f00..54e4ee9f4468 100644 --- a/clang/lib/Headers/ppc_wrappers/mmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/mmintrin.h @@ -35,7 +35,7 @@ #ifndef _MMINTRIN_H_INCLUDED #define _MMINTRIN_H_INCLUDED -#if defined(__linux__) && defined(__ppc64__) +#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) #include <altivec.h> /* The Intel API is flexible enough that we must allow aliasing with other @@ -1445,6 +1445,7 @@ extern __inline __m64 #else #include_next <mmintrin.h> -#endif /* defined(__linux__) && defined(__ppc64__) */ +#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ + */ #endif /* _MMINTRIN_H_INCLUDED */ diff --git a/clang/lib/Headers/ppc_wrappers/pmmintrin.h b/clang/lib/Headers/ppc_wrappers/pmmintrin.h index 6d93383d5412..8d4046bd43f1 100644 --- a/clang/lib/Headers/ppc_wrappers/pmmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/pmmintrin.h @@ -38,7 +38,7 @@ #ifndef PMMINTRIN_H_ #define PMMINTRIN_H_ -#if defined(__linux__) && defined(__ppc64__) +#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) /* We need definitions from the SSE2 and SSE header files*/ #include <emmintrin.h> @@ -145,6 +145,7 @@ _mm_lddqu_si128 (__m128i const *__P) #else #include_next <pmmintrin.h> -#endif /* defined(__linux__) && defined(__ppc64__) */ +#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ + */ #endif /* PMMINTRIN_H_ */ diff --git a/clang/lib/Headers/ppc_wrappers/smmintrin.h b/clang/lib/Headers/ppc_wrappers/smmintrin.h index f41264b27584..674703245a69 100644 --- a/clang/lib/Headers/ppc_wrappers/smmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/smmintrin.h @@ -29,7 +29,7 @@ #ifndef SMMINTRIN_H_ #define SMMINTRIN_H_ -#if defined(__linux__) && defined(__ppc64__) +#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) #include <altivec.h> #include <tmmintrin.h> @@ -104,6 +104,7 @@ extern __inline __m128i #else #include_next <smmintrin.h> -#endif /* defined(__linux__) && defined(__ppc64__) */ +#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ + */ #endif /* _SMMINTRIN_H_ */ diff --git a/clang/lib/Headers/ppc_wrappers/tmmintrin.h b/clang/lib/Headers/ppc_wrappers/tmmintrin.h index b5a935d5e47e..ebef7b8192d7 100644 --- a/clang/lib/Headers/ppc_wrappers/tmmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/tmmintrin.h @@ -25,7 +25,7 @@ #ifndef TMMINTRIN_H_ #define TMMINTRIN_H_ -#if defined(__linux__) && defined(__ppc64__) +#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) #include <altivec.h> @@ -490,6 +490,7 @@ _mm_mulhrs_pi16 (__m64 __A, __m64 __B) #else #include_next <tmmintrin.h> -#endif /* defined(__linux__) && defined(__ppc64__) */ +#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ + */ #endif /* TMMINTRIN_H_ */ diff --git a/clang/lib/Headers/ppc_wrappers/xmmintrin.h b/clang/lib/Headers/ppc_wrappers/xmmintrin.h index 0e45b96769f8..956603d36408 100644 --- a/clang/lib/Headers/ppc_wrappers/xmmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/xmmintrin.h @@ -34,7 +34,7 @@ #ifndef _XMMINTRIN_H_INCLUDED #define _XMMINTRIN_H_INCLUDED -#if defined(__linux__) && defined(__ppc64__) +#if defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) /* Define four value permute mask */ #define _MM_SHUFFLE(w,x,y,z) (((w) << 6) | ((x) << 4) | ((y) << 2) | (z)) @@ -1838,6 +1838,7 @@ do { \ #else #include_next <xmmintrin.h> -#endif /* defined(__linux__) && defined(__ppc64__) */ +#endif /* defined(__ppc64__) && (defined(__linux__) || defined(__FreeBSD__)) \ + */ #endif /* _XMMINTRIN_H_INCLUDED */ diff --git a/clang/lib/Headers/stdatomic.h b/clang/lib/Headers/stdatomic.h index 665551ea69a4..1e47bcb2bacf 100644 --- a/clang/lib/Headers/stdatomic.h +++ b/clang/lib/Headers/stdatomic.h @@ -12,8 +12,12 @@ /* If we're hosted, fall back to the system's stdatomic.h. FreeBSD, for * example, already has a Clang-compatible stdatomic.h header. + * + * Exclude the MSVC path as well as the MSVC header as of the 14.31.30818 + * explicitly disallows `stdatomic.h` in the C mode via an `#error`. Fallback + * to the clang resource header until that is fully supported. */ -#if __STDC_HOSTED__ && __has_include_next(<stdatomic.h>) +#if __STDC_HOSTED__ && __has_include_next(<stdatomic.h>) && !defined(_MSC_VER) # include_next <stdatomic.h> #else |