From 3441130f8c6115cada8fe0e235deb2860d4f0088 Mon Sep 17 00:00:00 2001
From: Uros Bizjak <ubizjak@gmail.com>
Date: Fri, 8 Mar 2019 10:55:36 +0100
Subject: [PATCH] x86: Add _mm_loadu_si64 and _mm_storeu_si64 intrinsics.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
2019-03-08 Uroš Bizjak <ubizjak@gmail.com>
PR target/68924
PR target/78782
PR target/87558
* config/i386/emmintrin.h (_mm_loadu_si64): New intrinsic.
(_mm_storeu_si64): Ditto.
testsuite/ChangeLog:
2019-03-08 Uroš Bizjak <ubizjak@gmail.com>
PR target/68924
PR target/78782
PR target/87558
* gcc.target/i386/pr78782.c: New test.
* gcc.target/i386/pr87558.c: Ditto.
---
gcc/config/i386/emmintrin.h | 12 ++++++++++++
gcc/testsuite/gcc.target/i386/pr78782.c | 9 +++++++++
gcc/testsuite/gcc.target/i386/pr87558.c | 9 +++++++++
3 files changed, 30 insertions(+)
create mode 100644 gcc/testsuite/gcc.target/i386/pr78782.c
create mode 100644 gcc/testsuite/gcc.target/i386/pr87558.c
@@ -709,6 +709,12 @@ _mm_loadl_epi64 (__m128i_u const *__P)
return _mm_set_epi64 ((__m64)0LL, *(__m64_u *)__P);
}
+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_loadu_si64 (void const *__P)
+{
+ return _mm_loadl_epi64 ((__m128i_u *)__P);
+}
+
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_store_si128 (__m128i *__P, __m128i __B)
{
@@ -727,6 +733,12 @@ _mm_storel_epi64 (__m128i_u *__P, __m128i __B)
*(__m64_u *)__P = (__m64) ((__v2di)__B)[0];
}
+extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_storeu_si64 (void *__P, __m128i __B)
+{
+ _mm_storel_epi64 ((__m128i_u *)__P, __B);
+}
+
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_movepi64_pi64 (__m128i __B)
{
new file mode 100644
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -msse2" } */
+
+#include <emmintrin.h>
+
+__m128i foo (unsigned char *p)
+{
+ return _mm_loadu_si64 ((void *)p);
+}
new file mode 100644
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -msse2" } */
+
+#include <emmintrin.h>
+
+void foo (unsigned char *p, __m128i x)
+{
+ _mm_storeu_si64 ((void *)p, x);
+}
--
2.20.1