diff options
author | Kirill Yukhin <kirill.yukhin@intel.com> | 2014-01-23 09:25:11 +0000 |
---|---|---|
committer | Kirill Yukhin <kyukhin@gcc.gnu.org> | 2014-01-23 09:25:11 +0000 |
commit | 2196a8859b66598642fc3e65c96e676888f868ed (patch) | |
tree | a664aa6be63bb5358498b26ff75e163d7e06ca03 /gcc | |
parent | 7ecc3eb9e6c61a3f1408a55e22eefa5fd3d08e79 (diff) | |
download | gcc-2196a8859b66598642fc3e65c96e676888f868ed.zip gcc-2196a8859b66598642fc3e65c96e676888f868ed.tar.gz gcc-2196a8859b66598642fc3e65c96e676888f868ed.tar.bz2 |
avx512fintrin.h (_mm512_kmov): New.
gcc/
* config/i386/avx512fintrin.h (_mm512_kmov): New.
* config/i386/i386.c (IX86_BUILTIN_KMOV16): Ditto.
(__builtin_ia32_kmov16): Ditto.
* config/i386/i386.md (UNSPEC_KMOV): New.
(kmovw): Ditto.
testsuite/gcc/
* gcc.target/i386/avx512f-kmovw-1.c: New.
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
From-SVN: r206958
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/i386/avx512fintrin.h | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 17 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512f-kmovw-1.c | 12 |
6 files changed, 53 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7663546..c67c6ff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -29,6 +29,15 @@ * Makefile.in: Add vec.o to OBJS-libcommon 2014-01-23 Kirill Yukhin <kirill.yukhin@intel.com> + Ilya Tocar <ilya.tocar@intel.com> + + * config/i386/avx512fintrin.h (_mm512_kmov): New. + * config/i386/i386.c (IX86_BUILTIN_KMOV16): Ditto. + (__builtin_ia32_kmov16): Ditto. + * config/i386/i386.md (UNSPEC_KMOV): New. + (kmovw): Ditto. + +2014-01-23 Kirill Yukhin <kirill.yukhin@intel.com> * config/i386/avx512fintrin.h (_mm512_loadu_si512): Rename. (_mm512_storeu_si512): Ditto. diff --git a/gcc/config/i386/avx512fintrin.h b/gcc/config/i386/avx512fintrin.h index 4e94174..4679947 100644 --- a/gcc/config/i386/avx512fintrin.h +++ b/gcc/config/i386/avx512fintrin.h @@ -12688,6 +12688,13 @@ _mm_mask_cmp_ss_mask (__mmask8 __M, __m128 __X, __m128 __Y, const int __P) M,_MM_FROUND_CUR_DIRECTION)) #endif +extern __inline __mmask16 +__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +_mm512_kmov (__mmask16 __A) +{ + return __builtin_ia32_kmov16 (__A); +} + #ifdef __DISABLE_AVX512F__ #undef __DISABLE_AVX512F__ #pragma GCC pop_options diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 4629053..cf79486 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -28376,6 +28376,7 @@ enum ix86_builtins IX86_BUILTIN_KUNPCKBW, IX86_BUILTIN_KXNOR16, IX86_BUILTIN_KXOR16, + IX86_BUILTIN_KMOV16, /* Alternate 4 and 8 element gather/scatter for the vectorizer where all operands are 32-byte or 64-byte wide respectively. */ @@ -30083,6 +30084,7 @@ static const struct builtin_description bdesc_args[] = { OPTION_MASK_ISA_AVX512F, CODE_FOR_kunpckhi, "__builtin_ia32_kunpckhi", IX86_BUILTIN_KUNPCKBW, UNKNOWN, (int) HI_FTYPE_HI_HI }, { OPTION_MASK_ISA_AVX512F, CODE_FOR_kxnorhi, "__builtin_ia32_kxnorhi", IX86_BUILTIN_KXNOR16, UNKNOWN, (int) HI_FTYPE_HI_HI }, { OPTION_MASK_ISA_AVX512F, CODE_FOR_xorhi3, "__builtin_ia32_kxorhi", IX86_BUILTIN_KXOR16, UNKNOWN, (int) HI_FTYPE_HI_HI }, + { OPTION_MASK_ISA_AVX512F, CODE_FOR_kmovw, "__builtin_ia32_kmov16", IX86_BUILTIN_KMOV16, UNKNOWN, (int) HI_FTYPE_HI }, /* SHA */ { OPTION_MASK_ISA_SSE2, CODE_FOR_sha1msg1, 0, IX86_BUILTIN_SHA1MSG1, UNKNOWN, (int) V4SI_FTYPE_V4SI_V4SI }, diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 53edacf..ddc3be6 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -178,6 +178,9 @@ ;; For BMI2 support UNSPEC_PDEP UNSPEC_PEXT + + ;; For AVX512F support + UNSPEC_KMOV ]) (define_c_enum "unspecv" [ @@ -2288,6 +2291,20 @@ ] (const_string "SI")))]) +(define_insn "kmovw" + [(set (match_operand:HI 0 "nonimmediate_operand" "=k,k") + (unspec:HI + [(match_operand:HI 1 "nonimmediate_operand" "rm,k")] + UNSPEC_KMOV))] + "!(MEM_P (operands[0]) && MEM_P (operands[1])) && TARGET_AVX512F" + "@ + kmovw\t{%k1, %0|%0, %k1} + kmovw\t{%1, %0|%0, %1}"; + [(set_attr "mode" "HI") + (set_attr "type" "mskmov") + (set_attr "prefix" "vex")]) + + (define_insn "*movhi_internal" [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r ,r ,m ,Yk,Yk,rm") (match_operand:HI 1 "general_operand" "r ,rn,rm,rn,rm,Yk,Yk"))] diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 858d6f3..3204dd6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -4,8 +4,13 @@ * c-c++-common/cpp/warning-zero-in-literals-1.c: New test file. 2014-01-23 Kirill Yukhin <kirill.yukhin@intel.com> + Ilya Tocar <ilya.tocar@intel.com> - * gcc.target/i386/avx512f-vmovdqu32-1.c: Fix intrinsic name. + * gcc.target/i386/avx512f-kmovw-1.c: New. + +2014-01-23 Kirill Yukhin <kirill.yukhin@intel.com> + + * gcc.target/i386/avx512f-vmovdqu32-1.c: Fix intrinsic name. * gcc.target/i386/avx512f-vmovdqu32-2.c: Ditto. * gcc.target/i386/avx512f-vpcmpd-2.c: Ditto. * gcc.target/i386/avx512f-vpcmpq-2.c: Ditto. diff --git a/gcc/testsuite/gcc.target/i386/avx512f-kmovw-1.c b/gcc/testsuite/gcc.target/i386/avx512f-kmovw-1.c new file mode 100644 index 0000000..c092726 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512f-kmovw-1.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -O2" } */ +/* { dg-final { scan-assembler "kmovw\[ \\t\]+\[^\n\]*%k\[1-7\]" } } */ + +#include <immintrin.h> +volatile __mmask16 k1; + +void +avx512f_test () +{ + k1 = _mm512_kmov (11); +} |