diff options
36 files changed, 262 insertions, 47 deletions
diff --git a/contrib/llvm/tools/clang/lib/Headers/__wmmintrin_aes.h b/contrib/llvm/tools/clang/lib/Headers/__wmmintrin_aes.h index 81b2b8d0b0a4..9f594ee56092 100644 --- a/contrib/llvm/tools/clang/lib/Headers/__wmmintrin_aes.h +++ b/contrib/llvm/tools/clang/lib/Headers/__wmmintrin_aes.h @@ -25,8 +25,12 @@ #include <emmintrin.h> +#if !defined (__AES__) +# error "AES instructions not enabled" +#else + /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("aes"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_aesenc_si128(__m128i __V, __m128i __R) @@ -63,4 +67,6 @@ _mm_aesimc_si128(__m128i __V) #undef __DEFAULT_FN_ATTRS +#endif + #endif /* _WMMINTRIN_AES_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/__wmmintrin_pclmul.h b/contrib/llvm/tools/clang/lib/Headers/__wmmintrin_pclmul.h index 48a85d24ee1b..8d1f1b7c0868 100644 --- a/contrib/llvm/tools/clang/lib/Headers/__wmmintrin_pclmul.h +++ b/contrib/llvm/tools/clang/lib/Headers/__wmmintrin_pclmul.h @@ -23,8 +23,12 @@ #ifndef _WMMINTRIN_PCLMUL_H #define _WMMINTRIN_PCLMUL_H +#if !defined (__PCLMUL__) +# error "PCLMUL instruction is not enabled" +#else #define _mm_clmulepi64_si128(__X, __Y, __I) \ ((__m128i)__builtin_ia32_pclmulqdq128((__v2di)(__m128i)(__X), \ (__v2di)(__m128i)(__Y), (char)(__I))) +#endif #endif /* _WMMINTRIN_PCLMUL_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/adxintrin.h b/contrib/llvm/tools/clang/lib/Headers/adxintrin.h index ee347284178e..b8eb9cbf6ebb 100644 --- a/contrib/llvm/tools/clang/lib/Headers/adxintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/adxintrin.h @@ -32,7 +32,8 @@ #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) /* Intrinsics that are available only if __ADX__ defined */ -static __inline unsigned char __attribute__((__always_inline__, __nodebug__, __target__("adx"))) +#ifdef __ADX__ +static __inline unsigned char __DEFAULT_FN_ATTRS _addcarryx_u32(unsigned char __cf, unsigned int __x, unsigned int __y, unsigned int *__p) { @@ -40,13 +41,14 @@ _addcarryx_u32(unsigned char __cf, unsigned int __x, unsigned int __y, } #ifdef __x86_64__ -static __inline unsigned char __attribute__((__always_inline__, __nodebug__, __target__("adx"))) +static __inline unsigned char __DEFAULT_FN_ATTRS _addcarryx_u64(unsigned char __cf, unsigned long long __x, unsigned long long __y, unsigned long long *__p) { return __builtin_ia32_addcarryx_u64(__cf, __x, __y, __p); } #endif +#endif /* Intrinsics that are also available if __ADX__ undefined */ static __inline unsigned char __DEFAULT_FN_ATTRS diff --git a/contrib/llvm/tools/clang/lib/Headers/ammintrin.h b/contrib/llvm/tools/clang/lib/Headers/ammintrin.h index 91c633305b8b..4d0e770ff9e4 100644 --- a/contrib/llvm/tools/clang/lib/Headers/ammintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/ammintrin.h @@ -24,10 +24,14 @@ #ifndef __AMMINTRIN_H #define __AMMINTRIN_H +#ifndef __SSE4A__ +#error "SSE4A instruction set not enabled" +#else + #include <pmmintrin.h> /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4a"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) /// \brief Extracts the specified bits from the lower 64 bits of the 128-bit /// integer vector operand at the index idx and of the length len. @@ -206,4 +210,6 @@ _mm_stream_ss(float *__p, __m128 __a) #undef __DEFAULT_FN_ATTRS +#endif /* __SSE4A__ */ + #endif /* __AMMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/avx2intrin.h b/contrib/llvm/tools/clang/lib/Headers/avx2intrin.h index cfa91410a338..d8b6b0aa4d23 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avx2intrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avx2intrin.h @@ -29,7 +29,7 @@ #define __AVX2INTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx2"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) /* SSE4 Multiple Packed Sums of Absolute Difference. */ #define _mm256_mpsadbw_epu8(X, Y, M) __builtin_ia32_mpsadbw256((X), (Y), (M)) diff --git a/contrib/llvm/tools/clang/lib/Headers/avx512bwintrin.h b/contrib/llvm/tools/clang/lib/Headers/avx512bwintrin.h index b0d3462d4db6..9e8297a9c9a5 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avx512bwintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avx512bwintrin.h @@ -34,7 +34,7 @@ typedef char __v64qi __attribute__ ((__vector_size__ (64))); typedef short __v32hi __attribute__ ((__vector_size__ (64))); /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512bw"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline __v64qi __DEFAULT_FN_ATTRS _mm512_setzero_qi (void) { diff --git a/contrib/llvm/tools/clang/lib/Headers/avx512dqintrin.h b/contrib/llvm/tools/clang/lib/Headers/avx512dqintrin.h index 8a69f7ffbf34..c946de286742 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avx512dqintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avx512dqintrin.h @@ -29,7 +29,7 @@ #define __AVX512DQINTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512dq"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mullo_epi64 (__m512i __A, __m512i __B) { diff --git a/contrib/llvm/tools/clang/lib/Headers/avx512fintrin.h b/contrib/llvm/tools/clang/lib/Headers/avx512fintrin.h index 099114453646..4f7cba0b1507 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avx512fintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avx512fintrin.h @@ -47,7 +47,7 @@ typedef unsigned short __mmask16; #define _MM_FROUND_CUR_DIRECTION 0x04 /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512f"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) /* Create vectors with repeated elements */ diff --git a/contrib/llvm/tools/clang/lib/Headers/avx512vlbwintrin.h b/contrib/llvm/tools/clang/lib/Headers/avx512vlbwintrin.h index eb198a5ade6f..74ec17583096 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avx512vlbwintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avx512vlbwintrin.h @@ -29,7 +29,7 @@ #define __AVX512VLBWINTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bw"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) /* Integer compare */ diff --git a/contrib/llvm/tools/clang/lib/Headers/avx512vldqintrin.h b/contrib/llvm/tools/clang/lib/Headers/avx512vldqintrin.h index 032070bfb902..1edf29d128ee 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avx512vldqintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avx512vldqintrin.h @@ -29,7 +29,7 @@ #define __AVX512VLDQINTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512dq"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_mullo_epi64 (__m256i __A, __m256i __B) { diff --git a/contrib/llvm/tools/clang/lib/Headers/avx512vlintrin.h b/contrib/llvm/tools/clang/lib/Headers/avx512vlintrin.h index 73f46d101a55..fc1b9d6e7a23 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avx512vlintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avx512vlintrin.h @@ -29,7 +29,7 @@ #define __AVX512VLINTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) /* Integer compare */ diff --git a/contrib/llvm/tools/clang/lib/Headers/avxintrin.h b/contrib/llvm/tools/clang/lib/Headers/avxintrin.h index 6a9972b65bb0..c1bc85b39e82 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avxintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avxintrin.h @@ -40,7 +40,7 @@ typedef double __m256d __attribute__((__vector_size__(32))); typedef long long __m256i __attribute__((__vector_size__(32))); /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) /* Arithmetic */ static __inline __m256d __DEFAULT_FN_ATTRS diff --git a/contrib/llvm/tools/clang/lib/Headers/bmi2intrin.h b/contrib/llvm/tools/clang/lib/Headers/bmi2intrin.h index fdae82cf2ba7..c63397c96ebe 100644 --- a/contrib/llvm/tools/clang/lib/Headers/bmi2intrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/bmi2intrin.h @@ -25,11 +25,15 @@ #error "Never use <bmi2intrin.h> directly; include <x86intrin.h> instead." #endif +#ifndef __BMI2__ +# error "BMI2 instruction set not enabled" +#endif /* __BMI2__ */ + #ifndef __BMI2INTRIN_H #define __BMI2INTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("bmi2"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ unsigned int __DEFAULT_FN_ATTRS _bzhi_u32(unsigned int __X, unsigned int __Y) diff --git a/contrib/llvm/tools/clang/lib/Headers/bmiintrin.h b/contrib/llvm/tools/clang/lib/Headers/bmiintrin.h index dc2f83f3e2d1..0e93d575cb8b 100644 --- a/contrib/llvm/tools/clang/lib/Headers/bmiintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/bmiintrin.h @@ -25,6 +25,10 @@ #error "Never use <bmiintrin.h> directly; include <x86intrin.h> instead." #endif +#ifndef __BMI__ +# error "BMI instruction set not enabled" +#endif /* __BMI__ */ + #ifndef __BMIINTRIN_H #define __BMIINTRIN_H @@ -37,7 +41,7 @@ #define _tzcnt_u32(a) (__tzcnt_u32((a))) /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("bmi"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ unsigned short __DEFAULT_FN_ATTRS __tzcnt_u16(unsigned short __X) diff --git a/contrib/llvm/tools/clang/lib/Headers/emmintrin.h b/contrib/llvm/tools/clang/lib/Headers/emmintrin.h index e22ffaf19240..656bc19d3dea 100644 --- a/contrib/llvm/tools/clang/lib/Headers/emmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/emmintrin.h @@ -24,6 +24,10 @@ #ifndef __EMMINTRIN_H #define __EMMINTRIN_H +#ifndef __SSE2__ +#error "SSE2 instruction set not enabled" +#else + #include <xmmintrin.h> typedef double __m128d __attribute__((__vector_size__(16))); @@ -36,7 +40,7 @@ typedef short __v8hi __attribute__((__vector_size__(16))); typedef char __v16qi __attribute__((__vector_size__(16))); /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse2"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_add_sd(__m128d __a, __m128d __b) @@ -1471,4 +1475,6 @@ _mm_pause(void) #define _MM_SHUFFLE2(x, y) (((x) << 1) | (y)) +#endif /* __SSE2__ */ + #endif /* __EMMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/f16cintrin.h b/contrib/llvm/tools/clang/lib/Headers/f16cintrin.h index 9349b78fe84c..3730ae0d3eeb 100644 --- a/contrib/llvm/tools/clang/lib/Headers/f16cintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/f16cintrin.h @@ -25,6 +25,10 @@ #error "Never use <f16cintrin.h> directly; include <x86intrin.h> instead." #endif +#ifndef __F16C__ +# error "F16C instruction is not enabled" +#endif /* __F16C__ */ + #ifndef __F16CINTRIN_H #define __F16CINTRIN_H @@ -32,7 +36,7 @@ typedef float __v8sf __attribute__ ((__vector_size__ (32))); typedef float __m256 __attribute__ ((__vector_size__ (32))); /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("f16c"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) #define _mm_cvtps_ph(a, imm) __extension__ ({ \ __m128 __a = (a); \ diff --git a/contrib/llvm/tools/clang/lib/Headers/fma4intrin.h b/contrib/llvm/tools/clang/lib/Headers/fma4intrin.h index f1178877b252..d6405cf02922 100644 --- a/contrib/llvm/tools/clang/lib/Headers/fma4intrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/fma4intrin.h @@ -28,10 +28,14 @@ #ifndef __FMA4INTRIN_H #define __FMA4INTRIN_H +#ifndef __FMA4__ +# error "FMA4 instruction set is not enabled" +#else + #include <pmmintrin.h> /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("fma4"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C) @@ -227,4 +231,6 @@ _mm256_msubadd_pd(__m256d __A, __m256d __B, __m256d __C) #undef __DEFAULT_FN_ATTRS +#endif /* __FMA4__ */ + #endif /* __FMA4INTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/fmaintrin.h b/contrib/llvm/tools/clang/lib/Headers/fmaintrin.h index 114a14380ea0..ad693fed0bfd 100644 --- a/contrib/llvm/tools/clang/lib/Headers/fmaintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/fmaintrin.h @@ -28,8 +28,12 @@ #ifndef __FMAINTRIN_H #define __FMAINTRIN_H +#ifndef __FMA__ +# error "FMA instruction set is not enabled" +#else + /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("fma"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C) @@ -225,4 +229,6 @@ _mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C) #undef __DEFAULT_FN_ATTRS +#endif /* __FMA__ */ + #endif /* __FMAINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/immintrin.h b/contrib/llvm/tools/clang/lib/Headers/immintrin.h index 604bc8ca5b39..21ad3281f850 100644 --- a/contrib/llvm/tools/clang/lib/Headers/immintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/immintrin.h @@ -24,123 +24,175 @@ #ifndef __IMMINTRIN_H #define __IMMINTRIN_H +#ifdef __MMX__ #include <mmintrin.h> +#endif +#ifdef __SSE__ #include <xmmintrin.h> +#endif +#ifdef __SSE2__ #include <emmintrin.h> +#endif +#ifdef __SSE3__ #include <pmmintrin.h> +#endif +#ifdef __SSSE3__ #include <tmmintrin.h> +#endif +#if defined (__SSE4_2__) || defined (__SSE4_1__) #include <smmintrin.h> +#endif +#if defined (__AES__) || defined (__PCLMUL__) #include <wmmintrin.h> +#endif +#ifdef __AVX__ #include <avxintrin.h> +#endif +#ifdef __AVX2__ #include <avx2intrin.h> +#endif +#ifdef __BMI__ #include <bmiintrin.h> +#endif +#ifdef __BMI2__ #include <bmi2intrin.h> +#endif +#ifdef __LZCNT__ #include <lzcntintrin.h> +#endif +#ifdef __FMA__ #include <fmaintrin.h> +#endif +#ifdef __AVX512F__ #include <avx512fintrin.h> +#endif +#ifdef __AVX512VL__ #include <avx512vlintrin.h> +#endif +#ifdef __AVX512BW__ #include <avx512bwintrin.h> +#endif +#ifdef __AVX512CD__ #include <avx512cdintrin.h> +#endif +#ifdef __AVX512DQ__ #include <avx512dqintrin.h> +#endif +#if defined (__AVX512VL__) && defined (__AVX512BW__) #include <avx512vlbwintrin.h> +#endif +#if defined (__AVX512VL__) && defined (__AVX512DQ__) #include <avx512vldqintrin.h> +#endif +#ifdef __AVX512ER__ #include <avx512erintrin.h> +#endif -static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) +#ifdef __RDRND__ +static __inline__ int __attribute__((__always_inline__, __nodebug__)) _rdrand16_step(unsigned short *__p) { return __builtin_ia32_rdrand16_step(__p); } -static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) +static __inline__ int __attribute__((__always_inline__, __nodebug__)) _rdrand32_step(unsigned int *__p) { return __builtin_ia32_rdrand32_step(__p); } #ifdef __x86_64__ -static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) +static __inline__ int __attribute__((__always_inline__, __nodebug__)) _rdrand64_step(unsigned long long *__p) { return __builtin_ia32_rdrand64_step(__p); } #endif +#endif /* __RDRND__ */ +#ifdef __FSGSBASE__ #ifdef __x86_64__ -static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) _readfsbase_u32(void) { return __builtin_ia32_rdfsbase32(); } -static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) _readfsbase_u64(void) { return __builtin_ia32_rdfsbase64(); } -static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) _readgsbase_u32(void) { return __builtin_ia32_rdgsbase32(); } -static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) _readgsbase_u64(void) { return __builtin_ia32_rdgsbase64(); } -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) _writefsbase_u32(unsigned int __V) { return __builtin_ia32_wrfsbase32(__V); } -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) _writefsbase_u64(unsigned long long __V) { return __builtin_ia32_wrfsbase64(__V); } -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) _writegsbase_u32(unsigned int __V) { return __builtin_ia32_wrgsbase32(__V); } -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) _writegsbase_u64(unsigned long long __V) { return __builtin_ia32_wrgsbase64(__V); } #endif +#endif /* __FSGSBASE__ */ +#ifdef __RTM__ #include <rtmintrin.h> +#endif +#ifdef __RTM__ #include <xtestintrin.h> +#endif +#ifdef __SHA__ #include <shaintrin.h> +#endif #include <fxsrintrin.h> diff --git a/contrib/llvm/tools/clang/lib/Headers/lzcntintrin.h b/contrib/llvm/tools/clang/lib/Headers/lzcntintrin.h index 4c00e42ac3a9..8ee29975c2eb 100644 --- a/contrib/llvm/tools/clang/lib/Headers/lzcntintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/lzcntintrin.h @@ -25,11 +25,15 @@ #error "Never use <lzcntintrin.h> directly; include <x86intrin.h> instead." #endif +#ifndef __LZCNT__ +# error "LZCNT instruction is not enabled" +#endif /* __LZCNT__ */ + #ifndef __LZCNTINTRIN_H #define __LZCNTINTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("lzcnt"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ unsigned short __DEFAULT_FN_ATTRS __lzcnt16(unsigned short __X) diff --git a/contrib/llvm/tools/clang/lib/Headers/mm3dnow.h b/contrib/llvm/tools/clang/lib/Headers/mm3dnow.h index 3218df827177..ac8e0f4af1bf 100644 --- a/contrib/llvm/tools/clang/lib/Headers/mm3dnow.h +++ b/contrib/llvm/tools/clang/lib/Headers/mm3dnow.h @@ -30,7 +30,7 @@ typedef float __v2sf __attribute__((__vector_size__(8))); /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ void __DEFAULT_FN_ATTRS _m_femms() { diff --git a/contrib/llvm/tools/clang/lib/Headers/mmintrin.h b/contrib/llvm/tools/clang/lib/Headers/mmintrin.h index 484b499dd7fc..0be5f32c7d02 100644 --- a/contrib/llvm/tools/clang/lib/Headers/mmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/mmintrin.h @@ -24,6 +24,10 @@ #ifndef __MMINTRIN_H #define __MMINTRIN_H +#ifndef __MMX__ +#error "MMX instruction set not enabled" +#else + typedef long long __m64 __attribute__((__vector_size__(8))); typedef int __v2si __attribute__((__vector_size__(8))); @@ -31,7 +35,7 @@ typedef short __v4hi __attribute__((__vector_size__(8))); typedef char __v8qi __attribute__((__vector_size__(8))); /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("mmx"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ void __DEFAULT_FN_ATTRS _mm_empty(void) @@ -497,5 +501,7 @@ _mm_setr_pi8(char __b0, char __b1, char __b2, char __b3, char __b4, char __b5, #define _m_pcmpgtw _mm_cmpgt_pi16 #define _m_pcmpgtd _mm_cmpgt_pi32 +#endif /* __MMX__ */ + #endif /* __MMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/module.modulemap b/contrib/llvm/tools/clang/lib/Headers/module.modulemap index 0fc70a8c9b06..8fcb5bc1b3d2 100644 --- a/contrib/llvm/tools/clang/lib/Headers/module.modulemap +++ b/contrib/llvm/tools/clang/lib/Headers/module.modulemap @@ -32,117 +32,142 @@ module _Builtin_intrinsics [system] [extern_c] { } explicit module cpuid { + requires x86 header "cpuid.h" } explicit module mmx { + requires mmx header "mmintrin.h" } explicit module f16c { + requires f16c header "f16cintrin.h" } explicit module sse { + requires sse export mmx export sse2 // note: for hackish <emmintrin.h> dependency header "xmmintrin.h" } explicit module sse2 { + requires sse2 export sse header "emmintrin.h" } explicit module sse3 { + requires sse3 export sse2 header "pmmintrin.h" } explicit module ssse3 { + requires ssse3 export sse3 header "tmmintrin.h" } explicit module sse4_1 { + requires sse41 export ssse3 header "smmintrin.h" } explicit module sse4_2 { + requires sse42 export sse4_1 header "nmmintrin.h" } explicit module sse4a { + requires sse4a export sse3 header "ammintrin.h" } explicit module avx { + requires avx export sse4_2 header "avxintrin.h" } explicit module avx2 { + requires avx2 export avx header "avx2intrin.h" } explicit module avx512f { + requires avx512f export avx2 header "avx512fintrin.h" } explicit module avx512er { + requires avx512er header "avx512erintrin.h" } explicit module bmi { + requires bmi header "bmiintrin.h" } explicit module bmi2 { + requires bmi2 header "bmi2intrin.h" } explicit module fma { + requires fma header "fmaintrin.h" } explicit module fma4 { + requires fma4 export sse3 header "fma4intrin.h" } explicit module lzcnt { + requires lzcnt header "lzcntintrin.h" } explicit module popcnt { + requires popcnt header "popcntintrin.h" } explicit module mm3dnow { + requires mm3dnow header "mm3dnow.h" } explicit module xop { + requires xop export fma4 header "xopintrin.h" } explicit module aes_pclmul { + requires aes, pclmul header "wmmintrin.h" export aes export pclmul } explicit module aes { + requires aes header "__wmmintrin_aes.h" } explicit module pclmul { + requires pclmul header "__wmmintrin_pclmul.h" } } diff --git a/contrib/llvm/tools/clang/lib/Headers/nmmintrin.h b/contrib/llvm/tools/clang/lib/Headers/nmmintrin.h index 57fec15963d1..f12622d7be68 100644 --- a/contrib/llvm/tools/clang/lib/Headers/nmmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/nmmintrin.h @@ -24,7 +24,12 @@ #ifndef _NMMINTRIN_H #define _NMMINTRIN_H +#ifndef __SSE4_2__ +#error "SSE4.2 instruction set not enabled" +#else + /* To match expectations of gcc we put the sse4.2 definitions into smmintrin.h, just include it now then. */ #include <smmintrin.h> +#endif /* __SSE4_2__ */ #endif /* _NMMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h b/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h index e888b6fb7067..e1b8d9b603d1 100644 --- a/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h @@ -24,10 +24,14 @@ #ifndef __PMMINTRIN_H #define __PMMINTRIN_H +#ifndef __SSE3__ +#error "SSE3 instruction set not enabled" +#else + #include <emmintrin.h> /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse3"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_lddqu_si128(__m128i const *__p) @@ -113,4 +117,6 @@ _mm_mwait(unsigned __extensions, unsigned __hints) #undef __DEFAULT_FN_ATTRS +#endif /* __SSE3__ */ + #endif /* __PMMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/popcntintrin.h b/contrib/llvm/tools/clang/lib/Headers/popcntintrin.h index 29c074b61d1c..1a4e9000aeb6 100644 --- a/contrib/llvm/tools/clang/lib/Headers/popcntintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/popcntintrin.h @@ -21,11 +21,15 @@ *===-----------------------------------------------------------------------=== */ +#ifndef __POPCNT__ +#error "POPCNT instruction set not enabled" +#endif + #ifndef _POPCNTINTRIN_H #define _POPCNTINTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("popcnt"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ int __DEFAULT_FN_ATTRS _mm_popcnt_u32(unsigned int __A) diff --git a/contrib/llvm/tools/clang/lib/Headers/rdseedintrin.h b/contrib/llvm/tools/clang/lib/Headers/rdseedintrin.h index 421f4ea48702..fdf7e18afa95 100644 --- a/contrib/llvm/tools/clang/lib/Headers/rdseedintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/rdseedintrin.h @@ -28,8 +28,10 @@ #ifndef __RDSEEDINTRIN_H #define __RDSEEDINTRIN_H +#ifdef __RDSEED__ + /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("rdseed"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ int __DEFAULT_FN_ATTRS _rdseed16_step(unsigned short *__p) @@ -53,4 +55,5 @@ _rdseed64_step(unsigned long long *__p) #undef __DEFAULT_FN_ATTRS +#endif /* __RDSEED__ */ #endif /* __RDSEEDINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/rtmintrin.h b/contrib/llvm/tools/clang/lib/Headers/rtmintrin.h index e6a58d743bc9..17256815fb8d 100644 --- a/contrib/llvm/tools/clang/lib/Headers/rtmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/rtmintrin.h @@ -38,7 +38,7 @@ #define _XABORT_CODE(x) (((x) >> 24) & 0xFF) /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("rtm"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ unsigned int __DEFAULT_FN_ATTRS _xbegin(void) diff --git a/contrib/llvm/tools/clang/lib/Headers/shaintrin.h b/contrib/llvm/tools/clang/lib/Headers/shaintrin.h index 8602d0249d48..960cced7a55c 100644 --- a/contrib/llvm/tools/clang/lib/Headers/shaintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/shaintrin.h @@ -28,8 +28,12 @@ #ifndef __SHAINTRIN_H #define __SHAINTRIN_H +#if !defined (__SHA__) +# error "SHA instructions not enabled" +#endif + /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sha"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) #define _mm_sha1rnds4_epu32(V1, V2, M) __extension__ ({ \ __builtin_ia32_sha1rnds4((V1), (V2), (M)); }) diff --git a/contrib/llvm/tools/clang/lib/Headers/smmintrin.h b/contrib/llvm/tools/clang/lib/Headers/smmintrin.h index e197590a38e2..04bd0722b11f 100644 --- a/contrib/llvm/tools/clang/lib/Headers/smmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/smmintrin.h @@ -24,10 +24,14 @@ #ifndef _SMMINTRIN_H #define _SMMINTRIN_H +#ifndef __SSE4_1__ +#error "SSE4.1 instruction set not enabled" +#else + #include <tmmintrin.h> /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4.1"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) /* SSE4 Rounding macros. */ #define _MM_FROUND_TO_NEAREST_INT 0x00 @@ -375,13 +379,9 @@ _mm_minpos_epu16(__m128i __V) return (__m128i) __builtin_ia32_phminposuw128((__v8hi)__V); } -/* Handle the sse4.2 definitions here. */ - /* These definitions are normally in nmmintrin.h, but gcc puts them in here so we'll do the same. */ - -#undef __DEFAULT_FN_ATTRS -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4.2"))) +#ifdef __SSE4_2__ /* These specify the type of data that we're comparing. */ #define _SIDD_UBYTE_OPS 0x00 @@ -481,4 +481,7 @@ _mm_crc32_u64(unsigned long long __C, unsigned long long __D) #include <popcntintrin.h> #endif +#endif /* __SSE4_2__ */ +#endif /* __SSE4_1__ */ + #endif /* _SMMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/tbmintrin.h b/contrib/llvm/tools/clang/lib/Headers/tbmintrin.h index 62f613f9ee5c..48c0b07f423f 100644 --- a/contrib/llvm/tools/clang/lib/Headers/tbmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/tbmintrin.h @@ -21,6 +21,10 @@ *===-----------------------------------------------------------------------=== */ +#ifndef __TBM__ +#error "TBM instruction set is not enabled" +#endif + #ifndef __X86INTRIN_H #error "Never use <tbmintrin.h> directly; include <x86intrin.h> instead." #endif @@ -29,7 +33,7 @@ #define __TBMINTRIN_H /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("tbm"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) #define __bextri_u32(a, b) (__builtin_ia32_bextri_u32((a), (b))) diff --git a/contrib/llvm/tools/clang/lib/Headers/tmmintrin.h b/contrib/llvm/tools/clang/lib/Headers/tmmintrin.h index 120d73c34f57..2ecc730e90e9 100644 --- a/contrib/llvm/tools/clang/lib/Headers/tmmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/tmmintrin.h @@ -24,10 +24,14 @@ #ifndef __TMMINTRIN_H #define __TMMINTRIN_H +#ifndef __SSSE3__ +#error "SSSE3 instruction set not enabled" +#else + #include <pmmintrin.h> /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("ssse3"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_abs_pi8(__m64 __a) @@ -221,4 +225,6 @@ _mm_sign_pi32(__m64 __a, __m64 __b) #undef __DEFAULT_FN_ATTRS +#endif /* __SSSE3__ */ + #endif /* __TMMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/wmmintrin.h b/contrib/llvm/tools/clang/lib/Headers/wmmintrin.h index a2d931010aea..369e3c208e53 100644 --- a/contrib/llvm/tools/clang/lib/Headers/wmmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/wmmintrin.h @@ -26,8 +26,17 @@ #include <emmintrin.h> +#if !defined (__AES__) && !defined (__PCLMUL__) +# error "AES/PCLMUL instructions not enabled" +#else + +#ifdef __AES__ #include <__wmmintrin_aes.h> +#endif /* __AES__ */ +#ifdef __PCLMUL__ #include <__wmmintrin_pclmul.h> +#endif /* __PCLMUL__ */ +#endif /* __AES__ || __PCLMUL__ */ #endif /* _WMMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/x86intrin.h b/contrib/llvm/tools/clang/lib/Headers/x86intrin.h index 4d8077e38291..21a43daf3c2d 100644 --- a/contrib/llvm/tools/clang/lib/Headers/x86intrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/x86intrin.h @@ -28,29 +28,53 @@ #include <immintrin.h> +#ifdef __3dNOW__ #include <mm3dnow.h> +#endif +#ifdef __BMI__ #include <bmiintrin.h> +#endif +#ifdef __BMI2__ #include <bmi2intrin.h> +#endif +#ifdef __LZCNT__ #include <lzcntintrin.h> +#endif +#ifdef __POPCNT__ #include <popcntintrin.h> +#endif +#ifdef __RDSEED__ #include <rdseedintrin.h> +#endif +#ifdef __PRFCHW__ #include <prfchwintrin.h> +#endif +#ifdef __SSE4A__ #include <ammintrin.h> +#endif +#ifdef __FMA4__ #include <fma4intrin.h> +#endif +#ifdef __XOP__ #include <xopintrin.h> +#endif +#ifdef __TBM__ #include <tbmintrin.h> +#endif +#ifdef __F16C__ #include <f16cintrin.h> +#endif /* FIXME: LWP */ diff --git a/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h b/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h index 18aa8c1426a3..0d58c753029f 100644 --- a/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h @@ -24,6 +24,10 @@ #ifndef __XMMINTRIN_H #define __XMMINTRIN_H +#ifndef __SSE__ +#error "SSE instruction set not enabled" +#else + #include <mmintrin.h> typedef int __v4si __attribute__((__vector_size__(16))); @@ -37,7 +41,7 @@ typedef float __m128 __attribute__((__vector_size__(16))); #endif /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_add_ss(__m128 __a, __m128 __b) @@ -999,4 +1003,6 @@ do { \ #include <emmintrin.h> #endif +#endif /* __SSE__ */ + #endif /* __XMMINTRIN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/xopintrin.h b/contrib/llvm/tools/clang/lib/Headers/xopintrin.h index 86188bb29fd7..2eb35c4be844 100644 --- a/contrib/llvm/tools/clang/lib/Headers/xopintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/xopintrin.h @@ -28,10 +28,14 @@ #ifndef __XOPINTRIN_H #define __XOPINTRIN_H +#ifndef __XOP__ +# error "XOP instruction set is not enabled" +#else + #include <fma4intrin.h> /* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("xop"))) +#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C) @@ -800,4 +804,6 @@ _mm256_frcz_pd(__m256d __A) #undef __DEFAULT_FN_ATTRS +#endif /* __XOP__ */ + #endif /* __XOPINTRIN_H */ |