aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/torture/bitint-11.c
blob: e40bb8b3df48a66f8488ad9e7f1cc5ee7debce63 (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
/* PR c/102989 */
/* { dg-do run { target { bitint && int32plus } } } */
/* { dg-options "-std=gnu23" } */
/* { dg-skip-if "" { ! run_expensive_tests }  { "*" } { "-O0" "-O2" } } */
/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */

#ifdef __SIZEOF_INT128__
#define int128_val(x, y) x
#define int128_bitfld(x) x
#define int128 __int128
#else
#define int128_val(x, y) y
#define int128_bitfld(x) 1
#define int128 int
#endif

struct S {
  int i : 1;
  int j : 27;
  long long k : 56;
  int128 l : int128_bitfld (120);
  unsigned m : 3;
  unsigned long long n : 42;
  unsigned int128 o : int128_bitfld (125);
};

#if __BITINT_MAXWIDTH__ >= 188
__attribute__((noipa)) _BitInt(188)
test188 (int a, long long b, int128 c, unsigned short d,
	 unsigned long long e, unsigned int128 f, _BitInt(188) *g,
	 struct S *p)
{
  return *g + a + b + c + d + e + f + p->i + p->j + p->k + p->l + p->m + p->n + p->o;
}
#endif

#if __BITINT_MAXWIDTH__ >= 575
__attribute__((noipa)) _BitInt(575)
test575 (int a, long long b, int128 c, unsigned short d,
	 unsigned long long e, unsigned int128 f, _BitInt(575) *g,
	 struct S *p)
{
  return *g + a + b + c + d + e + f + p->i + p->j + p->k + p->l + p->m + p->n + p->o;
}
#endif

int
main ()
{
  struct S s = { -1, 34877496, -5580713461260169LL,
		 int128_val (329913978417840804084945075673166782wb, 0),
		 1U, 68262565354ULL,
		 int128_val (5169264897230903304574466460949339423uwb, 0) };
  (void) &s;
#if __BITINT_MAXWIDTH__ >= 188
  _BitInt(188) b188 = 51625354135609169507415940782602403562057573230992065937wb;
  if (test188 (-943502954, 6037882847713389759LL,
	       int128_val (-83021930809076074533830959108195408798wb, 0),
	       55564, 16536837072610496559ULL,
	       int128_val (237527410537432634851289433535592281366uwb, 0),
	       &b188, &s)
      != int128_val (51625354135609169667420599386607708010744598469228066319wb,
		     51625354135609169507415940782602403584626712505208687546wb))
   __builtin_abort ();
#endif
#if __BITINT_MAXWIDTH__ >= 575
  _BitInt(575) b575 = -20179593413257295974034559327597105210986698104682733481090257927308152867107766179792744096926808179875378122328280563720406829353405990702024578604764643194143342705864832wb;
  if (test575 (-943502954, 6037882847713389759LL,
	       int128_val (-83021930809076074533830959108195408798wb, 0),
	       55564, 16536837072610496559ULL,
	       int128_val (237527410537432634851289433535592281366uwb, 0),
	       &b575, &s)
      != int128_val (-20179593413257295974034559327597105210986698104682733481090257927308152867107766179792744096926808179875378122328280563720406829353405830697365974599460194507118104469864450wb,
		     -20179593413257295974034559327597105210986698104682733481090257927308152867107766179792744096926808179875378122328280563720406829353405990702024578604764620625004068489243223wb))
   __builtin_abort ();
#endif
}