diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Headers')
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/avxintrin.h | 2 | ||||
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/emmintrin.h | 70 | ||||
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/float.h | 2 | ||||
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/mm_malloc.h | 4 | ||||
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/pmmintrin.h | 6 | ||||
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/stdalign.h | 30 | ||||
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/tgmath.h | 7 | ||||
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/xmmintrin.h | 41 |
8 files changed, 125 insertions, 37 deletions
diff --git a/contrib/llvm/tools/clang/lib/Headers/avxintrin.h b/contrib/llvm/tools/clang/lib/Headers/avxintrin.h index 2eb2f85..0a0d2e4 100644 --- a/contrib/llvm/tools/clang/lib/Headers/avxintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/avxintrin.h @@ -341,7 +341,7 @@ _mm256_dp_ps(__m256 a, __m256 b, const int c) (__builtin_shufflevector((__v8sf)(a), (__v8sf)(b), \ (mask) & 0x3, ((mask) & 0xc) >> 2, \ (((mask) & 0x30) >> 4) + 8, (((mask) & 0xc0) >> 6) + 8, \ - (mask) & 0x3 + 4, (((mask) & 0xc) >> 2) + 4, \ + ((mask) & 0x3) + 4, (((mask) & 0xc) >> 2) + 4, \ (((mask) & 0x30) >> 4) + 12, (((mask) & 0xc0) >> 6) + 12)) #define _mm256_shuffle_pd(a, b, mask) \ diff --git a/contrib/llvm/tools/clang/lib/Headers/emmintrin.h b/contrib/llvm/tools/clang/lib/Headers/emmintrin.h index ee12d3c..903cfde 100644 --- a/contrib/llvm/tools/clang/lib/Headers/emmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/emmintrin.h @@ -321,6 +321,12 @@ _mm_comigt_sd(__m128d a, __m128d b) } static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comige_sd(__m128d a, __m128d b) +{ + return __builtin_ia32_comisdge(a, b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) _mm_comineq_sd(__m128d a, __m128d b) { return __builtin_ia32_comisdneq(a, b); @@ -351,6 +357,12 @@ _mm_ucomigt_sd(__m128d a, __m128d b) } static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomige_sd(__m128d a, __m128d b) +{ + return __builtin_ia32_ucomisdge(a, b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) _mm_ucomineq_sd(__m128d a, __m128d b) { return __builtin_ia32_ucomisdneq(a, b); @@ -452,7 +464,11 @@ _mm_load_pd(double const *dp) static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) _mm_load1_pd(double const *dp) { - return (__m128d){ dp[0], dp[0] }; + struct __mm_load1_pd_struct { + double u; + } __attribute__((__packed__, __may_alias__)); + double u = ((struct __mm_load1_pd_struct*)dp)->u; + return (__m128d){ u, u }; } #define _mm_load_pd1(dp) _mm_load1_pd(dp) @@ -460,7 +476,8 @@ _mm_load1_pd(double const *dp) static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) _mm_loadr_pd(double const *dp) { - return (__m128d){ dp[1], dp[0] }; + __m128d u = *(__m128d*)dp; + return __builtin_shufflevector(u, u, 1, 0); } static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) @@ -475,19 +492,31 @@ _mm_loadu_pd(double const *dp) static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) _mm_load_sd(double const *dp) { - return (__m128d){ *dp, 0.0 }; + struct __mm_load_sd_struct { + double u; + } __attribute__((__packed__, __may_alias__)); + double u = ((struct __mm_load_sd_struct*)dp)->u; + return (__m128d){ u, 0 }; } static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) _mm_loadh_pd(__m128d a, double const *dp) { - return (__m128d){ a[0], *dp }; + struct __mm_loadh_pd_struct { + double u; + } __attribute__((__packed__, __may_alias__)); + double u = ((struct __mm_loadh_pd_struct*)dp)->u; + return (__m128d){ a[0], u }; } static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) _mm_loadl_pd(__m128d a, double const *dp) { - return (__m128d){ *dp, a[1] }; + struct __mm_loadl_pd_struct { + double u; + } __attribute__((__packed__, __may_alias__)); + double u = ((struct __mm_loadl_pd_struct*)dp)->u; + return (__m128d){ u, a[1] }; } static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) @@ -529,14 +558,20 @@ _mm_move_sd(__m128d a, __m128d b) static __inline__ void __attribute__((__always_inline__, __nodebug__)) _mm_store_sd(double *dp, __m128d a) { - dp[0] = a[0]; + struct __mm_store_sd_struct { + double u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_store_sd_struct*)dp)->u = a[0]; } static __inline__ void __attribute__((__always_inline__, __nodebug__)) _mm_store1_pd(double *dp, __m128d a) { - dp[0] = a[0]; - dp[1] = a[0]; + struct __mm_store1_pd_struct { + double u[2]; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_store1_pd_struct*)dp)->u[0] = a[0]; + ((struct __mm_store1_pd_struct*)dp)->u[1] = a[0]; } static __inline__ void __attribute__((__always_inline__, __nodebug__)) @@ -554,20 +589,26 @@ _mm_storeu_pd(double *dp, __m128d a) static __inline__ void __attribute__((__always_inline__, __nodebug__)) _mm_storer_pd(double *dp, __m128d a) { - dp[0] = a[1]; - dp[1] = a[0]; + a = __builtin_shufflevector(a, a, 1, 0); + *(__m128d *)dp = a; } static __inline__ void __attribute__((__always_inline__, __nodebug__)) _mm_storeh_pd(double *dp, __m128d a) { - dp[0] = a[1]; + struct __mm_storeh_pd_struct { + double u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_storeh_pd_struct*)dp)->u = a[1]; } static __inline__ void __attribute__((__always_inline__, __nodebug__)) _mm_storel_pd(double *dp, __m128d a) { - dp[0] = a[0]; + struct __mm_storeh_pd_struct { + double u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_storeh_pd_struct*)dp)->u = a[0]; } static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) @@ -1023,7 +1064,10 @@ _mm_loadu_si128(__m128i const *p) static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_loadl_epi64(__m128i const *p) { - return (__m128i) { *(long long*)p, 0}; + struct __mm_loadl_epi64_struct { + long long u; + } __attribute__((__packed__, __may_alias__)); + return (__m128i) { ((struct __mm_loadl_epi64_struct*)p)->u, 0}; } static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) diff --git a/contrib/llvm/tools/clang/lib/Headers/float.h b/contrib/llvm/tools/clang/lib/Headers/float.h index 6eede0b..b7cb73a 100644 --- a/contrib/llvm/tools/clang/lib/Headers/float.h +++ b/contrib/llvm/tools/clang/lib/Headers/float.h @@ -24,7 +24,7 @@ #ifndef __FLOAT_H #define __FLOAT_H -/* If we're on MinGW, fall baack to the system's float.h, which might have +/* If we're on MinGW, fall back to the system's float.h, which might have * additional definitions provided for Windows. * For more details see http://msdn.microsoft.com/en-us/library/y0ybw9fy.aspx */ diff --git a/contrib/llvm/tools/clang/lib/Headers/mm_malloc.h b/contrib/llvm/tools/clang/lib/Headers/mm_malloc.h index ec92362..5fa1761 100644 --- a/contrib/llvm/tools/clang/lib/Headers/mm_malloc.h +++ b/contrib/llvm/tools/clang/lib/Headers/mm_malloc.h @@ -53,7 +53,9 @@ _mm_malloc(size_t size, size_t align) align = sizeof(void *); void *mallocedMemory; -#ifdef _WIN32 +#if defined(__MINGW32__) + mallocedMemory = __mingw_aligned_malloc(size, align); +#elif defined(_WIN32) mallocedMemory = _aligned_malloc(size, align); #else if (posix_memalign(&mallocedMemory, align, size)) diff --git a/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h b/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h index 7ca386c..5f9b097 100644 --- a/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h @@ -84,11 +84,7 @@ _mm_hsub_pd(__m128d a, __m128d b) return __builtin_ia32_hsubpd(a, b); } -static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) -_mm_loaddup_pd(double const *dp) -{ - return (__m128d){ *dp, *dp }; -} +#define _mm_loaddup_pd(dp) _mm_load1_pd(dp) static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) _mm_movedup_pd(__m128d a) diff --git a/contrib/llvm/tools/clang/lib/Headers/stdalign.h b/contrib/llvm/tools/clang/lib/Headers/stdalign.h new file mode 100644 index 0000000..e7fbfa0 --- /dev/null +++ b/contrib/llvm/tools/clang/lib/Headers/stdalign.h @@ -0,0 +1,30 @@ +/*===---- stdalign.h - Standard header for alignment ------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __STDALIGN_H +#define __STDALIGN_H + +#define alignas _Alignas +#define __alignas_is_defined 1 + +#endif /* __STDALIGN_H */ diff --git a/contrib/llvm/tools/clang/lib/Headers/tgmath.h b/contrib/llvm/tools/clang/lib/Headers/tgmath.h index e1a0023..1b0b9d2 100644 --- a/contrib/llvm/tools/clang/lib/Headers/tgmath.h +++ b/contrib/llvm/tools/clang/lib/Headers/tgmath.h @@ -1049,19 +1049,18 @@ static long double static float _TG_ATTRS - __tg_nexttoward(float __x, float __y) {return nexttowardf(__x, __y);} + __tg_nexttoward(float __x, long double __y) {return nexttowardf(__x, __y);} static double _TG_ATTRS - __tg_nexttoward(double __x, double __y) {return nexttoward(__x, __y);} + __tg_nexttoward(double __x, long double __y) {return nexttoward(__x, __y);} static long double _TG_ATTRS __tg_nexttoward(long double __x, long double __y) {return nexttowardl(__x, __y);} #undef nexttoward -#define nexttoward(__x, __y) __tg_nexttoward(__tg_promote2((__x), (__y))(__x), \ - __tg_promote2((__x), (__y))(__y)) +#define nexttoward(__x, __y) __tg_nexttoward(__tg_promote1((__x))(__x), (__y)) // remainder diff --git a/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h b/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h index 50f275d..a0bc0bb 100644 --- a/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h @@ -501,31 +501,45 @@ _mm_cvtss_f32(__m128 a) static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) _mm_loadh_pi(__m128 a, const __m64 *p) { - __m128 b; - b[0] = *(float*)p; - b[1] = *((float*)p+1); - return __builtin_shufflevector(a, b, 0, 1, 4, 5); + typedef float __mm_loadh_pi_v2f32 __attribute__((__vector_size__(8))); + struct __mm_loadh_pi_struct { + __mm_loadh_pi_v2f32 u; + } __attribute__((__packed__, __may_alias__)); + __mm_loadh_pi_v2f32 b = ((struct __mm_loadh_pi_struct*)p)->u; + __m128 bb = __builtin_shufflevector(b, b, 0, 1, 0, 1); + return __builtin_shufflevector(a, bb, 0, 1, 4, 5); } static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) _mm_loadl_pi(__m128 a, const __m64 *p) { - __m128 b; - b[0] = *(float*)p; - b[1] = *((float*)p+1); - return __builtin_shufflevector(a, b, 4, 5, 2, 3); + typedef float __mm_loadl_pi_v2f32 __attribute__((__vector_size__(8))); + struct __mm_loadl_pi_struct { + __mm_loadl_pi_v2f32 u; + } __attribute__((__packed__, __may_alias__)); + __mm_loadl_pi_v2f32 b = ((struct __mm_loadl_pi_struct*)p)->u; + __m128 bb = __builtin_shufflevector(b, b, 0, 1, 0, 1); + return __builtin_shufflevector(a, bb, 4, 5, 2, 3); } static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) _mm_load_ss(const float *p) { - return (__m128){ *p, 0, 0, 0 }; + struct __mm_load_ss_struct { + float u; + } __attribute__((__packed__, __may_alias__)); + float u = ((struct __mm_load_ss_struct*)p)->u; + return (__m128){ u, 0, 0, 0 }; } static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) _mm_load1_ps(const float *p) { - return (__m128){ *p, *p, *p, *p }; + struct __mm_load1_ps_struct { + float u; + } __attribute__((__packed__, __may_alias__)); + float u = ((struct __mm_load1_ps_struct*)p)->u; + return (__m128){ u, u, u, u }; } #define _mm_load_ps1(p) _mm_load1_ps(p) @@ -541,7 +555,7 @@ _mm_loadu_ps(const float *p) { struct __loadu_ps { __m128 v; - } __attribute__((packed, may_alias)); + } __attribute__((__packed__, __may_alias__)); return ((struct __loadu_ps*)p)->v; } @@ -604,7 +618,10 @@ _mm_storel_pi(__m64 *p, __m128 a) static __inline__ void __attribute__((__always_inline__)) _mm_store_ss(float *p, __m128 a) { - *p = a[0]; + struct __mm_store_ss_struct { + float u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_store_ss_struct*)p)->u = a[0]; } static __inline__ void __attribute__((__always_inline__, __nodebug__)) |