diff options
-rw-r--r-- | lib/Headers/emmintrin.h | 18 | ||||
-rw-r--r-- | test/CodeGen/sse2-builtins.c | 7 |
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/Headers/emmintrin.h b/lib/Headers/emmintrin.h index 0dfa6a9fbc..13b0db22ec 100644 --- a/lib/Headers/emmintrin.h +++ b/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 <x86intrin.h> +/// +/// This intrinsic corresponds to the <c> VMOVDDUP / MOVLHPS </c> 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/test/CodeGen/sse2-builtins.c b/test/CodeGen/sse2-builtins.c index a140a6ce55..ca51314d80 100644 --- a/test/CodeGen/sse2-builtins.c +++ b/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 |