qemu-e2k/tests/fp/meson.build
Paolo Bonzini 34f02e9f33 do not use colons in test names
Starting with meson 0.56, colons are used to separate the subproject name
from the test name.  Use dash or slash depending on what looks nicer.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-10-22 11:53:53 -04:00

635 lines
20 KiB
Meson

# There are namespace pollution issues on Windows, due to osdep.h
# bringing in Windows headers that define a FLOAT128 type.
if targetos == 'windows'
subdir_done()
endif
fpcflags = [
# softfloat defines
'-DSOFTFLOAT_ROUND_ODD',
'-DINLINE_LEVEL=5',
'-DSOFTFLOAT_FAST_DIV32TO16',
'-DSOFTFLOAT_FAST_DIV64TO32',
'-DSOFTFLOAT_FAST_INT64',
# testfloat defines
'-DFLOAT16',
'-DFLOAT64',
'-DEXTFLOAT80',
'-DFLOAT128',
'-DFLOAT_ROUND_ODD',
'-DLONG_DOUBLE_IS_EXTFLOAT80',
]
sfdir = 'berkeley-softfloat-3/source'
sfspedir = sfdir / '8086-SSE'
tfdir = 'berkeley-testfloat-3/source'
sfinc = include_directories(sfdir / 'include', sfspedir)
tfcflags = [
'-Wno-strict-prototypes',
'-Wno-unknown-pragmas',
'-Wno-uninitialized',
'-Wno-missing-prototypes',
'-Wno-return-type',
'-Wno-unused-function',
'-Wno-error',
]
tfgencases = [
tfdir / 'genCases_ui32.c',
tfdir / 'genCases_ui64.c',
tfdir / 'genCases_i32.c',
tfdir / 'genCases_i64.c',
tfdir / 'genCases_f16.c',
tfdir / 'genCases_f32.c',
tfdir / 'genCases_f64.c',
tfdir / 'genCases_extF80.c',
tfdir / 'genCases_f128.c',
]
tfwritecase = [
tfdir / 'writeCase_a_ui32.c',
tfdir / 'writeCase_a_ui64.c',
tfdir / 'writeCase_a_f16.c',
tfdir / 'writeCase_ab_f16.c',
tfdir / 'writeCase_abc_f16.c',
tfdir / 'writeCase_a_f32.c',
tfdir / 'writeCase_ab_f32.c',
tfdir / 'writeCase_abc_f32.c',
tfdir / 'writeCase_a_f64.c',
tfdir / 'writeCase_ab_f64.c',
tfdir / 'writeCase_abc_f64.c',
tfdir / 'writeCase_a_extF80M.c',
tfdir / 'writeCase_ab_extF80M.c',
tfdir / 'writeCase_a_f128M.c',
tfdir / 'writeCase_ab_f128M.c',
tfdir / 'writeCase_abc_f128M.c',
tfdir / 'writeCase_z_bool.c',
tfdir / 'writeCase_z_ui32.c',
tfdir / 'writeCase_z_ui64.c',
tfdir / 'writeCase_z_f16.c',
tfdir / 'writeCase_z_f32.c',
tfdir / 'writeCase_z_f64.c',
tfdir / 'writeCase_z_extF80M.c',
tfdir / 'writeCase_z_f128M.c',
]
tftest = [
tfdir / 'test_a_ui32_z_f16.c',
tfdir / 'test_a_ui32_z_f32.c',
tfdir / 'test_a_ui32_z_f64.c',
tfdir / 'test_a_ui32_z_extF80.c',
tfdir / 'test_a_ui32_z_f128.c',
tfdir / 'test_a_ui64_z_f16.c',
tfdir / 'test_a_ui64_z_f32.c',
tfdir / 'test_a_ui64_z_f64.c',
tfdir / 'test_a_ui64_z_extF80.c',
tfdir / 'test_a_ui64_z_f128.c',
tfdir / 'test_a_i32_z_f16.c',
tfdir / 'test_a_i32_z_f32.c',
tfdir / 'test_a_i32_z_f64.c',
tfdir / 'test_a_i32_z_extF80.c',
tfdir / 'test_a_i32_z_f128.c',
tfdir / 'test_a_i64_z_f16.c',
tfdir / 'test_a_i64_z_f32.c',
tfdir / 'test_a_i64_z_f64.c',
tfdir / 'test_a_i64_z_extF80.c',
tfdir / 'test_a_i64_z_f128.c',
tfdir / 'test_a_f16_z_ui32_rx.c',
tfdir / 'test_a_f16_z_ui64_rx.c',
tfdir / 'test_a_f16_z_i32_rx.c',
tfdir / 'test_a_f16_z_i64_rx.c',
tfdir / 'test_a_f16_z_ui32_x.c',
tfdir / 'test_a_f16_z_ui64_x.c',
tfdir / 'test_a_f16_z_i32_x.c',
tfdir / 'test_a_f16_z_i64_x.c',
tfdir / 'test_a_f16_z_f32.c',
tfdir / 'test_a_f16_z_f64.c',
tfdir / 'test_a_f16_z_extF80.c',
tfdir / 'test_a_f16_z_f128.c',
tfdir / 'test_az_f16.c',
tfdir / 'test_az_f16_rx.c',
tfdir / 'test_abz_f16.c',
tfdir / 'test_abcz_f16.c',
tfdir / 'test_ab_f16_z_bool.c',
tfdir / 'test_a_f32_z_ui32_rx.c',
tfdir / 'test_a_f32_z_ui64_rx.c',
tfdir / 'test_a_f32_z_i32_rx.c',
tfdir / 'test_a_f32_z_i64_rx.c',
tfdir / 'test_a_f32_z_ui32_x.c',
tfdir / 'test_a_f32_z_ui64_x.c',
tfdir / 'test_a_f32_z_i32_x.c',
tfdir / 'test_a_f32_z_i64_x.c',
tfdir / 'test_a_f32_z_f16.c',
tfdir / 'test_a_f32_z_f64.c',
tfdir / 'test_a_f32_z_extF80.c',
tfdir / 'test_a_f32_z_f128.c',
tfdir / 'test_az_f32.c',
tfdir / 'test_az_f32_rx.c',
tfdir / 'test_abz_f32.c',
tfdir / 'test_abcz_f32.c',
tfdir / 'test_ab_f32_z_bool.c',
tfdir / 'test_a_f64_z_ui32_rx.c',
tfdir / 'test_a_f64_z_ui64_rx.c',
tfdir / 'test_a_f64_z_i32_rx.c',
tfdir / 'test_a_f64_z_i64_rx.c',
tfdir / 'test_a_f64_z_ui32_x.c',
tfdir / 'test_a_f64_z_ui64_x.c',
tfdir / 'test_a_f64_z_i32_x.c',
tfdir / 'test_a_f64_z_i64_x.c',
tfdir / 'test_a_f64_z_f16.c',
tfdir / 'test_a_f64_z_f32.c',
tfdir / 'test_a_f64_z_extF80.c',
tfdir / 'test_a_f64_z_f128.c',
tfdir / 'test_az_f64.c',
tfdir / 'test_az_f64_rx.c',
tfdir / 'test_abz_f64.c',
tfdir / 'test_abcz_f64.c',
tfdir / 'test_ab_f64_z_bool.c',
tfdir / 'test_a_extF80_z_ui32_rx.c',
tfdir / 'test_a_extF80_z_ui64_rx.c',
tfdir / 'test_a_extF80_z_i32_rx.c',
tfdir / 'test_a_extF80_z_i64_rx.c',
tfdir / 'test_a_extF80_z_ui32_x.c',
tfdir / 'test_a_extF80_z_ui64_x.c',
tfdir / 'test_a_extF80_z_i32_x.c',
tfdir / 'test_a_extF80_z_i64_x.c',
tfdir / 'test_a_extF80_z_f16.c',
tfdir / 'test_a_extF80_z_f32.c',
tfdir / 'test_a_extF80_z_f64.c',
tfdir / 'test_a_extF80_z_f128.c',
tfdir / 'test_az_extF80.c',
tfdir / 'test_az_extF80_rx.c',
tfdir / 'test_abz_extF80.c',
tfdir / 'test_ab_extF80_z_bool.c',
tfdir / 'test_a_f128_z_ui32_rx.c',
tfdir / 'test_a_f128_z_ui64_rx.c',
tfdir / 'test_a_f128_z_i32_rx.c',
tfdir / 'test_a_f128_z_i64_rx.c',
tfdir / 'test_a_f128_z_ui32_x.c',
tfdir / 'test_a_f128_z_ui64_x.c',
tfdir / 'test_a_f128_z_i32_x.c',
tfdir / 'test_a_f128_z_i64_x.c',
tfdir / 'test_a_f128_z_f16.c',
tfdir / 'test_a_f128_z_f32.c',
tfdir / 'test_a_f128_z_f64.c',
tfdir / 'test_a_f128_z_extF80.c',
tfdir / 'test_az_f128.c',
tfdir / 'test_az_f128_rx.c',
tfdir / 'test_abz_f128.c',
tfdir / 'test_abcz_f128.c',
tfdir / 'test_ab_f128_z_bool.c',
]
libtestfloat = static_library(
'testfloat',
files(
tfdir / 'uint128_inline.c',
tfdir / 'uint128.c',
tfdir / 'fail.c',
tfdir / 'functions_common.c',
tfdir / 'functionInfos.c',
tfdir / 'standardFunctionInfos.c',
tfdir / 'random.c',
tfdir / 'genCases_common.c',
tfgencases,
tfdir / 'genCases_writeTestsTotal.c',
tfdir / 'verCases_inline.c',
tfdir / 'verCases_common.c',
tfdir / 'verCases_writeFunctionName.c',
tfdir / 'readHex.c',
tfdir / 'writeHex.c',
tfwritecase,
tfdir / 'testLoops_common.c',
tftest,
),
include_directories: sfinc,
c_args: tfcflags + fpcflags,
)
sfcflags = [
'-Wno-missing-prototypes',
'-Wno-redundant-decls',
'-Wno-return-type',
'-Wno-error',
]
libsoftfloat = static_library(
'softfloat',
files(
# primitives
sfdir / 's_eq128.c',
sfdir / 's_le128.c',
sfdir / 's_lt128.c',
sfdir / 's_shortShiftLeft128.c',
sfdir / 's_shortShiftRight128.c',
sfdir / 's_shortShiftRightJam64.c',
sfdir / 's_shortShiftRightJam64Extra.c',
sfdir / 's_shortShiftRightJam128.c',
sfdir / 's_shortShiftRightJam128Extra.c',
sfdir / 's_shiftRightJam32.c',
sfdir / 's_shiftRightJam64.c',
sfdir / 's_shiftRightJam64Extra.c',
sfdir / 's_shiftRightJam128.c',
sfdir / 's_shiftRightJam128Extra.c',
sfdir / 's_shiftRightJam256M.c',
sfdir / 's_countLeadingZeros8.c',
sfdir / 's_countLeadingZeros16.c',
sfdir / 's_countLeadingZeros32.c',
sfdir / 's_countLeadingZeros64.c',
sfdir / 's_add128.c',
sfdir / 's_add256M.c',
sfdir / 's_sub128.c',
sfdir / 's_sub256M.c',
sfdir / 's_mul64ByShifted32To128.c',
sfdir / 's_mul64To128.c',
sfdir / 's_mul128By32.c',
sfdir / 's_mul128To256M.c',
sfdir / 's_approxRecip_1Ks.c',
sfdir / 's_approxRecip32_1.c',
sfdir / 's_approxRecipSqrt_1Ks.c',
sfdir / 's_approxRecipSqrt32_1.c',
# others
sfdir / 's_roundToUI32.c',
sfdir / 's_roundToUI64.c',
sfdir / 's_roundToI32.c',
sfdir / 's_roundToI64.c',
sfdir / 's_normSubnormalF16Sig.c',
sfdir / 's_roundPackToF16.c',
sfdir / 's_normRoundPackToF16.c',
sfdir / 's_addMagsF16.c',
sfdir / 's_subMagsF16.c',
sfdir / 's_mulAddF16.c',
sfdir / 's_normSubnormalF32Sig.c',
sfdir / 's_roundPackToF32.c',
sfdir / 's_normRoundPackToF32.c',
sfdir / 's_addMagsF32.c',
sfdir / 's_subMagsF32.c',
sfdir / 's_mulAddF32.c',
sfdir / 's_normSubnormalF64Sig.c',
sfdir / 's_roundPackToF64.c',
sfdir / 's_normRoundPackToF64.c',
sfdir / 's_addMagsF64.c',
sfdir / 's_subMagsF64.c',
sfdir / 's_mulAddF64.c',
sfdir / 's_normSubnormalExtF80Sig.c',
sfdir / 's_roundPackToExtF80.c',
sfdir / 's_normRoundPackToExtF80.c',
sfdir / 's_addMagsExtF80.c',
sfdir / 's_subMagsExtF80.c',
sfdir / 's_normSubnormalF128Sig.c',
sfdir / 's_roundPackToF128.c',
sfdir / 's_normRoundPackToF128.c',
sfdir / 's_addMagsF128.c',
sfdir / 's_subMagsF128.c',
sfdir / 's_mulAddF128.c',
sfdir / 'softfloat_state.c',
sfdir / 'ui32_to_f16.c',
sfdir / 'ui32_to_f32.c',
sfdir / 'ui32_to_f64.c',
sfdir / 'ui32_to_extF80.c',
sfdir / 'ui32_to_extF80M.c',
sfdir / 'ui32_to_f128.c',
sfdir / 'ui32_to_f128M.c',
sfdir / 'ui64_to_f16.c',
sfdir / 'ui64_to_f32.c',
sfdir / 'ui64_to_f64.c',
sfdir / 'ui64_to_extF80.c',
sfdir / 'ui64_to_extF80M.c',
sfdir / 'ui64_to_f128.c',
sfdir / 'ui64_to_f128M.c',
sfdir / 'i32_to_f16.c',
sfdir / 'i32_to_f32.c',
sfdir / 'i32_to_f64.c',
sfdir / 'i32_to_extF80.c',
sfdir / 'i32_to_extF80M.c',
sfdir / 'i32_to_f128.c',
sfdir / 'i32_to_f128M.c',
sfdir / 'i64_to_f16.c',
sfdir / 'i64_to_f32.c',
sfdir / 'i64_to_f64.c',
sfdir / 'i64_to_extF80.c',
sfdir / 'i64_to_extF80M.c',
sfdir / 'i64_to_f128.c',
sfdir / 'i64_to_f128M.c',
sfdir / 'f16_to_ui32.c',
sfdir / 'f16_to_ui64.c',
sfdir / 'f16_to_i32.c',
sfdir / 'f16_to_i64.c',
sfdir / 'f16_to_ui32_r_minMag.c',
sfdir / 'f16_to_ui64_r_minMag.c',
sfdir / 'f16_to_i32_r_minMag.c',
sfdir / 'f16_to_i64_r_minMag.c',
sfdir / 'f16_to_f32.c',
sfdir / 'f16_to_f64.c',
sfdir / 'f16_to_extF80.c',
sfdir / 'f16_to_extF80M.c',
sfdir / 'f16_to_f128.c',
sfdir / 'f16_to_f128M.c',
sfdir / 'f16_roundToInt.c',
sfdir / 'f16_add.c',
sfdir / 'f16_sub.c',
sfdir / 'f16_mul.c',
sfdir / 'f16_mulAdd.c',
sfdir / 'f16_div.c',
sfdir / 'f16_rem.c',
sfdir / 'f16_sqrt.c',
sfdir / 'f16_eq.c',
sfdir / 'f16_le.c',
sfdir / 'f16_lt.c',
sfdir / 'f16_eq_signaling.c',
sfdir / 'f16_le_quiet.c',
sfdir / 'f16_lt_quiet.c',
sfdir / 'f16_isSignalingNaN.c',
sfdir / 'f32_to_ui32.c',
sfdir / 'f32_to_ui64.c',
sfdir / 'f32_to_i32.c',
sfdir / 'f32_to_i64.c',
sfdir / 'f32_to_ui32_r_minMag.c',
sfdir / 'f32_to_ui64_r_minMag.c',
sfdir / 'f32_to_i32_r_minMag.c',
sfdir / 'f32_to_i64_r_minMag.c',
sfdir / 'f32_to_f16.c',
sfdir / 'f32_to_f64.c',
sfdir / 'f32_to_extF80.c',
sfdir / 'f32_to_extF80M.c',
sfdir / 'f32_to_f128.c',
sfdir / 'f32_to_f128M.c',
sfdir / 'f32_roundToInt.c',
sfdir / 'f32_add.c',
sfdir / 'f32_sub.c',
sfdir / 'f32_mul.c',
sfdir / 'f32_mulAdd.c',
sfdir / 'f32_div.c',
sfdir / 'f32_rem.c',
sfdir / 'f32_sqrt.c',
sfdir / 'f32_eq.c',
sfdir / 'f32_le.c',
sfdir / 'f32_lt.c',
sfdir / 'f32_eq_signaling.c',
sfdir / 'f32_le_quiet.c',
sfdir / 'f32_lt_quiet.c',
sfdir / 'f32_isSignalingNaN.c',
sfdir / 'f64_to_ui32.c',
sfdir / 'f64_to_ui64.c',
sfdir / 'f64_to_i32.c',
sfdir / 'f64_to_i64.c',
sfdir / 'f64_to_ui32_r_minMag.c',
sfdir / 'f64_to_ui64_r_minMag.c',
sfdir / 'f64_to_i32_r_minMag.c',
sfdir / 'f64_to_i64_r_minMag.c',
sfdir / 'f64_to_f16.c',
sfdir / 'f64_to_f32.c',
sfdir / 'f64_to_extF80.c',
sfdir / 'f64_to_extF80M.c',
sfdir / 'f64_to_f128.c',
sfdir / 'f64_to_f128M.c',
sfdir / 'f64_roundToInt.c',
sfdir / 'f64_add.c',
sfdir / 'f64_sub.c',
sfdir / 'f64_mul.c',
sfdir / 'f64_mulAdd.c',
sfdir / 'f64_div.c',
sfdir / 'f64_rem.c',
sfdir / 'f64_sqrt.c',
sfdir / 'f64_eq.c',
sfdir / 'f64_le.c',
sfdir / 'f64_lt.c',
sfdir / 'f64_eq_signaling.c',
sfdir / 'f64_le_quiet.c',
sfdir / 'f64_lt_quiet.c',
sfdir / 'f64_isSignalingNaN.c',
sfdir / 'extF80_to_ui32.c',
sfdir / 'extF80_to_ui64.c',
sfdir / 'extF80_to_i32.c',
sfdir / 'extF80_to_i64.c',
sfdir / 'extF80_to_ui32_r_minMag.c',
sfdir / 'extF80_to_ui64_r_minMag.c',
sfdir / 'extF80_to_i32_r_minMag.c',
sfdir / 'extF80_to_i64_r_minMag.c',
sfdir / 'extF80_to_f16.c',
sfdir / 'extF80_to_f32.c',
sfdir / 'extF80_to_f64.c',
sfdir / 'extF80_to_f128.c',
sfdir / 'extF80_roundToInt.c',
sfdir / 'extF80_add.c',
sfdir / 'extF80_sub.c',
sfdir / 'extF80_mul.c',
sfdir / 'extF80_div.c',
sfdir / 'extF80_rem.c',
sfdir / 'extF80_sqrt.c',
sfdir / 'extF80_eq.c',
sfdir / 'extF80_le.c',
sfdir / 'extF80_lt.c',
sfdir / 'extF80_eq_signaling.c',
sfdir / 'extF80_le_quiet.c',
sfdir / 'extF80_lt_quiet.c',
sfdir / 'extF80_isSignalingNaN.c',
sfdir / 'extF80M_to_ui32.c',
sfdir / 'extF80M_to_ui64.c',
sfdir / 'extF80M_to_i32.c',
sfdir / 'extF80M_to_i64.c',
sfdir / 'extF80M_to_ui32_r_minMag.c',
sfdir / 'extF80M_to_ui64_r_minMag.c',
sfdir / 'extF80M_to_i32_r_minMag.c',
sfdir / 'extF80M_to_i64_r_minMag.c',
sfdir / 'extF80M_to_f16.c',
sfdir / 'extF80M_to_f32.c',
sfdir / 'extF80M_to_f64.c',
sfdir / 'extF80M_to_f128M.c',
sfdir / 'extF80M_roundToInt.c',
sfdir / 'extF80M_add.c',
sfdir / 'extF80M_sub.c',
sfdir / 'extF80M_mul.c',
sfdir / 'extF80M_div.c',
sfdir / 'extF80M_rem.c',
sfdir / 'extF80M_sqrt.c',
sfdir / 'extF80M_eq.c',
sfdir / 'extF80M_le.c',
sfdir / 'extF80M_lt.c',
sfdir / 'extF80M_eq_signaling.c',
sfdir / 'extF80M_le_quiet.c',
sfdir / 'extF80M_lt_quiet.c',
sfdir / 'f128_to_ui32.c',
sfdir / 'f128_to_ui64.c',
sfdir / 'f128_to_i32.c',
sfdir / 'f128_to_i64.c',
sfdir / 'f128_to_ui32_r_minMag.c',
sfdir / 'f128_to_ui64_r_minMag.c',
sfdir / 'f128_to_i32_r_minMag.c',
sfdir / 'f128_to_i64_r_minMag.c',
sfdir / 'f128_to_f16.c',
sfdir / 'f128_to_f32.c',
sfdir / 'f128_to_extF80.c',
sfdir / 'f128_to_f64.c',
sfdir / 'f128_roundToInt.c',
sfdir / 'f128_add.c',
sfdir / 'f128_sub.c',
sfdir / 'f128_mul.c',
sfdir / 'f128_mulAdd.c',
sfdir / 'f128_div.c',
sfdir / 'f128_rem.c',
sfdir / 'f128_sqrt.c',
sfdir / 'f128_eq.c',
sfdir / 'f128_le.c',
sfdir / 'f128_lt.c',
sfdir / 'f128_eq_signaling.c',
sfdir / 'f128_le_quiet.c',
sfdir / 'f128_lt_quiet.c',
sfdir / 'f128_isSignalingNaN.c',
sfdir / 'f128M_to_ui32.c',
sfdir / 'f128M_to_ui64.c',
sfdir / 'f128M_to_i32.c',
sfdir / 'f128M_to_i64.c',
sfdir / 'f128M_to_ui32_r_minMag.c',
sfdir / 'f128M_to_ui64_r_minMag.c',
sfdir / 'f128M_to_i32_r_minMag.c',
sfdir / 'f128M_to_i64_r_minMag.c',
sfdir / 'f128M_to_f16.c',
sfdir / 'f128M_to_f32.c',
sfdir / 'f128M_to_extF80M.c',
sfdir / 'f128M_to_f64.c',
sfdir / 'f128M_roundToInt.c',
sfdir / 'f128M_add.c',
sfdir / 'f128M_sub.c',
sfdir / 'f128M_mul.c',
sfdir / 'f128M_mulAdd.c',
sfdir / 'f128M_div.c',
sfdir / 'f128M_rem.c',
sfdir / 'f128M_sqrt.c',
sfdir / 'f128M_eq.c',
sfdir / 'f128M_le.c',
sfdir / 'f128M_lt.c',
sfdir / 'f128M_eq_signaling.c',
sfdir / 'f128M_le_quiet.c',
sfdir / 'f128M_lt_quiet.c',
# spe
sfspedir / 'softfloat_raiseFlags.c',
sfspedir / 's_f16UIToCommonNaN.c',
sfspedir / 's_commonNaNToF16UI.c',
sfspedir / 's_propagateNaNF16UI.c',
sfspedir / 's_f32UIToCommonNaN.c',
sfspedir / 's_commonNaNToF32UI.c',
sfspedir / 's_propagateNaNF32UI.c',
sfspedir / 's_f64UIToCommonNaN.c',
sfspedir / 's_commonNaNToF64UI.c',
sfspedir / 's_propagateNaNF64UI.c',
sfspedir / 'extF80M_isSignalingNaN.c',
sfspedir / 's_extF80UIToCommonNaN.c',
sfspedir / 's_commonNaNToExtF80UI.c',
sfspedir / 's_propagateNaNExtF80UI.c',
sfspedir / 'f128M_isSignalingNaN.c',
sfspedir / 's_f128UIToCommonNaN.c',
sfspedir / 's_commonNaNToF128UI.c',
sfspedir / 's_propagateNaNF128UI.c',
),
include_directories: sfinc,
c_args: sfcflags + fpcflags,
)
fpcflags += [
# work around TARGET_* poisoning
'-DHW_POISON_H',
# define a target to match testfloat's implementation-defined choices, such as
# whether to raise the invalid flag when dealing with NaNs in muladd.
'-DTARGET_ARM',
# FIXME: uiZ may be used uninitialized in this function
'-Wno-uninitialized',
]
fptest = executable(
'fp-test',
['fp-test.c', tfdir / 'slowfloat.c', '../../fpu/softfloat.c'],
link_with: [libtestfloat, libsoftfloat],
dependencies: [qemuutil],
include_directories: [sfinc, include_directories(tfdir)],
c_args: fpcflags,
)
softfloat_conv_tests = {
'float-to-float': 'f16_to_f32 f16_to_f64 f16_to_extF80 f16_to_f128 ' +
'f32_to_f16 f32_to_f64 f32_to_extF80 ' +
'f64_to_f16 f64_to_f32 ' +
'extF80_to_f16 extF80_to_f32 ' +
'extF80_to_f64 extF80_to_f128 ' +
'f128_to_f16',
'int-to-float': 'i32_to_f16 i64_to_f16 i32_to_f32 i64_to_f32 ' +
'i32_to_f64 i64_to_f64 i32_to_f128 i64_to_f128',
'uint-to-float': 'ui32_to_f16 ui64_to_f16 ui32_to_f32 ui64_to_f32 ' +
'ui32_to_f64 ui64_to_f64 ui64_to_f128 ' +
'ui32_to_extF80 ui64_to_extF80',
'float-to-int': 'f16_to_i32 f16_to_i32_r_minMag ' +
'f32_to_i32 f32_to_i32_r_minMag ' +
'f64_to_i32 f64_to_i32_r_minMag ' +
'extF80_to_i32 extF80_to_i32_r_minMag ' +
'f128_to_i32 f128_to_i32_r_minMag ' +
'f16_to_i64 f16_to_i64_r_minMag ' +
'f32_to_i64 f32_to_i64_r_minMag ' +
'f64_to_i64 f64_to_i64_r_minMag ' +
'extF80_to_i64 extF80_to_i64_r_minMag ' +
'f128_to_i64 f128_to_i64_r_minMag',
'float-to-uint': 'f16_to_ui32 f16_to_ui32_r_minMag ' +
'f32_to_ui32 f32_to_ui32_r_minMag ' +
'f64_to_ui32 f64_to_ui32_r_minMag ' +
'extF80_to_ui32 extF80_to_ui32_r_minMag ' +
'f128_to_ui32 f128_to_ui32_r_minMag ' +
'f16_to_ui64 f16_to_ui64_r_minMag ' +
'f32_to_ui64 f32_to_ui64_r_minMag ' +
'f64_to_ui64 f64_to_ui64_r_minMag ' +
'extF80_to_ui64 extF80_to_ui64_r_minMag ' +
'f128_to_ui64 f128_to_ui64_r_minMag',
'round-to-integer': 'f16_roundToInt f32_roundToInt ' +
'f64_roundToInt f128_roundToInt'
}
softfloat_tests = {
'eq_signaling' : 'compare',
'le' : 'compare',
'le_quiet' : 'compare',
'lt_quiet' : 'compare',
'add': 'ops',
'sub': 'ops',
'mul': 'ops',
'div': 'ops',
'rem': 'ops',
'sqrt': 'ops'
}
# The full test suite can take a bit of time, default to a quick run
# "-l 2 -r all" can take more than a day for some operations and is best
# run manually
fptest_args = ['-s', '-l', '1']
fptest_rounding_args = ['-r', 'all']
# Conversion Routines:
# FIXME: i32_to_extF80 (broken), i64_to_extF80 (broken)
# extF80_roundToInt (broken)
foreach k, v : softfloat_conv_tests
test('fp-test-' + k, fptest,
args: fptest_args + fptest_rounding_args + v.split(),
suite: ['softfloat', 'softfloat-conv'])
endforeach
# FIXME: extF80_{lt_quiet, rem} (broken),
# extF80_{mulAdd} (missing)
foreach k, v : softfloat_tests
extF80_broken = ['lt_quiet', 'rem'].contains(k)
test('fp-test-' + k, fptest,
args: fptest_args + fptest_rounding_args +
['f16_' + k, 'f32_' + k, 'f64_' + k, 'f128_' + k] +
(extF80_broken ? [] : ['extF80_' + k]),
suite: ['softfloat', 'softfloat-' + v])
endforeach
test('fp-test-mulAdd', fptest,
# no fptest_rounding_args
args: fptest_args +
['f16_mulAdd', 'f32_mulAdd', 'f64_mulAdd', 'f128_mulAdd'],
suite: ['softfloat-slow', 'softfloat-ops-slow'], timeout: 60)
fpbench = executable(
'fp-bench',
['fp-bench.c', '../../fpu/softfloat.c'],
link_with: [libtestfloat, libsoftfloat],
dependencies: [qemuutil],
include_directories: [sfinc, include_directories(tfdir)],
c_args: fpcflags,
)