]> granicus.if.org Git - clang/commitdiff
[X86] Add _mm_broadcastsd_pd intrinsic
authorMichael Kuperstein <michael.m.kuperstein@intel.com>
Tue, 19 May 2015 14:49:14 +0000 (14:49 +0000)
committerMichael Kuperstein <michael.m.kuperstein@intel.com>
Tue, 19 May 2015 14:49:14 +0000 (14:49 +0000)
_mm_broadcastsd_pd is basically an alias for _mm_movedup_pd, however the alias is only available from AVX2 forward.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@237698 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Headers/avx2intrin.h
test/CodeGen/avx2-builtins.c

index b0df91f205b73b5d3d898a217ac33bc7c8ac77e9..e1e639de1ba8f252993e7c552fc82fccfe35310c 100644 (file)
@@ -760,6 +760,12 @@ _mm_broadcastss_ps(__m128 __X)
   return (__m128)__builtin_ia32_vbroadcastss_ps((__v4sf)__X);
 }
 
+static __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
+_mm_broadcastsd_pd(__m128d __a)
+{
+  return __builtin_shufflevector(__a, __a, 0, 0);
+}
+
 static __inline__ __m256 __attribute__((__always_inline__, __nodebug__))
 _mm256_broadcastss_ps(__m128 __X)
 {
index bdcaa9cc0050f10af2418a2067ca0dd86d26a1b5..e3628717c5b0d351947844bd0c753bc83f5f1b74 100644 (file)
@@ -611,6 +611,11 @@ __m128 test_mm_broadcastss_ps(__m128 a) {
   return _mm_broadcastss_ps(a);
 }
 
+__m128d test_mm_broadcastsd_pd(__m128d a) {
+  // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> zeroinitializer
+  return _mm_broadcastsd_pd(a);
+}
+
 __m256 test_mm256_broadcastss_ps(__m128 a) {
   // CHECK: @llvm.x86.avx2.vbroadcast.ss.ps.256
   return _mm256_broadcastss_ps(a);