[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