From 245cbd15a49e57c6090254f5e114c80f796dc05c Mon Sep 17 00:00:00 2001 From: Siva Chandra Reddy Date: Mon, 27 Apr 2020 13:35:21 -0700 Subject: [PATCH] [libc] Add definitions of double_t and float_t to math.h. This change does not handle any extensions. Only the C standard variations are handled. Reviewers: abrachet Differential Revision: https://reviews.llvm.org/D79150 --- libc/config/linux/api.td | 18 +++++++++++++++++ libc/include/CMakeLists.txt | 7 +++++++ libc/include/__llvm-libc-stdc-types.h | 37 +++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 libc/include/__llvm-libc-stdc-types.h diff --git a/libc/config/linux/api.td b/libc/config/linux/api.td index 16bb0d7..7d81c0d 100644 --- a/libc/config/linux/api.td +++ b/libc/config/linux/api.td @@ -117,6 +117,20 @@ def IsNanMacro : MacroDef<"isnan"> { }]; } +def FloatT : TypeDecl<"float_t"> { + let Decl = [{ + #define __need_float_t + #include <__llvm-libc-stdc-types.h> + }]; +} + +def DoubleT : TypeDecl<"double_t"> { + let Decl = [{ + #define __need_double_t + #include <__llvm-libc-stdc-types.h> + }]; +} + def MathAPI : PublicAPI<"math.h"> { let Macros = [ SimpleMacroDef<"MATH_ERRNO", "1">, @@ -130,6 +144,10 @@ def MathAPI : PublicAPI<"math.h"> { IsInfMacro, IsNanMacro, ]; + let TypeDeclarations = [ + DoubleT, + FloatT, + ]; let Functions = [ "cosf", "round", diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt index f9564b3..4dcd69a 100644 --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -12,6 +12,12 @@ add_header( ) add_header( + stdc_types + HDR + __llvm-libc-stdc-types.h +) + +add_header( ctype HDR ctype.h @@ -25,6 +31,7 @@ add_gen_header( GEN_HDR math.h DEPENDS .llvm_libc_common_h + .stdc_types ) add_gen_header( diff --git a/libc/include/__llvm-libc-stdc-types.h b/libc/include/__llvm-libc-stdc-types.h new file mode 100644 index 0000000..8e3bad6 --- /dev/null +++ b/libc/include/__llvm-libc-stdc-types.h @@ -0,0 +1,37 @@ +//===-- Definitions of common types from the C standard. ------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// This header file does not have a header guard. It is internal to LLVM libc +// and intended to be used to pick specific definitions without polluting the +// public headers with unnecessary definitions. + +#undef __LLVM_LIBC_FLOAT_T +#undef __LLVM_LIBC_DOUBLE_T + +#if !defined(__FLT_EVAL_METHOD__) || __FLT_EVAL_METHOD__ == 0 +#define __LLVM_LIBC_FLOAT_T float +#define __LLVM_LIBC_DOUBLE_T double +#elif __FLT_EVAL_METHOD__ == 1 +#define __LLVM_LIBC_FLOAT_T double +#define __LLVM_LIBC_DOUBLE_T double +#elif __FLT_EVAL_METHOD__ == 2 +#define __LLVM_LIBC_FLOAT_T long double +#define __LLVM_LIBC_DOUBLE_T long double +#else +#error "Unsupported __FLT_EVAL_METHOD__ value." +#endif + +#if defined(__need_float_t) && !defined(__llvm_libc_float_t_defined) +typedef __LLVM_LIBC_FLOAT_T float_t; +#define __llvm_libc_float_t_defined +#endif // __need_float_t + +#if defined(__need_double_t) && !defined(__llvm_libc_double_t_defined) +typedef __LLVM_LIBC_DOUBLE_T double_t; +#define __llvm_libc_double_t_defined +#endif // __need_double_t -- 2.7.4