* [PR80582][X86] Add missing __mm256_set[r] intrinsics
@ 2017-05-09 9:35 Koval, Julia
2017-05-09 9:42 ` Jakub Jelinek
0 siblings, 1 reply; 4+ messages in thread
From: Koval, Julia @ 2017-05-09 9:35 UTC (permalink / raw)
To: GCC Patches; +Cc: Uros Bizjak, Kirill Yukhin
[-- Attachment #1: Type: text/plain, Size: 543 bytes --]
Hi,
This patch implements missing intrinsics:
_mm256_set_m128
_mm256_set_m128d
_mm256_set_m128i
_mm256_setr_m128
_mm256_setr_m128d
_mm256_setr_m128i
gcc/
* config/i386/avxintrin.h (_mm256_set_m128, _mm256_set_m128d,
_mm256_set_m128i, _mm256_setr_m128, _mm256_setr_m128d,
_mm256_setr_m128i): New intrinsics.
gcc/testsuite/
* gcc.target/i386/avx-vinsertf128-256-1: Test new intrinsics.
* gcc.target/i386/avx-vinsertf128-256-2: Ditto.
* gcc.target/i386/avx-vinsertf128-256-3: Ditto.
Ok for trunk?
Thanks,
Julia
[-- Attachment #2: 0001-set_.patch --]
[-- Type: application/octet-stream, Size: 5591 bytes --]
From c08b3cee7906a5506ff1e81f2837e9c80e90638c Mon Sep 17 00:00:00 2001
From: julia <jkoval@gkticlel801.igk.intel.com>
Date: Tue, 9 May 2017 11:22:01 +0300
Subject: [PATCH] set_
---
gcc/config/i386/avxintrin.h | 38 +++++++++++++++++++++-
.../gcc.target/i386/avx-vinsertf128-256-1.c | 22 +++++++++++--
.../gcc.target/i386/avx-vinsertf128-256-2.c | 20 ++++++++++--
.../gcc.target/i386/avx-vinsertf128-256-3.c | 20 ++++++++++--
4 files changed, 92 insertions(+), 8 deletions(-)
diff --git a/gcc/config/i386/avxintrin.h b/gcc/config/i386/avxintrin.h
index 20c5a07..d69dc0b 100644
--- a/gcc/config/i386/avxintrin.h
+++ b/gcc/config/i386/avxintrin.h
@@ -746,6 +746,7 @@ _mm256_broadcast_ps (__m128 const *__X)
return (__m256) __builtin_ia32_vbroadcastf128_ps256 (__X);
}
+
#ifdef __OPTIMIZE__
extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_insertf128_pd (__m256d __X, __m128d __Y, const int __O)
@@ -770,7 +771,6 @@ _mm256_insertf128_si256 (__m256i __X, __m128i __Y, const int __O)
(__v4si)__Y,
__O);
}
-
extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_insert_epi32 (__m256i __X, int __D, int const __N)
{
@@ -1484,6 +1484,42 @@ _mm256_castsi128_si256 (__m128i __A)
return (__m256i) __builtin_ia32_si256_si ((__v4si)__A);
}
+extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_set_m128 ( __m128 __H, __m128 __L)
+{
+ return _mm256_insertf128_ps (_mm256_castps128_ps256 (__L), __H, 1);
+}
+
+extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_set_m128d (__m128d __H, __m128d __L)
+{
+ return _mm256_insertf128_pd (_mm256_castpd128_pd256 (__L), __H, 1);
+}
+
+extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_set_m128i (__m128i __H, __m128i __L)
+{
+ return _mm256_insertf128_si256 (_mm256_castsi128_si256 (__L), __H, 1);
+}
+
+extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_setr_m128 (__m128 __L, __m128 __H)
+{
+ return _mm256_set_m128 (__H, __L);
+}
+
+extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_setr_m128d (__m128d __L, __m128d __H)
+{
+ return _mm256_set_m128d (__H, __L);
+}
+
+extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_setr_m128i (__m128i __L, __m128i __H)
+{
+ return _mm256_set_m128i (__H, __L);
+}
+
#ifdef __DISABLE_AVX__
#undef __DISABLE_AVX__
#pragma GCC pop_options
diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-1.c b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-1.c
index 2390e5c..a255c47 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-1.c
@@ -16,8 +16,8 @@ void static
avx_test (void)
{
int i;
- union256d u, s1;
- union128d s2;
+ union256d u, u2, u3, s1;
+ union128d s2, s3;
double e [4];
s1.x = _mm256_set_pd (2134.3343,1234.635654,453.345635,54646.464356);
@@ -29,7 +29,23 @@ avx_test (void)
for (i=0; i < 2; i++)
e[i + (OFFSET * 2)] = s2.a[i];
-
+
if (check_union256d (u, e))
abort ();
+
+ s3.x = _mm_set_pd (435345.43535, 23235.316545);
+ u2.x = _mm256_set_m128d(s3.x, s2.x);
+ u3.x = _mm256_setr_m128d(s2.x, s3.x);
+
+ for (i = 0; i < 2; i++)
+ e[i] = s2.a[i];
+
+ for (i = 0; i < 2; i++)
+ e[i + 2] = s3.a[i];
+
+ if (check_union256d (u2, e))
+ abort ();
+
+ if (check_union256d (u3, e))
+ abort ();
}
diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-2.c b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-2.c
index ce0b23b..edae309 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-2.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-2.c
@@ -16,8 +16,8 @@ void static
avx_test (void)
{
int i;
- union256 u, s1;
- union128 s2;
+ union256 u, u2, u3, s1;
+ union128 s2, s3;
float e [8];
s1.x = _mm256_set_ps (39.467, 45.789, 78.342, 67.892, 76.678, 12.963, 29.746, 24.753);
@@ -32,4 +32,20 @@ avx_test (void)
if (check_union256 (u, e))
abort ();
+
+ s3.x = _mm_set_ps (435.435, 25.35, 324.76, 32.11);
+ u2.x = _mm256_set_m128(s3.x, s2.x);
+ u3.x = _mm256_setr_m128(s2.x, s3.x);
+
+ for (i = 0; i < 4; i++)
+ e[i] = s2.a[i];
+
+ for (i = 0; i < 4; i++)
+ e[i + 4] = s3.a[i];
+
+ if (check_union256 (u2, e))
+ abort ();
+
+ if (check_union256 (u3, e))
+ abort ();
}
diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-3.c b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-3.c
index 89834d5..3398692 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-3.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-3.c
@@ -16,8 +16,8 @@ void static
avx_test (void)
{
int i;
- union256i_d u, s1;
- union128i_d s2;
+ union256i_d u, u2, u3, s1;
+ union128i_d s2, s3;
int e [8];
s1.x = _mm256_set_epi32 (39467, 45789, 78342, 67892, 76678, 12963, 29746, 24753);
@@ -32,4 +32,20 @@ avx_test (void)
if (check_union256i_d (u, e))
abort ();
+
+ s3.x = _mm_set_epi32 (43534, 23235, 6545, 11);
+ u2.x = _mm256_set_m128i(s3.x, s2.x);
+ u3.x = _mm256_setr_m128i(s2.x, s3.x);
+
+ for (i = 0; i < 4; i++)
+ e[i] = s2.a[i];
+
+ for (i = 0; i < 4; i++)
+ e[i + 4] = s3.a[i];
+
+ if (check_union256i_d (u2, e))
+ abort ();
+
+ if (check_union256i_d (u3, e))
+ abort ();
}
--
2.5.5
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PR80582][X86] Add missing __mm256_set[r] intrinsics
2017-05-09 9:35 [PR80582][X86] Add missing __mm256_set[r] intrinsics Koval, Julia
@ 2017-05-09 9:42 ` Jakub Jelinek
2017-05-09 10:01 ` Koval, Julia
0 siblings, 1 reply; 4+ messages in thread
From: Jakub Jelinek @ 2017-05-09 9:42 UTC (permalink / raw)
To: Koval, Julia; +Cc: GCC Patches, Uros Bizjak, Kirill Yukhin
On Tue, May 09, 2017 at 09:28:40AM +0000, Koval, Julia wrote:
> Hi,
>
> This patch implements missing intrinsics:
> _mm256_set_m128
> _mm256_set_m128d
> _mm256_set_m128i
> _mm256_setr_m128
> _mm256_setr_m128d
> _mm256_setr_m128i
>
> gcc/
> * config/i386/avxintrin.h (_mm256_set_m128, _mm256_set_m128d,
> _mm256_set_m128i, _mm256_setr_m128, _mm256_setr_m128d,
> _mm256_setr_m128i): New intrinsics.
>
> gcc/testsuite/
> * gcc.target/i386/avx-vinsertf128-256-1: Test new intrinsics.
> * gcc.target/i386/avx-vinsertf128-256-2: Ditto.
> * gcc.target/i386/avx-vinsertf128-256-3: Ditto.
>
> Ok for trunk?
--- a/gcc/config/i386/avxintrin.h
+++ b/gcc/config/i386/avxintrin.h
@@ -746,6 +746,7 @@ _mm256_broadcast_ps (__m128 const *__X)
return (__m256) __builtin_ia32_vbroadcastf128_ps256 (__X);
}
+
#ifdef __OPTIMIZE__
extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_insertf128_pd (__m256d __X, __m128d __Y, const int __O)
@@ -770,7 +771,6 @@ _mm256_insertf128_si256 (__m256i __X, __m128i __Y, const int __O)
(__v4si)__Y,
__O);
}
-
extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_insert_epi32 (__m256i __X, int __D, int const __N)
{
Why the above extra whitespace changes? Especially the latter looks
undesirable, there should be one empty line in between different inline
functions.
Jakub
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: [PR80582][X86] Add missing __mm256_set[r] intrinsics
2017-05-09 9:42 ` Jakub Jelinek
@ 2017-05-09 10:01 ` Koval, Julia
2017-05-10 18:06 ` Uros Bizjak
0 siblings, 1 reply; 4+ messages in thread
From: Koval, Julia @ 2017-05-09 10:01 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: GCC Patches, Uros Bizjak, Kirill Yukhin
[-- Attachment #1: Type: text/plain, Size: 1857 bytes --]
Sorry, fixed that.
Thanks,
Julia
-----Original Message-----
From: Jakub Jelinek [mailto:jakub@redhat.com]
Sent: Tuesday, May 09, 2017 11:36 AM
To: Koval, Julia <julia.koval@intel.com>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>; Uros Bizjak <ubizjak@gmail.com>; Kirill Yukhin <kirill.yukhin@gmail.com>
Subject: Re: [PR80582][X86] Add missing __mm256_set[r] intrinsics
On Tue, May 09, 2017 at 09:28:40AM +0000, Koval, Julia wrote:
> Hi,
>
> This patch implements missing intrinsics:
> _mm256_set_m128
> _mm256_set_m128d
> _mm256_set_m128i
> _mm256_setr_m128
> _mm256_setr_m128d
> _mm256_setr_m128i
>
> gcc/
> * config/i386/avxintrin.h (_mm256_set_m128, _mm256_set_m128d,
> _mm256_set_m128i, _mm256_setr_m128, _mm256_setr_m128d,
> _mm256_setr_m128i): New intrinsics.
>
> gcc/testsuite/
> * gcc.target/i386/avx-vinsertf128-256-1: Test new intrinsics.
> * gcc.target/i386/avx-vinsertf128-256-2: Ditto.
> * gcc.target/i386/avx-vinsertf128-256-3: Ditto.
>
> Ok for trunk?
--- a/gcc/config/i386/avxintrin.h
+++ b/gcc/config/i386/avxintrin.h
@@ -746,6 +746,7 @@ _mm256_broadcast_ps (__m128 const *__X)
return (__m256) __builtin_ia32_vbroadcastf128_ps256 (__X); }
+
#ifdef __OPTIMIZE__
extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm256_insertf128_pd (__m256d __X, __m128d __Y, const int __O) @@ -770,7 +771,6 @@ _mm256_insertf128_si256 (__m256i __X, __m128i __Y, const int __O)
(__v4si)__Y,
__O);
}
-
extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_insert_epi32 (__m256i __X, int __D, int const __N) {
Why the above extra whitespace changes? Especially the latter looks undesirable, there should be one empty line in between different inline functions.
Jakub
[-- Attachment #2: 0001-set_.patch --]
[-- Type: application/octet-stream, Size: 4997 bytes --]
From e1a3bc9e7f8428dd1d4cd84eb10425844e07681e Mon Sep 17 00:00:00 2001
From: julia <jkoval@gkticlel801.igk.intel.com>
Date: Tue, 9 May 2017 11:22:01 +0300
Subject: [PATCH] set_
---
gcc/config/i386/avxintrin.h | 36 ++++++++++++++++++++++
.../gcc.target/i386/avx-vinsertf128-256-1.c | 22 +++++++++++--
.../gcc.target/i386/avx-vinsertf128-256-2.c | 20 ++++++++++--
.../gcc.target/i386/avx-vinsertf128-256-3.c | 20 ++++++++++--
4 files changed, 91 insertions(+), 7 deletions(-)
diff --git a/gcc/config/i386/avxintrin.h b/gcc/config/i386/avxintrin.h
index 20c5a07..678368c 100644
--- a/gcc/config/i386/avxintrin.h
+++ b/gcc/config/i386/avxintrin.h
@@ -1484,6 +1484,42 @@ _mm256_castsi128_si256 (__m128i __A)
return (__m256i) __builtin_ia32_si256_si ((__v4si)__A);
}
+extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_set_m128 ( __m128 __H, __m128 __L)
+{
+ return _mm256_insertf128_ps (_mm256_castps128_ps256 (__L), __H, 1);
+}
+
+extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_set_m128d (__m128d __H, __m128d __L)
+{
+ return _mm256_insertf128_pd (_mm256_castpd128_pd256 (__L), __H, 1);
+}
+
+extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_set_m128i (__m128i __H, __m128i __L)
+{
+ return _mm256_insertf128_si256 (_mm256_castsi128_si256 (__L), __H, 1);
+}
+
+extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_setr_m128 (__m128 __L, __m128 __H)
+{
+ return _mm256_set_m128 (__H, __L);
+}
+
+extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_setr_m128d (__m128d __L, __m128d __H)
+{
+ return _mm256_set_m128d (__H, __L);
+}
+
+extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_setr_m128i (__m128i __L, __m128i __H)
+{
+ return _mm256_set_m128i (__H, __L);
+}
+
#ifdef __DISABLE_AVX__
#undef __DISABLE_AVX__
#pragma GCC pop_options
diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-1.c b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-1.c
index 2390e5c..a255c47 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-1.c
@@ -16,8 +16,8 @@ void static
avx_test (void)
{
int i;
- union256d u, s1;
- union128d s2;
+ union256d u, u2, u3, s1;
+ union128d s2, s3;
double e [4];
s1.x = _mm256_set_pd (2134.3343,1234.635654,453.345635,54646.464356);
@@ -29,7 +29,23 @@ avx_test (void)
for (i=0; i < 2; i++)
e[i + (OFFSET * 2)] = s2.a[i];
-
+
if (check_union256d (u, e))
abort ();
+
+ s3.x = _mm_set_pd (435345.43535, 23235.316545);
+ u2.x = _mm256_set_m128d(s3.x, s2.x);
+ u3.x = _mm256_setr_m128d(s2.x, s3.x);
+
+ for (i = 0; i < 2; i++)
+ e[i] = s2.a[i];
+
+ for (i = 0; i < 2; i++)
+ e[i + 2] = s3.a[i];
+
+ if (check_union256d (u2, e))
+ abort ();
+
+ if (check_union256d (u3, e))
+ abort ();
}
diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-2.c b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-2.c
index ce0b23b..edae309 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-2.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-2.c
@@ -16,8 +16,8 @@ void static
avx_test (void)
{
int i;
- union256 u, s1;
- union128 s2;
+ union256 u, u2, u3, s1;
+ union128 s2, s3;
float e [8];
s1.x = _mm256_set_ps (39.467, 45.789, 78.342, 67.892, 76.678, 12.963, 29.746, 24.753);
@@ -32,4 +32,20 @@ avx_test (void)
if (check_union256 (u, e))
abort ();
+
+ s3.x = _mm_set_ps (435.435, 25.35, 324.76, 32.11);
+ u2.x = _mm256_set_m128(s3.x, s2.x);
+ u3.x = _mm256_setr_m128(s2.x, s3.x);
+
+ for (i = 0; i < 4; i++)
+ e[i] = s2.a[i];
+
+ for (i = 0; i < 4; i++)
+ e[i + 4] = s3.a[i];
+
+ if (check_union256 (u2, e))
+ abort ();
+
+ if (check_union256 (u3, e))
+ abort ();
}
diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-3.c b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-3.c
index 89834d5..3398692 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-3.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vinsertf128-256-3.c
@@ -16,8 +16,8 @@ void static
avx_test (void)
{
int i;
- union256i_d u, s1;
- union128i_d s2;
+ union256i_d u, u2, u3, s1;
+ union128i_d s2, s3;
int e [8];
s1.x = _mm256_set_epi32 (39467, 45789, 78342, 67892, 76678, 12963, 29746, 24753);
@@ -32,4 +32,20 @@ avx_test (void)
if (check_union256i_d (u, e))
abort ();
+
+ s3.x = _mm_set_epi32 (43534, 23235, 6545, 11);
+ u2.x = _mm256_set_m128i(s3.x, s2.x);
+ u3.x = _mm256_setr_m128i(s2.x, s3.x);
+
+ for (i = 0; i < 4; i++)
+ e[i] = s2.a[i];
+
+ for (i = 0; i < 4; i++)
+ e[i + 4] = s3.a[i];
+
+ if (check_union256i_d (u2, e))
+ abort ();
+
+ if (check_union256i_d (u3, e))
+ abort ();
}
--
2.5.5
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PR80582][X86] Add missing __mm256_set[r] intrinsics
2017-05-09 10:01 ` Koval, Julia
@ 2017-05-10 18:06 ` Uros Bizjak
0 siblings, 0 replies; 4+ messages in thread
From: Uros Bizjak @ 2017-05-10 18:06 UTC (permalink / raw)
To: Koval, Julia; +Cc: Jakub Jelinek, GCC Patches, Kirill Yukhin
On Tue, May 9, 2017 at 11:42 AM, Koval, Julia <julia.koval@intel.com> wrote:
> Sorry, fixed that.
>
> Thanks,
> Julia
>
> -----Original Message-----
> From: Jakub Jelinek [mailto:jakub@redhat.com]
> Sent: Tuesday, May 09, 2017 11:36 AM
> To: Koval, Julia <julia.koval@intel.com>
> Cc: GCC Patches <gcc-patches@gcc.gnu.org>; Uros Bizjak <ubizjak@gmail.com>; Kirill Yukhin <kirill.yukhin@gmail.com>
> Subject: Re: [PR80582][X86] Add missing __mm256_set[r] intrinsics
>
> On Tue, May 09, 2017 at 09:28:40AM +0000, Koval, Julia wrote:
>> Hi,
>>
>> This patch implements missing intrinsics:
>> _mm256_set_m128
>> _mm256_set_m128d
>> _mm256_set_m128i
>> _mm256_setr_m128
>> _mm256_setr_m128d
>> _mm256_setr_m128i
>>
>> gcc/
>> * config/i386/avxintrin.h (_mm256_set_m128, _mm256_set_m128d,
>> _mm256_set_m128i, _mm256_setr_m128, _mm256_setr_m128d,
>> _mm256_setr_m128i): New intrinsics.
>>
>> gcc/testsuite/
>> * gcc.target/i386/avx-vinsertf128-256-1: Test new intrinsics.
>> * gcc.target/i386/avx-vinsertf128-256-2: Ditto.
>> * gcc.target/i386/avx-vinsertf128-256-3: Ditto.
>>
>> Ok for trunk?
Approved and committed to mainline SVN.
Thanks,
Uros.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-05-10 18:06 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-09 9:35 [PR80582][X86] Add missing __mm256_set[r] intrinsics Koval, Julia
2017-05-09 9:42 ` Jakub Jelinek
2017-05-09 10:01 ` Koval, Julia
2017-05-10 18:06 ` Uros Bizjak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).