2 /* { dg-require-effective-target p8vector_hw } */
3 /* { dg-options "-mdejagnu-cpu=power8" } */
5 #include <altivec.h> // vector
17 void test_int_result(int check
, vector
int vec_result
, vector
int vec_expected
)
21 for (i
= 0; i
< 4; i
++) {
37 if (vec_result
[i
] != vec_expected
[i
]) {
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
]);
49 void test_unsigned_int_result(int check
, vector
unsigned int vec_result
,
50 vector
unsigned int vec_expected
)
54 for (i
= 0; i
< 4; i
++) {
70 if (vec_result
[i
] != vec_expected
[i
]) {
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
]);
83 void test_result_sp(int check
, vector
float vec_result
,
84 vector
float vec_expected
)
87 for(i
= 0; i
<4; i
++) {
104 if (vec_result
[i
] != vec_expected
[i
]) {
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
]);
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
);