1*412f47f9SXin Li /* 2*412f47f9SXin Li * PL macros for emitting various details about routines for consumption by 3*412f47f9SXin Li * runulp.sh. 4*412f47f9SXin Li * 5*412f47f9SXin Li * Copyright (c) 2022-2023, Arm Limited. 6*412f47f9SXin Li * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception. 7*412f47f9SXin Li */ 8*412f47f9SXin Li 9*412f47f9SXin Li /* Emit the max ULP threshold, l, for routine f. Piggy-back PL_TEST_EXPECT_FENV 10*412f47f9SXin Li on PL_TEST_ULP to add EXPECT_FENV to all scalar routines. */ 11*412f47f9SXin Li #if WANT_VMATH || defined(IGNORE_SCALAR_FENV) 12*412f47f9SXin Li # define PL_TEST_ULP(f, l) PL_TEST_ULP f l 13*412f47f9SXin Li #else 14*412f47f9SXin Li # define PL_TEST_ULP(f, l) \ 15*412f47f9SXin Li PL_TEST_EXPECT_FENV_ALWAYS (f) \ 16*412f47f9SXin Li PL_TEST_ULP f l 17*412f47f9SXin Li #endif 18*412f47f9SXin Li 19*412f47f9SXin Li /* Emit routine name if e == 1 and f is expected to correctly trigger fenv 20*412f47f9SXin Li exceptions. e allows declaration to be emitted conditionally upon certain 21*412f47f9SXin Li build flags - defer expansion by one pass to allow those flags to be expanded 22*412f47f9SXin Li properly. */ 23*412f47f9SXin Li #define PL_TEST_EXPECT_FENV(f, e) PL_TEST_EXPECT_FENV_ (f, e) 24*412f47f9SXin Li #define PL_TEST_EXPECT_FENV_(f, e) PL_TEST_EXPECT_FENV_##e (f) 25*412f47f9SXin Li #define PL_TEST_EXPECT_FENV_1(f) PL_TEST_EXPECT_FENV_ENABLED f 26*412f47f9SXin Li #define PL_TEST_EXPECT_FENV_ALWAYS(f) PL_TEST_EXPECT_FENV (f, 1) 27*412f47f9SXin Li 28*412f47f9SXin Li #define PL_TEST_INTERVAL(f, lo, hi, n) PL_TEST_INTERVAL f lo hi n 29*412f47f9SXin Li #define PL_TEST_SYM_INTERVAL(f, lo, hi, n) \ 30*412f47f9SXin Li PL_TEST_INTERVAL (f, lo, hi, n) \ 31*412f47f9SXin Li PL_TEST_INTERVAL (f, -lo, -hi, n) 32*412f47f9SXin Li #define PL_TEST_INTERVAL_C(f, lo, hi, n, c) PL_TEST_INTERVAL f lo hi n c 33*412f47f9SXin Li #define PL_TEST_SYM_INTERVAL_C(f, lo, hi, n, c) \ 34*412f47f9SXin Li PL_TEST_INTERVAL_C (f, lo, hi, n, c) \ 35*412f47f9SXin Li PL_TEST_INTERVAL_C (f, -lo, -hi, n, c) 36*412f47f9SXin Li // clang-format off 37*412f47f9SXin Li #define PL_TEST_INTERVAL2(f, xlo, xhi, ylo, yhi, n) \ 38*412f47f9SXin Li PL_TEST_INTERVAL f xlo,ylo xhi,yhi n 39*412f47f9SXin Li // clang-format on 40