xref: /aosp_15_r20/external/arm-optimized-routines/pl/math/test/pl_test.h (revision 412f47f9e737e10ed5cc46ec6a8d7fa2264f8a14)
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