[RS6000] dg-do !compile and scan-assembler
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / pr79799-4.c
blob4130528fd2ea3c3d6dabd261bd37c779932a6bd7
1 /* { dg-do run { target { powerpc*-*-linux* } } } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-require-effective-target p9vector_hw } */
4 /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
6 #include <altivec.h>
7 #include <stdlib.h>
9 __attribute__ ((__noinline__))
10 vector float
11 insert_0 (vector float v, float f)
13 return vec_insert (f, v, 0);
16 __attribute__ ((__noinline__))
17 vector float
18 insert_1 (vector float v, float f)
20 return vec_insert (f, v, 1);
23 __attribute__ ((__noinline__))
24 vector float
25 insert_2 (vector float v, float f)
27 return vec_insert (f, v, 2);
30 __attribute__ ((__noinline__))
31 vector float
32 insert_3 (vector float v, float f)
34 return vec_insert (f, v, 3);
37 __attribute__ ((__noinline__))
38 void
39 test_insert (void)
41 vector float v1 = { 1.0f, 2.0f, 3.0f, 4.0f };
42 vector float v2 = { 5.0f, 6.0f, 7.0f, 8.0f };
44 v1 = insert_0 (v1, 5.0f);
45 v1 = insert_1 (v1, 6.0f);
46 v1 = insert_2 (v1, 7.0f);
47 v1 = insert_3 (v1, 8.0f);
49 if (vec_any_ne (v1, v2))
50 abort ();
53 __attribute__ ((__noinline__))
54 vector float
55 insert_extract_0_3 (vector float v1, vector float v2)
57 return vec_insert (vec_extract (v2, 3), v1, 0);
60 __attribute__ ((__noinline__))
61 vector float
62 insert_extract_1_2 (vector float v1, vector float v2)
64 return vec_insert (vec_extract (v2, 2), v1, 1);
67 __attribute__ ((__noinline__))
68 vector float
69 insert_extract_2_1 (vector float v1, vector float v2)
71 return vec_insert (vec_extract (v2, 1), v1, 2);
74 __attribute__ ((__noinline__))
75 vector float
76 insert_extract_3_0 (vector float v1, vector float v2)
78 return vec_insert (vec_extract (v2, 0), v1, 3);
81 __attribute__ ((__noinline__))
82 void
83 test_insert_extract (void)
85 vector float v1 = { 1.0f, 2.0f, 3.0f, 4.0f };
86 vector float v2 = { 5.0f, 6.0f, 7.0f, 8.0f };
87 vector float v3 = { 8.0f, 7.0f, 6.0f, 5.0f };
89 v1 = insert_extract_0_3 (v1, v2);
90 v1 = insert_extract_1_2 (v1, v2);
91 v1 = insert_extract_2_1 (v1, v2);
92 v1 = insert_extract_3_0 (v1, v2);
94 if (vec_any_ne (v1, v3))
95 abort ();
98 int
99 main (void)
101 test_insert ();
102 test_insert_extract ();
103 return 0;