From 99ed27053d68abf543476feef43abdf72a8d7e7a Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Fri, 28 Apr 2017 10:28:32 +0000 Subject: [PATCH] [X86][SSE] Add _mm_set_pd1 (PR32827) Matches _mm_set_ps1 implementation llvm-svn: 301637 --- clang/lib/Headers/emmintrin.h | 18 ++++++++++++++++++ clang/test/CodeGen/sse2-builtins.c | 7 +++++++ 2 files changed, 25 insertions(+) diff --git a/clang/lib/Headers/emmintrin.h b/clang/lib/Headers/emmintrin.h index 0dfa6a9..13b0db2 100644 --- a/clang/lib/Headers/emmintrin.h +++ b/clang/lib/Headers/emmintrin.h @@ -1750,6 +1750,24 @@ _mm_set1_pd(double __w) return (__m128d){ __w, __w }; } +/// \brief Constructs a 128-bit floating-point vector of [2 x double], with each +/// of the two double-precision floating-point vector elements set to the +/// specified double-precision floating-point value. +/// +/// \headerfile +/// +/// This intrinsic corresponds to the VMOVDDUP / MOVLHPS instruction. +/// +/// \param __w +/// A double-precision floating-point value used to initialize each vector +/// element of the result. +/// \returns An initialized 128-bit floating-point vector of [2 x double]. +static __inline__ __m128d __DEFAULT_FN_ATTRS +_mm_set_pd1(double __w) +{ + return _mm_set1_pd(__w); +} + /// \brief Constructs a 128-bit floating-point vector of [2 x double] /// initialized with the specified double-precision floating-point values. /// diff --git a/clang/test/CodeGen/sse2-builtins.c b/clang/test/CodeGen/sse2-builtins.c index a140a6c..ca51314 100644 --- a/clang/test/CodeGen/sse2-builtins.c +++ b/clang/test/CodeGen/sse2-builtins.c @@ -951,6 +951,13 @@ __m128d test_mm_set_pd(double A, double B) { return _mm_set_pd(A, B); } +__m128d test_mm_set_pd1(double A) { + // CHECK-LABEL: test_mm_set_pd1 + // CHECK: insertelement <2 x double> undef, double %{{.*}}, i32 0 + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 1 + return _mm_set_pd1(A); +} + __m128d test_mm_set_sd(double A) { // CHECK-LABEL: test_mm_set_sd // CHECK: insertelement <2 x double> undef, double %{{.*}}, i32 0 -- 2.7.4