1/* { dg-do run } */
2/* { dg-options "-O2 -mavx512f" } */
3/* { dg-require-effective-target avx512f } */
4
5#include "avx512f-check.h"
6
7extern int memcmp (const void *, const void *, __SIZE_TYPE__);
8
9void
10avx512f_test (void)
11{
12  union512i_d  a, ad;
13  union512  b, bd;
14  union512d  c, cd;
15  union256i_d  d, dd;
16  union256  e, ed;
17  union256d  f, fd;
18  union128i_d  g, gd;
19  union128  h, hd;
20  union128d  k, kd;
21  int i;
22
23  for (i = 0; i < 16; i++)
24    {
25      a.a[i] = 7146908634 + i;
26      b.a[i] = 45.12f + i;
27    }
28
29  for (i = 0; i < 8; i++)
30    {
31      c.a[i] = 41234512513451345.0905 + i;
32      d.a[i] = 109534 + i;
33      e.a[i] = 85034.095f + i;
34    }
35
36  for (i = 0; i < 4; i++)
37    {
38      f.a[i] = 41234512451345.0905 + i;
39      g.a[i] = 71469086341 + i;
40      h.a[i] = 45.1264f + i;
41    }
42
43  for (i = 0; i < 2; i++)
44    {
45      k.a[i] = 7146908634.576 + i;
46    }
47
48  bd.x = _mm512_castpd_ps (c.x);
49  if (memcmp(bd.a, c.a, 64))
50    abort ();
51
52  ad.x = _mm512_castpd_si512 (c.x);
53  if (memcmp(ad.a, c.a, 64))
54    abort ();
55
56  cd.x = _mm512_castps_pd (b.x);
57  if (memcmp(cd.a, b.a, 64))
58    abort ();
59
60  ad.x = _mm512_castps_si512 (b.x);
61  if (memcmp(ad.a, b.a, 64))
62    abort ();
63
64  bd.x = _mm512_castsi512_ps (a.x);
65  if (memcmp(bd.a, a.a, 64))
66    abort ();
67
68  cd.x = _mm512_castsi512_pd (a.x);
69  if (memcmp(cd.a, a.a, 64))
70    abort ();
71
72  kd.x = _mm512_castpd512_pd128 (c.x);
73  if (memcmp(kd.a, c.a, 16))
74    abort ();
75
76  hd.x = _mm512_castps512_ps128 (b.x);
77  if (memcmp(hd.a, b.a, 16))
78    abort ();
79
80  gd.x = _mm512_castsi512_si128 (a.x);
81  if (memcmp(gd.a, a.a, 16))
82    abort ();
83
84  fd.x = _mm512_castpd512_pd256 (c.x);
85  if (memcmp(fd.a, c.a, 32))
86    abort ();
87
88  ed.x = _mm512_castps512_ps256 (b.x);
89  if (memcmp(ed.a, b.a, 32))
90    abort ();
91
92  dd.x = _mm512_castsi512_si256 (a.x);
93  if (memcmp(dd.a, a.a, 32))
94    abort ();
95
96  cd.x = _mm512_castpd128_pd512 (k.x);
97  if (memcmp(cd.a, k.a, 16))
98    abort ();
99
100  bd.x = _mm512_castps128_ps512 (h.x);
101  if (memcmp(bd.a, h.a, 16))
102    abort ();
103
104  ad.x = _mm512_castsi128_si512 (g.x);
105  if (memcmp(ad.a, g.a, 16))
106    abort ();
107
108  cd.x = _mm512_castpd256_pd512 (f.x);
109  if (memcmp(cd.a, f.a, 32))
110    abort ();
111
112  bd.x = _mm512_castps256_ps512 (e.x);
113  if (memcmp(bd.a, e.a, 32))
114    abort ();
115
116  ad.x = _mm512_castsi256_si512 (d.x);
117  if (memcmp(ad.a, d.a, 32))
118    abort ();
119}
120