OLD | NEW |
1 //===- subzero/crosstest/test_arith_main.cpp - Driver for tests -----------===// | 1 //===- subzero/crosstest/test_arith_main.cpp - Driver for tests -----------===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // Driver for crosstesting arithmetic operations | 10 // Driver for crosstesting arithmetic operations |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 Type ResultLlc = mySqrt(Value); | 280 Type ResultLlc = mySqrt(Value); |
281 // Compare results using memcmp() in case they are both NaN. | 281 // Compare results using memcmp() in case they are both NaN. |
282 if (!memcmp(&ResultSz, &ResultLlc, sizeof(Type))) { | 282 if (!memcmp(&ResultSz, &ResultLlc, sizeof(Type))) { |
283 ++Passes; | 283 ++Passes; |
284 } else { | 284 } else { |
285 ++Failures; | 285 ++Failures; |
286 std::cout << std::fixed << "test_sqrt" << (CHAR_BIT * sizeof(Type)) << "(" | 286 std::cout << std::fixed << "test_sqrt" << (CHAR_BIT * sizeof(Type)) << "(" |
287 << Value << "): sz=" << ResultSz << " llc=" << ResultLlc | 287 << Value << "): sz=" << ResultSz << " llc=" << ResultLlc |
288 << "\n"; | 288 << "\n"; |
289 } | 289 } |
| 290 ++TotalTests; |
| 291 ResultSz = Subzero_::myFabs(Value); |
| 292 ResultLlc = myFabs(Value); |
| 293 // Compare results using memcmp() in case they are both NaN. |
| 294 if (!memcmp(&ResultSz, &ResultLlc, sizeof(Type))) { |
| 295 ++Passes; |
| 296 } else { |
| 297 ++Failures; |
| 298 std::cout << std::fixed << "test_fabs" << (CHAR_BIT * sizeof(Type)) << "(" |
| 299 << Value << "): sz=" << ResultSz << " llc=" << ResultLlc |
| 300 << "\n"; |
| 301 } |
290 } | 302 } |
291 } | 303 } |
292 | 304 |
293 void testsVecFp(size_t &TotalTests, size_t &Passes, size_t &Failures) { | 305 void testsVecFp(size_t &TotalTests, size_t &Passes, size_t &Failures) { |
294 static const float NegInf = -1.0 / 0.0; | 306 static const float NegInf = -1.0 / 0.0; |
295 static const float PosInf = 1.0 / 0.0; | 307 static const float PosInf = 1.0 / 0.0; |
296 static const float Nan = 0.0 / 0.0; | 308 static const float Nan = 0.0 / 0.0; |
297 static const float NegNan = -0.0 / 0.0; | 309 static const float NegNan = -0.0 / 0.0; |
298 volatile float Values[] = FP_VALUE_ARRAY(NegInf, PosInf, NegNan, Nan); | 310 volatile float Values[] = FP_VALUE_ARRAY(NegInf, PosInf, NegNan, Nan); |
299 const static size_t NumValues = sizeof(Values) / sizeof(*Values); | 311 const static size_t NumValues = sizeof(Values) / sizeof(*Values); |
(...skipping 27 matching lines...) Expand all Loading... |
327 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { | 339 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { |
328 ++Passes; | 340 ++Passes; |
329 } else { | 341 } else { |
330 ++Failures; | 342 ++Failures; |
331 std::cout << "test" << Funcs[f].Name << "v4f32" | 343 std::cout << "test" << Funcs[f].Name << "v4f32" |
332 << "(" << vectAsString<v4f32>(Value1) << "," | 344 << "(" << vectAsString<v4f32>(Value1) << "," |
333 << vectAsString<v4f32>(Value2) | 345 << vectAsString<v4f32>(Value2) |
334 << "): sz=" << vectAsString<v4f32>(ResultSz) << " llc" | 346 << "): sz=" << vectAsString<v4f32>(ResultSz) << " llc" |
335 << vectAsString<v4f32>(ResultLlc) << "\n"; | 347 << vectAsString<v4f32>(ResultLlc) << "\n"; |
336 } | 348 } |
| 349 // Special case for unary fabs operation. Use Value1, ignore Value2. |
| 350 ResultSz = Subzero_::myFabs(Value1); |
| 351 ResultLlc = myFabs(Value1); |
| 352 ++TotalTests; |
| 353 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { |
| 354 ++Passes; |
| 355 } else { |
| 356 ++Failures; |
| 357 std::cout << "test_fabs_v4f32" |
| 358 << "(" << vectAsString<v4f32>(Value1) |
| 359 << "): sz=" << vectAsString<v4f32>(ResultSz) << " llc" |
| 360 << vectAsString<v4f32>(ResultLlc) << "\n"; |
| 361 } |
337 } | 362 } |
338 } | 363 } |
339 } | 364 } |
340 | 365 |
341 int main(int argc, char **argv) { | 366 int main(int argc, char **argv) { |
342 size_t TotalTests = 0; | 367 size_t TotalTests = 0; |
343 size_t Passes = 0; | 368 size_t Passes = 0; |
344 size_t Failures = 0; | 369 size_t Failures = 0; |
345 | 370 |
346 testsInt<bool, bool>(TotalTests, Passes, Failures); | 371 testsInt<bool, bool>(TotalTests, Passes, Failures); |
347 testsInt<uint8_t, myint8_t>(TotalTests, Passes, Failures); | 372 testsInt<uint8_t, myint8_t>(TotalTests, Passes, Failures); |
348 testsInt<uint16_t, int16_t>(TotalTests, Passes, Failures); | 373 testsInt<uint16_t, int16_t>(TotalTests, Passes, Failures); |
349 testsInt<uint32_t, int32_t>(TotalTests, Passes, Failures); | 374 testsInt<uint32_t, int32_t>(TotalTests, Passes, Failures); |
350 testsInt<uint64_t, int64_t>(TotalTests, Passes, Failures); | 375 testsInt<uint64_t, int64_t>(TotalTests, Passes, Failures); |
351 testsVecInt<v4ui32, v4si32>(TotalTests, Passes, Failures); | 376 testsVecInt<v4ui32, v4si32>(TotalTests, Passes, Failures); |
352 testsVecInt<v8ui16, v8si16>(TotalTests, Passes, Failures); | 377 testsVecInt<v8ui16, v8si16>(TotalTests, Passes, Failures); |
353 testsVecInt<v16ui8, v16si8>(TotalTests, Passes, Failures); | 378 testsVecInt<v16ui8, v16si8>(TotalTests, Passes, Failures); |
354 testsFp<float>(TotalTests, Passes, Failures); | 379 testsFp<float>(TotalTests, Passes, Failures); |
355 testsFp<double>(TotalTests, Passes, Failures); | 380 testsFp<double>(TotalTests, Passes, Failures); |
356 testsVecFp(TotalTests, Passes, Failures); | 381 testsVecFp(TotalTests, Passes, Failures); |
357 | 382 |
358 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes | 383 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes |
359 << " Failures=" << Failures << "\n"; | 384 << " Failures=" << Failures << "\n"; |
360 return Failures; | 385 return Failures; |
361 } | 386 } |
OLD | NEW |