[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / builtins-3-runnable-p8.c
blob32e8aa3ecae3e7cb766fb0753cabe0963f3a8177
1 /* { dg-do run } */
2 /* { dg-require-effective-target p8vector_hw } */
3 /* { dg-options "-mdejagnu-cpu=power8" } */
5 #include <altivec.h> // vector
7 #ifdef DEBUG
8 #include <stdio.h>
9 #endif
11 #define ALL 1
12 #define EVEN 2
13 #define ODD 3
15 void abort (void);
17 void test_int_result(int check, vector int vec_result, vector int vec_expected)
19 int i;
21 for (i = 0; i < 4; i++) {
22 switch (check) {
23 case ALL:
24 break;
25 case EVEN:
26 if (i%2 == 0)
27 break;
28 else
29 continue;
30 case ODD:
31 if (i%2 != 0)
32 break;
33 else
34 continue;
37 if (vec_result[i] != vec_expected[i]) {
38 #ifdef DEBUG
39 printf("Test_int_result: ");
40 printf("vec_result[%d] (%d) != vec_expected[%d] (%d)\n",
41 i, vec_result[i], i, vec_expected[i]);
42 #else
43 abort();
44 #endif
49 void test_unsigned_int_result(int check, vector unsigned int vec_result,
50 vector unsigned int vec_expected)
52 int i;
54 for (i = 0; i < 4; i++) {
55 switch (check) {
56 case ALL:
57 break;
58 case EVEN:
59 if (i%2 == 0)
60 break;
61 else
62 continue;
63 case ODD:
64 if (i%2 != 0)
65 break;
66 else
67 continue;
70 if (vec_result[i] != vec_expected[i]) {
71 #ifdef DEBUG
72 printf("Test_unsigned int_result: ");
73 printf("vec_result[%d] (%d) != vec_expected[%d] (%d)\n",
74 i, vec_result[i], i, vec_expected[i]);
75 #else
76 abort();
77 #endif
83 void test_result_sp(int check, vector float vec_result,
84 vector float vec_expected)
86 int i;
87 for(i = 0; i<4; i++) {
89 switch (check) {
90 case ALL:
91 break;
92 case EVEN:
93 if (i%2 == 0)
94 break;
95 else
96 continue;
97 case ODD:
98 if (i%2 != 0)
99 break;
100 else
101 continue;
104 if (vec_result[i] != vec_expected[i]) {
105 #ifdef DEBUG
106 printf("Test_result_sp: ");
107 printf("vec_result[%d] (%f) != vec_expected[%d] (%f)\n",
108 i, vec_result[i], i, vec_expected[i]);
109 #else
110 abort();
111 #endif
116 int main()
118 int i;
119 vector unsigned int vec_unint, vec_uns_int_expected, vec_uns_int_result;
120 vector signed int vec_int, vec_int_expected, vec_int_result;
121 vector float vec_flt, vec_flt_result, vec_flt_expected;
122 vector long long int vec_ll_int0, vec_ll_int1;
123 vector long long unsigned int vec_ll_uns_int0, vec_ll_uns_int1;
124 vector double vec_dble0, vec_dble1, vec_dble_result, vec_dble_expected;
126 vec_ll_int0 = (vector long long int){ -12, -12345678901234 };
127 vec_ll_int1 = (vector long long int){ 12, 9876543210 };
128 vec_ll_uns_int0 = (vector unsigned long long int){ 102, 9753108642 };
129 vec_ll_uns_int1 = (vector unsigned long long int){ 23, 29 };
131 /* Convert two double precision vector float to vector int */
132 vec_dble0 = (vector double){-124.930, 81234.49};
133 vec_dble1 = (vector double){-24.370, 8354.99};
134 vec_int_expected = (vector signed int){-124, 81234, -24, 8354};
135 vec_int_result = vec_signed2 (vec_dble0, vec_dble1);
136 test_int_result (ALL, vec_int_result, vec_int_expected);
138 /* Convert two double precision vector float to vector unsigned int */
139 vec_dble0 = (vector double){124.930, 8134.49};
140 vec_dble1 = (vector double){24.370, 834.99};
141 vec_uns_int_expected = (vector unsigned int){124, 8134, 24, 834};
142 vec_uns_int_result = vec_unsigned2 (vec_dble0, vec_dble1);
143 test_unsigned_int_result (ALL, vec_uns_int_result,
144 vec_uns_int_expected);
146 /* conversion of two double precision vectors to single precision vector */
147 vec_flt_expected = (vector float){-12.00, -12345678901234.00, 12.00, 9876543210.00};
148 vec_flt_result = vec_float2 (vec_ll_int0, vec_ll_int1);
149 test_result_sp(ALL, vec_flt_result, vec_flt_expected);
151 vec_flt_expected = (vector float){102.00, 9753108642.00, 23.00, 29.00};
152 vec_flt_result = vec_float2 (vec_ll_uns_int0, vec_ll_uns_int1);
153 test_result_sp(ALL, vec_flt_result, vec_flt_expected);
155 vec_dble0 = (vector double){ 34.0, 97.0 };
156 vec_dble1 = (vector double){ 214.0, -5.5 };
157 vec_flt_expected = (vector float){34.0, 97.0, 214.0, -5.5};
158 vec_flt_result = vec_float2 (vec_dble0, vec_dble1);
159 test_result_sp(ALL, vec_flt_result, vec_flt_expected);