(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
builtins-3-runnable-p8.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target p8vector_hw } */
       3  /* { dg-options "-mdejagnu-cpu=power8" } */
       4  
       5  #include <altivec.h> // vector
       6  
       7  #ifdef DEBUG
       8  #include <stdio.h>
       9  #endif
      10  
      11  #define ALL  1
      12  #define EVEN 2
      13  #define ODD  3
      14  
      15  void abort (void);
      16  
      17  void test_int_result(int check, vector int vec_result, vector int vec_expected)
      18  {
      19  	int i;
      20  
      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;
      35  		}
      36  
      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
      45  		}
      46  	}
      47  }
      48  
      49  void test_unsigned_int_result(int check, vector unsigned int vec_result,
      50  			      vector unsigned int vec_expected)
      51  {
      52  	int i;
      53  
      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;
      68  		}
      69  
      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
      78  		}
      79  
      80  	}
      81  }
      82  
      83  void test_result_sp(int check, vector float vec_result,
      84  		    vector float vec_expected)
      85  {
      86  	int i;
      87  	for(i = 0; i<4; i++) {
      88  
      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;
     102  		}
     103  
     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
     112  		}
     113  	}
     114  }
     115  
     116  int main()
     117  {
     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;
     125  
     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 };
     130  
     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);
     137  
     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);
     145  
     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);
     150  
     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);
     154  
     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);
     160  }
     161