Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/i386/xopintrin.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | b7f97abdc517 |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. | 1 /* Copyright (C) 2007-2017 Free Software Foundation, Inc. |
2 | 2 |
3 This file is part of GCC. | 3 This file is part of GCC. |
4 | 4 |
5 GCC is free software; you can redistribute it and/or modify | 5 GCC is free software; you can redistribute it and/or modify |
6 it under the terms of the GNU General Public License as published by | 6 it under the terms of the GNU General Public License as published by |
26 #endif | 26 #endif |
27 | 27 |
28 #ifndef _XOPMMINTRIN_H_INCLUDED | 28 #ifndef _XOPMMINTRIN_H_INCLUDED |
29 #define _XOPMMINTRIN_H_INCLUDED | 29 #define _XOPMMINTRIN_H_INCLUDED |
30 | 30 |
31 #include <fma4intrin.h> | |
32 | |
31 #ifndef __XOP__ | 33 #ifndef __XOP__ |
32 # error "XOP instruction set not enabled" | 34 #pragma GCC push_options |
33 #else | 35 #pragma GCC target("xop") |
34 | 36 #define __DISABLE_XOP__ |
35 #include <fma4intrin.h> | 37 #endif /* __XOP__ */ |
36 | 38 |
37 /* Integer multiply/add intructions. */ | 39 /* Integer multiply/add instructions. */ |
38 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | 40 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
39 _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C) | 41 _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C) |
40 { | 42 { |
41 return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A,(__v8hi)__B, (__v8hi)__C); | 43 return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A,(__v8hi)__B, (__v8hi)__C); |
42 } | 44 } |
326 { | 328 { |
327 return (__m128i) __builtin_ia32_vpshaq ((__v2di)__A, (__v2di)__B); | 329 return (__m128i) __builtin_ia32_vpshaq ((__v2di)__A, (__v2di)__B); |
328 } | 330 } |
329 | 331 |
330 /* Compare and Predicate Generation | 332 /* Compare and Predicate Generation |
331 pcom (integer, unsinged bytes) */ | 333 pcom (integer, unsigned bytes) */ |
332 | 334 |
333 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | 335 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
334 _mm_comlt_epu8(__m128i __A, __m128i __B) | 336 _mm_comlt_epu8(__m128i __A, __m128i __B) |
335 { | 337 { |
336 return (__m128i) __builtin_ia32_vpcomltub ((__v16qi)__A, (__v16qi)__B); | 338 return (__m128i) __builtin_ia32_vpcomltub ((__v16qi)__A, (__v16qi)__B); |
376 _mm_comtrue_epu8(__m128i __A, __m128i __B) | 378 _mm_comtrue_epu8(__m128i __A, __m128i __B) |
377 { | 379 { |
378 return (__m128i) __builtin_ia32_vpcomtrueub ((__v16qi)__A, (__v16qi)__B); | 380 return (__m128i) __builtin_ia32_vpcomtrueub ((__v16qi)__A, (__v16qi)__B); |
379 } | 381 } |
380 | 382 |
381 /*pcom (integer, unsinged words) */ | 383 /*pcom (integer, unsigned words) */ |
382 | 384 |
383 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | 385 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
384 _mm_comlt_epu16(__m128i __A, __m128i __B) | 386 _mm_comlt_epu16(__m128i __A, __m128i __B) |
385 { | 387 { |
386 return (__m128i) __builtin_ia32_vpcomltuw ((__v8hi)__A, (__v8hi)__B); | 388 return (__m128i) __builtin_ia32_vpcomltuw ((__v8hi)__A, (__v8hi)__B); |
426 _mm_comtrue_epu16(__m128i __A, __m128i __B) | 428 _mm_comtrue_epu16(__m128i __A, __m128i __B) |
427 { | 429 { |
428 return (__m128i) __builtin_ia32_vpcomtrueuw ((__v8hi)__A, (__v8hi)__B); | 430 return (__m128i) __builtin_ia32_vpcomtrueuw ((__v8hi)__A, (__v8hi)__B); |
429 } | 431 } |
430 | 432 |
431 /*pcom (integer, unsinged double words) */ | 433 /*pcom (integer, unsigned double words) */ |
432 | 434 |
433 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | 435 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
434 _mm_comlt_epu32(__m128i __A, __m128i __B) | 436 _mm_comlt_epu32(__m128i __A, __m128i __B) |
435 { | 437 { |
436 return (__m128i) __builtin_ia32_vpcomltud ((__v4si)__A, (__v4si)__B); | 438 return (__m128i) __builtin_ia32_vpcomltud ((__v4si)__A, (__v4si)__B); |
476 _mm_comtrue_epu32(__m128i __A, __m128i __B) | 478 _mm_comtrue_epu32(__m128i __A, __m128i __B) |
477 { | 479 { |
478 return (__m128i) __builtin_ia32_vpcomtrueud ((__v4si)__A, (__v4si)__B); | 480 return (__m128i) __builtin_ia32_vpcomtrueud ((__v4si)__A, (__v4si)__B); |
479 } | 481 } |
480 | 482 |
481 /*pcom (integer, unsinged quad words) */ | 483 /*pcom (integer, unsigned quad words) */ |
482 | 484 |
483 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | 485 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
484 _mm_comlt_epu64(__m128i __A, __m128i __B) | 486 _mm_comlt_epu64(__m128i __A, __m128i __B) |
485 { | 487 { |
486 return (__m128i) __builtin_ia32_vpcomltuq ((__v2di)__A, (__v2di)__B); | 488 return (__m128i) __builtin_ia32_vpcomltuq ((__v2di)__A, (__v2di)__B); |
743 } | 745 } |
744 | 746 |
745 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | 747 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
746 _mm_frcz_ss (__m128 __A, __m128 __B) | 748 _mm_frcz_ss (__m128 __A, __m128 __B) |
747 { | 749 { |
748 return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B); | 750 return (__m128) __builtin_ia32_movss ((__v4sf)__A, |
751 (__v4sf) | |
752 __builtin_ia32_vfrczss ((__v4sf)__B)); | |
749 } | 753 } |
750 | 754 |
751 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | 755 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
752 _mm_frcz_sd (__m128d __A, __m128d __B) | 756 _mm_frcz_sd (__m128d __A, __m128d __B) |
753 { | 757 { |
754 return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B); | 758 return (__m128d) __builtin_ia32_movsd ((__v2df)__A, |
759 (__v2df) | |
760 __builtin_ia32_vfrczsd ((__v2df)__B)); | |
755 } | 761 } |
756 | 762 |
757 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | 763 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) |
758 _mm256_frcz_ps (__m256 __A) | 764 _mm256_frcz_ps (__m256 __A) |
759 { | 765 { |
828 (__v8sf)(__m256)(Y), \ | 834 (__v8sf)(__m256)(Y), \ |
829 (__v8si)(__m256)(C), \ | 835 (__v8si)(__m256)(C), \ |
830 (int)(I))) | 836 (int)(I))) |
831 #endif /* __OPTIMIZE__ */ | 837 #endif /* __OPTIMIZE__ */ |
832 | 838 |
833 #endif /* __XOP__ */ | 839 #ifdef __DISABLE_XOP__ |
840 #undef __DISABLE_XOP__ | |
841 #pragma GCC pop_options | |
842 #endif /* __DISABLE_XOP__ */ | |
834 | 843 |
835 #endif /* _XOPMMINTRIN_H_INCLUDED */ | 844 #endif /* _XOPMMINTRIN_H_INCLUDED */ |