Re: [PATCH] Allow XMM16-XMM31 in vpmaddubsw

2016-05-18 Thread Kirill Yukhin
Hello Jakub,
On 13 May 19:14, Jakub Jelinek wrote:
> Hi!
> 
> This is either AVX2 or for EVEX AVX512BW (& AVX512VL) instruction,
> thus the patch adds it as a separate alternative guarded with avx512bw
> isa attribute.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
> 
> 2016-05-13  Jakub Jelinek  
> 
>   * config/i386/sse.md (avx2_pmaddubsw256, ssse3_pmaddubsw128): Add
>   avx512bw alternative.
> 
>   * gcc.target/i386/avx512bw-vpmaddubsw-3.c: New test.
OK (sorry for delay).

--
Thanks, K


[PATCH] Allow XMM16-XMM31 in vpmaddubsw

2016-05-13 Thread Jakub Jelinek
Hi!

This is either AVX2 or for EVEX AVX512BW (& AVX512VL) instruction,
thus the patch adds it as a separate alternative guarded with avx512bw
isa attribute.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2016-05-13  Jakub Jelinek  

* config/i386/sse.md (avx2_pmaddubsw256, ssse3_pmaddubsw128): Add
avx512bw alternative.

* gcc.target/i386/avx512bw-vpmaddubsw-3.c: New test.

--- gcc/config/i386/sse.md.jj   2016-05-13 13:58:12.384020131 +0200
+++ gcc/config/i386/sse.md  2016-05-13 14:46:03.563465879 +0200
@@ -13933,12 +13933,12 @@ (define_insn "ssse3_ph
+
+void
+f1 (__m128i x, __m128i y)
+{
+  register __m128i a __asm ("xmm16"), b __asm ("xmm17");
+  a = x;
+  b = y;
+  asm volatile ("" : "+v" (a), "+v" (b));
+  a = _mm_maddubs_epi16 (a, b);
+  asm volatile ("" : "+v" (a));
+}
+
+/* { dg-final { scan-assembler 
"vpmaddubsw\[^\n\r]*xmm1\[67]\[^\n\r]*xmm1\[67]\[^\n\r]*xmm1\[67]" } } */
+
+void
+f2 (__m256i x, __m256i y)
+{
+  register __m256i a __asm ("xmm16"), b __asm ("xmm17");
+  a = x;
+  b = y;
+  asm volatile ("" : "+v" (a), "+v" (b));
+  a = _mm256_maddubs_epi16 (a, b);
+  asm volatile ("" : "+v" (a));
+}
+
+/* { dg-final { scan-assembler 
"vpmaddubsw\[^\n\r]*ymm1\[67]\[^\n\r]*ymm1\[67]\[^\n\r]*ymm1\[67]" } } */

Jakub