modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/gofast.c (about) 1 /* { dg-skip-if "requires io" { freestanding } } */ 2 3 /* Program to test gcc's usage of the gofast library. */ 4 5 /* The main guiding themes are to make it trivial to add test cases over time 6 and to make it easy for a program to parse the output to see if the right 7 libcalls are being made. */ 8 9 #include <stdio.h> 10 11 float fp_add (float a, float b) { return a + b; } 12 float fp_sub (float a, float b) { return a - b; } 13 float fp_mul (float a, float b) { return a * b; } 14 float fp_div (float a, float b) { return a / b; } 15 float fp_neg (float a) { return -a; } 16 17 double dp_add (double a, double b) { return a + b; } 18 double dp_sub (double a, double b) { return a - b; } 19 double dp_mul (double a, double b) { return a * b; } 20 double dp_div (double a, double b) { return a / b; } 21 double dp_neg (double a) { return -a; } 22 23 double fp_to_dp (float f) { return f; } 24 float dp_to_fp (double d) { return d; } 25 26 int eqsf2 (float a, float b) { return a == b; } 27 int nesf2 (float a, float b) { return a != b; } 28 int gtsf2 (float a, float b) { return a > b; } 29 int gesf2 (float a, float b) { return a >= b; } 30 int ltsf2 (float a, float b) { return a < b; } 31 int lesf2 (float a, float b) { return a <= b; } 32 33 int eqdf2 (double a, double b) { return a == b; } 34 int nedf2 (double a, double b) { return a != b; } 35 int gtdf2 (double a, double b) { return a > b; } 36 int gedf2 (double a, double b) { return a >= b; } 37 int ltdf2 (double a, double b) { return a < b; } 38 int ledf2 (double a, double b) { return a <= b; } 39 40 float floatsisf (int i) { return i; } 41 double floatsidf (int i) { return i; } 42 int fixsfsi (float f) { return f; } 43 int fixdfsi (double d) { return d; } 44 unsigned int fixunssfsi (float f) { return f; } 45 unsigned int fixunsdfsi (double d) { return d; } 46 47 int fail_count = 0; 48 49 int 50 fail (char *msg) 51 { 52 fail_count++; 53 fprintf (stderr, "Test failed: %s\n", msg); 54 } 55 56 int 57 main() 58 { 59 if (fp_add (1, 1) != 2) fail ("fp_add 1+1"); 60 if (fp_sub (3, 2) != 1) fail ("fp_sub 3-2"); 61 if (fp_mul (2, 3) != 6) fail ("fp_mul 2*3"); 62 if (fp_div (3, 2) != 1.5) fail ("fp_div 3/2"); 63 if (fp_neg (1) != -1) fail ("fp_neg 1"); 64 65 if (dp_add (1, 1) != 2) fail ("dp_add 1+1"); 66 if (dp_sub (3, 2) != 1) fail ("dp_sub 3-2"); 67 if (dp_mul (2, 3) != 6) fail ("dp_mul 2*3"); 68 if (dp_div (3, 2) != 1.5) fail ("dp_div 3/2"); 69 if (dp_neg (1) != -1) fail ("dp_neg 1"); 70 71 if (fp_to_dp (1.5) != 1.5) fail ("fp_to_dp 1.5"); 72 if (dp_to_fp (1.5) != 1.5) fail ("dp_to_fp 1.5"); 73 74 if (floatsisf (1) != 1) fail ("floatsisf 1"); 75 if (floatsidf (1) != 1) fail ("floatsidf 1"); 76 if (fixsfsi (1.42) != 1) fail ("fixsfsi 1.42"); 77 if (fixunssfsi (1.42) != 1) fail ("fixunssfsi 1.42"); 78 if (fixdfsi (1.42) != 1) fail ("fixdfsi 1.42"); 79 if (fixunsdfsi (1.42) != 1) fail ("fixunsdfsi 1.42"); 80 81 if (eqsf2 (1, 1) == 0) fail ("eqsf2 1==1"); 82 if (eqsf2 (1, 2) != 0) fail ("eqsf2 1==2"); 83 if (nesf2 (1, 2) == 0) fail ("nesf2 1!=1"); 84 if (nesf2 (1, 1) != 0) fail ("nesf2 1!=1"); 85 if (gtsf2 (2, 1) == 0) fail ("gtsf2 2>1"); 86 if (gtsf2 (1, 1) != 0) fail ("gtsf2 1>1"); 87 if (gtsf2 (0, 1) != 0) fail ("gtsf2 0>1"); 88 if (gesf2 (2, 1) == 0) fail ("gesf2 2>=1"); 89 if (gesf2 (1, 1) == 0) fail ("gesf2 1>=1"); 90 if (gesf2 (0, 1) != 0) fail ("gesf2 0>=1"); 91 if (ltsf2 (1, 2) == 0) fail ("ltsf2 1<2"); 92 if (ltsf2 (1, 1) != 0) fail ("ltsf2 1<1"); 93 if (ltsf2 (1, 0) != 0) fail ("ltsf2 1<0"); 94 if (lesf2 (1, 2) == 0) fail ("lesf2 1<=2"); 95 if (lesf2 (1, 1) == 0) fail ("lesf2 1<=1"); 96 if (lesf2 (1, 0) != 0) fail ("lesf2 1<=0"); 97 98 if (fail_count != 0) 99 abort (); 100 exit (0); 101 }