1  /* { dg-do run } */
       2  /* { dg-require-effective-target int128 } */
       3  /* { dg-require-effective-target p8vector_hw } */
       4  /* { dg-options "-mpower8-vector" } */
       5  
       6  #include <inttypes.h>
       7  #include <altivec.h> // vector
       8  
       9  #ifdef DEBUG
      10  #include <stdio.h>
      11  #endif
      12  
      13  void abort (void);
      14  
      15  int main() {
      16    int i;
      17    __uint128_t data_u128[100];
      18    __int128_t data_128[100];
      19  
      20    vector __int128_t vec_128_expected1, vec_128_result1;
      21    vector __uint128_t vec_u128_expected1, vec_u128_result1;
      22    signed long long zero = (signed long long) 0;
      23  
      24    for (i = 0; i < 100; i++)
      25      {
      26        data_128[i] = i + 12800000;
      27        data_u128[i] = i + 12800001;
      28      }
      29  
      30    /* vec_xl() tests */
      31  
      32    vec_128_expected1 = (vector __int128_t){12800000};
      33    vec_128_result1 = vec_xl (zero, data_128);
      34  
      35    if (vec_128_expected1[0] != vec_128_result1[0])
      36      {
      37  #ifdef DEBUG
      38  	printf("Error: vec_xl(), vec_128_result1[0] = %lld %llu; ",
      39  	       vec_128_result1[0] >> 64,
      40  	       vec_128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
      41  	printf("vec_128_expected1[0] = %lld %llu\n",
      42  	       vec_128_expected1[0] >> 64,
      43  	       vec_128_expected1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
      44  #else
      45  	abort ();
      46  #endif
      47      }
      48  
      49    vec_u128_result1 = vec_xl (zero, data_u128);
      50    vec_u128_expected1 = (vector __uint128_t){12800001};
      51    if (vec_u128_expected1[0] != vec_u128_result1[0])
      52      {
      53  #ifdef DEBUG
      54  	printf("Error: vec_xl(), vec_u128_result1[0] = %lld; ",
      55  	       vec_u128_result1[0] >> 64,
      56  	       vec_u128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
      57  	printf("vec_u128_expected1[0] = %lld\n",
      58  	       vec_u128_expected1[0] >> 64,
      59  	       vec_u128_expected1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
      60  #else
      61  	abort ();
      62  #endif
      63      }
      64  
      65    /* vec_xl_be() tests */
      66  
      67    vec_128_result1 = vec_xl_be (zero, data_128);
      68  #ifdef __BIG_ENDIAN__
      69    vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
      70  #else
      71    vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
      72  #endif
      73  
      74    if (vec_128_expected1[0] != vec_128_result1[0])
      75      {
      76  #ifdef DEBUG
      77  	printf("Error: vec_xl_be(), vec_128_result1[0] = %llu %llu;",
      78  	       vec_128_result1[0] >> 64,
      79  	       vec_128_result1[0] & 0xFFFFFFFFFFFFFFFF);
      80  	printf(" vec_128_expected1[0] = %llu %llu\n",
      81  	       vec_128_expected1[0] >> 64,
      82  	       vec_128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
      83  #else
      84        abort ();
      85  #endif
      86      }
      87  
      88  #ifdef __BIG_ENDIAN__
      89    vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
      90  #else
      91    vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
      92  #endif
      93  
      94    vec_u128_result1 = vec_xl_be (zero, data_u128);
      95  
      96    if (vec_u128_expected1[0] != vec_u128_result1[0])
      97      {
      98  #ifdef DEBUG
      99  	printf("Error: vec_xl_be(), vec_u128_result1[0] = %llu %llu;",
     100  	       vec_u128_result1[0] >> 64,
     101  	       vec_u128_result1[0] & 0xFFFFFFFFFFFFFFFF);
     102  	printf(" vec_u128_expected1[0] = %llu %llu\n",
     103  	       vec_u128_expected1[0] >> 64,
     104  	       vec_u128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
     105  #else
     106        abort ();
     107  #endif
     108      }
     109  }