1206917Smarius 2206917Smarius/* 3206917Smarius=============================================================================== 4206917Smarius 5206917SmariusThis C source file is part of TestFloat, Release 2a, a package of programs 6206917Smariusfor testing the correctness of floating-point arithmetic complying to the 7206917SmariusIEC/IEEE Standard for Floating-Point. 8206917Smarius 9206917SmariusWritten by John R. Hauser. More information is available through the Web 10206917Smariuspage `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'. 11206917Smarius 12206917SmariusTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort 13206917Smariushas been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT 14206917SmariusTIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO 15206917SmariusPERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY 16206917SmariusAND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE. 17206917Smarius 18206917SmariusDerivative works are acceptable, even for commercial purposes, so long as 19206917Smarius(1) they include prominent notice that the work is derivative, and (2) they 20206917Smariusinclude prominent notice akin to these four paragraphs for those parts of 21206917Smariusthis code that are retained. 22206917Smarius 23206917Smarius=============================================================================== 24206917Smarius*/ 25206917Smarius 26206917Smarius#include "milieu.h" 27206917Smarius#include "softfloat.h" 28206917Smarius#include "testCases.h" 29206917Smarius#include "testLoops.h" 30206917Smarius#include "systmodes.h" 31206917Smarius#include "systflags.h" 32206917Smarius#include "systfloat.h" 33206917Smarius#include "testFunction.h" 34206917Smarius 35206917Smariusconst functionT functions[ NUM_FUNCTIONS ] = { 36206917Smarius { 0, 0, 0, 0 }, 37206917Smarius { "int32_to_float32", 1, FALSE, TRUE }, 38206917Smarius { "int32_to_float64", 1, FALSE, FALSE }, 39206917Smarius { "int32_to_floatx80", 1, FALSE, FALSE }, 40206917Smarius { "int32_to_float128", 1, FALSE, FALSE }, 41206917Smarius { "int64_to_float32", 1, FALSE, TRUE }, 42206917Smarius { "int64_to_float64", 1, FALSE, TRUE }, 43206917Smarius { "int64_to_floatx80", 1, FALSE, FALSE }, 44206917Smarius { "int64_to_float128", 1, FALSE, FALSE }, 45206917Smarius { "float32_to_int32", 1, FALSE, TRUE }, 46206917Smarius { "float32_to_int32_round_to_zero", 1, FALSE, FALSE }, 47206917Smarius { "float32_to_int64", 1, FALSE, TRUE }, 48206917Smarius { "float32_to_int64_round_to_zero", 1, FALSE, FALSE }, 49206917Smarius { "float32_to_float64", 1, FALSE, FALSE }, 50206917Smarius { "float32_to_floatx80", 1, FALSE, FALSE }, 51206917Smarius { "float32_to_float128", 1, FALSE, FALSE }, 52206917Smarius { "float32_round_to_int", 1, FALSE, TRUE }, 53206917Smarius { "float32_add", 2, FALSE, TRUE }, 54206917Smarius { "float32_sub", 2, FALSE, TRUE }, 55206917Smarius { "float32_mul", 2, FALSE, TRUE }, 56206917Smarius { "float32_div", 2, FALSE, TRUE }, 57206917Smarius { "float32_rem", 2, FALSE, FALSE }, 58206917Smarius { "float32_sqrt", 1, FALSE, TRUE }, 59206917Smarius { "float32_eq", 2, FALSE, FALSE }, 60206917Smarius { "float32_le", 2, FALSE, FALSE }, 61206917Smarius { "float32_lt", 2, FALSE, FALSE }, 62206917Smarius { "float32_eq_signaling", 2, FALSE, FALSE }, 63206917Smarius { "float32_le_quiet", 2, FALSE, FALSE }, 64206917Smarius { "float32_lt_quiet", 2, FALSE, FALSE }, 65206917Smarius { "float64_to_int32", 1, FALSE, TRUE }, 66206917Smarius { "float64_to_int32_round_to_zero", 1, FALSE, FALSE }, 67206917Smarius { "float64_to_int64", 1, FALSE, TRUE }, 68206917Smarius { "float64_to_int64_round_to_zero", 1, FALSE, FALSE }, 69206917Smarius { "float64_to_float32", 1, FALSE, TRUE }, 70206917Smarius { "float64_to_floatx80", 1, FALSE, FALSE }, 71206917Smarius { "float64_to_float128", 1, FALSE, FALSE }, 72206917Smarius { "float64_round_to_int", 1, FALSE, TRUE }, 73206917Smarius { "float64_add", 2, FALSE, TRUE }, 74206917Smarius { "float64_sub", 2, FALSE, TRUE }, 75206917Smarius { "float64_mul", 2, FALSE, TRUE }, 76206917Smarius { "float64_div", 2, FALSE, TRUE }, 77206917Smarius { "float64_rem", 2, FALSE, FALSE }, 78206917Smarius { "float64_sqrt", 1, FALSE, TRUE }, 79206917Smarius { "float64_eq", 2, FALSE, FALSE }, 80206917Smarius { "float64_le", 2, FALSE, FALSE }, 81206917Smarius { "float64_lt", 2, FALSE, FALSE }, 82206917Smarius { "float64_eq_signaling", 2, FALSE, FALSE }, 83206917Smarius { "float64_le_quiet", 2, FALSE, FALSE }, 84206917Smarius { "float64_lt_quiet", 2, FALSE, FALSE }, 85206917Smarius { "floatx80_to_int32", 1, FALSE, TRUE }, 86206917Smarius { "floatx80_to_int32_round_to_zero", 1, FALSE, FALSE }, 87206917Smarius { "floatx80_to_int64", 1, FALSE, TRUE }, 88206917Smarius { "floatx80_to_int64_round_to_zero", 1, FALSE, FALSE }, 89206917Smarius { "floatx80_to_float32", 1, FALSE, TRUE }, 90206917Smarius { "floatx80_to_float64", 1, FALSE, TRUE }, 91206917Smarius { "floatx80_to_float128", 1, FALSE, FALSE }, 92206917Smarius { "floatx80_round_to_int", 1, FALSE, TRUE }, 93206917Smarius { "floatx80_add", 2, TRUE, TRUE }, 94206917Smarius { "floatx80_sub", 2, TRUE, TRUE }, 95206917Smarius { "floatx80_mul", 2, TRUE, TRUE }, 96206917Smarius { "floatx80_div", 2, TRUE, TRUE }, 97206917Smarius { "floatx80_rem", 2, FALSE, FALSE }, 98206917Smarius { "floatx80_sqrt", 1, TRUE, TRUE }, 99206917Smarius { "floatx80_eq", 2, FALSE, FALSE }, 100206917Smarius { "floatx80_le", 2, FALSE, FALSE }, 101206917Smarius { "floatx80_lt", 2, FALSE, FALSE }, 102206917Smarius { "floatx80_eq_signaling", 2, FALSE, FALSE }, 103206917Smarius { "floatx80_le_quiet", 2, FALSE, FALSE }, 104206917Smarius { "floatx80_lt_quiet", 2, FALSE, FALSE }, 105206917Smarius { "float128_to_int32", 1, FALSE, TRUE }, 106206917Smarius { "float128_to_int32_round_to_zero", 1, FALSE, FALSE }, 107206917Smarius { "float128_to_int64", 1, FALSE, TRUE }, 108206917Smarius { "float128_to_int64_round_to_zero", 1, FALSE, FALSE }, 109206917Smarius { "float128_to_float32", 1, FALSE, TRUE }, 110206917Smarius { "float128_to_float64", 1, FALSE, TRUE }, 111206917Smarius { "float128_to_floatx80", 1, FALSE, TRUE }, 112206917Smarius { "float128_round_to_int", 1, FALSE, TRUE }, 113206917Smarius { "float128_add", 2, FALSE, TRUE }, 114206917Smarius { "float128_sub", 2, FALSE, TRUE }, 115206917Smarius { "float128_mul", 2, FALSE, TRUE }, 116206917Smarius { "float128_div", 2, FALSE, TRUE }, 117206917Smarius { "float128_rem", 2, FALSE, FALSE }, 118206917Smarius { "float128_sqrt", 1, FALSE, TRUE }, 119206917Smarius { "float128_eq", 2, FALSE, FALSE }, 120206917Smarius { "float128_le", 2, FALSE, FALSE }, 121206917Smarius { "float128_lt", 2, FALSE, FALSE }, 122206917Smarius { "float128_eq_signaling", 2, FALSE, FALSE }, 123206917Smarius { "float128_le_quiet", 2, FALSE, FALSE }, 124206917Smarius { "float128_lt_quiet", 2, FALSE, FALSE }, 125206917Smarius}; 126206917Smarius 127206917Smariusconst flag functionExists[ NUM_FUNCTIONS ] = { 128206917Smarius 0, 129206917Smarius#ifdef SYST_INT32_TO_FLOAT32 130206917Smarius 1, 131206917Smarius#else 132206917Smarius 0, 133206917Smarius#endif 134206917Smarius#ifdef SYST_INT32_TO_FLOAT64 135206917Smarius 1, 136206917Smarius#else 137206917Smarius 0, 138206917Smarius#endif 139206917Smarius#ifdef SYST_INT32_TO_FLOATX80 140206917Smarius 1, 141206917Smarius#else 142206917Smarius 0, 143206917Smarius#endif 144206917Smarius#ifdef SYST_INT32_TO_FLOAT128 145206917Smarius 1, 146206917Smarius#else 147206917Smarius 0, 148206917Smarius#endif 149206917Smarius#ifdef SYST_INT64_TO_FLOAT32 150206917Smarius 1, 151206917Smarius#else 152206917Smarius 0, 153206917Smarius#endif 154206917Smarius#ifdef SYST_INT64_TO_FLOAT64 155206917Smarius 1, 156206917Smarius#else 157206917Smarius 0, 158206917Smarius#endif 159206917Smarius#ifdef SYST_INT64_TO_FLOATX80 160206917Smarius 1, 161206917Smarius#else 162206917Smarius 0, 163206917Smarius#endif 164206917Smarius#ifdef SYST_INT64_TO_FLOAT128 165206917Smarius 1, 166206917Smarius#else 167206917Smarius 0, 168206917Smarius#endif 169206917Smarius#ifdef SYST_FLOAT32_TO_INT32 170206917Smarius 1, 171206917Smarius#else 172206917Smarius 0, 173206917Smarius#endif 174206917Smarius#ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO 175206917Smarius 1, 176206917Smarius#else 177206917Smarius 0, 178206917Smarius#endif 179206917Smarius#ifdef SYST_FLOAT32_TO_INT64 180206917Smarius 1, 181206917Smarius#else 182206917Smarius 0, 183206917Smarius#endif 184206917Smarius#ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO 185206917Smarius 1, 186206917Smarius#else 187206917Smarius 0, 188206917Smarius#endif 189206917Smarius#ifdef SYST_FLOAT32_TO_FLOAT64 190206917Smarius 1, 191206917Smarius#else 192206917Smarius 0, 193206917Smarius#endif 194206917Smarius#ifdef SYST_FLOAT32_TO_FLOATX80 195206917Smarius 1, 196206917Smarius#else 197206917Smarius 0, 198206917Smarius#endif 199206917Smarius#ifdef SYST_FLOAT32_TO_FLOAT128 200206917Smarius 1, 201206917Smarius#else 202206917Smarius 0, 203206917Smarius#endif 204206917Smarius#ifdef SYST_FLOAT32_ROUND_TO_INT 205206917Smarius 1, 206206917Smarius#else 207206917Smarius 0, 208206917Smarius#endif 209206917Smarius#ifdef SYST_FLOAT32_ADD 210206917Smarius 1, 211206917Smarius#else 212206917Smarius 0, 213206917Smarius#endif 214206917Smarius#ifdef SYST_FLOAT32_SUB 215206917Smarius 1, 216206917Smarius#else 217206917Smarius 0, 218206917Smarius#endif 219206917Smarius#ifdef SYST_FLOAT32_MUL 220206917Smarius 1, 221206917Smarius#else 222206917Smarius 0, 223206917Smarius#endif 224206917Smarius#ifdef SYST_FLOAT32_DIV 225206917Smarius 1, 226206917Smarius#else 227206917Smarius 0, 228206917Smarius#endif 229206917Smarius#ifdef SYST_FLOAT32_REM 230206917Smarius 1, 231206917Smarius#else 232206917Smarius 0, 233206917Smarius#endif 234206917Smarius#ifdef SYST_FLOAT32_SQRT 235206917Smarius 1, 236206917Smarius#else 237206917Smarius 0, 238206917Smarius#endif 239206917Smarius#ifdef SYST_FLOAT32_EQ 240206917Smarius 1, 241206917Smarius#else 242206917Smarius 0, 243206917Smarius#endif 244206917Smarius#ifdef SYST_FLOAT32_LE 245206917Smarius 1, 246206917Smarius#else 247206917Smarius 0, 248206917Smarius#endif 249206917Smarius#ifdef SYST_FLOAT32_LT 250206917Smarius 1, 251206917Smarius#else 252206917Smarius 0, 253206917Smarius#endif 254206917Smarius#ifdef SYST_FLOAT32_EQ_SIGNALING 255206917Smarius 1, 256206917Smarius#else 257206917Smarius 0, 258206917Smarius#endif 259206917Smarius#ifdef SYST_FLOAT32_LE_QUIET 260206917Smarius 1, 261206917Smarius#else 262206917Smarius 0, 263206917Smarius#endif 264206917Smarius#ifdef SYST_FLOAT32_LT_QUIET 265206917Smarius 1, 266206917Smarius#else 267206917Smarius 0, 268206917Smarius#endif 269206917Smarius#ifdef SYST_FLOAT64_TO_INT32 270206917Smarius 1, 271206917Smarius#else 272206917Smarius 0, 273206917Smarius#endif 274206917Smarius#ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO 275206917Smarius 1, 276206917Smarius#else 277206917Smarius 0, 278206917Smarius#endif 279206917Smarius#ifdef SYST_FLOAT64_TO_INT64 280206917Smarius 1, 281206917Smarius#else 282206917Smarius 0, 283206917Smarius#endif 284206917Smarius#ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO 285206917Smarius 1, 286206917Smarius#else 287206917Smarius 0, 288206917Smarius#endif 289206917Smarius#ifdef SYST_FLOAT64_TO_FLOAT32 290206917Smarius 1, 291206917Smarius#else 292206917Smarius 0, 293206917Smarius#endif 294206917Smarius#ifdef SYST_FLOAT64_TO_FLOATX80 295206917Smarius 1, 296206917Smarius#else 297206917Smarius 0, 298206917Smarius#endif 299206917Smarius#ifdef SYST_FLOAT64_TO_FLOAT128 300206917Smarius 1, 301206917Smarius#else 302206917Smarius 0, 303206917Smarius#endif 304206917Smarius#ifdef SYST_FLOAT64_ROUND_TO_INT 305206917Smarius 1, 306206917Smarius#else 307206917Smarius 0, 308206917Smarius#endif 309206917Smarius#ifdef SYST_FLOAT64_ADD 310206917Smarius 1, 311206917Smarius#else 312206917Smarius 0, 313206917Smarius#endif 314206917Smarius#ifdef SYST_FLOAT64_SUB 315206917Smarius 1, 316206917Smarius#else 317206917Smarius 0, 318206917Smarius#endif 319206917Smarius#ifdef SYST_FLOAT64_MUL 320206917Smarius 1, 321206917Smarius#else 322206917Smarius 0, 323206917Smarius#endif 324206917Smarius#ifdef SYST_FLOAT64_DIV 325206917Smarius 1, 326206917Smarius#else 327206917Smarius 0, 328206917Smarius#endif 329206917Smarius#ifdef SYST_FLOAT64_REM 330206917Smarius 1, 331206917Smarius#else 332206917Smarius 0, 333206917Smarius#endif 334206917Smarius#ifdef SYST_FLOAT64_SQRT 335206917Smarius 1, 336206917Smarius#else 337206917Smarius 0, 338206917Smarius#endif 339206917Smarius#ifdef SYST_FLOAT64_EQ 340206917Smarius 1, 341206917Smarius#else 342206917Smarius 0, 343206917Smarius#endif 344206917Smarius#ifdef SYST_FLOAT64_LE 345206917Smarius 1, 346206917Smarius#else 347206917Smarius 0, 348206917Smarius#endif 349206917Smarius#ifdef SYST_FLOAT64_LT 350206917Smarius 1, 351206917Smarius#else 352206917Smarius 0, 353206917Smarius#endif 354206917Smarius#ifdef SYST_FLOAT64_EQ_SIGNALING 355206917Smarius 1, 356206917Smarius#else 357206917Smarius 0, 358206917Smarius#endif 359206917Smarius#ifdef SYST_FLOAT64_LE_QUIET 360206917Smarius 1, 361206917Smarius#else 362206917Smarius 0, 363206917Smarius#endif 364206917Smarius#ifdef SYST_FLOAT64_LT_QUIET 365206917Smarius 1, 366206917Smarius#else 367206917Smarius 0, 368206917Smarius#endif 369206917Smarius#ifdef SYST_FLOATX80_TO_INT32 370206917Smarius 1, 371206917Smarius#else 372206917Smarius 0, 373206917Smarius#endif 374206917Smarius#ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO 375206917Smarius 1, 376206917Smarius#else 377206917Smarius 0, 378206917Smarius#endif 379206917Smarius#ifdef SYST_FLOATX80_TO_INT64 380206917Smarius 1, 381206917Smarius#else 382206917Smarius 0, 383206917Smarius#endif 384206917Smarius#ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO 385206917Smarius 1, 386206917Smarius#else 387206917Smarius 0, 388206917Smarius#endif 389206917Smarius#ifdef SYST_FLOATX80_TO_FLOAT32 390206917Smarius 1, 391206917Smarius#else 392206917Smarius 0, 393206917Smarius#endif 394206917Smarius#ifdef SYST_FLOATX80_TO_FLOAT64 395206917Smarius 1, 396206917Smarius#else 397206917Smarius 0, 398206917Smarius#endif 399206917Smarius#ifdef SYST_FLOATX80_TO_FLOAT128 400206917Smarius 1, 401206917Smarius#else 402206917Smarius 0, 403206917Smarius#endif 404206917Smarius#ifdef SYST_FLOATX80_ROUND_TO_INT 405206917Smarius 1, 406206917Smarius#else 407206917Smarius 0, 408206917Smarius#endif 409206917Smarius#ifdef SYST_FLOATX80_ADD 410206917Smarius 1, 411206917Smarius#else 412206917Smarius 0, 413206917Smarius#endif 414206917Smarius#ifdef SYST_FLOATX80_SUB 415206917Smarius 1, 416206917Smarius#else 417206917Smarius 0, 418206917Smarius#endif 419206917Smarius#ifdef SYST_FLOATX80_MUL 420206917Smarius 1, 421206917Smarius#else 422206917Smarius 0, 423206917Smarius#endif 424206917Smarius#ifdef SYST_FLOATX80_DIV 425206917Smarius 1, 426206917Smarius#else 427206917Smarius 0, 428206917Smarius#endif 429206917Smarius#ifdef SYST_FLOATX80_REM 430206917Smarius 1, 431206917Smarius#else 432206917Smarius 0, 433206917Smarius#endif 434206917Smarius#ifdef SYST_FLOATX80_SQRT 435206917Smarius 1, 436206917Smarius#else 437206917Smarius 0, 438206917Smarius#endif 439206917Smarius#ifdef SYST_FLOATX80_EQ 440206917Smarius 1, 441206917Smarius#else 442206917Smarius 0, 443206917Smarius#endif 444206917Smarius#ifdef SYST_FLOATX80_LE 445206917Smarius 1, 446206917Smarius#else 447206917Smarius 0, 448206917Smarius#endif 449206917Smarius#ifdef SYST_FLOATX80_LT 450206917Smarius 1, 451206917Smarius#else 452206917Smarius 0, 453206917Smarius#endif 454206917Smarius#ifdef SYST_FLOATX80_EQ_SIGNALING 455206917Smarius 1, 456206917Smarius#else 457206917Smarius 0, 458206917Smarius#endif 459206917Smarius#ifdef SYST_FLOATX80_LE_QUIET 460206917Smarius 1, 461206917Smarius#else 462206917Smarius 0, 463206917Smarius#endif 464206917Smarius#ifdef SYST_FLOATX80_LT_QUIET 465206917Smarius 1, 466206917Smarius#else 467206917Smarius 0, 468206917Smarius#endif 469206917Smarius#ifdef SYST_FLOAT128_TO_INT32 470206917Smarius 1, 471206917Smarius#else 472206917Smarius 0, 473206917Smarius#endif 474206917Smarius#ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO 475206917Smarius 1, 476206917Smarius#else 477206917Smarius 0, 478206917Smarius#endif 479206917Smarius#ifdef SYST_FLOAT128_TO_INT64 480206917Smarius 1, 481206917Smarius#else 482206917Smarius 0, 483206917Smarius#endif 484206917Smarius#ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO 485206917Smarius 1, 486206917Smarius#else 487206917Smarius 0, 488206917Smarius#endif 489206917Smarius#ifdef SYST_FLOAT128_TO_FLOAT32 490206917Smarius 1, 491206917Smarius#else 492206917Smarius 0, 493206917Smarius#endif 494206917Smarius#ifdef SYST_FLOAT128_TO_FLOAT64 495206917Smarius 1, 496206917Smarius#else 497206917Smarius 0, 498206917Smarius#endif 499206917Smarius#ifdef SYST_FLOAT128_TO_FLOATX80 500206917Smarius 1, 501206917Smarius#else 502206917Smarius 0, 503206917Smarius#endif 504206917Smarius#ifdef SYST_FLOAT128_ROUND_TO_INT 505206917Smarius 1, 506206917Smarius#else 507206917Smarius 0, 508206917Smarius#endif 509206917Smarius#ifdef SYST_FLOAT128_ADD 510206917Smarius 1, 511206917Smarius#else 512206917Smarius 0, 513206917Smarius#endif 514206917Smarius#ifdef SYST_FLOAT128_SUB 515206917Smarius 1, 516206917Smarius#else 517206917Smarius 0, 518206917Smarius#endif 519206917Smarius#ifdef SYST_FLOAT128_MUL 520206917Smarius 1, 521206917Smarius#else 522206917Smarius 0, 523206917Smarius#endif 524206917Smarius#ifdef SYST_FLOAT128_DIV 525206917Smarius 1, 526206917Smarius#else 527206917Smarius 0, 528206917Smarius#endif 529206917Smarius#ifdef SYST_FLOAT128_REM 530206917Smarius 1, 531206917Smarius#else 532206917Smarius 0, 533206917Smarius#endif 534206917Smarius#ifdef SYST_FLOAT128_SQRT 535206917Smarius 1, 536206917Smarius#else 537206917Smarius 0, 538206917Smarius#endif 539206917Smarius#ifdef SYST_FLOAT128_EQ 540206917Smarius 1, 541206917Smarius#else 542206917Smarius 0, 543206917Smarius#endif 544206917Smarius#ifdef SYST_FLOAT128_LE 545206917Smarius 1, 546206917Smarius#else 547206917Smarius 0, 548206917Smarius#endif 549206917Smarius#ifdef SYST_FLOAT128_LT 550206917Smarius 1, 551206917Smarius#else 552206917Smarius 0, 553206917Smarius#endif 554206917Smarius#ifdef SYST_FLOAT128_EQ_SIGNALING 555206917Smarius 1, 556206917Smarius#else 557206917Smarius 0, 558206917Smarius#endif 559206917Smarius#ifdef SYST_FLOAT128_LE_QUIET 560206917Smarius 1, 561206917Smarius#else 562206917Smarius 0, 563206917Smarius#endif 564206917Smarius#ifdef SYST_FLOAT128_LT_QUIET 565206917Smarius 1, 566206917Smarius#else 567206917Smarius 0, 568206917Smarius#endif 569206917Smarius}; 570206917Smarius 571206917Smariusstatic void 572206917Smarius testFunctionVariety( 573206917Smarius uint8 functionCode, int8 roundingPrecision, int8 roundingMode ) 574206917Smarius{ 575206917Smarius uint8 roundingCode; 576206917Smarius 577206917Smarius functionName = functions[ functionCode ].name; 578206917Smarius#ifdef FLOATX80 579206917Smarius if ( roundingPrecision == 32 ) { 580206917Smarius roundingPrecisionName = "32"; 581206917Smarius } 582206917Smarius else if ( roundingPrecision == 64 ) { 583206917Smarius roundingPrecisionName = "64"; 584206917Smarius } 585206917Smarius else if ( roundingPrecision == 80 ) { 586206917Smarius roundingPrecisionName = "80"; 587206917Smarius } 588206917Smarius else { 589206917Smarius roundingPrecision = 80; 590206917Smarius roundingPrecisionName = 0; 591206917Smarius } 592206917Smarius floatx80_rounding_precision = roundingPrecision; 593206917Smarius syst_float_set_rounding_precision( roundingPrecision ); 594206917Smarius#endif 595206917Smarius switch ( roundingMode ) { 596206917Smarius case 0: 597206917Smarius roundingModeName = 0; 598206917Smarius roundingCode = float_round_nearest_even; 599206917Smarius break; 600206917Smarius case ROUND_NEAREST_EVEN: 601206917Smarius roundingModeName = "nearest_even"; 602206917Smarius roundingCode = float_round_nearest_even; 603206917Smarius break; 604206917Smarius case ROUND_TO_ZERO: 605206917Smarius roundingModeName = "to_zero"; 606206917Smarius roundingCode = float_round_to_zero; 607206917Smarius break; 608206917Smarius case ROUND_DOWN: 609206917Smarius roundingModeName = "down"; 610206917Smarius roundingCode = float_round_down; 611206917Smarius break; 612206917Smarius case ROUND_UP: 613206917Smarius roundingModeName = "up"; 614206917Smarius roundingCode = float_round_up; 615206917Smarius break; 616206917Smarius } 617206917Smarius float_rounding_mode = roundingCode; 618206917Smarius syst_float_set_rounding_mode( roundingCode ); 619206917Smarius fputs( "Testing ", stderr ); 620206917Smarius writeFunctionName( stderr ); 621206917Smarius fputs( ".\n", stderr ); 622206917Smarius switch ( functionCode ) { 623206917Smarius#ifdef SYST_INT32_TO_FLOAT32 624206917Smarius case INT32_TO_FLOAT32: 625206917Smarius test_a_int32_z_float32( int32_to_float32, syst_int32_to_float32 ); 626206917Smarius break; 627206917Smarius#endif 628206917Smarius#ifdef SYST_INT32_TO_FLOAT64 629206917Smarius case INT32_TO_FLOAT64: 630206917Smarius test_a_int32_z_float64( int32_to_float64, syst_int32_to_float64 ); 631206917Smarius break; 632206917Smarius#endif 633206917Smarius#ifdef SYST_INT32_TO_FLOATX80 634206917Smarius case INT32_TO_FLOATX80: 635206917Smarius test_a_int32_z_floatx80( int32_to_floatx80, syst_int32_to_floatx80 ); 636206917Smarius break; 637206917Smarius#endif 638206917Smarius#ifdef SYST_INT32_TO_FLOAT128 639206917Smarius case INT32_TO_FLOAT128: 640206917Smarius test_a_int32_z_float128( int32_to_float128, syst_int32_to_float128 ); 641206917Smarius break; 642206917Smarius#endif 643206917Smarius#ifdef SYST_INT64_TO_FLOAT32 644206917Smarius case INT64_TO_FLOAT32: 645206917Smarius test_a_int64_z_float32( int64_to_float32, syst_int64_to_float32 ); 646206917Smarius break; 647206917Smarius#endif 648206917Smarius#ifdef SYST_INT64_TO_FLOAT64 649206917Smarius case INT64_TO_FLOAT64: 650206917Smarius test_a_int64_z_float64( int64_to_float64, syst_int64_to_float64 ); 651206917Smarius break; 652206917Smarius#endif 653206917Smarius#ifdef SYST_INT64_TO_FLOATX80 654206917Smarius case INT64_TO_FLOATX80: 655206917Smarius test_a_int64_z_floatx80( int64_to_floatx80, syst_int64_to_floatx80 ); 656206917Smarius break; 657206917Smarius#endif 658206917Smarius#ifdef SYST_INT64_TO_FLOAT128 659206917Smarius case INT64_TO_FLOAT128: 660206917Smarius test_a_int64_z_float128( int64_to_float128, syst_int64_to_float128 ); 661206917Smarius break; 662206917Smarius#endif 663206917Smarius#ifdef SYST_FLOAT32_TO_INT32 664206917Smarius case FLOAT32_TO_INT32: 665206917Smarius test_a_float32_z_int32( float32_to_int32, syst_float32_to_int32 ); 666206917Smarius break; 667206917Smarius#endif 668206917Smarius#ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO 669206917Smarius case FLOAT32_TO_INT32_ROUND_TO_ZERO: 670206917Smarius test_a_float32_z_int32( 671206917Smarius float32_to_int32_round_to_zero, 672206917Smarius syst_float32_to_int32_round_to_zero 673206917Smarius ); 674206917Smarius break; 675206917Smarius#endif 676206917Smarius#ifdef SYST_FLOAT32_TO_INT64 677206917Smarius case FLOAT32_TO_INT64: 678206917Smarius test_a_float32_z_int64( float32_to_int64, syst_float32_to_int64 ); 679206917Smarius break; 680206917Smarius#endif 681206917Smarius#ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO 682206917Smarius case FLOAT32_TO_INT64_ROUND_TO_ZERO: 683206917Smarius test_a_float32_z_int64( 684206917Smarius float32_to_int64_round_to_zero, 685206917Smarius syst_float32_to_int64_round_to_zero 686206917Smarius ); 687206917Smarius break; 688206917Smarius#endif 689206917Smarius#ifdef SYST_FLOAT32_TO_FLOAT64 690206917Smarius case FLOAT32_TO_FLOAT64: 691206917Smarius test_a_float32_z_float64( 692206917Smarius float32_to_float64, syst_float32_to_float64 ); 693206917Smarius break; 694206917Smarius#endif 695206917Smarius#ifdef SYST_FLOAT32_TO_FLOATX80 696206917Smarius case FLOAT32_TO_FLOATX80: 697206917Smarius test_a_float32_z_floatx80( 698206917Smarius float32_to_floatx80, syst_float32_to_floatx80 ); 699206917Smarius break; 700206917Smarius#endif 701206917Smarius#ifdef SYST_FLOAT32_TO_FLOAT128 702206917Smarius case FLOAT32_TO_FLOAT128: 703206917Smarius test_a_float32_z_float128( 704206917Smarius float32_to_float128, syst_float32_to_float128 ); 705206917Smarius break; 706206917Smarius#endif 707206917Smarius#ifdef SYST_FLOAT32_ROUND_TO_INT 708206917Smarius case FLOAT32_ROUND_TO_INT: 709206917Smarius test_az_float32( float32_round_to_int, syst_float32_round_to_int ); 710206917Smarius break; 711206917Smarius#endif 712206917Smarius#ifdef SYST_FLOAT32_ADD 713206917Smarius case FLOAT32_ADD: 714206917Smarius test_abz_float32( float32_add, syst_float32_add ); 715206917Smarius break; 716206917Smarius#endif 717206917Smarius#ifdef SYST_FLOAT32_SUB 718206917Smarius case FLOAT32_SUB: 719206917Smarius test_abz_float32( float32_sub, syst_float32_sub ); 720206917Smarius break; 721206917Smarius#endif 722206917Smarius#ifdef SYST_FLOAT32_MUL 723206917Smarius case FLOAT32_MUL: 724206917Smarius test_abz_float32( float32_mul, syst_float32_mul ); 725206917Smarius break; 726206917Smarius#endif 727206917Smarius#ifdef SYST_FLOAT32_DIV 728206917Smarius case FLOAT32_DIV: 729206917Smarius test_abz_float32( float32_div, syst_float32_div ); 730206917Smarius break; 731206917Smarius#endif 732206917Smarius#ifdef SYST_FLOAT32_REM 733206917Smarius case FLOAT32_REM: 734206917Smarius test_abz_float32( float32_rem, syst_float32_rem ); 735206917Smarius break; 736206917Smarius#endif 737206917Smarius#ifdef SYST_FLOAT32_SQRT 738206917Smarius case FLOAT32_SQRT: 739206917Smarius test_az_float32( float32_sqrt, syst_float32_sqrt ); 740206917Smarius break; 741206917Smarius#endif 742206917Smarius#ifdef SYST_FLOAT32_EQ 743206917Smarius case FLOAT32_EQ: 744206917Smarius test_ab_float32_z_flag( float32_eq, syst_float32_eq ); 745206917Smarius break; 746206917Smarius#endif 747206917Smarius#ifdef SYST_FLOAT32_LE 748206917Smarius case FLOAT32_LE: 749206917Smarius test_ab_float32_z_flag( float32_le, syst_float32_le ); 750206917Smarius break; 751206917Smarius#endif 752206917Smarius#ifdef SYST_FLOAT32_LT 753206917Smarius case FLOAT32_LT: 754206917Smarius test_ab_float32_z_flag( float32_lt, syst_float32_lt ); 755206917Smarius break; 756206917Smarius#endif 757206917Smarius#ifdef SYST_FLOAT32_EQ_SIGNALING 758206917Smarius case FLOAT32_EQ_SIGNALING: 759206917Smarius test_ab_float32_z_flag( 760206917Smarius float32_eq_signaling, syst_float32_eq_signaling ); 761206917Smarius break; 762206917Smarius#endif 763206917Smarius#ifdef SYST_FLOAT32_LE_QUIET 764206917Smarius case FLOAT32_LE_QUIET: 765206917Smarius test_ab_float32_z_flag( float32_le_quiet, syst_float32_le_quiet ); 766206917Smarius break; 767206917Smarius#endif 768206917Smarius#ifdef SYST_FLOAT32_LT_QUIET 769206917Smarius case FLOAT32_LT_QUIET: 770206917Smarius test_ab_float32_z_flag( float32_lt_quiet, syst_float32_lt_quiet ); 771206917Smarius break; 772206917Smarius#endif 773206917Smarius#ifdef SYST_FLOAT64_TO_INT32 774206917Smarius case FLOAT64_TO_INT32: 775206917Smarius test_a_float64_z_int32( float64_to_int32, syst_float64_to_int32 ); 776206917Smarius break; 777206917Smarius#endif 778206917Smarius#ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO 779206917Smarius case FLOAT64_TO_INT32_ROUND_TO_ZERO: 780206917Smarius test_a_float64_z_int32( 781206917Smarius float64_to_int32_round_to_zero, 782206917Smarius syst_float64_to_int32_round_to_zero 783206917Smarius ); 784206917Smarius break; 785206917Smarius#endif 786206917Smarius#ifdef SYST_FLOAT64_TO_INT64 787206917Smarius case FLOAT64_TO_INT64: 788206917Smarius test_a_float64_z_int64( float64_to_int64, syst_float64_to_int64 ); 789206917Smarius break; 790206917Smarius#endif 791206917Smarius#ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO 792206917Smarius case FLOAT64_TO_INT64_ROUND_TO_ZERO: 793206917Smarius test_a_float64_z_int64( 794206917Smarius float64_to_int64_round_to_zero, 795206917Smarius syst_float64_to_int64_round_to_zero 796206917Smarius ); 797206917Smarius break; 798206917Smarius#endif 799206917Smarius#ifdef SYST_FLOAT64_TO_FLOAT32 800206917Smarius case FLOAT64_TO_FLOAT32: 801206917Smarius test_a_float64_z_float32( 802206917Smarius float64_to_float32, syst_float64_to_float32 ); 803206917Smarius break; 804206917Smarius#endif 805206917Smarius#ifdef SYST_FLOAT64_TO_FLOATX80 806206917Smarius case FLOAT64_TO_FLOATX80: 807206917Smarius test_a_float64_z_floatx80( 808206917Smarius float64_to_floatx80, syst_float64_to_floatx80 ); 809206917Smarius break; 810206917Smarius#endif 811206917Smarius#ifdef SYST_FLOAT64_TO_FLOAT128 812206917Smarius case FLOAT64_TO_FLOAT128: 813206917Smarius test_a_float64_z_float128( 814206917Smarius float64_to_float128, syst_float64_to_float128 ); 815206917Smarius break; 816206917Smarius#endif 817206917Smarius#ifdef SYST_FLOAT64_ROUND_TO_INT 818206917Smarius case FLOAT64_ROUND_TO_INT: 819206917Smarius test_az_float64( float64_round_to_int, syst_float64_round_to_int ); 820206917Smarius break; 821206917Smarius#endif 822206917Smarius#ifdef SYST_FLOAT64_ADD 823206917Smarius case FLOAT64_ADD: 824206917Smarius test_abz_float64( float64_add, syst_float64_add ); 825206917Smarius break; 826206917Smarius#endif 827206917Smarius#ifdef SYST_FLOAT64_SUB 828206917Smarius case FLOAT64_SUB: 829206917Smarius test_abz_float64( float64_sub, syst_float64_sub ); 830206917Smarius break; 831206917Smarius#endif 832206917Smarius#ifdef SYST_FLOAT64_MUL 833206917Smarius case FLOAT64_MUL: 834206917Smarius test_abz_float64( float64_mul, syst_float64_mul ); 835206917Smarius break; 836206917Smarius#endif 837206917Smarius#ifdef SYST_FLOAT64_DIV 838206917Smarius case FLOAT64_DIV: 839206917Smarius test_abz_float64( float64_div, syst_float64_div ); 840206917Smarius break; 841206917Smarius#endif 842206917Smarius#ifdef SYST_FLOAT64_REM 843206917Smarius case FLOAT64_REM: 844206917Smarius test_abz_float64( float64_rem, syst_float64_rem ); 845206917Smarius break; 846206917Smarius#endif 847206917Smarius#ifdef SYST_FLOAT64_SQRT 848206917Smarius case FLOAT64_SQRT: 849206917Smarius test_az_float64( float64_sqrt, syst_float64_sqrt ); 850206917Smarius break; 851206917Smarius#endif 852206917Smarius#ifdef SYST_FLOAT64_EQ 853206917Smarius case FLOAT64_EQ: 854206917Smarius test_ab_float64_z_flag( float64_eq, syst_float64_eq ); 855206917Smarius break; 856206917Smarius#endif 857206917Smarius#ifdef SYST_FLOAT64_LE 858206917Smarius case FLOAT64_LE: 859206917Smarius test_ab_float64_z_flag( float64_le, syst_float64_le ); 860206917Smarius break; 861206917Smarius#endif 862206917Smarius#ifdef SYST_FLOAT64_LT 863206917Smarius case FLOAT64_LT: 864206917Smarius test_ab_float64_z_flag( float64_lt, syst_float64_lt ); 865206917Smarius break; 866206917Smarius#endif 867206917Smarius#ifdef SYST_FLOAT64_EQ_SIGNALING 868206917Smarius case FLOAT64_EQ_SIGNALING: 869206917Smarius test_ab_float64_z_flag( 870206917Smarius float64_eq_signaling, syst_float64_eq_signaling ); 871206917Smarius break; 872206917Smarius#endif 873206917Smarius#ifdef SYST_FLOAT64_LE_QUIET 874206917Smarius case FLOAT64_LE_QUIET: 875206917Smarius test_ab_float64_z_flag( float64_le_quiet, syst_float64_le_quiet ); 876206917Smarius break; 877206917Smarius#endif 878206917Smarius#ifdef SYST_FLOAT64_LT_QUIET 879206917Smarius case FLOAT64_LT_QUIET: 880206917Smarius test_ab_float64_z_flag( float64_lt_quiet, syst_float64_lt_quiet ); 881206917Smarius break; 882206917Smarius#endif 883206917Smarius#ifdef SYST_FLOATX80_TO_INT32 884206917Smarius case FLOATX80_TO_INT32: 885206917Smarius test_a_floatx80_z_int32( floatx80_to_int32, syst_floatx80_to_int32 ); 886206917Smarius break; 887206917Smarius#endif 888206917Smarius#ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO 889206917Smarius case FLOATX80_TO_INT32_ROUND_TO_ZERO: 890206917Smarius test_a_floatx80_z_int32( 891206917Smarius floatx80_to_int32_round_to_zero, 892206917Smarius syst_floatx80_to_int32_round_to_zero 893206917Smarius ); 894206917Smarius break; 895206917Smarius#endif 896206917Smarius#ifdef SYST_FLOATX80_TO_INT64 897206917Smarius case FLOATX80_TO_INT64: 898206917Smarius test_a_floatx80_z_int64( floatx80_to_int64, syst_floatx80_to_int64 ); 899206917Smarius break; 900206917Smarius#endif 901206917Smarius#ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO 902206917Smarius case FLOATX80_TO_INT64_ROUND_TO_ZERO: 903206917Smarius test_a_floatx80_z_int64( 904206917Smarius floatx80_to_int64_round_to_zero, 905206917Smarius syst_floatx80_to_int64_round_to_zero 906206917Smarius ); 907206917Smarius break; 908206917Smarius#endif 909206917Smarius#ifdef SYST_FLOATX80_TO_FLOAT32 910206917Smarius case FLOATX80_TO_FLOAT32: 911206917Smarius test_a_floatx80_z_float32( 912206917Smarius floatx80_to_float32, syst_floatx80_to_float32 ); 913206917Smarius break; 914206917Smarius#endif 915206917Smarius#ifdef SYST_FLOATX80_TO_FLOAT64 916206917Smarius case FLOATX80_TO_FLOAT64: 917206917Smarius test_a_floatx80_z_float64( 918206917Smarius floatx80_to_float64, syst_floatx80_to_float64 ); 919206917Smarius break; 920206917Smarius#endif 921206917Smarius#ifdef SYST_FLOATX80_TO_FLOAT128 922206917Smarius case FLOATX80_TO_FLOAT128: 923206917Smarius test_a_floatx80_z_float128( 924206917Smarius floatx80_to_float128, syst_floatx80_to_float128 ); 925206917Smarius break; 926206917Smarius#endif 927206917Smarius#ifdef SYST_FLOATX80_ROUND_TO_INT 928206917Smarius case FLOATX80_ROUND_TO_INT: 929206917Smarius test_az_floatx80( floatx80_round_to_int, syst_floatx80_round_to_int ); 930206917Smarius break; 931206917Smarius#endif 932206917Smarius#ifdef SYST_FLOATX80_ADD 933206917Smarius case FLOATX80_ADD: 934206917Smarius test_abz_floatx80( floatx80_add, syst_floatx80_add ); 935206917Smarius break; 936206917Smarius#endif 937206917Smarius#ifdef SYST_FLOATX80_SUB 938206917Smarius case FLOATX80_SUB: 939206917Smarius test_abz_floatx80( floatx80_sub, syst_floatx80_sub ); 940206917Smarius break; 941206917Smarius#endif 942206917Smarius#ifdef SYST_FLOATX80_MUL 943206917Smarius case FLOATX80_MUL: 944206917Smarius test_abz_floatx80( floatx80_mul, syst_floatx80_mul ); 945206917Smarius break; 946206917Smarius#endif 947206917Smarius#ifdef SYST_FLOATX80_DIV 948206917Smarius case FLOATX80_DIV: 949206917Smarius test_abz_floatx80( floatx80_div, syst_floatx80_div ); 950206917Smarius break; 951206917Smarius#endif 952206917Smarius#ifdef SYST_FLOATX80_REM 953206917Smarius case FLOATX80_REM: 954206917Smarius test_abz_floatx80( floatx80_rem, syst_floatx80_rem ); 955206917Smarius break; 956206917Smarius#endif 957206917Smarius#ifdef SYST_FLOATX80_SQRT 958206917Smarius case FLOATX80_SQRT: 959206917Smarius test_az_floatx80( floatx80_sqrt, syst_floatx80_sqrt ); 960206917Smarius break; 961206917Smarius#endif 962206917Smarius#ifdef SYST_FLOATX80_EQ 963206917Smarius case FLOATX80_EQ: 964206917Smarius test_ab_floatx80_z_flag( floatx80_eq, syst_floatx80_eq ); 965206917Smarius break; 966206917Smarius#endif 967206917Smarius#ifdef SYST_FLOATX80_LE 968206917Smarius case FLOATX80_LE: 969206917Smarius test_ab_floatx80_z_flag( floatx80_le, syst_floatx80_le ); 970206917Smarius break; 971206917Smarius#endif 972206917Smarius#ifdef SYST_FLOATX80_LT 973206917Smarius case FLOATX80_LT: 974206917Smarius test_ab_floatx80_z_flag( floatx80_lt, syst_floatx80_lt ); 975206917Smarius break; 976206917Smarius#endif 977206917Smarius#ifdef SYST_FLOATX80_EQ_SIGNALING 978206917Smarius case FLOATX80_EQ_SIGNALING: 979206917Smarius test_ab_floatx80_z_flag( 980206917Smarius floatx80_eq_signaling, syst_floatx80_eq_signaling ); 981206917Smarius break; 982206917Smarius#endif 983206917Smarius#ifdef SYST_FLOATX80_LE_QUIET 984206917Smarius case FLOATX80_LE_QUIET: 985206917Smarius test_ab_floatx80_z_flag( floatx80_le_quiet, syst_floatx80_le_quiet ); 986206917Smarius break; 987206917Smarius#endif 988206917Smarius#ifdef SYST_FLOATX80_LT_QUIET 989206917Smarius case FLOATX80_LT_QUIET: 990206917Smarius test_ab_floatx80_z_flag( floatx80_lt_quiet, syst_floatx80_lt_quiet ); 991206917Smarius break; 992206917Smarius#endif 993206917Smarius#ifdef SYST_FLOAT128_TO_INT32 994206917Smarius case FLOAT128_TO_INT32: 995206917Smarius test_a_float128_z_int32( float128_to_int32, syst_float128_to_int32 ); 996206917Smarius break; 997206917Smarius#endif 998206917Smarius#ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO 999206917Smarius case FLOAT128_TO_INT32_ROUND_TO_ZERO: 1000206917Smarius test_a_float128_z_int32( 1001206917Smarius float128_to_int32_round_to_zero, 1002206917Smarius syst_float128_to_int32_round_to_zero 1003206917Smarius ); 1004206917Smarius break; 1005206917Smarius#endif 1006206917Smarius#ifdef SYST_FLOAT128_TO_INT64 1007206917Smarius case FLOAT128_TO_INT64: 1008206917Smarius test_a_float128_z_int64( float128_to_int64, syst_float128_to_int64 ); 1009206917Smarius break; 1010206917Smarius#endif 1011206917Smarius#ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO 1012206917Smarius case FLOAT128_TO_INT64_ROUND_TO_ZERO: 1013206917Smarius test_a_float128_z_int64( 1014206917Smarius float128_to_int64_round_to_zero, 1015206917Smarius syst_float128_to_int64_round_to_zero 1016206917Smarius ); 1017206917Smarius break; 1018206917Smarius#endif 1019206917Smarius#ifdef SYST_FLOAT128_TO_FLOAT32 1020206917Smarius case FLOAT128_TO_FLOAT32: 1021206917Smarius test_a_float128_z_float32( 1022206917Smarius float128_to_float32, syst_float128_to_float32 ); 1023206917Smarius break; 1024206917Smarius#endif 1025206917Smarius#ifdef SYST_FLOAT128_TO_FLOAT64 1026206917Smarius case FLOAT128_TO_FLOAT64: 1027206917Smarius test_a_float128_z_float64( 1028206917Smarius float128_to_float64, syst_float128_to_float64 ); 1029206917Smarius break; 1030206917Smarius#endif 1031206917Smarius#ifdef SYST_FLOAT128_TO_FLOATX80 1032206917Smarius case FLOAT128_TO_FLOATX80: 1033206917Smarius test_a_float128_z_floatx80( 1034206917Smarius float128_to_floatx80, syst_float128_to_floatx80 ); 1035206917Smarius break; 1036206917Smarius#endif 1037206917Smarius#ifdef SYST_FLOAT128_ROUND_TO_INT 1038206917Smarius case FLOAT128_ROUND_TO_INT: 1039206917Smarius test_az_float128( float128_round_to_int, syst_float128_round_to_int ); 1040206917Smarius break; 1041206917Smarius#endif 1042206917Smarius#ifdef SYST_FLOAT128_ADD 1043206917Smarius case FLOAT128_ADD: 1044206917Smarius test_abz_float128( float128_add, syst_float128_add ); 1045206917Smarius break; 1046206917Smarius#endif 1047206917Smarius#ifdef SYST_FLOAT128_SUB 1048206917Smarius case FLOAT128_SUB: 1049206917Smarius test_abz_float128( float128_sub, syst_float128_sub ); 1050206917Smarius break; 1051206917Smarius#endif 1052206917Smarius#ifdef SYST_FLOAT128_MUL 1053206917Smarius case FLOAT128_MUL: 1054206917Smarius test_abz_float128( float128_mul, syst_float128_mul ); 1055206917Smarius break; 1056206917Smarius#endif 1057206917Smarius#ifdef SYST_FLOAT128_DIV 1058206917Smarius case FLOAT128_DIV: 1059206917Smarius test_abz_float128( float128_div, syst_float128_div ); 1060206917Smarius break; 1061206917Smarius#endif 1062206917Smarius#ifdef SYST_FLOAT128_REM 1063206917Smarius case FLOAT128_REM: 1064206917Smarius test_abz_float128( float128_rem, syst_float128_rem ); 1065206917Smarius break; 1066206917Smarius#endif 1067206917Smarius#ifdef SYST_FLOAT128_SQRT 1068206917Smarius case FLOAT128_SQRT: 1069206917Smarius test_az_float128( float128_sqrt, syst_float128_sqrt ); 1070206917Smarius break; 1071206917Smarius#endif 1072206917Smarius#ifdef SYST_FLOAT128_EQ 1073206917Smarius case FLOAT128_EQ: 1074206917Smarius test_ab_float128_z_flag( float128_eq, syst_float128_eq ); 1075206917Smarius break; 1076206917Smarius#endif 1077206917Smarius#ifdef SYST_FLOAT128_LE 1078206917Smarius case FLOAT128_LE: 1079206917Smarius test_ab_float128_z_flag( float128_le, syst_float128_le ); 1080206917Smarius break; 1081206917Smarius#endif 1082206917Smarius#ifdef SYST_FLOAT128_LT 1083206917Smarius case FLOAT128_LT: 1084206917Smarius test_ab_float128_z_flag( float128_lt, syst_float128_lt ); 1085206917Smarius break; 1086206917Smarius#endif 1087206917Smarius#ifdef SYST_FLOAT128_EQ_SIGNALING 1088206917Smarius case FLOAT128_EQ_SIGNALING: 1089206917Smarius test_ab_float128_z_flag( 1090206917Smarius float128_eq_signaling, syst_float128_eq_signaling ); 1091206917Smarius break; 1092206917Smarius#endif 1093206917Smarius#ifdef SYST_FLOAT128_LE_QUIET 1094206917Smarius case FLOAT128_LE_QUIET: 1095206917Smarius test_ab_float128_z_flag( float128_le_quiet, syst_float128_le_quiet ); 1096206917Smarius break; 1097206917Smarius#endif 1098206917Smarius#ifdef SYST_FLOAT128_LT_QUIET 1099206917Smarius case FLOAT128_LT_QUIET: 1100206917Smarius test_ab_float128_z_flag( float128_lt_quiet, syst_float128_lt_quiet ); 1101206917Smarius break; 1102206917Smarius#endif 1103206917Smarius } 1104206917Smarius if ( ( errorStop && anyErrors ) || stop ) exitWithStatus(); 1105206917Smarius 1106206917Smarius} 1107206917Smarius 1108206917Smariusvoid 1109206917Smarius testFunction( 1110206917Smarius uint8 functionCode, int8 roundingPrecisionIn, int8 roundingModeIn ) 1111206917Smarius{ 1112206917Smarius int8 roundingPrecision, roundingMode; 1113206917Smarius 1114206917Smarius roundingPrecision = 32; 1115206917Smarius for (;;) { 1116206917Smarius if ( ! functions[ functionCode ].roundingPrecision ) { 1117206917Smarius roundingPrecision = 0; 1118206917Smarius } 1119206917Smarius else if ( roundingPrecisionIn ) { 1120206917Smarius roundingPrecision = roundingPrecisionIn; 1121206917Smarius } 1122206917Smarius for ( roundingMode = 1; 1123206917Smarius roundingMode < NUM_ROUNDINGMODES; 1124206917Smarius ++roundingMode 1125206917Smarius ) { 1126206917Smarius if ( ! functions[ functionCode ].roundingMode ) { 1127206917Smarius roundingMode = 0; 1128206917Smarius } 1129206917Smarius else if ( roundingModeIn ) { 1130206917Smarius roundingMode = roundingModeIn; 1131206917Smarius } 1132206917Smarius testFunctionVariety( 1133206917Smarius functionCode, roundingPrecision, roundingMode ); 1134206917Smarius if ( roundingModeIn || ! roundingMode ) break; 1135206917Smarius } 1136206917Smarius if ( roundingPrecisionIn || ! roundingPrecision ) break; 1137206917Smarius if ( roundingPrecision == 80 ) { 1138206917Smarius break; 1139206917Smarius } 1140206917Smarius else if ( roundingPrecision == 64 ) { 1141206917Smarius roundingPrecision = 80; 1142206917Smarius } 1143206917Smarius else if ( roundingPrecision == 32 ) { 1144206917Smarius roundingPrecision = 64; 1145206917Smarius } 1146206917Smarius } 1147206917Smarius 1148206917Smarius} 1149206917Smarius 1150