xref: /openbmc/qemu/tests/fp/meson.build (revision 92b1dba3)
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
10d2dfe0b5SPaolo Bonzinisfcflags = [
113941996bSPaolo Bonzini  # softfloat defines
123941996bSPaolo Bonzini  '-DSOFTFLOAT_ROUND_ODD',
133941996bSPaolo Bonzini  '-DINLINE_LEVEL=5',
143941996bSPaolo Bonzini  '-DSOFTFLOAT_FAST_DIV32TO16',
153941996bSPaolo Bonzini  '-DSOFTFLOAT_FAST_DIV64TO32',
163941996bSPaolo Bonzini  '-DSOFTFLOAT_FAST_INT64',
17d2dfe0b5SPaolo Bonzini]
18d2dfe0b5SPaolo Bonzinitfcflags = [
193941996bSPaolo Bonzini  # testfloat defines
203941996bSPaolo Bonzini  '-DFLOAT16',
213941996bSPaolo Bonzini  '-DFLOAT64',
223941996bSPaolo Bonzini  '-DEXTFLOAT80',
233941996bSPaolo Bonzini  '-DFLOAT128',
243941996bSPaolo Bonzini  '-DFLOAT_ROUND_ODD',
253941996bSPaolo Bonzini  '-DLONG_DOUBLE_IS_EXTFLOAT80',
263941996bSPaolo Bonzini]
273941996bSPaolo Bonzini
28d2dfe0b5SPaolo Bonzinilibsoftfloat_proj = subproject('berkeley-softfloat-3', required: true,
29d2dfe0b5SPaolo Bonzini    default_options: 'defines=' + ','.join(sfcflags))
30d2dfe0b5SPaolo Bonzinilibsoftfloat = libsoftfloat_proj.get_variable('libsoftfloat_dep')
313941996bSPaolo Bonzini
32d2dfe0b5SPaolo Bonzinilibtestfloat_proj = subproject('berkeley-testfloat-3', required: true,
33d2dfe0b5SPaolo Bonzini    default_options: 'defines=' + ','.join(tfcflags))
34d2dfe0b5SPaolo Bonzinilibtestfloat = libtestfloat_proj.get_variable('libtestfloat_dep')
35d2dfe0b5SPaolo Bonzinilibslowfloat = libtestfloat_proj.get_variable('libslowfloat_dep')
363941996bSPaolo Bonzini
37d2dfe0b5SPaolo Bonzinifpcflags = [
383941996bSPaolo Bonzini  # work around TARGET_* poisoning
393941996bSPaolo Bonzini  '-DHW_POISON_H',
403941996bSPaolo Bonzini  # define a target to match testfloat's implementation-defined choices, such as
413941996bSPaolo Bonzini  # whether to raise the invalid flag when dealing with NaNs in muladd.
423941996bSPaolo Bonzini  '-DTARGET_ARM',
433941996bSPaolo Bonzini  # FIXME: uiZ may be used uninitialized in this function
443941996bSPaolo Bonzini  '-Wno-uninitialized',
453941996bSPaolo Bonzini]
463941996bSPaolo Bonzini
473941996bSPaolo Bonzinifptest = executable(
483941996bSPaolo Bonzini  'fp-test',
49d2dfe0b5SPaolo Bonzini  ['fp-test.c', '../../fpu/softfloat.c'],
50d2dfe0b5SPaolo Bonzini  dependencies: [qemuutil, libsoftfloat, libtestfloat, libslowfloat],
513941996bSPaolo Bonzini  c_args: fpcflags,
523941996bSPaolo Bonzini)
533941996bSPaolo Bonzinisoftfloat_conv_tests = {
543941996bSPaolo Bonzini    'float-to-float': 'f16_to_f32 f16_to_f64 f16_to_extF80 f16_to_f128 ' +
553941996bSPaolo Bonzini                      'f32_to_f16 f32_to_f64 f32_to_extF80 ' +
563941996bSPaolo Bonzini                      'f64_to_f16 f64_to_f32 ' +
573941996bSPaolo Bonzini                      'extF80_to_f16 extF80_to_f32 ' +
583941996bSPaolo Bonzini                      'extF80_to_f64 extF80_to_f128 ' +
593941996bSPaolo Bonzini                      'f128_to_f16',
603941996bSPaolo Bonzini    'int-to-float': 'i32_to_f16 i64_to_f16 i32_to_f32 i64_to_f32 ' +
6190d00452SAlex Bennée                    'i32_to_f64 i64_to_f64 ' +
6290d00452SAlex Bennée                    'i32_to_extF80 i64_to_extF80 ' +
6390d00452SAlex Bennée                    'i32_to_f128 i64_to_f128',
643941996bSPaolo Bonzini    'uint-to-float': 'ui32_to_f16 ui64_to_f16 ui32_to_f32 ui64_to_f32 ' +
653941996bSPaolo Bonzini                     'ui32_to_f64 ui64_to_f64 ui64_to_f128 ' +
663941996bSPaolo Bonzini                     'ui32_to_extF80 ui64_to_extF80',
673941996bSPaolo Bonzini    'float-to-int': 'f16_to_i32 f16_to_i32_r_minMag ' +
683941996bSPaolo Bonzini                    'f32_to_i32 f32_to_i32_r_minMag ' +
693941996bSPaolo Bonzini                    'f64_to_i32 f64_to_i32_r_minMag ' +
703941996bSPaolo Bonzini                    'extF80_to_i32 extF80_to_i32_r_minMag ' +
713941996bSPaolo Bonzini                    'f128_to_i32 f128_to_i32_r_minMag ' +
723941996bSPaolo Bonzini                    'f16_to_i64 f16_to_i64_r_minMag ' +
733941996bSPaolo Bonzini                    'f32_to_i64 f32_to_i64_r_minMag ' +
743941996bSPaolo Bonzini                    'f64_to_i64 f64_to_i64_r_minMag ' +
753941996bSPaolo Bonzini                    'extF80_to_i64 extF80_to_i64_r_minMag ' +
763941996bSPaolo Bonzini                    'f128_to_i64 f128_to_i64_r_minMag',
773941996bSPaolo Bonzini    'float-to-uint': 'f16_to_ui32 f16_to_ui32_r_minMag ' +
783941996bSPaolo Bonzini                     'f32_to_ui32 f32_to_ui32_r_minMag ' +
793941996bSPaolo Bonzini                     'f64_to_ui32 f64_to_ui32_r_minMag ' +
803941996bSPaolo Bonzini                     'extF80_to_ui32 extF80_to_ui32_r_minMag ' +
813941996bSPaolo Bonzini                     'f128_to_ui32 f128_to_ui32_r_minMag ' +
823941996bSPaolo Bonzini                     'f16_to_ui64 f16_to_ui64_r_minMag ' +
833941996bSPaolo Bonzini                     'f32_to_ui64 f32_to_ui64_r_minMag ' +
843941996bSPaolo Bonzini                     'f64_to_ui64 f64_to_ui64_r_minMag ' +
853941996bSPaolo Bonzini                     'extF80_to_ui64 extF80_to_ui64_r_minMag ' +
863941996bSPaolo Bonzini                     'f128_to_ui64 f128_to_ui64_r_minMag',
873941996bSPaolo Bonzini    'round-to-integer': 'f16_roundToInt f32_roundToInt ' +
8890d00452SAlex Bennée                        'f64_roundToInt extF80_roundToInt f128_roundToInt'
893941996bSPaolo Bonzini}
903941996bSPaolo Bonzinisoftfloat_tests = {
913941996bSPaolo Bonzini    'eq_signaling' : 'compare',
923941996bSPaolo Bonzini    'le' : 'compare',
933941996bSPaolo Bonzini    'le_quiet' : 'compare',
943941996bSPaolo Bonzini    'lt_quiet' : 'compare',
953941996bSPaolo Bonzini    'add': 'ops',
963941996bSPaolo Bonzini    'sub': 'ops',
973941996bSPaolo Bonzini    'mul': 'ops',
983941996bSPaolo Bonzini    'div': 'ops',
993941996bSPaolo Bonzini    'rem': 'ops',
1003941996bSPaolo Bonzini    'sqrt': 'ops'
1013941996bSPaolo Bonzini}
1023941996bSPaolo Bonzini# The full test suite can take a bit of time, default to a quick run
1033941996bSPaolo Bonzini# "-l 2 -r all" can take more than a day for some operations and is best
1043941996bSPaolo Bonzini# run manually
1056348a546SAlex Bennéefptest_args = ['-q', '-s', '-l', '1']
1063941996bSPaolo Bonzinifptest_rounding_args = ['-r', 'all']
1073941996bSPaolo Bonzini
1083941996bSPaolo Bonzini# Conversion Routines:
1093941996bSPaolo Bonziniforeach k, v : softfloat_conv_tests
11034f02e9fSPaolo Bonzini  test('fp-test-' + k, fptest,
1113941996bSPaolo Bonzini       args: fptest_args + fptest_rounding_args + v.split(),
1123941996bSPaolo Bonzini       suite: ['softfloat', 'softfloat-conv'])
1133941996bSPaolo Bonziniendforeach
1143941996bSPaolo Bonzini
1153941996bSPaolo Bonziniforeach k, v : softfloat_tests
11634f02e9fSPaolo Bonzini  test('fp-test-' + k, fptest,
1173941996bSPaolo Bonzini       args: fptest_args + fptest_rounding_args +
11890d00452SAlex Bennée             ['f16_' + k, 'f32_' + k, 'f64_' + k, 'f128_' + k, 'extF80_' + k],
1193941996bSPaolo Bonzini       suite: ['softfloat', 'softfloat-' + v])
1203941996bSPaolo Bonziniendforeach
12190d00452SAlex Bennée
12290d00452SAlex Bennée# FIXME: extF80_{mulAdd} (missing)
12334f02e9fSPaolo Bonzinitest('fp-test-mulAdd', fptest,
1243941996bSPaolo Bonzini     # no fptest_rounding_args
1253941996bSPaolo Bonzini     args: fptest_args +
1263941996bSPaolo Bonzini           ['f16_mulAdd', 'f32_mulAdd', 'f64_mulAdd', 'f128_mulAdd'],
127*92b1dba3SThomas Huth     suite: ['softfloat-slow', 'softfloat-ops-slow', 'slow'], timeout: 180)
1283941996bSPaolo Bonzini
129e3af71e9SPaolo Bonziniexecutable(
1303941996bSPaolo Bonzini  'fp-bench',
1313941996bSPaolo Bonzini  ['fp-bench.c', '../../fpu/softfloat.c'],
132d2dfe0b5SPaolo Bonzini  dependencies: [qemuutil, libtestfloat, libsoftfloat],
1333941996bSPaolo Bonzini  c_args: fpcflags,
1343941996bSPaolo Bonzini)
1352fa3546cSRichard Henderson
1362fa3546cSRichard Hendersonfptestlog2 = executable(
1372fa3546cSRichard Henderson  'fp-test-log2',
1382fa3546cSRichard Henderson  ['fp-test-log2.c', '../../fpu/softfloat.c'],
139d2dfe0b5SPaolo Bonzini  dependencies: [qemuutil, libsoftfloat],
1402fa3546cSRichard Henderson  c_args: fpcflags,
1412fa3546cSRichard Henderson)
1422fa3546cSRichard Hendersontest('fp-test-log2', fptestlog2,
1432fa3546cSRichard Henderson     suite: ['softfloat', 'softfloat-ops'])
144