1 /* { dg-do compile { target { ! ia32 } } } */
2 /* { dg-options "-O2 -mf16c -mavx512vl -masm=att" } */
3
4 #include <x86intrin.h>
5
6 void
7 f1 (__m128 x)
8 {
9 register __m128 a __asm ("xmm16");
10 register __m128i b __asm ("xmm17");
11 a = x;
12 asm volatile ("" : "+v" (a));
13 b = _mm_cvtps_ph (a, 1);
14 asm volatile ("" : "+v" (b));
15 }
16
17 /* { dg-final { scan-assembler "vcvtps2ph\[^\n\r]*\\\$1\[^\n\r]*%xmm16\[^\n\r]*%xmm17" } } */
18
19 void
20 f2 (__m256 x)
21 {
22 register __m256 a __asm ("xmm16");
23 register __m128i b __asm ("xmm17");
24 a = x;
25 asm volatile ("" : "+v" (a));
26 b = _mm256_cvtps_ph (a, 1);
27 asm volatile ("" : "+v" (b));
28 }
29
30 /* { dg-final { scan-assembler "vcvtps2ph\[^\n\r]*\\\$1\[^\n\r]*%ymm16\[^\n\r]*%xmm17" } } */
31
32 void
33 f3 (__m256 x, __v8hi *y)
34 {
35 register __m256 a __asm ("xmm16");
36 a = x;
37 asm volatile ("" : "+v" (a));
38 *y = (__v8hi) _mm256_cvtps_ph (a, 1);
39 }
40
41 /* { dg-final { scan-assembler "vcvtps2ph\[^\n\r]*\\\$1\[^\n\r]*%ymm16\[^\n\r]*%\[re\]di" } } */