blob: 32e8aa3ecae3e7cb766fb0753cabe0963f3a8177 [file] [log] [blame]
/* { dg-do run } */
/* { dg-require-effective-target p8vector_hw } */
/* { dg-options "-mdejagnu-cpu=power8" } */
#include <altivec.h> // vector
#ifdef DEBUG
#include <stdio.h>
#endif
#define ALL 1
#define EVEN 2
#define ODD 3
void abort (void);
void test_int_result(int check, vector int vec_result, vector int vec_expected)
{
int i;
for (i = 0; i < 4; i++) {
switch (check) {
case ALL:
break;
case EVEN:
if (i%2 == 0)
break;
else
continue;
case ODD:
if (i%2 != 0)
break;
else
continue;
}
if (vec_result[i] != vec_expected[i]) {
#ifdef DEBUG
printf("Test_int_result: ");
printf("vec_result[%d] (%d) != vec_expected[%d] (%d)\n",
i, vec_result[i], i, vec_expected[i]);
#else
abort();
#endif
}
}
}
void test_unsigned_int_result(int check, vector unsigned int vec_result,
vector unsigned int vec_expected)
{
int i;
for (i = 0; i < 4; i++) {
switch (check) {
case ALL:
break;
case EVEN:
if (i%2 == 0)
break;
else
continue;
case ODD:
if (i%2 != 0)
break;
else
continue;
}
if (vec_result[i] != vec_expected[i]) {
#ifdef DEBUG
printf("Test_unsigned int_result: ");
printf("vec_result[%d] (%d) != vec_expected[%d] (%d)\n",
i, vec_result[i], i, vec_expected[i]);
#else
abort();
#endif
}
}
}
void test_result_sp(int check, vector float vec_result,
vector float vec_expected)
{
int i;
for(i = 0; i<4; i++) {
switch (check) {
case ALL:
break;
case EVEN:
if (i%2 == 0)
break;
else
continue;
case ODD:
if (i%2 != 0)
break;
else
continue;
}
if (vec_result[i] != vec_expected[i]) {
#ifdef DEBUG
printf("Test_result_sp: ");
printf("vec_result[%d] (%f) != vec_expected[%d] (%f)\n",
i, vec_result[i], i, vec_expected[i]);
#else
abort();
#endif
}
}
}
int main()
{
int i;
vector unsigned int vec_unint, vec_uns_int_expected, vec_uns_int_result;
vector signed int vec_int, vec_int_expected, vec_int_result;
vector float vec_flt, vec_flt_result, vec_flt_expected;
vector long long int vec_ll_int0, vec_ll_int1;
vector long long unsigned int vec_ll_uns_int0, vec_ll_uns_int1;
vector double vec_dble0, vec_dble1, vec_dble_result, vec_dble_expected;
vec_ll_int0 = (vector long long int){ -12, -12345678901234 };
vec_ll_int1 = (vector long long int){ 12, 9876543210 };
vec_ll_uns_int0 = (vector unsigned long long int){ 102, 9753108642 };
vec_ll_uns_int1 = (vector unsigned long long int){ 23, 29 };
/* Convert two double precision vector float to vector int */
vec_dble0 = (vector double){-124.930, 81234.49};
vec_dble1 = (vector double){-24.370, 8354.99};
vec_int_expected = (vector signed int){-124, 81234, -24, 8354};
vec_int_result = vec_signed2 (vec_dble0, vec_dble1);
test_int_result (ALL, vec_int_result, vec_int_expected);
/* Convert two double precision vector float to vector unsigned int */
vec_dble0 = (vector double){124.930, 8134.49};
vec_dble1 = (vector double){24.370, 834.99};
vec_uns_int_expected = (vector unsigned int){124, 8134, 24, 834};
vec_uns_int_result = vec_unsigned2 (vec_dble0, vec_dble1);
test_unsigned_int_result (ALL, vec_uns_int_result,
vec_uns_int_expected);
/* conversion of two double precision vectors to single precision vector */
vec_flt_expected = (vector float){-12.00, -12345678901234.00, 12.00, 9876543210.00};
vec_flt_result = vec_float2 (vec_ll_int0, vec_ll_int1);
test_result_sp(ALL, vec_flt_result, vec_flt_expected);
vec_flt_expected = (vector float){102.00, 9753108642.00, 23.00, 29.00};
vec_flt_result = vec_float2 (vec_ll_uns_int0, vec_ll_uns_int1);
test_result_sp(ALL, vec_flt_result, vec_flt_expected);
vec_dble0 = (vector double){ 34.0, 97.0 };
vec_dble1 = (vector double){ 214.0, -5.5 };
vec_flt_expected = (vector float){34.0, 97.0, 214.0, -5.5};
vec_flt_result = vec_float2 (vec_dble0, vec_dble1);
test_result_sp(ALL, vec_flt_result, vec_flt_expected);
}