1/* This small program uses all the arithmetic operators that may
2   generate calls to library routines which must be implemented in
3   port-specific assembly language.  */
4/* { dg-do link } */
5
6#include <stddef.h>
7
8int foo ();
9double dfoo ();
10void discard (int);
11void ddiscard (double);
12
13int
14main (void)
15{
16  int a = foo (), b = foo ();
17  unsigned int au = foo (), bu = foo ();
18  float af = dfoo (), bf = dfoo ();
19  double ad = dfoo (), bd = dfoo ();
20
21  discard (a * b);
22  discard (a / b);
23  discard (a % b);
24
25  discard (au / bu);
26  discard (au % bu);
27
28  discard (a >> b);
29  discard (a << b);
30
31  discard (au >> bu);
32  discard (au << bu);
33
34  ddiscard (ad + bd);
35  ddiscard (ad - bd);
36  ddiscard (ad * bd);
37  ddiscard (ad / bd);
38  ddiscard (-ad);
39
40  ddiscard (af + bf);
41  ddiscard (af - bf);
42  ddiscard (af * bf);
43  ddiscard (af / bf);
44  ddiscard (-af);
45
46  discard ((int) ad);
47  discard ((int) af);
48
49  ddiscard ((double) a);
50  ddiscard ((float) a);
51  ddiscard ((float) ad);
52
53  discard (ad == bd);
54  discard (ad < bd);
55  discard (ad > bd);
56  discard (ad != bd);
57  discard (ad <= bd);
58  discard (ad >= bd);
59
60  discard (af == bf);
61  discard (af < bf);
62  discard (af > bf);
63  discard (af != bf);
64  discard (af <= bf);
65  discard (af >= bf);
66
67  return 0;
68}
69
70void
71discard (x)
72     int x __attribute__((__unused__));
73{}
74
75void
76ddiscard (x)
77     double x __attribute__((__unused__));
78{}
79
80int
81foo ()
82{
83  static int table[] = {20, 69, 4, 12};
84  static int idx;
85
86  return table[idx++];
87}
88
89double
90dfoo ()
91{
92  static double table[] = {20.4, 69.96, 4.4, 202.202};
93  static int idx;
94
95  return table[idx++];
96}
97