1/* This small function uses all the arithmetic operators that 2 libgcc1.c can handle. If you can link it, then 3 you have provided replacements for all the libgcc1.c functions that 4 your target machine needs. */ 5 6int foo (); 7double dfoo (); 8 9/* We don't want __main here because that can drag in atexit (among other 10 things) which won't necessarily exist yet. */ 11 12main_without__main () 13{ 14 int a = foo (), b = foo (); 15 unsigned int au = foo (), bu = foo (); 16 float af = dfoo (), bf = dfoo (); 17 double ad = dfoo (), bd = dfoo (); 18 19 discard (a * b); 20 discard (a / b); 21 discard (a % b); 22 23 discard (au / bu); 24 discard (au % bu); 25 26 discard (a >> b); 27 discard (a << b); 28 29 discard (au >> bu); 30 discard (au << bu); 31 32 ddiscard (ad + bd); 33 ddiscard (ad - bd); 34 ddiscard (ad * bd); 35 ddiscard (ad / bd); 36 ddiscard (-ad); 37 38 ddiscard (af + bf); 39 ddiscard (af - bf); 40 ddiscard (af * bf); 41 ddiscard (af / bf); 42 ddiscard (-af); 43 44 discard ((int) ad); 45 discard ((int) af); 46 47 ddiscard ((double) a); 48 ddiscard ((float) a); 49 ddiscard ((float) ad); 50 51 discard (ad == bd); 52 discard (ad < bd); 53 discard (ad > bd); 54 discard (ad != bd); 55 discard (ad <= bd); 56 discard (ad >= bd); 57 58 discard (af == bf); 59 discard (af < bf); 60 discard (af > bf); 61 discard (af != bf); 62 discard (af <= bf); 63 discard (af >= bf); 64 65 return 0; 66} 67 68discard (x) 69 int x; 70{} 71 72ddiscard (x) 73 double x; 74{} 75 76foo () 77{ 78 static int table[] = {20, 69, 4, 12}; 79 static int idx; 80 81 return table[idx++]; 82} 83 84double 85dfoo () 86{ 87 static double table[] = {20.4, 69.96, 4.4, 202.202}; 88 static int idx; 89 90 return table[idx++]; 91} 92 93/* Provide functions that some versions of the linker use to default 94 the start address if -e symbol is not used, to avoid the warning 95 message saying the start address is defaulted. */ 96extern void start() __asm__("start"); 97extern void _start() __asm__("_start"); 98extern void __start() __asm__("__start"); 99 100/* Provide functions that might be needed by soft-float emulation routines. */ 101void memcpy() {} 102 103void start() {} 104void _start() {} 105void __start() {} 106void mainCRTStartup() {} 107