[libc-commits] [libc] 245cbd1 - [libc] Add definitions of double_t and float_t to math.h.
Siva Chandra Reddy via libc-commits
libc-commits at lists.llvm.org
Thu Apr 30 11:59:47 PDT 2020
Author: Siva Chandra Reddy
Date: 2020-04-30T11:59:11-07:00
New Revision: 245cbd15a49e57c6090254f5e114c80f796dc05c
URL: https://github.com/llvm/llvm-project/commit/245cbd15a49e57c6090254f5e114c80f796dc05c
DIFF: https://github.com/llvm/llvm-project/commit/245cbd15a49e57c6090254f5e114c80f796dc05c.diff
LOG: [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
Added:
libc/include/__llvm-libc-stdc-types.h
Modified:
libc/config/linux/api.td
libc/include/CMakeLists.txt
Removed:
################################################################################
diff --git a/libc/config/linux/api.td b/libc/config/linux/api.td
index 16bb0d79fe93..7d81c0d7e95b 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 f9564b323494..4dcd69a62bfb 100644
--- a/libc/include/CMakeLists.txt
+++ b/libc/include/CMakeLists.txt
@@ -11,6 +11,12 @@ add_header(
__posix-types.h
)
+add_header(
+ stdc_types
+ HDR
+ __llvm-libc-stdc-types.h
+)
+
add_header(
ctype
HDR
@@ -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 000000000000..8e3bad652df0
--- /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
More information about the libc-commits
mailing list