/* { dg-do run } */ /* { dg-require-effective-target p8vector_hw } */ /* { dg-options "-mdejagnu-cpu=power8" } */ #include // vector #ifdef DEBUG #include #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); }