1/* { dg-do run } */ 2/* { dg-options "-msim" } */ 3/* Note: The -msim above is actually there to override the default 4 options which include -ansi -pendantic and -Wlong-long... */ 5 6extern int printf (const char *, ...); 7extern void exit (int); 8extern void abort (void); 9 10extern signed long _COM_CONVf32s (float); 11extern unsigned long _COM_CONVf32u (float); 12extern float _COM_CONV32sf (signed long); 13extern float _COM_CONV32uf (unsigned long); 14extern float _COM_ADDf (float, float); 15extern float _COM_SUBf (float, float); 16extern float _COM_MULf (float, float); 17extern float _COM_DIVf (float, float); 18extern int _COM_CMPLTf (float, float); 19 20extern long long _COM_MUL64 (long long, long long); 21extern signed long long _COM_DIV64s (long long, long long); 22extern unsigned long long _COM_DIV64u (unsigned long long, unsigned long long); 23extern long long _COM_SHLL64 (long long, int); 24extern long long _COM_SHLR64 (long long, int); 25extern long long _COM_SHAR64 (long long, int); 26extern signed long long _COM_CONVf64s (float); 27extern unsigned long long _COM_CONVf64u (float); 28extern signed long long _COM_CONVd64s (double); 29extern unsigned long long _COM_CONVd64u (double); 30extern float _COM_CONV64sf (signed long long); 31extern float _COM_CONV64uf (unsigned long long); 32extern double _COM_CONV64sd (signed long long); 33extern double _COM_CONV64ud (unsigned long long); 34extern signed long long _COM_MOD64s (long long, long long); 35extern unsigned long long _COM_MOD64u (unsigned long long, unsigned long long); 36extern int _COM_CMPLT64s (long long, long long); 37extern int _COM_CMPLT64u (unsigned long long, unsigned long long); 38extern int _COM_CMPGT64s (long long, long long); 39extern int _COM_CMPGT64u (unsigned long long, unsigned long long); 40extern int _COM_CMPLE64s (long long, long long); 41extern int _COM_CMPLE64u (unsigned long long, unsigned long long); 42extern int _COM_CMPGE64s (long long, long long); 43extern int _COM_CMPGE64u (unsigned long long, unsigned long long); 44extern int _COM_CMPEQ64 (long long, long long); 45extern int _COM_CMPNE64 (long long, long long); 46 47extern double _COM_ADDd (double, double); 48extern double _COM_SUBd (double, double); 49extern double _COM_MULd (double, double); 50extern double _COM_DIVd (double, double); 51extern signed long _COM_CONVd32s (double); 52extern unsigned long _COM_CONVd32u (double); 53extern double _COM_CONV32sd (signed long); 54extern double _COM_CONV32ud (unsigned long); 55extern double _COM_CONVfd (float); 56extern float _COM_CONVdf (double); 57extern double _COM_NEGd (double); 58 59 60/* #define DEBUG 1 */ 61 62#ifdef DEBUG 63# define TEST1(func,arg1,result) if (func (arg1) != result) printf ("fail: " #func " (" #arg1 ") returns %x rather than " #result "\n", func (arg1)) 64# define TEST2(func,arg1,arg2,result) if (func (arg1, arg2) != result) printf ("fail: " #func " (" #arg1 ", " #arg2 ") returns %x rather than " #result "\n", func (arg1, arg2)) 65# define TEST_CMP(func, low_arg, high_arg, lt_result, eq_result, gt_result) \ 66 do \ 67 { \ 68 int res; \ 69 \ 70 if ((res = func (low_arg, high_arg)) != lt_result) printf ("fail: " #func " (" #low_arg ", " #high_arg ") returns %d rather than %d\n", res, lt_result); \ 71 if ((res = func (high_arg, low_arg)) != gt_result) printf ("fail: " #func " (" #high_arg ", " #low_arg ") returns %d rather than %d\n", res, gt_result); \ 72 if ((res = func (low_arg, low_arg)) != eq_result) printf ("fail: " #func " (" #low_arg ", " #low_arg ") returns %d rather than %d\n", res, eq_result); \ 73 } \ 74 while (0) 75#else 76# define TEST1(func,arg1,result) if (func (arg1) != result) abort () 77# define TEST2(func,arg1,arg2,result) if (func (arg1, arg2) != result) abort () 78# define TEST_CMP(func,low,high,lt_res,eq_res,gt_res) \ 79 if ( (func (low, high) != lt_res) \ 80 || (func (high, low) != gt_res) \ 81 || (func (low, low) != eq_res)) \ 82 abort (); 83#endif 84 85 86int 87main (void) 88{ 89#ifdef DEBUG 90 printf ("Tests starting\n"); 91#endif 92 93 TEST1 (_COM_CONVf32s, -2.0f, -2); 94 TEST1 (_COM_CONVf32u, -2.0f, (unsigned) -2); 95 TEST1 (_COM_CONV32sf, -2, -2.0f); 96 TEST1 (_COM_CONV32uf, 2, 2.0f); 97 TEST2 (_COM_ADDf, 1.0f, 2.0f, 3.0f); 98 TEST2 (_COM_SUBf, 3.0f, 2.0f, 1.0f); 99 TEST2 (_COM_MULf, 2.0f, 3.0f, 6.0f); 100 TEST2 (_COM_DIVf, 6.0f, 2.0f, 3.0f); 101 TEST_CMP (_COM_CMPLTf, 1.0f, 2.0f, 1, 0, 0); 102 TEST_CMP (_COM_CMPGTf, 1.0f, 2.0f, 0, 0, 1); 103 TEST_CMP (_COM_CMPLEf, 1.0f, 2.0f, 1, 1, 0); 104 TEST_CMP (_COM_CMPGEf, 1.0f, 2.0f, 0, 1, 1); 105 TEST_CMP (_COM_CMPEQf, 1.0f, 2.0f, 0, 1, 0); 106 TEST_CMP (_COM_CMPNEf, 1.0f, 2.0f, 1, 0, 1); 107 108 109 TEST2 (_COM_MUL64, 2LL, 4LL, 8LL); 110 TEST2 (_COM_DIV64s, 6LL, 3LL, 2LL); 111 TEST2 (_COM_DIV64u, 6ULL, 3ULL, 2ULL); 112 TEST2 (_COM_SHLL64, 6LL, 3, 48LL); 113 TEST2 (_COM_SHLR64, 8LL, 2, 2LL); 114 TEST2 (_COM_SHAR64, -1LL, 2, -1LL); 115 TEST1 (_COM_CONVf64s, -2.0f, -2LL); 116 TEST1 (_COM_CONVf64u, 2.0f, 2ULL); 117 TEST1 (_COM_CONVd64s, -2.0, -2LL); 118 TEST1 (_COM_CONVd64u, 2.0, 2ULL); 119 TEST1 (_COM_CONV64sf, -2LL, -2.0f); 120 TEST1 (_COM_CONV64uf, 2ULL, 2.0f); 121 TEST1 (_COM_CONV64sd, -2LL, -2.0); 122 TEST1 (_COM_CONV64ud, 2ULL, 2.0); 123 TEST2 (_COM_MOD64s, 4LL, 3LL, 1LL); 124 TEST2 (_COM_MOD64u, 4ULL, 3ULL, 1ULL); 125 TEST_CMP (_COM_CMPLT64s, 1LL, 2LL, 1, 0, 0); 126 TEST_CMP (_COM_CMPLT64u, 1ULL, 2ULL, 1, 0, 0); 127 TEST_CMP (_COM_CMPGT64s, 1LL, 2LL, 0, 0, 1); 128 TEST_CMP (_COM_CMPGT64u, 1ULL, 2ULL, 0, 0, 1); 129 TEST_CMP (_COM_CMPLE64s, 1LL, 2LL, 1, 1, 0); 130 TEST_CMP (_COM_CMPLE64u, 1ULL, 2ULL, 1, 1, 0); 131 TEST_CMP (_COM_CMPGE64s, 1LL, 2LL, 0, 1, 1); 132 TEST_CMP (_COM_CMPGE64u, 1ULL, 2ULL, 0, 1, 1); 133 TEST_CMP (_COM_CMPEQ64, 1LL, 2LL, 0, 1, 0); 134 TEST_CMP (_COM_CMPNE64, 1LL, 2LL, 1, 0, 1); 135 136 137 TEST2 (_COM_ADDd, 1.0, 2.0, 3.0); 138 TEST2 (_COM_SUBd, 3.0, 2.0, 1.0); 139 TEST2 (_COM_MULd, 2.0, 3.0, 6.0); 140 TEST2 (_COM_DIVd, 6.0, 2.0, 3.0); 141 TEST1 (_COM_CONVd32s, -2.0, -2); 142 TEST1 (_COM_CONVd32u, -2.0, (unsigned) -2); 143 TEST1 (_COM_CONV32sd, -2, -2.0); 144 TEST1 (_COM_CONV32ud, 2, 2.0); 145 TEST1 (_COM_CONVfd, 2.0f, 2.0); 146 TEST1 (_COM_CONVdf, 2.0, 2.0f); 147 TEST1 (_COM_NEGd, -2.0, 2.0); 148 TEST_CMP (_COM_CMPLTd, 1.0, 2.0, 1, 0, 0); 149 TEST_CMP (_COM_CMPGTd, 1.0, 2.0, 0, 0, 1); 150 TEST_CMP (_COM_CMPLEd, 1.0, 2.0, 1, 1, 0); 151 TEST_CMP (_COM_CMPGEd, 1.0, 2.0, 0, 1, 1); 152 TEST_CMP (_COM_CMPEQd, 1.0, 2.0, 0, 1, 0); 153 TEST_CMP (_COM_CMPNEd, 1.0, 2.0, 1, 0, 1); 154 155#ifdef DEBUG 156 printf ("Tests finished\n"); 157#endif 158 exit (0); 159} 160