This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] x86: _mm512_set1_p[sd]
- From: Ulrich Drepper <drepper at gmail dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 19 Mar 2014 22:41:29 -0400
- Subject: [PATCH] x86: _mm512_set1_p[sd]
- Authentication-results: sourceware.org; auth=none
Another set of functions missing are those to set all elements of a
512-bit vector to the same float or double value. I think the patch
below uses the optimal code sequence for that. The patch requires the
previous patch introducing _mm*_undefined_*.
2014-03-19 Ulrich Drepper <drepper@gmail.com>
* config/i386/avx512fintrin.h: Define _mm512_set1_ps and
_mm512_set1_pd.
diff -u b/gcc/config/i386/avx512fintrin.h b/gcc/config/i386/avx512fintrin.h
--- b/gcc/config/i386/avx512fintrin.h
+++ b/gcc/config/i386/avx512fintrin.h
@@ -130,6 +130,28 @@
return __Y;
}
+extern __inline __m512d
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+_mm512_set1_pd (double __A)
+{
+ return (__m512d) __builtin_ia32_broadcastsd512 (__extension__
+ (__v2df) { __A, },
+ (__v8df)
+ _mm512_undefined_pd (),
+ (__mmask8) -1);
+}
+
+extern __inline __m512
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+_mm512_set1_ps (float __A)
+{
+ return (__m512) __builtin_ia32_broadcastss512 (__extension__
+ (__v4sf) { __A, },
+ (__v16sf)
+ _mm512_undefined_ps (),
+ (__mmask16) -1);
+}
+
extern __inline __m512
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
_mm512_setzero_ps (void)