1cfc1a889SPaolo Bonziniif 'CONFIG_TCG' not in config_all_accel 2e0a26020SPhilippe Mathieu-Daudé subdir_done() 3e0a26020SPhilippe Mathieu-Daudéendif 43941996bSPaolo Bonzini# There are namespace pollution issues on Windows, due to osdep.h 53941996bSPaolo Bonzini# bringing in Windows headers that define a FLOAT128 type. 6d0cda6f4SPaolo Bonziniif host_os == 'windows' 73941996bSPaolo Bonzini subdir_done() 83941996bSPaolo Bonziniendif 93941996bSPaolo Bonzini 10*55ccaed2SPeter Maydell# By default tests run with the usual 30s timeout; particularly 11*55ccaed2SPeter Maydell# slow tests can have that overridden here. The keys here are 12*55ccaed2SPeter Maydell# the testnames without their fp-test- prefix. 13*55ccaed2SPeter Maydellslow_fp_tests = { 14*55ccaed2SPeter Maydell 'rem': 60, 15*55ccaed2SPeter Maydell 'div': 60, 16*55ccaed2SPeter Maydell 'mul': 60, 17*55ccaed2SPeter Maydell 'mulAdd': 180, 18*55ccaed2SPeter Maydell} 19*55ccaed2SPeter Maydell 20d2dfe0b5SPaolo Bonzinisfcflags = [ 213941996bSPaolo Bonzini # softfloat defines 223941996bSPaolo Bonzini '-DSOFTFLOAT_ROUND_ODD', 233941996bSPaolo Bonzini '-DINLINE_LEVEL=5', 243941996bSPaolo Bonzini '-DSOFTFLOAT_FAST_DIV32TO16', 253941996bSPaolo Bonzini '-DSOFTFLOAT_FAST_DIV64TO32', 263941996bSPaolo Bonzini '-DSOFTFLOAT_FAST_INT64', 27d2dfe0b5SPaolo Bonzini] 28d2dfe0b5SPaolo Bonzinitfcflags = [ 293941996bSPaolo Bonzini # testfloat defines 303941996bSPaolo Bonzini '-DFLOAT16', 313941996bSPaolo Bonzini '-DFLOAT64', 323941996bSPaolo Bonzini '-DEXTFLOAT80', 333941996bSPaolo Bonzini '-DFLOAT128', 343941996bSPaolo Bonzini '-DFLOAT_ROUND_ODD', 353941996bSPaolo Bonzini '-DLONG_DOUBLE_IS_EXTFLOAT80', 363941996bSPaolo Bonzini] 373941996bSPaolo Bonzini 38d2dfe0b5SPaolo Bonzinilibsoftfloat_proj = subproject('berkeley-softfloat-3', required: true, 39d2dfe0b5SPaolo Bonzini default_options: 'defines=' + ','.join(sfcflags)) 40d2dfe0b5SPaolo Bonzinilibsoftfloat = libsoftfloat_proj.get_variable('libsoftfloat_dep') 413941996bSPaolo Bonzini 42d2dfe0b5SPaolo Bonzinilibtestfloat_proj = subproject('berkeley-testfloat-3', required: true, 43d2dfe0b5SPaolo Bonzini default_options: 'defines=' + ','.join(tfcflags)) 44d2dfe0b5SPaolo Bonzinilibtestfloat = libtestfloat_proj.get_variable('libtestfloat_dep') 45d2dfe0b5SPaolo Bonzinilibslowfloat = libtestfloat_proj.get_variable('libslowfloat_dep') 463941996bSPaolo Bonzini 47d2dfe0b5SPaolo Bonzinifpcflags = [ 483941996bSPaolo Bonzini # work around TARGET_* poisoning 493941996bSPaolo Bonzini '-DHW_POISON_H', 503941996bSPaolo Bonzini # define a target to match testfloat's implementation-defined choices, such as 513941996bSPaolo Bonzini # whether to raise the invalid flag when dealing with NaNs in muladd. 523941996bSPaolo Bonzini '-DTARGET_ARM', 533941996bSPaolo Bonzini # FIXME: uiZ may be used uninitialized in this function 543941996bSPaolo Bonzini '-Wno-uninitialized', 553941996bSPaolo Bonzini] 563941996bSPaolo Bonzini 573941996bSPaolo Bonzinifptest = executable( 583941996bSPaolo Bonzini 'fp-test', 59d2dfe0b5SPaolo Bonzini ['fp-test.c', '../../fpu/softfloat.c'], 60d2dfe0b5SPaolo Bonzini dependencies: [qemuutil, libsoftfloat, libtestfloat, libslowfloat], 613941996bSPaolo Bonzini c_args: fpcflags, 623941996bSPaolo Bonzini) 633941996bSPaolo Bonzinisoftfloat_conv_tests = { 643941996bSPaolo Bonzini 'float-to-float': 'f16_to_f32 f16_to_f64 f16_to_extF80 f16_to_f128 ' + 653941996bSPaolo Bonzini 'f32_to_f16 f32_to_f64 f32_to_extF80 ' + 663941996bSPaolo Bonzini 'f64_to_f16 f64_to_f32 ' + 673941996bSPaolo Bonzini 'extF80_to_f16 extF80_to_f32 ' + 683941996bSPaolo Bonzini 'extF80_to_f64 extF80_to_f128 ' + 693941996bSPaolo Bonzini 'f128_to_f16', 703941996bSPaolo Bonzini 'int-to-float': 'i32_to_f16 i64_to_f16 i32_to_f32 i64_to_f32 ' + 7190d00452SAlex Bennée 'i32_to_f64 i64_to_f64 ' + 7290d00452SAlex Bennée 'i32_to_extF80 i64_to_extF80 ' + 7390d00452SAlex Bennée 'i32_to_f128 i64_to_f128', 743941996bSPaolo Bonzini 'uint-to-float': 'ui32_to_f16 ui64_to_f16 ui32_to_f32 ui64_to_f32 ' + 753941996bSPaolo Bonzini 'ui32_to_f64 ui64_to_f64 ui64_to_f128 ' + 763941996bSPaolo Bonzini 'ui32_to_extF80 ui64_to_extF80', 773941996bSPaolo Bonzini 'float-to-int': 'f16_to_i32 f16_to_i32_r_minMag ' + 783941996bSPaolo Bonzini 'f32_to_i32 f32_to_i32_r_minMag ' + 793941996bSPaolo Bonzini 'f64_to_i32 f64_to_i32_r_minMag ' + 803941996bSPaolo Bonzini 'extF80_to_i32 extF80_to_i32_r_minMag ' + 813941996bSPaolo Bonzini 'f128_to_i32 f128_to_i32_r_minMag ' + 823941996bSPaolo Bonzini 'f16_to_i64 f16_to_i64_r_minMag ' + 833941996bSPaolo Bonzini 'f32_to_i64 f32_to_i64_r_minMag ' + 843941996bSPaolo Bonzini 'f64_to_i64 f64_to_i64_r_minMag ' + 853941996bSPaolo Bonzini 'extF80_to_i64 extF80_to_i64_r_minMag ' + 863941996bSPaolo Bonzini 'f128_to_i64 f128_to_i64_r_minMag', 873941996bSPaolo Bonzini 'float-to-uint': 'f16_to_ui32 f16_to_ui32_r_minMag ' + 883941996bSPaolo Bonzini 'f32_to_ui32 f32_to_ui32_r_minMag ' + 893941996bSPaolo Bonzini 'f64_to_ui32 f64_to_ui32_r_minMag ' + 903941996bSPaolo Bonzini 'extF80_to_ui32 extF80_to_ui32_r_minMag ' + 913941996bSPaolo Bonzini 'f128_to_ui32 f128_to_ui32_r_minMag ' + 923941996bSPaolo Bonzini 'f16_to_ui64 f16_to_ui64_r_minMag ' + 933941996bSPaolo Bonzini 'f32_to_ui64 f32_to_ui64_r_minMag ' + 943941996bSPaolo Bonzini 'f64_to_ui64 f64_to_ui64_r_minMag ' + 953941996bSPaolo Bonzini 'extF80_to_ui64 extF80_to_ui64_r_minMag ' + 963941996bSPaolo Bonzini 'f128_to_ui64 f128_to_ui64_r_minMag', 973941996bSPaolo Bonzini 'round-to-integer': 'f16_roundToInt f32_roundToInt ' + 9890d00452SAlex Bennée 'f64_roundToInt extF80_roundToInt f128_roundToInt' 993941996bSPaolo Bonzini} 1003941996bSPaolo Bonzinisoftfloat_tests = { 1013941996bSPaolo Bonzini 'eq_signaling' : 'compare', 1023941996bSPaolo Bonzini 'le' : 'compare', 1033941996bSPaolo Bonzini 'le_quiet' : 'compare', 1043941996bSPaolo Bonzini 'lt_quiet' : 'compare', 1053941996bSPaolo Bonzini 'add': 'ops', 1063941996bSPaolo Bonzini 'sub': 'ops', 1073941996bSPaolo Bonzini 'mul': 'ops', 1083941996bSPaolo Bonzini 'div': 'ops', 1093941996bSPaolo Bonzini 'rem': 'ops', 1103941996bSPaolo Bonzini 'sqrt': 'ops' 1113941996bSPaolo Bonzini} 1123941996bSPaolo Bonzini# The full test suite can take a bit of time, default to a quick run 1133941996bSPaolo Bonzini# "-l 2 -r all" can take more than a day for some operations and is best 1143941996bSPaolo Bonzini# run manually 1156348a546SAlex Bennéefptest_args = ['-q', '-s', '-l', '1'] 1163941996bSPaolo Bonzinifptest_rounding_args = ['-r', 'all'] 1173941996bSPaolo Bonzini 1183941996bSPaolo Bonzini# Conversion Routines: 1193941996bSPaolo Bonziniforeach k, v : softfloat_conv_tests 12034f02e9fSPaolo Bonzini test('fp-test-' + k, fptest, 1213941996bSPaolo Bonzini args: fptest_args + fptest_rounding_args + v.split(), 122*55ccaed2SPeter Maydell timeout: slow_fp_tests.get(k, 30), 1233941996bSPaolo Bonzini suite: ['softfloat', 'softfloat-conv']) 1243941996bSPaolo Bonziniendforeach 1253941996bSPaolo Bonzini 1263941996bSPaolo Bonziniforeach k, v : softfloat_tests 12734f02e9fSPaolo Bonzini test('fp-test-' + k, fptest, 1283941996bSPaolo Bonzini args: fptest_args + fptest_rounding_args + 12990d00452SAlex Bennée ['f16_' + k, 'f32_' + k, 'f64_' + k, 'f128_' + k, 'extF80_' + k], 130*55ccaed2SPeter Maydell timeout: slow_fp_tests.get(k, 30), 1313941996bSPaolo Bonzini suite: ['softfloat', 'softfloat-' + v]) 1323941996bSPaolo Bonziniendforeach 13390d00452SAlex Bennée 13490d00452SAlex Bennée# FIXME: extF80_{mulAdd} (missing) 13534f02e9fSPaolo Bonzinitest('fp-test-mulAdd', fptest, 1363941996bSPaolo Bonzini # no fptest_rounding_args 1373941996bSPaolo Bonzini args: fptest_args + 1383941996bSPaolo Bonzini ['f16_mulAdd', 'f32_mulAdd', 'f64_mulAdd', 'f128_mulAdd'], 139*55ccaed2SPeter Maydell timeout: slow_fp_tests.get('mulAdd', 30), 140*55ccaed2SPeter Maydell suite: ['softfloat-slow', 'softfloat-ops-slow', 'slow']) 1413941996bSPaolo Bonzini 142e3af71e9SPaolo Bonziniexecutable( 1433941996bSPaolo Bonzini 'fp-bench', 1443941996bSPaolo Bonzini ['fp-bench.c', '../../fpu/softfloat.c'], 145d2dfe0b5SPaolo Bonzini dependencies: [qemuutil, libtestfloat, libsoftfloat], 1463941996bSPaolo Bonzini c_args: fpcflags, 1473941996bSPaolo Bonzini) 1482fa3546cSRichard Henderson 1492fa3546cSRichard Hendersonfptestlog2 = executable( 1502fa3546cSRichard Henderson 'fp-test-log2', 1512fa3546cSRichard Henderson ['fp-test-log2.c', '../../fpu/softfloat.c'], 152d2dfe0b5SPaolo Bonzini dependencies: [qemuutil, libsoftfloat], 1532fa3546cSRichard Henderson c_args: fpcflags, 1542fa3546cSRichard Henderson) 1552fa3546cSRichard Hendersontest('fp-test-log2', fptestlog2, 156*55ccaed2SPeter Maydell timeout: slow_fp_tests.get('log2', 30), 1572fa3546cSRichard Henderson suite: ['softfloat', 'softfloat-ops']) 158