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 */