aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/powerpc/builtins-4-int128-runnable.c
blob: 4f4e7a9ee5e453d2b6e738c0fe835250c962c8c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/* { dg-do run } */
/* { dg-require-effective-target int128 } */
/* { dg-require-effective-target p8vector_hw } */
/* { dg-options "-mpower8-vector" } */

#include <inttypes.h>
#include <altivec.h> // vector

#ifdef DEBUG
#include <stdio.h>
#endif

void abort (void);

int main() {
  int i;
  __uint128_t data_u128[100];
  __int128_t data_128[100];

  vector __int128_t vec_128_expected1, vec_128_result1;
  vector __uint128_t vec_u128_expected1, vec_u128_result1;
  signed long long zero = (signed long long) 0;

  for (i = 0; i < 100; i++)
    {
      data_128[i] = i + 12800000;
      data_u128[i] = i + 12800001;
    }

  /* vec_xl() tests */

  vec_128_expected1 = (vector __int128_t){12800000};
  vec_128_result1 = vec_xl (zero, data_128);

  if (vec_128_expected1[0] != vec_128_result1[0])
    {
#ifdef DEBUG
	printf("Error: vec_xl(), vec_128_result1[0] = %lld %llu; ",
	       vec_128_result1[0] >> 64,
	       vec_128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
	printf("vec_128_expected1[0] = %lld %llu\n",
	       vec_128_expected1[0] >> 64,
	       vec_128_expected1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
#else
	abort ();
#endif
    }

  vec_u128_result1 = vec_xl (zero, data_u128);
  vec_u128_expected1 = (vector __uint128_t){12800001};
  if (vec_u128_expected1[0] != vec_u128_result1[0])
    {
#ifdef DEBUG
	printf("Error: vec_xl(), vec_u128_result1[0] = %lld; ",
	       vec_u128_result1[0] >> 64,
	       vec_u128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
	printf("vec_u128_expected1[0] = %lld\n",
	       vec_u128_expected1[0] >> 64,
	       vec_u128_expected1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
#else
	abort ();
#endif
    }

  /* vec_xl_be() tests */

  vec_128_result1 = vec_xl_be (zero, data_128);
#ifdef __BIG_ENDIAN__
  vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
#else
  vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
#endif

  if (vec_128_expected1[0] != vec_128_result1[0])
    {
#ifdef DEBUG
	printf("Error: vec_xl_be(), vec_128_result1[0] = %llu %llu;",
	       vec_128_result1[0] >> 64,
	       vec_128_result1[0] & 0xFFFFFFFFFFFFFFFF);
	printf(" vec_128_expected1[0] = %llu %llu\n",
	       vec_128_expected1[0] >> 64,
	       vec_128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
#else
      abort ();
#endif
    }

#ifdef __BIG_ENDIAN__
  vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
#else
  vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
#endif

  vec_u128_result1 = vec_xl_be (zero, data_u128);

  if (vec_u128_expected1[0] != vec_u128_result1[0])
    {
#ifdef DEBUG
	printf("Error: vec_xl_be(), vec_u128_result1[0] = %llu %llu;",
	       vec_u128_result1[0] >> 64,
	       vec_u128_result1[0] & 0xFFFFFFFFFFFFFFFF);
	printf(" vec_u128_expected1[0] = %llu %llu\n",
	       vec_u128_expected1[0] >> 64,
	       vec_u128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
#else
      abort ();
#endif
    }
}