xref: /freebsd/contrib/llvm-project/libc/include/llvm-libc-macros/math-function-macros.h (revision bb722a7d0f1642bff6487f943ad0427799a6e5bf)
1*bb722a7dSDimitry Andric //===-- Definition of function macros from math.h -------------------------===//
2*bb722a7dSDimitry Andric //
3*bb722a7dSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*bb722a7dSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*bb722a7dSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*bb722a7dSDimitry Andric //
7*bb722a7dSDimitry Andric //===----------------------------------------------------------------------===//
8*bb722a7dSDimitry Andric 
9*bb722a7dSDimitry Andric #ifndef LLVM_LIBC_MACROS_MATH_FUNCTION_MACROS_H
10*bb722a7dSDimitry Andric #define LLVM_LIBC_MACROS_MATH_FUNCTION_MACROS_H
11*bb722a7dSDimitry Andric 
12*bb722a7dSDimitry Andric #include "math-macros.h"
13*bb722a7dSDimitry Andric 
14*bb722a7dSDimitry Andric #ifndef __cplusplus
15*bb722a7dSDimitry Andric #define issignaling(x)                                                         \
16*bb722a7dSDimitry Andric   _Generic((x),                                                                \
17*bb722a7dSDimitry Andric       float: issignalingf,                                                     \
18*bb722a7dSDimitry Andric       double: issignaling,                                                     \
19*bb722a7dSDimitry Andric       long double: issignalingl)(x)
20*bb722a7dSDimitry Andric #define iscanonical(x)                                                         \
21*bb722a7dSDimitry Andric   _Generic((x),                                                                \
22*bb722a7dSDimitry Andric       float: iscanonicalf,                                                     \
23*bb722a7dSDimitry Andric       double: iscanonical,                                                     \
24*bb722a7dSDimitry Andric       long double: iscanonicall)(x)
25*bb722a7dSDimitry Andric #endif
26*bb722a7dSDimitry Andric 
27*bb722a7dSDimitry Andric #define isfinite(x) __builtin_isfinite(x)
28*bb722a7dSDimitry Andric #define isinf(x) __builtin_isinf(x)
29*bb722a7dSDimitry Andric #define isnan(x) __builtin_isnan(x)
30*bb722a7dSDimitry Andric #define signbit(x) __builtin_signbit(x)
31*bb722a7dSDimitry Andric #define iszero(x) (x == 0)
32*bb722a7dSDimitry Andric #define fpclassify(x)                                                          \
33*bb722a7dSDimitry Andric   __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)
34*bb722a7dSDimitry Andric #define isnormal(x) __builtin_isnormal(x)
35*bb722a7dSDimitry Andric #define issubnormal(x) (fpclassify(x) == FP_SUBNORMAL)
36*bb722a7dSDimitry Andric 
37*bb722a7dSDimitry Andric #endif // LLVM_LIBC_MACROS_MATH_FUNCTION_MACROS_H
38