1 /* { dg-do compile { target { ! ia32 } } } */
2 /* { dg-options "-O2 -mavx512vl" } */
3 /* { dg-final { scan-assembler-times "vpord\[^\n\r\]*ymm16" 1 } } */
4 /* { dg-final { scan-assembler-times "vpord\[^\n\r\]*xmm16" 1 } } */
5 /* { dg-final { scan-assembler-times "vporq\[^\n\r\]*ymm16" 1 } } */
6 /* { dg-final { scan-assembler-times "vporq\[^\n\r\]*xmm16" 1 } } */
7 /* { dg-final { scan-assembler-times "vpxord\[^\n\r\]*ymm16" 1 } } */
8 /* { dg-final { scan-assembler-times "vpxord\[^\n\r\]*xmm16" 1 } } */
9 /* { dg-final { scan-assembler-times "vpxorq\[^\n\r\]*ymm16" 1 } } */
10 /* { dg-final { scan-assembler-times "vpxorq\[^\n\r\]*xmm16" 1 } } */
11
12 #include <immintrin.h>
13
14 __m256i
foo1(__m256i x,__m256i y)15 foo1 (__m256i x, __m256i y)
16 {
17 register __m256i z __asm ("xmm16") = y;
18 asm volatile ("" : "+v" (z));
19 return _mm256_or_epi32 (x, z);
20 }
21
22 __m256i
foo2(__m256i x,__m256i y)23 foo2 (__m256i x, __m256i y)
24 {
25 register __m256i z __asm ("xmm16") = y;
26 asm volatile ("" : "+v" (z));
27 return _mm256_xor_epi32 (x, z);
28 }
29
30 __m128i
foo3(__m128i x,__m128i y)31 foo3 (__m128i x, __m128i y)
32 {
33 register __m128i z __asm ("xmm16") = y;
34 asm volatile ("" : "+v" (z));
35 return _mm_or_epi32 (x, z);
36 }
37
38 __m128i
foo4(__m128i x,__m128i y)39 foo4 (__m128i x, __m128i y)
40 {
41 register __m128i z __asm ("xmm16") = y;
42 asm volatile ("" : "+v" (z));
43 return _mm_xor_epi32 (x, z);
44 }
45
46 __m256i
foo5(__m256i x,__m256i y)47 foo5 (__m256i x, __m256i y)
48 {
49 register __m256i z __asm ("xmm16") = y;
50 asm volatile ("" : "+v" (z));
51 return _mm256_or_epi64 (x, z);
52 }
53
54 __m256i
foo6(__m256i x,__m256i y)55 foo6 (__m256i x, __m256i y)
56 {
57 register __m256i z __asm ("xmm16") = y;
58 asm volatile ("" : "+v" (z));
59 return _mm256_xor_epi64 (x, z);
60 }
61
62 __m128i
foo7(__m128i x,__m128i y)63 foo7 (__m128i x, __m128i y)
64 {
65 register __m128i z __asm ("xmm16") = y;
66 asm volatile ("" : "+v" (z));
67 return _mm_or_epi64 (x, z);
68 }
69
70 __m128i
foo8(__m128i x,__m128i y)71 foo8 (__m128i x, __m128i y)
72 {
73 register __m128i z __asm ("xmm16") = y;
74 asm volatile ("" : "+v" (z));
75 return _mm_xor_epi64 (x, z);
76 }
77