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 
8 int foo ();
9 double dfoo ();
10 void discard (int);
11 void ddiscard (double);
12 
13 int
main(void)14 main (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 
70 void
discard(x)71 discard (x)
72      int x __attribute__((__unused__));
73 {}
74 
75 void
ddiscard(x)76 ddiscard (x)
77      double x __attribute__((__unused__));
78 {}
79 
80 int
foo()81 foo ()
82 {
83   static int table[] = {20, 69, 4, 12};
84   static int idx;
85 
86   return table[idx++];
87 }
88 
89 double
dfoo()90 dfoo ()
91 {
92   static double table[] = {20.4, 69.96, 4.4, 202.202};
93   static int idx;
94 
95   return table[idx++];
96 }
97