diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2019-03-08 16:53:47 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2019-03-08 16:53:47 +0100 |
commit | 9a53d503a433b3ca0c4e312e9ebea5f1b344efed (patch) | |
tree | f8b9065637896923faeeaddcd9698ac18d060f1a /gcc | |
parent | 752e334b3acacf188a9bb14aec278c93ea42988b (diff) | |
download | gcc-9a53d503a433b3ca0c4e312e9ebea5f1b344efed.zip gcc-9a53d503a433b3ca0c4e312e9ebea5f1b344efed.tar.gz gcc-9a53d503a433b3ca0c4e312e9ebea5f1b344efed.tar.bz2 |
re PR target/68924 (No intrinsic for x86 `MOVQ m64, %xmm` in 32bit mode.)
PR target/68924
PR target/78782
PR target/87558
* config/i386/emmintrin.h (_mm_loadu_si64): New intrinsic.
(_mm_storeu_si64): Ditto.
testsuite/ChangeLog:
PR target/68924
PR target/78782
PR target/87558
* gcc.target/i386/pr78782.c: New test.
* gcc.target/i386/pr87558.c: Ditto.
From-SVN: r269497
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/i386/emmintrin.h | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr78782.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr87558.c | 9 |
5 files changed, 46 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5e737bd..9ecc07d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +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. + 2019-03-08 Martin Liska <mliska@suse.cz> PR target/86952 diff --git a/gcc/config/i386/emmintrin.h b/gcc/config/i386/emmintrin.h index d9bc3f7..f9e7b33 100644 --- a/gcc/config/i386/emmintrin.h +++ b/gcc/config/i386/emmintrin.h @@ -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) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b566c62..a58b29d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +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. + 2019-03-08 Jakub Jelinek <jakub@redhat.com> PR c/85870 diff --git a/gcc/testsuite/gcc.target/i386/pr78782.c b/gcc/testsuite/gcc.target/i386/pr78782.c new file mode 100644 index 0000000..e91d953 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78782.c @@ -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); +} diff --git a/gcc/testsuite/gcc.target/i386/pr87558.c b/gcc/testsuite/gcc.target/i386/pr87558.c new file mode 100644 index 0000000..c210507 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr87558.c @@ -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); +} |