1# There are namespace pollution issues on Windows, due to osdep.h 2# bringing in Windows headers that define a FLOAT128 type. 3if targetos == 'windows' 4 subdir_done() 5endif 6 7fpcflags = [ 8 # softfloat defines 9 '-DSOFTFLOAT_ROUND_ODD', 10 '-DINLINE_LEVEL=5', 11 '-DSOFTFLOAT_FAST_DIV32TO16', 12 '-DSOFTFLOAT_FAST_DIV64TO32', 13 '-DSOFTFLOAT_FAST_INT64', 14 # testfloat defines 15 '-DFLOAT16', 16 '-DFLOAT64', 17 '-DEXTFLOAT80', 18 '-DFLOAT128', 19 '-DFLOAT_ROUND_ODD', 20 '-DLONG_DOUBLE_IS_EXTFLOAT80', 21] 22 23sfdir = 'berkeley-softfloat-3/source' 24sfspedir = sfdir / '8086-SSE' 25tfdir = 'berkeley-testfloat-3/source' 26 27sfinc = include_directories(sfdir / 'include', sfspedir) 28 29tfcflags = [ 30 '-Wno-implicit-fallthrough', 31 '-Wno-strict-prototypes', 32 '-Wno-unknown-pragmas', 33 '-Wno-uninitialized', 34 '-Wno-missing-prototypes', 35 '-Wno-return-type', 36 '-Wno-unused-function', 37 '-Wno-error', 38] 39 40tfgencases = [ 41 tfdir / 'genCases_ui32.c', 42 tfdir / 'genCases_ui64.c', 43 tfdir / 'genCases_i32.c', 44 tfdir / 'genCases_i64.c', 45 tfdir / 'genCases_f16.c', 46 tfdir / 'genCases_f32.c', 47 tfdir / 'genCases_f64.c', 48 tfdir / 'genCases_extF80.c', 49 tfdir / 'genCases_f128.c', 50] 51 52tfwritecase = [ 53 tfdir / 'writeCase_a_ui32.c', 54 tfdir / 'writeCase_a_ui64.c', 55 tfdir / 'writeCase_a_f16.c', 56 tfdir / 'writeCase_ab_f16.c', 57 tfdir / 'writeCase_abc_f16.c', 58 tfdir / 'writeCase_a_f32.c', 59 tfdir / 'writeCase_ab_f32.c', 60 tfdir / 'writeCase_abc_f32.c', 61 tfdir / 'writeCase_a_f64.c', 62 tfdir / 'writeCase_ab_f64.c', 63 tfdir / 'writeCase_abc_f64.c', 64 tfdir / 'writeCase_a_extF80M.c', 65 tfdir / 'writeCase_ab_extF80M.c', 66 tfdir / 'writeCase_a_f128M.c', 67 tfdir / 'writeCase_ab_f128M.c', 68 tfdir / 'writeCase_abc_f128M.c', 69 tfdir / 'writeCase_z_bool.c', 70 tfdir / 'writeCase_z_ui32.c', 71 tfdir / 'writeCase_z_ui64.c', 72 tfdir / 'writeCase_z_f16.c', 73 tfdir / 'writeCase_z_f32.c', 74 tfdir / 'writeCase_z_f64.c', 75 tfdir / 'writeCase_z_extF80M.c', 76 tfdir / 'writeCase_z_f128M.c', 77] 78 79tftest = [ 80 tfdir / 'test_a_ui32_z_f16.c', 81 tfdir / 'test_a_ui32_z_f32.c', 82 tfdir / 'test_a_ui32_z_f64.c', 83 tfdir / 'test_a_ui32_z_extF80.c', 84 tfdir / 'test_a_ui32_z_f128.c', 85 tfdir / 'test_a_ui64_z_f16.c', 86 tfdir / 'test_a_ui64_z_f32.c', 87 tfdir / 'test_a_ui64_z_f64.c', 88 tfdir / 'test_a_ui64_z_extF80.c', 89 tfdir / 'test_a_ui64_z_f128.c', 90 tfdir / 'test_a_i32_z_f16.c', 91 tfdir / 'test_a_i32_z_f32.c', 92 tfdir / 'test_a_i32_z_f64.c', 93 tfdir / 'test_a_i32_z_extF80.c', 94 tfdir / 'test_a_i32_z_f128.c', 95 tfdir / 'test_a_i64_z_f16.c', 96 tfdir / 'test_a_i64_z_f32.c', 97 tfdir / 'test_a_i64_z_f64.c', 98 tfdir / 'test_a_i64_z_extF80.c', 99 tfdir / 'test_a_i64_z_f128.c', 100 tfdir / 'test_a_f16_z_ui32_rx.c', 101 tfdir / 'test_a_f16_z_ui64_rx.c', 102 tfdir / 'test_a_f16_z_i32_rx.c', 103 tfdir / 'test_a_f16_z_i64_rx.c', 104 tfdir / 'test_a_f16_z_ui32_x.c', 105 tfdir / 'test_a_f16_z_ui64_x.c', 106 tfdir / 'test_a_f16_z_i32_x.c', 107 tfdir / 'test_a_f16_z_i64_x.c', 108 tfdir / 'test_a_f16_z_f32.c', 109 tfdir / 'test_a_f16_z_f64.c', 110 tfdir / 'test_a_f16_z_extF80.c', 111 tfdir / 'test_a_f16_z_f128.c', 112 tfdir / 'test_az_f16.c', 113 tfdir / 'test_az_f16_rx.c', 114 tfdir / 'test_abz_f16.c', 115 tfdir / 'test_abcz_f16.c', 116 tfdir / 'test_ab_f16_z_bool.c', 117 tfdir / 'test_a_f32_z_ui32_rx.c', 118 tfdir / 'test_a_f32_z_ui64_rx.c', 119 tfdir / 'test_a_f32_z_i32_rx.c', 120 tfdir / 'test_a_f32_z_i64_rx.c', 121 tfdir / 'test_a_f32_z_ui32_x.c', 122 tfdir / 'test_a_f32_z_ui64_x.c', 123 tfdir / 'test_a_f32_z_i32_x.c', 124 tfdir / 'test_a_f32_z_i64_x.c', 125 tfdir / 'test_a_f32_z_f16.c', 126 tfdir / 'test_a_f32_z_f64.c', 127 tfdir / 'test_a_f32_z_extF80.c', 128 tfdir / 'test_a_f32_z_f128.c', 129 tfdir / 'test_az_f32.c', 130 tfdir / 'test_az_f32_rx.c', 131 tfdir / 'test_abz_f32.c', 132 tfdir / 'test_abcz_f32.c', 133 tfdir / 'test_ab_f32_z_bool.c', 134 tfdir / 'test_a_f64_z_ui32_rx.c', 135 tfdir / 'test_a_f64_z_ui64_rx.c', 136 tfdir / 'test_a_f64_z_i32_rx.c', 137 tfdir / 'test_a_f64_z_i64_rx.c', 138 tfdir / 'test_a_f64_z_ui32_x.c', 139 tfdir / 'test_a_f64_z_ui64_x.c', 140 tfdir / 'test_a_f64_z_i32_x.c', 141 tfdir / 'test_a_f64_z_i64_x.c', 142 tfdir / 'test_a_f64_z_f16.c', 143 tfdir / 'test_a_f64_z_f32.c', 144 tfdir / 'test_a_f64_z_extF80.c', 145 tfdir / 'test_a_f64_z_f128.c', 146 tfdir / 'test_az_f64.c', 147 tfdir / 'test_az_f64_rx.c', 148 tfdir / 'test_abz_f64.c', 149 tfdir / 'test_abcz_f64.c', 150 tfdir / 'test_ab_f64_z_bool.c', 151 tfdir / 'test_a_extF80_z_ui32_rx.c', 152 tfdir / 'test_a_extF80_z_ui64_rx.c', 153 tfdir / 'test_a_extF80_z_i32_rx.c', 154 tfdir / 'test_a_extF80_z_i64_rx.c', 155 tfdir / 'test_a_extF80_z_ui32_x.c', 156 tfdir / 'test_a_extF80_z_ui64_x.c', 157 tfdir / 'test_a_extF80_z_i32_x.c', 158 tfdir / 'test_a_extF80_z_i64_x.c', 159 tfdir / 'test_a_extF80_z_f16.c', 160 tfdir / 'test_a_extF80_z_f32.c', 161 tfdir / 'test_a_extF80_z_f64.c', 162 tfdir / 'test_a_extF80_z_f128.c', 163 tfdir / 'test_az_extF80.c', 164 tfdir / 'test_az_extF80_rx.c', 165 tfdir / 'test_abz_extF80.c', 166 tfdir / 'test_ab_extF80_z_bool.c', 167 tfdir / 'test_a_f128_z_ui32_rx.c', 168 tfdir / 'test_a_f128_z_ui64_rx.c', 169 tfdir / 'test_a_f128_z_i32_rx.c', 170 tfdir / 'test_a_f128_z_i64_rx.c', 171 tfdir / 'test_a_f128_z_ui32_x.c', 172 tfdir / 'test_a_f128_z_ui64_x.c', 173 tfdir / 'test_a_f128_z_i32_x.c', 174 tfdir / 'test_a_f128_z_i64_x.c', 175 tfdir / 'test_a_f128_z_f16.c', 176 tfdir / 'test_a_f128_z_f32.c', 177 tfdir / 'test_a_f128_z_f64.c', 178 tfdir / 'test_a_f128_z_extF80.c', 179 tfdir / 'test_az_f128.c', 180 tfdir / 'test_az_f128_rx.c', 181 tfdir / 'test_abz_f128.c', 182 tfdir / 'test_abcz_f128.c', 183 tfdir / 'test_ab_f128_z_bool.c', 184] 185 186libtestfloat = static_library( 187 'testfloat', 188 files( 189 tfdir / 'uint128_inline.c', 190 tfdir / 'uint128.c', 191 tfdir / 'fail.c', 192 tfdir / 'functions_common.c', 193 tfdir / 'functionInfos.c', 194 tfdir / 'standardFunctionInfos.c', 195 tfdir / 'random.c', 196 tfdir / 'genCases_common.c', 197 tfgencases, 198 tfdir / 'genCases_writeTestsTotal.c', 199 tfdir / 'verCases_inline.c', 200 tfdir / 'verCases_common.c', 201 tfdir / 'verCases_writeFunctionName.c', 202 tfdir / 'readHex.c', 203 tfdir / 'writeHex.c', 204 tfwritecase, 205 tfdir / 'testLoops_common.c', 206 tftest, 207 ), 208 include_directories: sfinc, 209 c_args: tfcflags + fpcflags, 210) 211 212sfcflags = [ 213 '-Wno-implicit-fallthrough', 214 '-Wno-missing-prototypes', 215 '-Wno-redundant-decls', 216 '-Wno-return-type', 217 '-Wno-error', 218] 219 220libsoftfloat = static_library( 221 'softfloat', 222 files( 223 # primitives 224 sfdir / 's_eq128.c', 225 sfdir / 's_le128.c', 226 sfdir / 's_lt128.c', 227 sfdir / 's_shortShiftLeft128.c', 228 sfdir / 's_shortShiftRight128.c', 229 sfdir / 's_shortShiftRightJam64.c', 230 sfdir / 's_shortShiftRightJam64Extra.c', 231 sfdir / 's_shortShiftRightJam128.c', 232 sfdir / 's_shortShiftRightJam128Extra.c', 233 sfdir / 's_shiftRightJam32.c', 234 sfdir / 's_shiftRightJam64.c', 235 sfdir / 's_shiftRightJam64Extra.c', 236 sfdir / 's_shiftRightJam128.c', 237 sfdir / 's_shiftRightJam128Extra.c', 238 sfdir / 's_shiftRightJam256M.c', 239 sfdir / 's_countLeadingZeros8.c', 240 sfdir / 's_countLeadingZeros16.c', 241 sfdir / 's_countLeadingZeros32.c', 242 sfdir / 's_countLeadingZeros64.c', 243 sfdir / 's_add128.c', 244 sfdir / 's_add256M.c', 245 sfdir / 's_sub128.c', 246 sfdir / 's_sub256M.c', 247 sfdir / 's_mul64ByShifted32To128.c', 248 sfdir / 's_mul64To128.c', 249 sfdir / 's_mul128By32.c', 250 sfdir / 's_mul128To256M.c', 251 sfdir / 's_approxRecip_1Ks.c', 252 sfdir / 's_approxRecip32_1.c', 253 sfdir / 's_approxRecipSqrt_1Ks.c', 254 sfdir / 's_approxRecipSqrt32_1.c', 255 # others 256 sfdir / 's_roundToUI32.c', 257 sfdir / 's_roundToUI64.c', 258 sfdir / 's_roundToI32.c', 259 sfdir / 's_roundToI64.c', 260 sfdir / 's_normSubnormalF16Sig.c', 261 sfdir / 's_roundPackToF16.c', 262 sfdir / 's_normRoundPackToF16.c', 263 sfdir / 's_addMagsF16.c', 264 sfdir / 's_subMagsF16.c', 265 sfdir / 's_mulAddF16.c', 266 sfdir / 's_normSubnormalF32Sig.c', 267 sfdir / 's_roundPackToF32.c', 268 sfdir / 's_normRoundPackToF32.c', 269 sfdir / 's_addMagsF32.c', 270 sfdir / 's_subMagsF32.c', 271 sfdir / 's_mulAddF32.c', 272 sfdir / 's_normSubnormalF64Sig.c', 273 sfdir / 's_roundPackToF64.c', 274 sfdir / 's_normRoundPackToF64.c', 275 sfdir / 's_addMagsF64.c', 276 sfdir / 's_subMagsF64.c', 277 sfdir / 's_mulAddF64.c', 278 sfdir / 's_normSubnormalExtF80Sig.c', 279 sfdir / 's_roundPackToExtF80.c', 280 sfdir / 's_normRoundPackToExtF80.c', 281 sfdir / 's_addMagsExtF80.c', 282 sfdir / 's_subMagsExtF80.c', 283 sfdir / 's_normSubnormalF128Sig.c', 284 sfdir / 's_roundPackToF128.c', 285 sfdir / 's_normRoundPackToF128.c', 286 sfdir / 's_addMagsF128.c', 287 sfdir / 's_subMagsF128.c', 288 sfdir / 's_mulAddF128.c', 289 sfdir / 'softfloat_state.c', 290 sfdir / 'ui32_to_f16.c', 291 sfdir / 'ui32_to_f32.c', 292 sfdir / 'ui32_to_f64.c', 293 sfdir / 'ui32_to_extF80.c', 294 sfdir / 'ui32_to_extF80M.c', 295 sfdir / 'ui32_to_f128.c', 296 sfdir / 'ui32_to_f128M.c', 297 sfdir / 'ui64_to_f16.c', 298 sfdir / 'ui64_to_f32.c', 299 sfdir / 'ui64_to_f64.c', 300 sfdir / 'ui64_to_extF80.c', 301 sfdir / 'ui64_to_extF80M.c', 302 sfdir / 'ui64_to_f128.c', 303 sfdir / 'ui64_to_f128M.c', 304 sfdir / 'i32_to_f16.c', 305 sfdir / 'i32_to_f32.c', 306 sfdir / 'i32_to_f64.c', 307 sfdir / 'i32_to_extF80.c', 308 sfdir / 'i32_to_extF80M.c', 309 sfdir / 'i32_to_f128.c', 310 sfdir / 'i32_to_f128M.c', 311 sfdir / 'i64_to_f16.c', 312 sfdir / 'i64_to_f32.c', 313 sfdir / 'i64_to_f64.c', 314 sfdir / 'i64_to_extF80.c', 315 sfdir / 'i64_to_extF80M.c', 316 sfdir / 'i64_to_f128.c', 317 sfdir / 'i64_to_f128M.c', 318 sfdir / 'f16_to_ui32.c', 319 sfdir / 'f16_to_ui64.c', 320 sfdir / 'f16_to_i32.c', 321 sfdir / 'f16_to_i64.c', 322 sfdir / 'f16_to_ui32_r_minMag.c', 323 sfdir / 'f16_to_ui64_r_minMag.c', 324 sfdir / 'f16_to_i32_r_minMag.c', 325 sfdir / 'f16_to_i64_r_minMag.c', 326 sfdir / 'f16_to_f32.c', 327 sfdir / 'f16_to_f64.c', 328 sfdir / 'f16_to_extF80.c', 329 sfdir / 'f16_to_extF80M.c', 330 sfdir / 'f16_to_f128.c', 331 sfdir / 'f16_to_f128M.c', 332 sfdir / 'f16_roundToInt.c', 333 sfdir / 'f16_add.c', 334 sfdir / 'f16_sub.c', 335 sfdir / 'f16_mul.c', 336 sfdir / 'f16_mulAdd.c', 337 sfdir / 'f16_div.c', 338 sfdir / 'f16_rem.c', 339 sfdir / 'f16_sqrt.c', 340 sfdir / 'f16_eq.c', 341 sfdir / 'f16_le.c', 342 sfdir / 'f16_lt.c', 343 sfdir / 'f16_eq_signaling.c', 344 sfdir / 'f16_le_quiet.c', 345 sfdir / 'f16_lt_quiet.c', 346 sfdir / 'f16_isSignalingNaN.c', 347 sfdir / 'f32_to_ui32.c', 348 sfdir / 'f32_to_ui64.c', 349 sfdir / 'f32_to_i32.c', 350 sfdir / 'f32_to_i64.c', 351 sfdir / 'f32_to_ui32_r_minMag.c', 352 sfdir / 'f32_to_ui64_r_minMag.c', 353 sfdir / 'f32_to_i32_r_minMag.c', 354 sfdir / 'f32_to_i64_r_minMag.c', 355 sfdir / 'f32_to_f16.c', 356 sfdir / 'f32_to_f64.c', 357 sfdir / 'f32_to_extF80.c', 358 sfdir / 'f32_to_extF80M.c', 359 sfdir / 'f32_to_f128.c', 360 sfdir / 'f32_to_f128M.c', 361 sfdir / 'f32_roundToInt.c', 362 sfdir / 'f32_add.c', 363 sfdir / 'f32_sub.c', 364 sfdir / 'f32_mul.c', 365 sfdir / 'f32_mulAdd.c', 366 sfdir / 'f32_div.c', 367 sfdir / 'f32_rem.c', 368 sfdir / 'f32_sqrt.c', 369 sfdir / 'f32_eq.c', 370 sfdir / 'f32_le.c', 371 sfdir / 'f32_lt.c', 372 sfdir / 'f32_eq_signaling.c', 373 sfdir / 'f32_le_quiet.c', 374 sfdir / 'f32_lt_quiet.c', 375 sfdir / 'f32_isSignalingNaN.c', 376 sfdir / 'f64_to_ui32.c', 377 sfdir / 'f64_to_ui64.c', 378 sfdir / 'f64_to_i32.c', 379 sfdir / 'f64_to_i64.c', 380 sfdir / 'f64_to_ui32_r_minMag.c', 381 sfdir / 'f64_to_ui64_r_minMag.c', 382 sfdir / 'f64_to_i32_r_minMag.c', 383 sfdir / 'f64_to_i64_r_minMag.c', 384 sfdir / 'f64_to_f16.c', 385 sfdir / 'f64_to_f32.c', 386 sfdir / 'f64_to_extF80.c', 387 sfdir / 'f64_to_extF80M.c', 388 sfdir / 'f64_to_f128.c', 389 sfdir / 'f64_to_f128M.c', 390 sfdir / 'f64_roundToInt.c', 391 sfdir / 'f64_add.c', 392 sfdir / 'f64_sub.c', 393 sfdir / 'f64_mul.c', 394 sfdir / 'f64_mulAdd.c', 395 sfdir / 'f64_div.c', 396 sfdir / 'f64_rem.c', 397 sfdir / 'f64_sqrt.c', 398 sfdir / 'f64_eq.c', 399 sfdir / 'f64_le.c', 400 sfdir / 'f64_lt.c', 401 sfdir / 'f64_eq_signaling.c', 402 sfdir / 'f64_le_quiet.c', 403 sfdir / 'f64_lt_quiet.c', 404 sfdir / 'f64_isSignalingNaN.c', 405 sfdir / 'extF80_to_ui32.c', 406 sfdir / 'extF80_to_ui64.c', 407 sfdir / 'extF80_to_i32.c', 408 sfdir / 'extF80_to_i64.c', 409 sfdir / 'extF80_to_ui32_r_minMag.c', 410 sfdir / 'extF80_to_ui64_r_minMag.c', 411 sfdir / 'extF80_to_i32_r_minMag.c', 412 sfdir / 'extF80_to_i64_r_minMag.c', 413 sfdir / 'extF80_to_f16.c', 414 sfdir / 'extF80_to_f32.c', 415 sfdir / 'extF80_to_f64.c', 416 sfdir / 'extF80_to_f128.c', 417 sfdir / 'extF80_roundToInt.c', 418 sfdir / 'extF80_add.c', 419 sfdir / 'extF80_sub.c', 420 sfdir / 'extF80_mul.c', 421 sfdir / 'extF80_div.c', 422 sfdir / 'extF80_rem.c', 423 sfdir / 'extF80_sqrt.c', 424 sfdir / 'extF80_eq.c', 425 sfdir / 'extF80_le.c', 426 sfdir / 'extF80_lt.c', 427 sfdir / 'extF80_eq_signaling.c', 428 sfdir / 'extF80_le_quiet.c', 429 sfdir / 'extF80_lt_quiet.c', 430 sfdir / 'extF80_isSignalingNaN.c', 431 sfdir / 'extF80M_to_ui32.c', 432 sfdir / 'extF80M_to_ui64.c', 433 sfdir / 'extF80M_to_i32.c', 434 sfdir / 'extF80M_to_i64.c', 435 sfdir / 'extF80M_to_ui32_r_minMag.c', 436 sfdir / 'extF80M_to_ui64_r_minMag.c', 437 sfdir / 'extF80M_to_i32_r_minMag.c', 438 sfdir / 'extF80M_to_i64_r_minMag.c', 439 sfdir / 'extF80M_to_f16.c', 440 sfdir / 'extF80M_to_f32.c', 441 sfdir / 'extF80M_to_f64.c', 442 sfdir / 'extF80M_to_f128M.c', 443 sfdir / 'extF80M_roundToInt.c', 444 sfdir / 'extF80M_add.c', 445 sfdir / 'extF80M_sub.c', 446 sfdir / 'extF80M_mul.c', 447 sfdir / 'extF80M_div.c', 448 sfdir / 'extF80M_rem.c', 449 sfdir / 'extF80M_sqrt.c', 450 sfdir / 'extF80M_eq.c', 451 sfdir / 'extF80M_le.c', 452 sfdir / 'extF80M_lt.c', 453 sfdir / 'extF80M_eq_signaling.c', 454 sfdir / 'extF80M_le_quiet.c', 455 sfdir / 'extF80M_lt_quiet.c', 456 sfdir / 'f128_to_ui32.c', 457 sfdir / 'f128_to_ui64.c', 458 sfdir / 'f128_to_i32.c', 459 sfdir / 'f128_to_i64.c', 460 sfdir / 'f128_to_ui32_r_minMag.c', 461 sfdir / 'f128_to_ui64_r_minMag.c', 462 sfdir / 'f128_to_i32_r_minMag.c', 463 sfdir / 'f128_to_i64_r_minMag.c', 464 sfdir / 'f128_to_f16.c', 465 sfdir / 'f128_to_f32.c', 466 sfdir / 'f128_to_extF80.c', 467 sfdir / 'f128_to_f64.c', 468 sfdir / 'f128_roundToInt.c', 469 sfdir / 'f128_add.c', 470 sfdir / 'f128_sub.c', 471 sfdir / 'f128_mul.c', 472 sfdir / 'f128_mulAdd.c', 473 sfdir / 'f128_div.c', 474 sfdir / 'f128_rem.c', 475 sfdir / 'f128_sqrt.c', 476 sfdir / 'f128_eq.c', 477 sfdir / 'f128_le.c', 478 sfdir / 'f128_lt.c', 479 sfdir / 'f128_eq_signaling.c', 480 sfdir / 'f128_le_quiet.c', 481 sfdir / 'f128_lt_quiet.c', 482 sfdir / 'f128_isSignalingNaN.c', 483 sfdir / 'f128M_to_ui32.c', 484 sfdir / 'f128M_to_ui64.c', 485 sfdir / 'f128M_to_i32.c', 486 sfdir / 'f128M_to_i64.c', 487 sfdir / 'f128M_to_ui32_r_minMag.c', 488 sfdir / 'f128M_to_ui64_r_minMag.c', 489 sfdir / 'f128M_to_i32_r_minMag.c', 490 sfdir / 'f128M_to_i64_r_minMag.c', 491 sfdir / 'f128M_to_f16.c', 492 sfdir / 'f128M_to_f32.c', 493 sfdir / 'f128M_to_extF80M.c', 494 sfdir / 'f128M_to_f64.c', 495 sfdir / 'f128M_roundToInt.c', 496 sfdir / 'f128M_add.c', 497 sfdir / 'f128M_sub.c', 498 sfdir / 'f128M_mul.c', 499 sfdir / 'f128M_mulAdd.c', 500 sfdir / 'f128M_div.c', 501 sfdir / 'f128M_rem.c', 502 sfdir / 'f128M_sqrt.c', 503 sfdir / 'f128M_eq.c', 504 sfdir / 'f128M_le.c', 505 sfdir / 'f128M_lt.c', 506 sfdir / 'f128M_eq_signaling.c', 507 sfdir / 'f128M_le_quiet.c', 508 sfdir / 'f128M_lt_quiet.c', 509 # spe 510 sfspedir / 'softfloat_raiseFlags.c', 511 sfspedir / 's_f16UIToCommonNaN.c', 512 sfspedir / 's_commonNaNToF16UI.c', 513 sfspedir / 's_propagateNaNF16UI.c', 514 sfspedir / 's_f32UIToCommonNaN.c', 515 sfspedir / 's_commonNaNToF32UI.c', 516 sfspedir / 's_propagateNaNF32UI.c', 517 sfspedir / 's_f64UIToCommonNaN.c', 518 sfspedir / 's_commonNaNToF64UI.c', 519 sfspedir / 's_propagateNaNF64UI.c', 520 sfspedir / 'extF80M_isSignalingNaN.c', 521 sfspedir / 's_extF80UIToCommonNaN.c', 522 sfspedir / 's_commonNaNToExtF80UI.c', 523 sfspedir / 's_propagateNaNExtF80UI.c', 524 sfspedir / 'f128M_isSignalingNaN.c', 525 sfspedir / 's_f128UIToCommonNaN.c', 526 sfspedir / 's_commonNaNToF128UI.c', 527 sfspedir / 's_propagateNaNF128UI.c', 528 ), 529 include_directories: sfinc, 530 c_args: sfcflags + fpcflags, 531) 532 533fpcflags += [ 534 # work around TARGET_* poisoning 535 '-DHW_POISON_H', 536 # define a target to match testfloat's implementation-defined choices, such as 537 # whether to raise the invalid flag when dealing with NaNs in muladd. 538 '-DTARGET_ARM', 539 # FIXME: uiZ may be used uninitialized in this function 540 '-Wno-uninitialized', 541] 542 543fptest = executable( 544 'fp-test', 545 ['fp-test.c', tfdir / 'slowfloat.c', '../../fpu/softfloat.c'], 546 link_with: [libtestfloat, libsoftfloat], 547 dependencies: [qemuutil], 548 include_directories: [sfinc, include_directories(tfdir)], 549 c_args: fpcflags, 550) 551softfloat_conv_tests = { 552 'float-to-float': 'f16_to_f32 f16_to_f64 f16_to_extF80 f16_to_f128 ' + 553 'f32_to_f16 f32_to_f64 f32_to_extF80 ' + 554 'f64_to_f16 f64_to_f32 ' + 555 'extF80_to_f16 extF80_to_f32 ' + 556 'extF80_to_f64 extF80_to_f128 ' + 557 'f128_to_f16', 558 'int-to-float': 'i32_to_f16 i64_to_f16 i32_to_f32 i64_to_f32 ' + 559 'i32_to_f64 i64_to_f64 i32_to_f128 i64_to_f128', 560 'uint-to-float': 'ui32_to_f16 ui64_to_f16 ui32_to_f32 ui64_to_f32 ' + 561 'ui32_to_f64 ui64_to_f64 ui64_to_f128 ' + 562 'ui32_to_extF80 ui64_to_extF80', 563 'float-to-int': 'f16_to_i32 f16_to_i32_r_minMag ' + 564 'f32_to_i32 f32_to_i32_r_minMag ' + 565 'f64_to_i32 f64_to_i32_r_minMag ' + 566 'extF80_to_i32 extF80_to_i32_r_minMag ' + 567 'f128_to_i32 f128_to_i32_r_minMag ' + 568 'f16_to_i64 f16_to_i64_r_minMag ' + 569 'f32_to_i64 f32_to_i64_r_minMag ' + 570 'f64_to_i64 f64_to_i64_r_minMag ' + 571 'extF80_to_i64 extF80_to_i64_r_minMag ' + 572 'f128_to_i64 f128_to_i64_r_minMag', 573 'float-to-uint': 'f16_to_ui32 f16_to_ui32_r_minMag ' + 574 'f32_to_ui32 f32_to_ui32_r_minMag ' + 575 'f64_to_ui32 f64_to_ui32_r_minMag ' + 576 'extF80_to_ui32 extF80_to_ui32_r_minMag ' + 577 'f128_to_ui32 f128_to_ui32_r_minMag ' + 578 'f16_to_ui64 f16_to_ui64_r_minMag ' + 579 'f32_to_ui64 f32_to_ui64_r_minMag ' + 580 'f64_to_ui64 f64_to_ui64_r_minMag ' + 581 'extF80_to_ui64 extF80_to_ui64_r_minMag ' + 582 'f128_to_ui64 f128_to_ui64_r_minMag', 583 'round-to-integer': 'f16_roundToInt f32_roundToInt ' + 584 'f64_roundToInt f128_roundToInt' 585} 586softfloat_tests = { 587 'eq_signaling' : 'compare', 588 'le' : 'compare', 589 'le_quiet' : 'compare', 590 'lt_quiet' : 'compare', 591 'add': 'ops', 592 'sub': 'ops', 593 'mul': 'ops', 594 'div': 'ops', 595 'rem': 'ops', 596 'sqrt': 'ops' 597} 598# The full test suite can take a bit of time, default to a quick run 599# "-l 2 -r all" can take more than a day for some operations and is best 600# run manually 601fptest_args = ['-s', '-l', '1'] 602fptest_rounding_args = ['-r', 'all'] 603 604# Conversion Routines: 605# FIXME: i32_to_extF80 (broken), i64_to_extF80 (broken) 606# extF80_roundToInt (broken) 607foreach k, v : softfloat_conv_tests 608 test('fp-test-' + k, fptest, 609 args: fptest_args + fptest_rounding_args + v.split(), 610 suite: ['softfloat', 'softfloat-conv']) 611endforeach 612 613# FIXME: extF80_{lt_quiet, rem} (broken), 614# extF80_{mulAdd} (missing) 615foreach k, v : softfloat_tests 616 extF80_broken = ['lt_quiet', 'rem'].contains(k) 617 test('fp-test-' + k, fptest, 618 args: fptest_args + fptest_rounding_args + 619 ['f16_' + k, 'f32_' + k, 'f64_' + k, 'f128_' + k] + 620 (extF80_broken ? [] : ['extF80_' + k]), 621 suite: ['softfloat', 'softfloat-' + v]) 622endforeach 623test('fp-test-mulAdd', fptest, 624 # no fptest_rounding_args 625 args: fptest_args + 626 ['f16_mulAdd', 'f32_mulAdd', 'f64_mulAdd', 'f128_mulAdd'], 627 suite: ['softfloat-slow', 'softfloat-ops-slow'], timeout: 60) 628 629fpbench = executable( 630 'fp-bench', 631 ['fp-bench.c', '../../fpu/softfloat.c'], 632 link_with: [libtestfloat, libsoftfloat], 633 dependencies: [qemuutil], 634 include_directories: [sfinc, include_directories(tfdir)], 635 c_args: fpcflags, 636) 637