summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Headers/emmintrin.h18
-rw-r--r--test/CodeGen/sse2-builtins.c7
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