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