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 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 71 discard (x) 72 int x __attribute__((__unused__)); 73 {} 74 75 void 76 ddiscard (x) 77 double x __attribute__((__unused__)); 78 {} 79 80 int 81 foo () 82 { 83 static int table[] = {20, 69, 4, 12}; 84 static int idx; 85 86 return table[idx++]; 87 } 88 89 double 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