1 1.6 martin /* $NetBSD: testFunction.c,v 1.6 2008/04/28 20:23:04 martin Exp $ */ 2 1.3 ross 3 1.3 ross /* This is a derivative work. */ 4 1.3 ross 5 1.3 ross /*- 6 1.3 ross * Copyright (c) 2001 The NetBSD Foundation, Inc. 7 1.3 ross * All rights reserved. 8 1.3 ross * 9 1.3 ross * This code is derived from software contributed to The NetBSD Foundation 10 1.3 ross * by Ross Harvey. 11 1.3 ross * 12 1.3 ross * Redistribution and use in source and binary forms, with or without 13 1.3 ross * modification, are permitted provided that the following conditions 14 1.3 ross * are met: 15 1.3 ross * 1. Redistributions of source code must retain the above copyright 16 1.3 ross * notice, this list of conditions and the following disclaimer. 17 1.3 ross * 2. Redistributions in binary form must reproduce the above copyright 18 1.3 ross * notice, this list of conditions and the following disclaimer in the 19 1.3 ross * documentation and/or other materials provided with the distribution. 20 1.3 ross * 21 1.3 ross * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 22 1.3 ross * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 23 1.3 ross * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24 1.3 ross * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 25 1.3 ross * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 1.3 ross * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 1.3 ross * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 1.3 ross * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 1.3 ross * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 1.3 ross * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 1.3 ross * POSSIBILITY OF SUCH DAMAGE. 32 1.3 ross */ 33 1.1 ross 34 1.1 ross /* 35 1.1 ross =============================================================================== 36 1.1 ross 37 1.1 ross This C source file is part of TestFloat, Release 2a, a package of programs 38 1.1 ross for testing the correctness of floating-point arithmetic complying to the 39 1.1 ross IEC/IEEE Standard for Floating-Point. 40 1.1 ross 41 1.1 ross Written by John R. Hauser. More information is available through the Web 42 1.1 ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'. 43 1.1 ross 44 1.1 ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort 45 1.1 ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT 46 1.1 ross TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO 47 1.1 ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY 48 1.1 ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE. 49 1.1 ross 50 1.1 ross Derivative works are acceptable, even for commercial purposes, so long as 51 1.1 ross (1) they include prominent notice that the work is derivative, and (2) they 52 1.1 ross include prominent notice akin to these four paragraphs for those parts of 53 1.1 ross this code that are retained. 54 1.1 ross 55 1.1 ross =============================================================================== 56 1.1 ross */ 57 1.1 ross 58 1.1 ross #include "milieu.h" 59 1.1 ross #include "softfloat.h" 60 1.1 ross #include "testCases.h" 61 1.1 ross #include "testLoops.h" 62 1.1 ross #include "systmodes.h" 63 1.1 ross #include "systflags.h" 64 1.1 ross #include "systfloat.h" 65 1.1 ross #include "testFunction.h" 66 1.1 ross 67 1.1 ross const functionT functions[ NUM_FUNCTIONS ] = { 68 1.1 ross { 0, 0, 0, 0 }, 69 1.1 ross { "int32_to_float32", 1, FALSE, TRUE }, 70 1.1 ross { "int32_to_float64", 1, FALSE, FALSE }, 71 1.1 ross { "int32_to_floatx80", 1, FALSE, FALSE }, 72 1.1 ross { "int32_to_float128", 1, FALSE, FALSE }, 73 1.1 ross { "int64_to_float32", 1, FALSE, TRUE }, 74 1.1 ross { "int64_to_float64", 1, FALSE, TRUE }, 75 1.1 ross { "int64_to_floatx80", 1, FALSE, FALSE }, 76 1.1 ross { "int64_to_float128", 1, FALSE, FALSE }, 77 1.1 ross { "float32_to_int32", 1, FALSE, TRUE }, 78 1.1 ross { "float32_to_int32_round_to_zero", 1, FALSE, FALSE }, 79 1.1 ross { "float32_to_int64", 1, FALSE, TRUE }, 80 1.1 ross { "float32_to_int64_round_to_zero", 1, FALSE, FALSE }, 81 1.1 ross { "float32_to_float64", 1, FALSE, FALSE }, 82 1.1 ross { "float32_to_floatx80", 1, FALSE, FALSE }, 83 1.1 ross { "float32_to_float128", 1, FALSE, FALSE }, 84 1.1 ross { "float32_round_to_int", 1, FALSE, TRUE }, 85 1.1 ross { "float32_add", 2, FALSE, TRUE }, 86 1.1 ross { "float32_sub", 2, FALSE, TRUE }, 87 1.1 ross { "float32_mul", 2, FALSE, TRUE }, 88 1.1 ross { "float32_div", 2, FALSE, TRUE }, 89 1.1 ross { "float32_rem", 2, FALSE, FALSE }, 90 1.1 ross { "float32_sqrt", 1, FALSE, TRUE }, 91 1.1 ross { "float32_eq", 2, FALSE, FALSE }, 92 1.1 ross { "float32_le", 2, FALSE, FALSE }, 93 1.1 ross { "float32_lt", 2, FALSE, FALSE }, 94 1.1 ross { "float32_eq_signaling", 2, FALSE, FALSE }, 95 1.1 ross { "float32_le_quiet", 2, FALSE, FALSE }, 96 1.1 ross { "float32_lt_quiet", 2, FALSE, FALSE }, 97 1.1 ross { "float64_to_int32", 1, FALSE, TRUE }, 98 1.1 ross { "float64_to_int32_round_to_zero", 1, FALSE, FALSE }, 99 1.1 ross { "float64_to_int64", 1, FALSE, TRUE }, 100 1.1 ross { "float64_to_int64_round_to_zero", 1, FALSE, FALSE }, 101 1.1 ross { "float64_to_float32", 1, FALSE, TRUE }, 102 1.1 ross { "float64_to_floatx80", 1, FALSE, FALSE }, 103 1.1 ross { "float64_to_float128", 1, FALSE, FALSE }, 104 1.1 ross { "float64_round_to_int", 1, FALSE, TRUE }, 105 1.1 ross { "float64_add", 2, FALSE, TRUE }, 106 1.1 ross { "float64_sub", 2, FALSE, TRUE }, 107 1.1 ross { "float64_mul", 2, FALSE, TRUE }, 108 1.1 ross { "float64_div", 2, FALSE, TRUE }, 109 1.1 ross { "float64_rem", 2, FALSE, FALSE }, 110 1.1 ross { "float64_sqrt", 1, FALSE, TRUE }, 111 1.1 ross { "float64_eq", 2, FALSE, FALSE }, 112 1.1 ross { "float64_le", 2, FALSE, FALSE }, 113 1.1 ross { "float64_lt", 2, FALSE, FALSE }, 114 1.1 ross { "float64_eq_signaling", 2, FALSE, FALSE }, 115 1.1 ross { "float64_le_quiet", 2, FALSE, FALSE }, 116 1.1 ross { "float64_lt_quiet", 2, FALSE, FALSE }, 117 1.1 ross { "floatx80_to_int32", 1, FALSE, TRUE }, 118 1.1 ross { "floatx80_to_int32_round_to_zero", 1, FALSE, FALSE }, 119 1.1 ross { "floatx80_to_int64", 1, FALSE, TRUE }, 120 1.1 ross { "floatx80_to_int64_round_to_zero", 1, FALSE, FALSE }, 121 1.1 ross { "floatx80_to_float32", 1, FALSE, TRUE }, 122 1.1 ross { "floatx80_to_float64", 1, FALSE, TRUE }, 123 1.1 ross { "floatx80_to_float128", 1, FALSE, FALSE }, 124 1.1 ross { "floatx80_round_to_int", 1, FALSE, TRUE }, 125 1.1 ross { "floatx80_add", 2, TRUE, TRUE }, 126 1.1 ross { "floatx80_sub", 2, TRUE, TRUE }, 127 1.1 ross { "floatx80_mul", 2, TRUE, TRUE }, 128 1.1 ross { "floatx80_div", 2, TRUE, TRUE }, 129 1.1 ross { "floatx80_rem", 2, FALSE, FALSE }, 130 1.1 ross { "floatx80_sqrt", 1, TRUE, TRUE }, 131 1.1 ross { "floatx80_eq", 2, FALSE, FALSE }, 132 1.1 ross { "floatx80_le", 2, FALSE, FALSE }, 133 1.1 ross { "floatx80_lt", 2, FALSE, FALSE }, 134 1.1 ross { "floatx80_eq_signaling", 2, FALSE, FALSE }, 135 1.1 ross { "floatx80_le_quiet", 2, FALSE, FALSE }, 136 1.1 ross { "floatx80_lt_quiet", 2, FALSE, FALSE }, 137 1.1 ross { "float128_to_int32", 1, FALSE, TRUE }, 138 1.1 ross { "float128_to_int32_round_to_zero", 1, FALSE, FALSE }, 139 1.1 ross { "float128_to_int64", 1, FALSE, TRUE }, 140 1.1 ross { "float128_to_int64_round_to_zero", 1, FALSE, FALSE }, 141 1.1 ross { "float128_to_float32", 1, FALSE, TRUE }, 142 1.1 ross { "float128_to_float64", 1, FALSE, TRUE }, 143 1.1 ross { "float128_to_floatx80", 1, FALSE, TRUE }, 144 1.1 ross { "float128_round_to_int", 1, FALSE, TRUE }, 145 1.1 ross { "float128_add", 2, FALSE, TRUE }, 146 1.1 ross { "float128_sub", 2, FALSE, TRUE }, 147 1.1 ross { "float128_mul", 2, FALSE, TRUE }, 148 1.1 ross { "float128_div", 2, FALSE, TRUE }, 149 1.1 ross { "float128_rem", 2, FALSE, FALSE }, 150 1.1 ross { "float128_sqrt", 1, FALSE, TRUE }, 151 1.1 ross { "float128_eq", 2, FALSE, FALSE }, 152 1.1 ross { "float128_le", 2, FALSE, FALSE }, 153 1.1 ross { "float128_lt", 2, FALSE, FALSE }, 154 1.1 ross { "float128_eq_signaling", 2, FALSE, FALSE }, 155 1.1 ross { "float128_le_quiet", 2, FALSE, FALSE }, 156 1.1 ross { "float128_lt_quiet", 2, FALSE, FALSE }, 157 1.1 ross }; 158 1.1 ross 159 1.1 ross const flag functionExists[ NUM_FUNCTIONS ] = { 160 1.1 ross 0, 161 1.1 ross #ifdef SYST_INT32_TO_FLOAT32 162 1.1 ross 1, 163 1.1 ross #else 164 1.1 ross 0, 165 1.1 ross #endif 166 1.1 ross #ifdef SYST_INT32_TO_FLOAT64 167 1.1 ross 1, 168 1.1 ross #else 169 1.1 ross 0, 170 1.1 ross #endif 171 1.1 ross #ifdef SYST_INT32_TO_FLOATX80 172 1.1 ross 1, 173 1.1 ross #else 174 1.1 ross 0, 175 1.1 ross #endif 176 1.1 ross #ifdef SYST_INT32_TO_FLOAT128 177 1.1 ross 1, 178 1.1 ross #else 179 1.1 ross 0, 180 1.1 ross #endif 181 1.1 ross #ifdef SYST_INT64_TO_FLOAT32 182 1.1 ross 1, 183 1.1 ross #else 184 1.1 ross 0, 185 1.1 ross #endif 186 1.1 ross #ifdef SYST_INT64_TO_FLOAT64 187 1.1 ross 1, 188 1.1 ross #else 189 1.1 ross 0, 190 1.1 ross #endif 191 1.1 ross #ifdef SYST_INT64_TO_FLOATX80 192 1.1 ross 1, 193 1.1 ross #else 194 1.1 ross 0, 195 1.1 ross #endif 196 1.1 ross #ifdef SYST_INT64_TO_FLOAT128 197 1.1 ross 1, 198 1.1 ross #else 199 1.1 ross 0, 200 1.1 ross #endif 201 1.1 ross #ifdef SYST_FLOAT32_TO_INT32 202 1.1 ross 1, 203 1.1 ross #else 204 1.1 ross 0, 205 1.1 ross #endif 206 1.1 ross #ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO 207 1.1 ross 1, 208 1.1 ross #else 209 1.1 ross 0, 210 1.1 ross #endif 211 1.1 ross #ifdef SYST_FLOAT32_TO_INT64 212 1.1 ross 1, 213 1.1 ross #else 214 1.1 ross 0, 215 1.1 ross #endif 216 1.1 ross #ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO 217 1.1 ross 1, 218 1.1 ross #else 219 1.1 ross 0, 220 1.1 ross #endif 221 1.1 ross #ifdef SYST_FLOAT32_TO_FLOAT64 222 1.1 ross 1, 223 1.1 ross #else 224 1.1 ross 0, 225 1.1 ross #endif 226 1.1 ross #ifdef SYST_FLOAT32_TO_FLOATX80 227 1.1 ross 1, 228 1.1 ross #else 229 1.1 ross 0, 230 1.1 ross #endif 231 1.1 ross #ifdef SYST_FLOAT32_TO_FLOAT128 232 1.1 ross 1, 233 1.1 ross #else 234 1.1 ross 0, 235 1.1 ross #endif 236 1.1 ross #ifdef SYST_FLOAT32_ROUND_TO_INT 237 1.1 ross 1, 238 1.1 ross #else 239 1.1 ross 0, 240 1.1 ross #endif 241 1.1 ross #ifdef SYST_FLOAT32_ADD 242 1.1 ross 1, 243 1.1 ross #else 244 1.1 ross 0, 245 1.1 ross #endif 246 1.1 ross #ifdef SYST_FLOAT32_SUB 247 1.1 ross 1, 248 1.1 ross #else 249 1.1 ross 0, 250 1.1 ross #endif 251 1.1 ross #ifdef SYST_FLOAT32_MUL 252 1.1 ross 1, 253 1.1 ross #else 254 1.1 ross 0, 255 1.1 ross #endif 256 1.1 ross #ifdef SYST_FLOAT32_DIV 257 1.1 ross 1, 258 1.1 ross #else 259 1.1 ross 0, 260 1.1 ross #endif 261 1.1 ross #ifdef SYST_FLOAT32_REM 262 1.1 ross 1, 263 1.1 ross #else 264 1.1 ross 0, 265 1.1 ross #endif 266 1.1 ross #ifdef SYST_FLOAT32_SQRT 267 1.1 ross 1, 268 1.1 ross #else 269 1.1 ross 0, 270 1.1 ross #endif 271 1.1 ross #ifdef SYST_FLOAT32_EQ 272 1.1 ross 1, 273 1.1 ross #else 274 1.1 ross 0, 275 1.1 ross #endif 276 1.1 ross #ifdef SYST_FLOAT32_LE 277 1.1 ross 1, 278 1.1 ross #else 279 1.1 ross 0, 280 1.1 ross #endif 281 1.1 ross #ifdef SYST_FLOAT32_LT 282 1.1 ross 1, 283 1.1 ross #else 284 1.1 ross 0, 285 1.1 ross #endif 286 1.1 ross #ifdef SYST_FLOAT32_EQ_SIGNALING 287 1.1 ross 1, 288 1.1 ross #else 289 1.1 ross 0, 290 1.1 ross #endif 291 1.1 ross #ifdef SYST_FLOAT32_LE_QUIET 292 1.1 ross 1, 293 1.1 ross #else 294 1.1 ross 0, 295 1.1 ross #endif 296 1.1 ross #ifdef SYST_FLOAT32_LT_QUIET 297 1.1 ross 1, 298 1.1 ross #else 299 1.1 ross 0, 300 1.1 ross #endif 301 1.1 ross #ifdef SYST_FLOAT64_TO_INT32 302 1.1 ross 1, 303 1.1 ross #else 304 1.1 ross 0, 305 1.1 ross #endif 306 1.1 ross #ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO 307 1.1 ross 1, 308 1.1 ross #else 309 1.1 ross 0, 310 1.1 ross #endif 311 1.1 ross #ifdef SYST_FLOAT64_TO_INT64 312 1.1 ross 1, 313 1.1 ross #else 314 1.1 ross 0, 315 1.1 ross #endif 316 1.1 ross #ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO 317 1.1 ross 1, 318 1.1 ross #else 319 1.1 ross 0, 320 1.1 ross #endif 321 1.1 ross #ifdef SYST_FLOAT64_TO_FLOAT32 322 1.1 ross 1, 323 1.1 ross #else 324 1.1 ross 0, 325 1.1 ross #endif 326 1.1 ross #ifdef SYST_FLOAT64_TO_FLOATX80 327 1.1 ross 1, 328 1.1 ross #else 329 1.1 ross 0, 330 1.1 ross #endif 331 1.1 ross #ifdef SYST_FLOAT64_TO_FLOAT128 332 1.1 ross 1, 333 1.1 ross #else 334 1.1 ross 0, 335 1.1 ross #endif 336 1.1 ross #ifdef SYST_FLOAT64_ROUND_TO_INT 337 1.1 ross 1, 338 1.1 ross #else 339 1.1 ross 0, 340 1.1 ross #endif 341 1.1 ross #ifdef SYST_FLOAT64_ADD 342 1.1 ross 1, 343 1.1 ross #else 344 1.1 ross 0, 345 1.1 ross #endif 346 1.1 ross #ifdef SYST_FLOAT64_SUB 347 1.1 ross 1, 348 1.1 ross #else 349 1.1 ross 0, 350 1.1 ross #endif 351 1.1 ross #ifdef SYST_FLOAT64_MUL 352 1.1 ross 1, 353 1.1 ross #else 354 1.1 ross 0, 355 1.1 ross #endif 356 1.1 ross #ifdef SYST_FLOAT64_DIV 357 1.1 ross 1, 358 1.1 ross #else 359 1.1 ross 0, 360 1.1 ross #endif 361 1.1 ross #ifdef SYST_FLOAT64_REM 362 1.1 ross 1, 363 1.1 ross #else 364 1.1 ross 0, 365 1.1 ross #endif 366 1.1 ross #ifdef SYST_FLOAT64_SQRT 367 1.1 ross 1, 368 1.1 ross #else 369 1.1 ross 0, 370 1.1 ross #endif 371 1.1 ross #ifdef SYST_FLOAT64_EQ 372 1.1 ross 1, 373 1.1 ross #else 374 1.1 ross 0, 375 1.1 ross #endif 376 1.1 ross #ifdef SYST_FLOAT64_LE 377 1.1 ross 1, 378 1.1 ross #else 379 1.1 ross 0, 380 1.1 ross #endif 381 1.1 ross #ifdef SYST_FLOAT64_LT 382 1.1 ross 1, 383 1.1 ross #else 384 1.1 ross 0, 385 1.1 ross #endif 386 1.1 ross #ifdef SYST_FLOAT64_EQ_SIGNALING 387 1.1 ross 1, 388 1.1 ross #else 389 1.1 ross 0, 390 1.1 ross #endif 391 1.1 ross #ifdef SYST_FLOAT64_LE_QUIET 392 1.1 ross 1, 393 1.1 ross #else 394 1.1 ross 0, 395 1.1 ross #endif 396 1.1 ross #ifdef SYST_FLOAT64_LT_QUIET 397 1.1 ross 1, 398 1.1 ross #else 399 1.1 ross 0, 400 1.1 ross #endif 401 1.1 ross #ifdef SYST_FLOATX80_TO_INT32 402 1.1 ross 1, 403 1.1 ross #else 404 1.1 ross 0, 405 1.1 ross #endif 406 1.1 ross #ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO 407 1.1 ross 1, 408 1.1 ross #else 409 1.1 ross 0, 410 1.1 ross #endif 411 1.1 ross #ifdef SYST_FLOATX80_TO_INT64 412 1.1 ross 1, 413 1.1 ross #else 414 1.1 ross 0, 415 1.1 ross #endif 416 1.1 ross #ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO 417 1.1 ross 1, 418 1.1 ross #else 419 1.1 ross 0, 420 1.1 ross #endif 421 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT32 422 1.1 ross 1, 423 1.1 ross #else 424 1.1 ross 0, 425 1.1 ross #endif 426 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT64 427 1.1 ross 1, 428 1.1 ross #else 429 1.1 ross 0, 430 1.1 ross #endif 431 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT128 432 1.1 ross 1, 433 1.1 ross #else 434 1.1 ross 0, 435 1.1 ross #endif 436 1.1 ross #ifdef SYST_FLOATX80_ROUND_TO_INT 437 1.1 ross 1, 438 1.1 ross #else 439 1.1 ross 0, 440 1.1 ross #endif 441 1.1 ross #ifdef SYST_FLOATX80_ADD 442 1.1 ross 1, 443 1.1 ross #else 444 1.1 ross 0, 445 1.1 ross #endif 446 1.1 ross #ifdef SYST_FLOATX80_SUB 447 1.1 ross 1, 448 1.1 ross #else 449 1.1 ross 0, 450 1.1 ross #endif 451 1.1 ross #ifdef SYST_FLOATX80_MUL 452 1.1 ross 1, 453 1.1 ross #else 454 1.1 ross 0, 455 1.1 ross #endif 456 1.1 ross #ifdef SYST_FLOATX80_DIV 457 1.1 ross 1, 458 1.1 ross #else 459 1.1 ross 0, 460 1.1 ross #endif 461 1.1 ross #ifdef SYST_FLOATX80_REM 462 1.1 ross 1, 463 1.1 ross #else 464 1.1 ross 0, 465 1.1 ross #endif 466 1.1 ross #ifdef SYST_FLOATX80_SQRT 467 1.1 ross 1, 468 1.1 ross #else 469 1.1 ross 0, 470 1.1 ross #endif 471 1.1 ross #ifdef SYST_FLOATX80_EQ 472 1.1 ross 1, 473 1.1 ross #else 474 1.1 ross 0, 475 1.1 ross #endif 476 1.1 ross #ifdef SYST_FLOATX80_LE 477 1.1 ross 1, 478 1.1 ross #else 479 1.1 ross 0, 480 1.1 ross #endif 481 1.1 ross #ifdef SYST_FLOATX80_LT 482 1.1 ross 1, 483 1.1 ross #else 484 1.1 ross 0, 485 1.1 ross #endif 486 1.1 ross #ifdef SYST_FLOATX80_EQ_SIGNALING 487 1.1 ross 1, 488 1.1 ross #else 489 1.1 ross 0, 490 1.1 ross #endif 491 1.1 ross #ifdef SYST_FLOATX80_LE_QUIET 492 1.1 ross 1, 493 1.1 ross #else 494 1.1 ross 0, 495 1.1 ross #endif 496 1.1 ross #ifdef SYST_FLOATX80_LT_QUIET 497 1.1 ross 1, 498 1.1 ross #else 499 1.1 ross 0, 500 1.1 ross #endif 501 1.1 ross #ifdef SYST_FLOAT128_TO_INT32 502 1.1 ross 1, 503 1.1 ross #else 504 1.1 ross 0, 505 1.1 ross #endif 506 1.1 ross #ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO 507 1.1 ross 1, 508 1.1 ross #else 509 1.1 ross 0, 510 1.1 ross #endif 511 1.1 ross #ifdef SYST_FLOAT128_TO_INT64 512 1.1 ross 1, 513 1.1 ross #else 514 1.1 ross 0, 515 1.1 ross #endif 516 1.1 ross #ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO 517 1.1 ross 1, 518 1.1 ross #else 519 1.1 ross 0, 520 1.1 ross #endif 521 1.1 ross #ifdef SYST_FLOAT128_TO_FLOAT32 522 1.1 ross 1, 523 1.1 ross #else 524 1.1 ross 0, 525 1.1 ross #endif 526 1.1 ross #ifdef SYST_FLOAT128_TO_FLOAT64 527 1.1 ross 1, 528 1.1 ross #else 529 1.1 ross 0, 530 1.1 ross #endif 531 1.1 ross #ifdef SYST_FLOAT128_TO_FLOATX80 532 1.1 ross 1, 533 1.1 ross #else 534 1.1 ross 0, 535 1.1 ross #endif 536 1.1 ross #ifdef SYST_FLOAT128_ROUND_TO_INT 537 1.1 ross 1, 538 1.1 ross #else 539 1.1 ross 0, 540 1.1 ross #endif 541 1.1 ross #ifdef SYST_FLOAT128_ADD 542 1.1 ross 1, 543 1.1 ross #else 544 1.1 ross 0, 545 1.1 ross #endif 546 1.1 ross #ifdef SYST_FLOAT128_SUB 547 1.1 ross 1, 548 1.1 ross #else 549 1.1 ross 0, 550 1.1 ross #endif 551 1.1 ross #ifdef SYST_FLOAT128_MUL 552 1.1 ross 1, 553 1.1 ross #else 554 1.1 ross 0, 555 1.1 ross #endif 556 1.1 ross #ifdef SYST_FLOAT128_DIV 557 1.1 ross 1, 558 1.1 ross #else 559 1.1 ross 0, 560 1.1 ross #endif 561 1.1 ross #ifdef SYST_FLOAT128_REM 562 1.1 ross 1, 563 1.1 ross #else 564 1.1 ross 0, 565 1.1 ross #endif 566 1.1 ross #ifdef SYST_FLOAT128_SQRT 567 1.1 ross 1, 568 1.1 ross #else 569 1.1 ross 0, 570 1.1 ross #endif 571 1.1 ross #ifdef SYST_FLOAT128_EQ 572 1.1 ross 1, 573 1.1 ross #else 574 1.1 ross 0, 575 1.1 ross #endif 576 1.1 ross #ifdef SYST_FLOAT128_LE 577 1.1 ross 1, 578 1.1 ross #else 579 1.1 ross 0, 580 1.1 ross #endif 581 1.1 ross #ifdef SYST_FLOAT128_LT 582 1.1 ross 1, 583 1.1 ross #else 584 1.1 ross 0, 585 1.1 ross #endif 586 1.1 ross #ifdef SYST_FLOAT128_EQ_SIGNALING 587 1.1 ross 1, 588 1.1 ross #else 589 1.1 ross 0, 590 1.1 ross #endif 591 1.1 ross #ifdef SYST_FLOAT128_LE_QUIET 592 1.1 ross 1, 593 1.1 ross #else 594 1.1 ross 0, 595 1.1 ross #endif 596 1.1 ross #ifdef SYST_FLOAT128_LT_QUIET 597 1.1 ross 1, 598 1.1 ross #else 599 1.1 ross 0, 600 1.1 ross #endif 601 1.1 ross }; 602 1.1 ross 603 1.1 ross static void 604 1.1 ross testFunctionVariety( 605 1.1 ross uint8 functionCode, int8 roundingPrecision, int8 roundingMode ) 606 1.1 ross { 607 1.1 ross uint8 roundingCode; 608 1.1 ross 609 1.1 ross functionName = functions[ functionCode ].name; 610 1.1 ross #ifdef FLOATX80 611 1.1 ross if ( roundingPrecision == 32 ) { 612 1.1 ross roundingPrecisionName = "32"; 613 1.1 ross } 614 1.1 ross else if ( roundingPrecision == 64 ) { 615 1.1 ross roundingPrecisionName = "64"; 616 1.1 ross } 617 1.1 ross else if ( roundingPrecision == 80 ) { 618 1.1 ross roundingPrecisionName = "80"; 619 1.1 ross } 620 1.1 ross else { 621 1.1 ross roundingPrecision = 80; 622 1.1 ross roundingPrecisionName = 0; 623 1.1 ross } 624 1.1 ross floatx80_rounding_precision = roundingPrecision; 625 1.1 ross syst_float_set_rounding_precision( roundingPrecision ); 626 1.1 ross #endif 627 1.1 ross switch ( roundingMode ) { 628 1.1 ross case 0: 629 1.1 ross roundingModeName = 0; 630 1.1 ross roundingCode = float_round_nearest_even; 631 1.1 ross break; 632 1.1 ross case ROUND_NEAREST_EVEN: 633 1.1 ross roundingModeName = "nearest_even"; 634 1.1 ross roundingCode = float_round_nearest_even; 635 1.1 ross break; 636 1.1 ross case ROUND_TO_ZERO: 637 1.1 ross roundingModeName = "to_zero"; 638 1.1 ross roundingCode = float_round_to_zero; 639 1.1 ross break; 640 1.1 ross case ROUND_DOWN: 641 1.1 ross roundingModeName = "down"; 642 1.1 ross roundingCode = float_round_down; 643 1.1 ross break; 644 1.1 ross case ROUND_UP: 645 1.1 ross roundingModeName = "up"; 646 1.1 ross roundingCode = float_round_up; 647 1.1 ross break; 648 1.5 drochner default: 649 1.5 drochner return; 650 1.1 ross } 651 1.1 ross float_rounding_mode = roundingCode; 652 1.1 ross syst_float_set_rounding_mode( roundingCode ); 653 1.1 ross fputs( "Testing ", stderr ); 654 1.1 ross writeFunctionName( stderr ); 655 1.1 ross fputs( ".\n", stderr ); 656 1.1 ross switch ( functionCode ) { 657 1.1 ross #ifdef SYST_INT32_TO_FLOAT32 658 1.1 ross case INT32_TO_FLOAT32: 659 1.1 ross test_a_int32_z_float32( int32_to_float32, syst_int32_to_float32 ); 660 1.1 ross break; 661 1.1 ross #endif 662 1.1 ross #ifdef SYST_INT32_TO_FLOAT64 663 1.1 ross case INT32_TO_FLOAT64: 664 1.1 ross test_a_int32_z_float64( int32_to_float64, syst_int32_to_float64 ); 665 1.1 ross break; 666 1.1 ross #endif 667 1.1 ross #ifdef SYST_INT32_TO_FLOATX80 668 1.1 ross case INT32_TO_FLOATX80: 669 1.1 ross test_a_int32_z_floatx80( int32_to_floatx80, syst_int32_to_floatx80 ); 670 1.1 ross break; 671 1.1 ross #endif 672 1.1 ross #ifdef SYST_INT32_TO_FLOAT128 673 1.1 ross case INT32_TO_FLOAT128: 674 1.1 ross test_a_int32_z_float128( int32_to_float128, syst_int32_to_float128 ); 675 1.1 ross break; 676 1.1 ross #endif 677 1.1 ross #ifdef SYST_INT64_TO_FLOAT32 678 1.1 ross case INT64_TO_FLOAT32: 679 1.1 ross test_a_int64_z_float32( int64_to_float32, syst_int64_to_float32 ); 680 1.1 ross break; 681 1.1 ross #endif 682 1.1 ross #ifdef SYST_INT64_TO_FLOAT64 683 1.1 ross case INT64_TO_FLOAT64: 684 1.1 ross test_a_int64_z_float64( int64_to_float64, syst_int64_to_float64 ); 685 1.1 ross break; 686 1.1 ross #endif 687 1.1 ross #ifdef SYST_INT64_TO_FLOATX80 688 1.1 ross case INT64_TO_FLOATX80: 689 1.1 ross test_a_int64_z_floatx80( int64_to_floatx80, syst_int64_to_floatx80 ); 690 1.1 ross break; 691 1.1 ross #endif 692 1.1 ross #ifdef SYST_INT64_TO_FLOAT128 693 1.1 ross case INT64_TO_FLOAT128: 694 1.1 ross test_a_int64_z_float128( int64_to_float128, syst_int64_to_float128 ); 695 1.1 ross break; 696 1.1 ross #endif 697 1.1 ross #ifdef SYST_FLOAT32_TO_INT32 698 1.1 ross case FLOAT32_TO_INT32: 699 1.1 ross test_a_float32_z_int32( float32_to_int32, syst_float32_to_int32 ); 700 1.1 ross break; 701 1.1 ross #endif 702 1.1 ross #ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO 703 1.1 ross case FLOAT32_TO_INT32_ROUND_TO_ZERO: 704 1.1 ross test_a_float32_z_int32( 705 1.1 ross float32_to_int32_round_to_zero, 706 1.1 ross syst_float32_to_int32_round_to_zero 707 1.1 ross ); 708 1.1 ross break; 709 1.1 ross #endif 710 1.1 ross #ifdef SYST_FLOAT32_TO_INT64 711 1.1 ross case FLOAT32_TO_INT64: 712 1.1 ross test_a_float32_z_int64( float32_to_int64, syst_float32_to_int64 ); 713 1.1 ross break; 714 1.1 ross #endif 715 1.1 ross #ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO 716 1.1 ross case FLOAT32_TO_INT64_ROUND_TO_ZERO: 717 1.1 ross test_a_float32_z_int64( 718 1.1 ross float32_to_int64_round_to_zero, 719 1.1 ross syst_float32_to_int64_round_to_zero 720 1.1 ross ); 721 1.1 ross break; 722 1.1 ross #endif 723 1.1 ross #ifdef SYST_FLOAT32_TO_FLOAT64 724 1.1 ross case FLOAT32_TO_FLOAT64: 725 1.1 ross test_a_float32_z_float64( 726 1.1 ross float32_to_float64, syst_float32_to_float64 ); 727 1.1 ross break; 728 1.1 ross #endif 729 1.1 ross #ifdef SYST_FLOAT32_TO_FLOATX80 730 1.1 ross case FLOAT32_TO_FLOATX80: 731 1.1 ross test_a_float32_z_floatx80( 732 1.1 ross float32_to_floatx80, syst_float32_to_floatx80 ); 733 1.1 ross break; 734 1.1 ross #endif 735 1.1 ross #ifdef SYST_FLOAT32_TO_FLOAT128 736 1.1 ross case FLOAT32_TO_FLOAT128: 737 1.1 ross test_a_float32_z_float128( 738 1.1 ross float32_to_float128, syst_float32_to_float128 ); 739 1.1 ross break; 740 1.1 ross #endif 741 1.1 ross #ifdef SYST_FLOAT32_ROUND_TO_INT 742 1.1 ross case FLOAT32_ROUND_TO_INT: 743 1.1 ross test_az_float32( float32_round_to_int, syst_float32_round_to_int ); 744 1.1 ross break; 745 1.1 ross #endif 746 1.1 ross #ifdef SYST_FLOAT32_ADD 747 1.1 ross case FLOAT32_ADD: 748 1.1 ross test_abz_float32( float32_add, syst_float32_add ); 749 1.1 ross break; 750 1.1 ross #endif 751 1.1 ross #ifdef SYST_FLOAT32_SUB 752 1.1 ross case FLOAT32_SUB: 753 1.1 ross test_abz_float32( float32_sub, syst_float32_sub ); 754 1.1 ross break; 755 1.1 ross #endif 756 1.1 ross #ifdef SYST_FLOAT32_MUL 757 1.1 ross case FLOAT32_MUL: 758 1.1 ross test_abz_float32( float32_mul, syst_float32_mul ); 759 1.1 ross break; 760 1.1 ross #endif 761 1.1 ross #ifdef SYST_FLOAT32_DIV 762 1.1 ross case FLOAT32_DIV: 763 1.1 ross test_abz_float32( float32_div, syst_float32_div ); 764 1.1 ross break; 765 1.1 ross #endif 766 1.1 ross #ifdef SYST_FLOAT32_REM 767 1.1 ross case FLOAT32_REM: 768 1.1 ross test_abz_float32( float32_rem, syst_float32_rem ); 769 1.1 ross break; 770 1.1 ross #endif 771 1.1 ross #ifdef SYST_FLOAT32_SQRT 772 1.1 ross case FLOAT32_SQRT: 773 1.1 ross test_az_float32( float32_sqrt, syst_float32_sqrt ); 774 1.1 ross break; 775 1.1 ross #endif 776 1.1 ross #ifdef SYST_FLOAT32_EQ 777 1.1 ross case FLOAT32_EQ: 778 1.1 ross test_ab_float32_z_flag( float32_eq, syst_float32_eq ); 779 1.1 ross break; 780 1.1 ross #endif 781 1.1 ross #ifdef SYST_FLOAT32_LE 782 1.1 ross case FLOAT32_LE: 783 1.1 ross test_ab_float32_z_flag( float32_le, syst_float32_le ); 784 1.1 ross break; 785 1.1 ross #endif 786 1.1 ross #ifdef SYST_FLOAT32_LT 787 1.1 ross case FLOAT32_LT: 788 1.1 ross test_ab_float32_z_flag( float32_lt, syst_float32_lt ); 789 1.1 ross break; 790 1.1 ross #endif 791 1.1 ross #ifdef SYST_FLOAT32_EQ_SIGNALING 792 1.1 ross case FLOAT32_EQ_SIGNALING: 793 1.1 ross test_ab_float32_z_flag( 794 1.1 ross float32_eq_signaling, syst_float32_eq_signaling ); 795 1.1 ross break; 796 1.1 ross #endif 797 1.1 ross #ifdef SYST_FLOAT32_LE_QUIET 798 1.1 ross case FLOAT32_LE_QUIET: 799 1.1 ross test_ab_float32_z_flag( float32_le_quiet, syst_float32_le_quiet ); 800 1.1 ross break; 801 1.1 ross #endif 802 1.1 ross #ifdef SYST_FLOAT32_LT_QUIET 803 1.1 ross case FLOAT32_LT_QUIET: 804 1.1 ross test_ab_float32_z_flag( float32_lt_quiet, syst_float32_lt_quiet ); 805 1.1 ross break; 806 1.1 ross #endif 807 1.1 ross #ifdef SYST_FLOAT64_TO_INT32 808 1.1 ross case FLOAT64_TO_INT32: 809 1.1 ross test_a_float64_z_int32( float64_to_int32, syst_float64_to_int32 ); 810 1.1 ross break; 811 1.1 ross #endif 812 1.1 ross #ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO 813 1.1 ross case FLOAT64_TO_INT32_ROUND_TO_ZERO: 814 1.1 ross test_a_float64_z_int32( 815 1.1 ross float64_to_int32_round_to_zero, 816 1.1 ross syst_float64_to_int32_round_to_zero 817 1.1 ross ); 818 1.1 ross break; 819 1.1 ross #endif 820 1.1 ross #ifdef SYST_FLOAT64_TO_INT64 821 1.1 ross case FLOAT64_TO_INT64: 822 1.1 ross test_a_float64_z_int64( float64_to_int64, syst_float64_to_int64 ); 823 1.1 ross break; 824 1.1 ross #endif 825 1.1 ross #ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO 826 1.1 ross case FLOAT64_TO_INT64_ROUND_TO_ZERO: 827 1.1 ross test_a_float64_z_int64( 828 1.1 ross float64_to_int64_round_to_zero, 829 1.1 ross syst_float64_to_int64_round_to_zero 830 1.1 ross ); 831 1.1 ross break; 832 1.1 ross #endif 833 1.1 ross #ifdef SYST_FLOAT64_TO_FLOAT32 834 1.1 ross case FLOAT64_TO_FLOAT32: 835 1.1 ross test_a_float64_z_float32( 836 1.1 ross float64_to_float32, syst_float64_to_float32 ); 837 1.1 ross break; 838 1.1 ross #endif 839 1.1 ross #ifdef SYST_FLOAT64_TO_FLOATX80 840 1.1 ross case FLOAT64_TO_FLOATX80: 841 1.1 ross test_a_float64_z_floatx80( 842 1.1 ross float64_to_floatx80, syst_float64_to_floatx80 ); 843 1.1 ross break; 844 1.1 ross #endif 845 1.1 ross #ifdef SYST_FLOAT64_TO_FLOAT128 846 1.1 ross case FLOAT64_TO_FLOAT128: 847 1.1 ross test_a_float64_z_float128( 848 1.1 ross float64_to_float128, syst_float64_to_float128 ); 849 1.1 ross break; 850 1.1 ross #endif 851 1.1 ross #ifdef SYST_FLOAT64_ROUND_TO_INT 852 1.1 ross case FLOAT64_ROUND_TO_INT: 853 1.1 ross test_az_float64( float64_round_to_int, syst_float64_round_to_int ); 854 1.1 ross break; 855 1.1 ross #endif 856 1.1 ross #ifdef SYST_FLOAT64_ADD 857 1.1 ross case FLOAT64_ADD: 858 1.1 ross test_abz_float64( float64_add, syst_float64_add ); 859 1.1 ross break; 860 1.1 ross #endif 861 1.1 ross #ifdef SYST_FLOAT64_SUB 862 1.1 ross case FLOAT64_SUB: 863 1.1 ross test_abz_float64( float64_sub, syst_float64_sub ); 864 1.1 ross break; 865 1.1 ross #endif 866 1.1 ross #ifdef SYST_FLOAT64_MUL 867 1.1 ross case FLOAT64_MUL: 868 1.1 ross test_abz_float64( float64_mul, syst_float64_mul ); 869 1.1 ross break; 870 1.1 ross #endif 871 1.1 ross #ifdef SYST_FLOAT64_DIV 872 1.1 ross case FLOAT64_DIV: 873 1.1 ross test_abz_float64( float64_div, syst_float64_div ); 874 1.1 ross break; 875 1.1 ross #endif 876 1.1 ross #ifdef SYST_FLOAT64_REM 877 1.1 ross case FLOAT64_REM: 878 1.1 ross test_abz_float64( float64_rem, syst_float64_rem ); 879 1.1 ross break; 880 1.1 ross #endif 881 1.1 ross #ifdef SYST_FLOAT64_SQRT 882 1.1 ross case FLOAT64_SQRT: 883 1.1 ross test_az_float64( float64_sqrt, syst_float64_sqrt ); 884 1.1 ross break; 885 1.1 ross #endif 886 1.1 ross #ifdef SYST_FLOAT64_EQ 887 1.1 ross case FLOAT64_EQ: 888 1.1 ross test_ab_float64_z_flag( float64_eq, syst_float64_eq ); 889 1.1 ross break; 890 1.1 ross #endif 891 1.1 ross #ifdef SYST_FLOAT64_LE 892 1.1 ross case FLOAT64_LE: 893 1.1 ross test_ab_float64_z_flag( float64_le, syst_float64_le ); 894 1.1 ross break; 895 1.1 ross #endif 896 1.1 ross #ifdef SYST_FLOAT64_LT 897 1.1 ross case FLOAT64_LT: 898 1.1 ross test_ab_float64_z_flag( float64_lt, syst_float64_lt ); 899 1.1 ross break; 900 1.1 ross #endif 901 1.1 ross #ifdef SYST_FLOAT64_EQ_SIGNALING 902 1.1 ross case FLOAT64_EQ_SIGNALING: 903 1.1 ross test_ab_float64_z_flag( 904 1.1 ross float64_eq_signaling, syst_float64_eq_signaling ); 905 1.1 ross break; 906 1.1 ross #endif 907 1.1 ross #ifdef SYST_FLOAT64_LE_QUIET 908 1.1 ross case FLOAT64_LE_QUIET: 909 1.1 ross test_ab_float64_z_flag( float64_le_quiet, syst_float64_le_quiet ); 910 1.1 ross break; 911 1.1 ross #endif 912 1.1 ross #ifdef SYST_FLOAT64_LT_QUIET 913 1.1 ross case FLOAT64_LT_QUIET: 914 1.1 ross test_ab_float64_z_flag( float64_lt_quiet, syst_float64_lt_quiet ); 915 1.1 ross break; 916 1.1 ross #endif 917 1.1 ross #ifdef SYST_FLOATX80_TO_INT32 918 1.1 ross case FLOATX80_TO_INT32: 919 1.1 ross test_a_floatx80_z_int32( floatx80_to_int32, syst_floatx80_to_int32 ); 920 1.1 ross break; 921 1.1 ross #endif 922 1.1 ross #ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO 923 1.1 ross case FLOATX80_TO_INT32_ROUND_TO_ZERO: 924 1.1 ross test_a_floatx80_z_int32( 925 1.1 ross floatx80_to_int32_round_to_zero, 926 1.1 ross syst_floatx80_to_int32_round_to_zero 927 1.1 ross ); 928 1.1 ross break; 929 1.1 ross #endif 930 1.1 ross #ifdef SYST_FLOATX80_TO_INT64 931 1.1 ross case FLOATX80_TO_INT64: 932 1.1 ross test_a_floatx80_z_int64( floatx80_to_int64, syst_floatx80_to_int64 ); 933 1.1 ross break; 934 1.1 ross #endif 935 1.1 ross #ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO 936 1.1 ross case FLOATX80_TO_INT64_ROUND_TO_ZERO: 937 1.1 ross test_a_floatx80_z_int64( 938 1.1 ross floatx80_to_int64_round_to_zero, 939 1.1 ross syst_floatx80_to_int64_round_to_zero 940 1.1 ross ); 941 1.1 ross break; 942 1.1 ross #endif 943 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT32 944 1.1 ross case FLOATX80_TO_FLOAT32: 945 1.1 ross test_a_floatx80_z_float32( 946 1.1 ross floatx80_to_float32, syst_floatx80_to_float32 ); 947 1.1 ross break; 948 1.1 ross #endif 949 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT64 950 1.1 ross case FLOATX80_TO_FLOAT64: 951 1.1 ross test_a_floatx80_z_float64( 952 1.1 ross floatx80_to_float64, syst_floatx80_to_float64 ); 953 1.1 ross break; 954 1.1 ross #endif 955 1.1 ross #ifdef SYST_FLOATX80_TO_FLOAT128 956 1.1 ross case FLOATX80_TO_FLOAT128: 957 1.1 ross test_a_floatx80_z_float128( 958 1.1 ross floatx80_to_float128, syst_floatx80_to_float128 ); 959 1.1 ross break; 960 1.1 ross #endif 961 1.1 ross #ifdef SYST_FLOATX80_ROUND_TO_INT 962 1.1 ross case FLOATX80_ROUND_TO_INT: 963 1.1 ross test_az_floatx80( floatx80_round_to_int, syst_floatx80_round_to_int ); 964 1.1 ross break; 965 1.1 ross #endif 966 1.1 ross #ifdef SYST_FLOATX80_ADD 967 1.1 ross case FLOATX80_ADD: 968 1.1 ross test_abz_floatx80( floatx80_add, syst_floatx80_add ); 969 1.1 ross break; 970 1.1 ross #endif 971 1.1 ross #ifdef SYST_FLOATX80_SUB 972 1.1 ross case FLOATX80_SUB: 973 1.1 ross test_abz_floatx80( floatx80_sub, syst_floatx80_sub ); 974 1.1 ross break; 975 1.1 ross #endif 976 1.1 ross #ifdef SYST_FLOATX80_MUL 977 1.1 ross case FLOATX80_MUL: 978 1.1 ross test_abz_floatx80( floatx80_mul, syst_floatx80_mul ); 979 1.1 ross break; 980 1.1 ross #endif 981 1.1 ross #ifdef SYST_FLOATX80_DIV 982 1.1 ross case FLOATX80_DIV: 983 1.1 ross test_abz_floatx80( floatx80_div, syst_floatx80_div ); 984 1.1 ross break; 985 1.1 ross #endif 986 1.1 ross #ifdef SYST_FLOATX80_REM 987 1.1 ross case FLOATX80_REM: 988 1.1 ross test_abz_floatx80( floatx80_rem, syst_floatx80_rem ); 989 1.1 ross break; 990 1.1 ross #endif 991 1.1 ross #ifdef SYST_FLOATX80_SQRT 992 1.1 ross case FLOATX80_SQRT: 993 1.1 ross test_az_floatx80( floatx80_sqrt, syst_floatx80_sqrt ); 994 1.1 ross break; 995 1.1 ross #endif 996 1.1 ross #ifdef SYST_FLOATX80_EQ 997 1.1 ross case FLOATX80_EQ: 998 1.1 ross test_ab_floatx80_z_flag( floatx80_eq, syst_floatx80_eq ); 999 1.1 ross break; 1000 1.1 ross #endif 1001 1.1 ross #ifdef SYST_FLOATX80_LE 1002 1.1 ross case FLOATX80_LE: 1003 1.1 ross test_ab_floatx80_z_flag( floatx80_le, syst_floatx80_le ); 1004 1.1 ross break; 1005 1.1 ross #endif 1006 1.1 ross #ifdef SYST_FLOATX80_LT 1007 1.1 ross case FLOATX80_LT: 1008 1.1 ross test_ab_floatx80_z_flag( floatx80_lt, syst_floatx80_lt ); 1009 1.1 ross break; 1010 1.1 ross #endif 1011 1.1 ross #ifdef SYST_FLOATX80_EQ_SIGNALING 1012 1.1 ross case FLOATX80_EQ_SIGNALING: 1013 1.1 ross test_ab_floatx80_z_flag( 1014 1.1 ross floatx80_eq_signaling, syst_floatx80_eq_signaling ); 1015 1.1 ross break; 1016 1.1 ross #endif 1017 1.1 ross #ifdef SYST_FLOATX80_LE_QUIET 1018 1.1 ross case FLOATX80_LE_QUIET: 1019 1.1 ross test_ab_floatx80_z_flag( floatx80_le_quiet, syst_floatx80_le_quiet ); 1020 1.1 ross break; 1021 1.1 ross #endif 1022 1.1 ross #ifdef SYST_FLOATX80_LT_QUIET 1023 1.1 ross case FLOATX80_LT_QUIET: 1024 1.1 ross test_ab_floatx80_z_flag( floatx80_lt_quiet, syst_floatx80_lt_quiet ); 1025 1.1 ross break; 1026 1.1 ross #endif 1027 1.1 ross #ifdef SYST_FLOAT128_TO_INT32 1028 1.1 ross case FLOAT128_TO_INT32: 1029 1.1 ross test_a_float128_z_int32( float128_to_int32, syst_float128_to_int32 ); 1030 1.1 ross break; 1031 1.1 ross #endif 1032 1.1 ross #ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO 1033 1.1 ross case FLOAT128_TO_INT32_ROUND_TO_ZERO: 1034 1.1 ross test_a_float128_z_int32( 1035 1.1 ross float128_to_int32_round_to_zero, 1036 1.1 ross syst_float128_to_int32_round_to_zero 1037 1.1 ross ); 1038 1.1 ross break; 1039 1.1 ross #endif 1040 1.1 ross #ifdef SYST_FLOAT128_TO_INT64 1041 1.1 ross case FLOAT128_TO_INT64: 1042 1.1 ross test_a_float128_z_int64( float128_to_int64, syst_float128_to_int64 ); 1043 1.1 ross break; 1044 1.1 ross #endif 1045 1.1 ross #ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO 1046 1.1 ross case FLOAT128_TO_INT64_ROUND_TO_ZERO: 1047 1.1 ross test_a_float128_z_int64( 1048 1.1 ross float128_to_int64_round_to_zero, 1049 1.1 ross syst_float128_to_int64_round_to_zero 1050 1.1 ross ); 1051 1.1 ross break; 1052 1.1 ross #endif 1053 1.1 ross #ifdef SYST_FLOAT128_TO_FLOAT32 1054 1.1 ross case FLOAT128_TO_FLOAT32: 1055 1.1 ross test_a_float128_z_float32( 1056 1.1 ross float128_to_float32, syst_float128_to_float32 ); 1057 1.1 ross break; 1058 1.1 ross #endif 1059 1.1 ross #ifdef SYST_FLOAT128_TO_FLOAT64 1060 1.1 ross case FLOAT128_TO_FLOAT64: 1061 1.1 ross test_a_float128_z_float64( 1062 1.1 ross float128_to_float64, syst_float128_to_float64 ); 1063 1.1 ross break; 1064 1.1 ross #endif 1065 1.1 ross #ifdef SYST_FLOAT128_TO_FLOATX80 1066 1.1 ross case FLOAT128_TO_FLOATX80: 1067 1.1 ross test_a_float128_z_floatx80( 1068 1.1 ross float128_to_floatx80, syst_float128_to_floatx80 ); 1069 1.1 ross break; 1070 1.1 ross #endif 1071 1.1 ross #ifdef SYST_FLOAT128_ROUND_TO_INT 1072 1.1 ross case FLOAT128_ROUND_TO_INT: 1073 1.1 ross test_az_float128( float128_round_to_int, syst_float128_round_to_int ); 1074 1.1 ross break; 1075 1.1 ross #endif 1076 1.1 ross #ifdef SYST_FLOAT128_ADD 1077 1.1 ross case FLOAT128_ADD: 1078 1.1 ross test_abz_float128( float128_add, syst_float128_add ); 1079 1.1 ross break; 1080 1.1 ross #endif 1081 1.1 ross #ifdef SYST_FLOAT128_SUB 1082 1.1 ross case FLOAT128_SUB: 1083 1.1 ross test_abz_float128( float128_sub, syst_float128_sub ); 1084 1.1 ross break; 1085 1.1 ross #endif 1086 1.1 ross #ifdef SYST_FLOAT128_MUL 1087 1.1 ross case FLOAT128_MUL: 1088 1.1 ross test_abz_float128( float128_mul, syst_float128_mul ); 1089 1.1 ross break; 1090 1.1 ross #endif 1091 1.1 ross #ifdef SYST_FLOAT128_DIV 1092 1.1 ross case FLOAT128_DIV: 1093 1.1 ross test_abz_float128( float128_div, syst_float128_div ); 1094 1.1 ross break; 1095 1.1 ross #endif 1096 1.1 ross #ifdef SYST_FLOAT128_REM 1097 1.1 ross case FLOAT128_REM: 1098 1.1 ross test_abz_float128( float128_rem, syst_float128_rem ); 1099 1.1 ross break; 1100 1.1 ross #endif 1101 1.1 ross #ifdef SYST_FLOAT128_SQRT 1102 1.1 ross case FLOAT128_SQRT: 1103 1.1 ross test_az_float128( float128_sqrt, syst_float128_sqrt ); 1104 1.1 ross break; 1105 1.1 ross #endif 1106 1.1 ross #ifdef SYST_FLOAT128_EQ 1107 1.1 ross case FLOAT128_EQ: 1108 1.1 ross test_ab_float128_z_flag( float128_eq, syst_float128_eq ); 1109 1.1 ross break; 1110 1.1 ross #endif 1111 1.1 ross #ifdef SYST_FLOAT128_LE 1112 1.1 ross case FLOAT128_LE: 1113 1.1 ross test_ab_float128_z_flag( float128_le, syst_float128_le ); 1114 1.1 ross break; 1115 1.1 ross #endif 1116 1.1 ross #ifdef SYST_FLOAT128_LT 1117 1.1 ross case FLOAT128_LT: 1118 1.1 ross test_ab_float128_z_flag( float128_lt, syst_float128_lt ); 1119 1.1 ross break; 1120 1.1 ross #endif 1121 1.1 ross #ifdef SYST_FLOAT128_EQ_SIGNALING 1122 1.1 ross case FLOAT128_EQ_SIGNALING: 1123 1.1 ross test_ab_float128_z_flag( 1124 1.1 ross float128_eq_signaling, syst_float128_eq_signaling ); 1125 1.1 ross break; 1126 1.1 ross #endif 1127 1.1 ross #ifdef SYST_FLOAT128_LE_QUIET 1128 1.1 ross case FLOAT128_LE_QUIET: 1129 1.1 ross test_ab_float128_z_flag( float128_le_quiet, syst_float128_le_quiet ); 1130 1.1 ross break; 1131 1.1 ross #endif 1132 1.1 ross #ifdef SYST_FLOAT128_LT_QUIET 1133 1.1 ross case FLOAT128_LT_QUIET: 1134 1.1 ross test_ab_float128_z_flag( float128_lt_quiet, syst_float128_lt_quiet ); 1135 1.1 ross break; 1136 1.1 ross #endif 1137 1.1 ross } 1138 1.1 ross if ( ( errorStop && anyErrors ) || stop ) exitWithStatus(); 1139 1.1 ross 1140 1.1 ross } 1141 1.1 ross 1142 1.1 ross void 1143 1.1 ross testFunction( 1144 1.1 ross uint8 functionCode, int8 roundingPrecisionIn, int8 roundingModeIn ) 1145 1.1 ross { 1146 1.1 ross int8 roundingPrecision, roundingMode; 1147 1.1 ross 1148 1.1 ross roundingPrecision = 32; 1149 1.1 ross for (;;) { 1150 1.1 ross if ( ! functions[ functionCode ].roundingPrecision ) { 1151 1.1 ross roundingPrecision = 0; 1152 1.1 ross } 1153 1.1 ross else if ( roundingPrecisionIn ) { 1154 1.1 ross roundingPrecision = roundingPrecisionIn; 1155 1.1 ross } 1156 1.1 ross for ( roundingMode = 1; 1157 1.1 ross roundingMode < NUM_ROUNDINGMODES; 1158 1.1 ross ++roundingMode 1159 1.1 ross ) { 1160 1.1 ross if ( ! functions[ functionCode ].roundingMode ) { 1161 1.1 ross roundingMode = 0; 1162 1.1 ross } 1163 1.1 ross else if ( roundingModeIn ) { 1164 1.1 ross roundingMode = roundingModeIn; 1165 1.1 ross } 1166 1.1 ross testFunctionVariety( 1167 1.1 ross functionCode, roundingPrecision, roundingMode ); 1168 1.1 ross if ( roundingModeIn || ! roundingMode ) break; 1169 1.1 ross } 1170 1.1 ross if ( roundingPrecisionIn || ! roundingPrecision ) break; 1171 1.1 ross if ( roundingPrecision == 80 ) { 1172 1.1 ross break; 1173 1.1 ross } 1174 1.1 ross else if ( roundingPrecision == 64 ) { 1175 1.1 ross roundingPrecision = 80; 1176 1.1 ross } 1177 1.1 ross else if ( roundingPrecision == 32 ) { 1178 1.1 ross roundingPrecision = 64; 1179 1.1 ross } 1180 1.1 ross } 1181 1.1 ross 1182 1.1 ross } 1183 1.1 ross 1184