1extern void abort (void); 2 3#ifdef __GNUC__ 4#define va_list __builtin_va_list 5#define va_start __builtin_va_start 6#define va_arg __builtin_va_arg 7#define va_end __builtin_va_end 8#else 9#include <stdarg.h> 10#endif 11 12#if USE_MEMCMP 13/* For comparing vectors. */ 14#define TEST_FUNCS(NAME, TYPE, PADT, VAL, VAL2) \ 15void NAME##_f0 (TYPE a, PADT b) \ 16{ \ 17 if (memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 18 abort (); \ 19} \ 20 \ 21void NAME##_f1 (PADT z0, TYPE a, PADT b) \ 22{ \ 23 if (z0 != (PADT) 0 \ 24 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 25 abort (); \ 26} \ 27 \ 28void NAME##_f2 (PADT z0, PADT z1, TYPE a, PADT b) \ 29{ \ 30 if (z0 != (PADT) 0 \ 31 || z1 != (PADT) 0 \ 32 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 33 abort (); \ 34} \ 35 \ 36void NAME##_f3 (PADT z0, PADT z1, PADT z2, TYPE a, PADT b) \ 37{ \ 38 if (z0 != (PADT) 0 \ 39 || z1 != (PADT) 0 \ 40 || z2 != (PADT) 0 \ 41 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 42 abort (); \ 43} \ 44 \ 45void NAME##_f4 (PADT z0, PADT z1, PADT z2, PADT z3, TYPE a, PADT b) \ 46{ \ 47 if (z0 != (PADT) 0 \ 48 || z1 != (PADT) 0 \ 49 || z2 != (PADT) 0 \ 50 || z3 != (PADT) 0 \ 51 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 52 abort (); \ 53} \ 54 \ 55void NAME##_f5 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, TYPE a, \ 56 PADT b) \ 57{ \ 58 if (z0 != (PADT) 0 \ 59 || z1 != (PADT) 0 \ 60 || z2 != (PADT) 0 \ 61 || z3 != (PADT) 0 \ 62 || z4 != (PADT) 0 \ 63 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 64 abort (); \ 65} \ 66 \ 67void NAME##_f6 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \ 68 TYPE a, PADT b) \ 69{ \ 70 if (z0 != (PADT) 0 \ 71 || z1 != (PADT) 0 \ 72 || z2 != (PADT) 0 \ 73 || z3 != (PADT) 0 \ 74 || z4 != (PADT) 0 \ 75 || z5 != (PADT) 0 \ 76 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 77 abort (); \ 78} \ 79 \ 80void NAME##_f7 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \ 81 PADT z6, TYPE a, PADT b) \ 82{ \ 83 if (z0 != (PADT) 0 \ 84 || z1 != (PADT) 0 \ 85 || z2 != (PADT) 0 \ 86 || z3 != (PADT) 0 \ 87 || z4 != (PADT) 0 \ 88 || z5 != (PADT) 0 \ 89 || z6 != (PADT) 0 \ 90 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 91 abort (); \ 92} \ 93 \ 94void NAME##_f8 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \ 95 PADT z6, PADT z7, TYPE a, PADT b) \ 96{ \ 97 if (z0 != (PADT) 0 \ 98 || z1 != (PADT) 0 \ 99 || z2 != (PADT) 0 \ 100 || z3 != (PADT) 0 \ 101 || z4 != (PADT) 0 \ 102 || z5 != (PADT) 0 \ 103 || z6 != (PADT) 0 \ 104 || z7 != (PADT) 0 \ 105 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 106 abort (); \ 107} \ 108 \ 109void NAME##_f9 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \ 110 PADT z6, PADT z7, PADT z8, TYPE a, PADT b) \ 111{ \ 112 if (z0 != (PADT) 0 \ 113 || z1 != (PADT) 0 \ 114 || z2 != (PADT) 0 \ 115 || z3 != (PADT) 0 \ 116 || z4 != (PADT) 0 \ 117 || z5 != (PADT) 0 \ 118 || z6 != (PADT) 0 \ 119 || z7 != (PADT) 0 \ 120 || z8 != (PADT) 0 \ 121 || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2) \ 122 abort (); \ 123} \ 124 \ 125void NAME##_fv (int n, ...) \ 126{ \ 127 va_list ap; \ 128 TYPE x; \ 129 va_start (ap, n); \ 130 \ 131 while (n-- != 0) \ 132 if (va_arg (ap, PADT) != (PADT) 0) \ 133 abort (); \ 134 \ 135 x = va_arg (ap, TYPE); \ 136 if (memcmp (&x, &VAL, sizeof (x)) != 0 ) \ 137 abort (); \ 138 \ 139 if (va_arg (ap, PADT) != VAL2) \ 140 abort (); \ 141 \ 142 va_end (ap); \ 143} 144 145#else 146 147#define TEST_FUNCS(NAME, TYPE, PADT, VAL, VAL2) \ 148void NAME##_f0 (TYPE a, PADT b) \ 149{ \ 150 if (a != VAL || b != VAL2) \ 151 abort (); \ 152} \ 153 \ 154void NAME##_f1 (PADT z0, TYPE a, PADT b) \ 155{ \ 156 if (z0 != (PADT) 0 \ 157 || a != VAL || b != VAL2) \ 158 abort (); \ 159} \ 160 \ 161void NAME##_f2 (PADT z0, PADT z1, TYPE a, PADT b) \ 162{ \ 163 if (z0 != (PADT) 0 \ 164 || z1 != (PADT) 0 \ 165 || a != VAL || b != VAL2) \ 166 abort (); \ 167} \ 168 \ 169void NAME##_f3 (PADT z0, PADT z1, PADT z2, TYPE a, PADT b) \ 170{ \ 171 if (z0 != (PADT) 0 \ 172 || z1 != (PADT) 0 \ 173 || z2 != (PADT) 0 \ 174 || a != VAL || b != VAL2) \ 175 abort (); \ 176} \ 177 \ 178void NAME##_f4 (PADT z0, PADT z1, PADT z2, PADT z3, TYPE a, PADT b) \ 179{ \ 180 if (z0 != (PADT) 0 \ 181 || z1 != (PADT) 0 \ 182 || z2 != (PADT) 0 \ 183 || z3 != (PADT) 0 \ 184 || a != VAL || b != VAL2) \ 185 abort (); \ 186} \ 187 \ 188void NAME##_f5 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, TYPE a, \ 189 PADT b) \ 190{ \ 191 if (z0 != (PADT) 0 \ 192 || z1 != (PADT) 0 \ 193 || z2 != (PADT) 0 \ 194 || z3 != (PADT) 0 \ 195 || z4 != (PADT) 0 \ 196 || a != VAL || b != VAL2) \ 197 abort (); \ 198} \ 199 \ 200void NAME##_f6 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \ 201 TYPE a, PADT b) \ 202{ \ 203 if (z0 != (PADT) 0 \ 204 || z1 != (PADT) 0 \ 205 || z2 != (PADT) 0 \ 206 || z3 != (PADT) 0 \ 207 || z4 != (PADT) 0 \ 208 || z5 != (PADT) 0 \ 209 || a != VAL || b != VAL2) \ 210 abort (); \ 211} \ 212 \ 213void NAME##_f7 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \ 214 PADT z6, TYPE a, PADT b) \ 215{ \ 216 if (z0 != (PADT) 0 \ 217 || z1 != (PADT) 0 \ 218 || z2 != (PADT) 0 \ 219 || z3 != (PADT) 0 \ 220 || z4 != (PADT) 0 \ 221 || z5 != (PADT) 0 \ 222 || z6 != (PADT) 0 \ 223 || a != VAL || b != VAL2) \ 224 abort (); \ 225} \ 226 \ 227void NAME##_f8 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \ 228 PADT z6, PADT z7, TYPE a, PADT b) \ 229{ \ 230 if (z0 != (PADT) 0 \ 231 || z1 != (PADT) 0 \ 232 || z2 != (PADT) 0 \ 233 || z3 != (PADT) 0 \ 234 || z4 != (PADT) 0 \ 235 || z5 != (PADT) 0 \ 236 || z6 != (PADT) 0 \ 237 || z7 != (PADT) 0 \ 238 || a != VAL || b != VAL2) \ 239 abort (); \ 240} \ 241 \ 242void NAME##_f9 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5, \ 243 PADT z6, PADT z7, PADT z8, TYPE a, PADT b) \ 244{ \ 245 if (z0 != (PADT) 0 \ 246 || z1 != (PADT) 0 \ 247 || z2 != (PADT) 0 \ 248 || z3 != (PADT) 0 \ 249 || z4 != (PADT) 0 \ 250 || z5 != (PADT) 0 \ 251 || z6 != (PADT) 0 \ 252 || z7 != (PADT) 0 \ 253 || z8 != (PADT) 0 \ 254 || a != VAL || b != VAL2) \ 255 abort (); \ 256} \ 257 \ 258void NAME##_fv (int n, ...) \ 259{ \ 260 va_list ap; \ 261 \ 262 va_start (ap, n); \ 263 \ 264 while (n-- != 0) \ 265 if (va_arg (ap, PADT) != (PADT) 0) \ 266 abort (); \ 267 \ 268 if (va_arg (ap, TYPE) != VAL) \ 269 abort (); \ 270 \ 271 if (va_arg (ap, PADT) != VAL2) \ 272 abort (); \ 273 \ 274 va_end (ap); \ 275} 276 277#endif 278