Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[libc] Add proxy header for float.h. #93504

Merged
merged 5 commits into from
May 28, 2024
Merged

[libc] Add proxy header for float.h. #93504

merged 5 commits into from
May 28, 2024

Conversation

lntue
Copy link
Contributor

@lntue lntue commented May 28, 2024

This is the continuation of #88674.

Fixes #88433, #90496.

Fixes llvm#88433, llvm#90496.

Co-authored-by: aniplcc <aniplccode@gmail.com>
Co-authored-by: Tue Ly <lntue@google.com>
@llvmbot llvmbot added libc bazel "Peripheral" support tier build system: utils/bazel labels May 28, 2024
@lntue
Copy link
Contributor Author

lntue commented May 28, 2024

cc: @aniplcc

@llvmbot
Copy link
Collaborator

llvmbot commented May 28, 2024

@llvm/pr-subscribers-libc

Author: None (lntue)

Changes

This is the continuation of #88674.

Fixes #88433, #90496.


Full diff: https://github.com/llvm/llvm-project/pull/93504.diff

8 Files Affected:

  • (modified) libc/hdr/CMakeLists.txt (+10)
  • (added) libc/hdr/float_macros.h (+19)
  • (modified) libc/include/llvm-libc-macros/float-macros.h (+201-20)
  • (modified) libc/src/__support/macros/properties/CMakeLists.txt (+1-1)
  • (modified) libc/src/__support/macros/properties/types.h (+1-1)
  • (modified) libc/src/math/generic/CMakeLists.txt (+1)
  • (modified) libc/src/math/generic/scalbnf128.cpp (+5-6)
  • (modified) utils/bazel/llvm-project-overlay/libc/BUILD.bazel (+6-1)
diff --git a/libc/hdr/CMakeLists.txt b/libc/hdr/CMakeLists.txt
index 91b8cb71552a7..66b82c84dac49 100644
--- a/libc/hdr/CMakeLists.txt
+++ b/libc/hdr/CMakeLists.txt
@@ -87,4 +87,14 @@ add_proxy_header_library(
     libc.include.llvm-libc-macros.time_macros
 )
 
+add_proxy_header_library(
+  float_macros
+  HDRS
+    float_macros.h
+  DEPENDS
+    libc.include.llvm-libc-macros.float_macros
+  FULL_BUILD_DEPENDS
+    libc.include.float
+)
+
 add_subdirectory(types)
diff --git a/libc/hdr/float_macros.h b/libc/hdr/float_macros.h
new file mode 100644
index 0000000000000..f541a886e1f2d
--- /dev/null
+++ b/libc/hdr/float_macros.h
@@ -0,0 +1,19 @@
+//===-- Definition of macros from math.h ----------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_HDR_FLOAT_MACROS_H
+#define LLVM_LIBC_HDR_FLOAT_MACROS_H
+
+#ifndef LIBC_FULL_BUILD
+// Overlay mode
+#include <float.h>
+#endif // !LLVM_LIBC_FULL_BUILD
+
+#include "include/llvm-libc-macros/float-macros.h"
+
+#endif // LLVM_LIBC_HDR_FLOAT_MACROS_H
diff --git a/libc/include/llvm-libc-macros/float-macros.h b/libc/include/llvm-libc-macros/float-macros.h
index 4fe8590c5f70c..a054448dd5b39 100644
--- a/libc/include/llvm-libc-macros/float-macros.h
+++ b/libc/include/llvm-libc-macros/float-macros.h
@@ -9,165 +9,346 @@
 #ifndef LLVM_LIBC_MACROS_FLOAT_MACROS_H
 #define LLVM_LIBC_MACROS_FLOAT_MACROS_H
 
-// Suppress `#include_next is a language extension` warnings.
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wgnu-include-next"
-#pragma clang diagnostic ignored "-Winclude-next-absolute-path"
-#else // gcc
-#pragma GCC system_header
-#endif //__clang__
-
-#include_next <float.h>
-
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif //__clang__
+// Check long double.
+#if defined(__linux__) && defined(__x86_64__)
+#define LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80
+#elif defined(__linux__) && (defined(__aarch64__) || defined(__riscv))
+#define LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT128
+#else
+#define LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64
+#endif
 
 #ifndef FLT_RADIX
+#ifdef __FLT_RADIX__
 #define FLT_RADIX __FLT_RADIX__
+#else
+#define FLT_RADIX 2
+#endif // __FLT_RADIX__
 #endif // FLT_RADIX
 
 #ifndef FLT_EVAL_METHOD
+#ifdef __FLT_EVAL_METHOD__
 #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
+#else
+#define FLT_EVAL_METHOD 0
+#endif // __FLT_EVAL_METHOD__
 #endif // FLT_EVAL_METHOD
 
-#ifndef DECIMAL_DIG
-#define DECIMAL_DIG __DECIMAL_DIG__
-#endif // DECIMAL_DIG
+#ifndef FLT_ROUNDS
+#define FLT_ROUNDS 1
+#endif // FLT_ROUNDS
 
 #ifndef FLT_DECIMAL_DIG
+#ifdef __FLT_DECIMAL_DIG__
 #define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
+#else
+#define FLT_DECIMAL_DIG 9
+#endif // __FLT_DECIMAL_DIG__
 #endif // FLT_DECIMAL_DIG
 
 #ifndef DBL_DECIMAL_DIG
+#ifdef __DBL_DECIMAL_DIG__
 #define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
+#else
+#define DBL_DECIMAL_DIG 17
+#endif // __DBL_DECIMAL_DIG__
 #endif // DBL_DECIMAL_DIG
 
 #ifndef LDBL_DECIMAL_DIG
+#ifdef __LDBL_DECIMAL_DIG__
 #define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80)
+#define LDBL_DECIMAL_DIG 21
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT128)
+#define LDBL_DECIMAL_DIG 36
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64
+#define LDBL_DECIMAL_DIG DBL_DECIMAL_DIG
+#endif // __LDBL_DECIMAL_DIG
 #endif // LDBL_DECIMAL_DIG
 
+#ifndef DECIMAL_DIG
+#ifdef __DECIMAL_DIG__
+#define DECIMAL_DIG __DECIMAL_DIG__
+#else
+#define DECIMAL_DIG LDBL_DECIMAL_DIG
+#endif // __DECIMAL_DIG
+#endif // DECIMAL_DIG
+
 #ifndef FLT_DIG
+#ifdef __FLT_DIG__
 #define FLT_DIG __FLT_DIG__
+#else
+#define FLT_DIG 6
+#endif // __FLT_DIG__
 #endif // FLT_DIG
 
 #ifndef DBL_DIG
+#ifdef __DBL_DIG__
 #define DBL_DIG __DBL_DIG__
+#else
+#define DBL_DIG 15
+#endif // __DBL_DIG__
 #endif // DBL_DIG
 
 #ifndef LDBL_DIG
+#ifdef __LDBL_DIG__
 #define LDBL_DIG __LDBL_DIG__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80)
+#define LDBL_DIG 18
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT128)
+#define LDBL_DIG 33
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64
+#define LDBL_DIG DBL_DIG
+#endif // __LDBL_DIG__
 #endif // LDBL_DIG
 
 #ifndef FLT_MANT_DIG
+#ifdef __FLT_MANT_DIG__
 #define FLT_MANT_DIG __FLT_MANT_DIG__
+#else
+#define FLT_MANT_DIG 24
+#endif // __FLT_MANT_DIG__
 #endif // FLT_MANT_DIG
 
 #ifndef DBL_MANT_DIG
+#ifdef __DBL_MANT_DIG__
 #define DBL_MANT_DIG __DBL_MANT_DIG__
+#else
+#define DBL_MANT_DIG 53
+#endif // __DBL_MANT_DIG__
 #endif // DBL_MANT_DIG
 
 #ifndef LDBL_MANT_DIG
+#ifdef __LDBL_MANT_DIG__
 #define LDBL_MANT_DIG __LDBL_MANT_DIG__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80)
+#define LDBL_MANT_DIG 64
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT128)
+#define LDBL_MANT_DIG 113
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64
+#define LDBL_MANT_DIG DBL_MANT_DIG
+#endif // __LDBL_MANT_DIG__
 #endif // LDBL_MANT_DIG
 
 #ifndef FLT_MIN
+#ifdef __FLT_MIN__
 #define FLT_MIN __FLT_MIN__
+#else
+#define FLT_MIN 0x1.0p-126f
+#endif // __FLT_MIN__
 #endif // FLT_MIN
 
 #ifndef DBL_MIN
+#ifdef __DBL_MIN__
 #define DBL_MIN __DBL_MIN__
+#else
+#define DBL_MIN 0x1.0p-1022
+#endif // __DBL_MIN__
 #endif // DBL_MIN
 
 #ifndef LDBL_MIN
+#ifdef __LDBL_MIN__
 #define LDBL_MIN __LDBL_MIN__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64)
+#define LDBL_MIN 0x1.0p-1022L
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80 or FLOAT128
+#define LDBL_MIN 0x1.0p-16382L
+#endif // __LDBL_MIN__
 #endif // LDBL_MIN
 
 #ifndef FLT_MAX
+#ifdef __FLT_MAX__
 #define FLT_MAX __FLT_MAX__
+#else
+#define FLT_MAX 0x1.fffffep+127f
+#endif // __FLT_MAX__
 #endif // FLT_MAX
 
 #ifndef DBL_MAX
+#ifdef __DBL_MAX__
 #define DBL_MAX __DBL_MAX__
+#else
+#define DBL_MAX 0x1.ffff'ffff'ffff'fp+1023
+#endif // __DBL_MAX__
 #endif // DBL_MAX
 
 #ifndef LDBL_MAX
+#ifdef __LDBL_MAX__
 #define LDBL_MAX __LDBL_MAX__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80)
+#define LDBL_MAX 0x1.ffff'ffff'ffff'fffep+16383L
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT128)
+#define LDBL_MAX 0x1.ffff'ffff'ffff'ffff'ffff'ffff'ffffp+16383L
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64
+#define LDBL_MAX 0x1.ffff'ffff'ffff'fp+1023L
+#endif // __LDBL_MAX__
 #endif // LDBL_MAX
 
 #ifndef FLT_TRUE_MIN
-#define FLT_TRUE_MIN __FLT_TRUE_MIN__
+#ifdef __FLT_DENORM_MIN__
+#define FLT_TRUE_MIN __FLT_DENORM_MIN__
+#else
+#define FLT_TRUE_MIN 0x1.0p-149f
+#endif // __FLT_DENORM_MIN__
 #endif // FLT_TRUE_MIN
 
 #ifndef DBL_TRUE_MIN
-#define DBL_TRUE_MIN __DBL_TRUE_MIN__
+#ifdef __DBL_DENORM_MIN__
+#define DBL_TRUE_MIN __DBL_DENORM_MIN__
+#else
+#define DBL_TRUE_MIN 0x1.0p-1074
+#endif // __DBL_DENORM_MIN__
 #endif // DBL_TRUE_MIN
 
 #ifndef LDBL_TRUE_MIN
-#define LDBL_TRUE_MIN __LDBL_TRUE_MIN__
+#ifdef __LDBL_DENORM_MIN__
+#define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80)
+#define LDBL_TRUE_MIN 0x1.0p-16445L
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT128)
+#define LDBL_TRUE_MIN 0x1.0p-16494L
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64
+#define LDBL_TRUE_MIN 0x1.0p-1074L
+#endif // __LDBL_DENORM_MIN__
 #endif // LDBL_TRUE_MIN
 
 #ifndef FLT_EPSILON
+#ifdef __FLT_EPSILON__
 #define FLT_EPSILON __FLT_EPSILON__
+#else
+#define FLT_EPSILON 0x1.0p-23f
+#endif // __FLT_EPSILON__
 #endif // FLT_EPSILON
 
 #ifndef DBL_EPSILON
+#ifdef __DBL_EPSILON__
 #define DBL_EPSILON __DBL_EPSILON__
+#else
+#define DBL_EPSILON 0x1.0p-52
+#endif // __DBL_EPSILON__
 #endif // DBL_EPSILON
 
 #ifndef LDBL_EPSILON
+#ifdef __LDBL_EPSILON__
 #define LDBL_EPSILON __LDBL_EPSILON__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80)
+#define LDBL_EPSILON 0x1.0p-63L
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT128)
+#define LDBL_EPSILON 0x1.0p-112L
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64
+#define LDBL_EPSILON 0x1.0p-52L
+#endif // __LDBL_EPSILON__
 #endif // LDBL_EPSILON
 
 #ifndef FLT_MIN_EXP
+#ifdef __FLT_MIN_EXP__
 #define FLT_MIN_EXP __FLT_MIN_EXP__
+#else
+#define FLT_MIN_EXP (-125)
+#endif // __FLT_MIN_EXP__
 #endif // FLT_MIN_EXP
 
 #ifndef DBL_MIN_EXP
+#ifdef __DBL_MIN_EXP__
 #define DBL_MIN_EXP __DBL_MIN_EXP__
+#else
+#define DBL_MIN_EXP (-1021)
+#endif // __DBL_MIN_EXP__
 #endif // DBL_MIN_EXP
 
 #ifndef LDBL_MIN_EXP
+#ifdef __LDBL_MIN_EXP__
 #define LDBL_MIN_EXP __LDBL_MIN_EXP__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64)
+#define LDBL_MIN_EXP DBL_MIN_EXP
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80 or FLOAT128
+#define LDBL_MIN_EXP (-16381)
+#endif // __LDBL_MIN_EXP__
 #endif // LDBL_MIN_EXP
 
 #ifndef FLT_MIN_10_EXP
+#ifdef __FLT_MIN_10_EXP__
 #define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
+#else
+#define FLT_MIN_10_EXP (-37)
+#endif // __FLT_MIN_10_EXP__
 #endif // FLT_MIN_10_EXP
 
 #ifndef DBL_MIN_10_EXP
+#ifdef __DBL_MIN_10_EXP__
 #define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
+#else
+#define DBL_MIN_10_EXP (-307)
+#endif // __DBL_MIN_10_EXP__
 #endif // DBL_MIN_10_EXP
 
 #ifndef LDBL_MIN_10_EXP
+#ifdef __LDBL_MIN_10_EXP__
 #define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64)
+#define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80 or FLOAT128
+#define LDBL_MIN_10_EXP (-4931)
+#endif // __LDBL_MIN_10_EXP__
 #endif // LDBL_MIN_10_EXP
 
 #ifndef FLT_MAX_EXP
+#ifdef __FLT_MAX_EXP__
 #define FLT_MAX_EXP __FLT_MAX_EXP__
+#else
+#define FLT_MAX_EXP 128
+#endif // __FLT_MAX_EXP__
 #endif // FLT_MAX_EXP
 
 #ifndef DBL_MAX_EXP
+#ifdef __DBL_MAX_EXP__
 #define DBL_MAX_EXP __DBL_MAX_EXP__
+#else
+#define DBL_MAX_EXP 1024
+#endif // __DBL_MAX_EXP__
 #endif // DBL_MAX_EXP
 
 #ifndef LDBL_MAX_EXP
+#ifdef __LDBL_MAX_EXP__
 #define LDBL_MAX_EXP __LDBL_MAX_EXP__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64)
+#define LDBL_MAX_EXP DBL_MAX_EXP
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80 or FLOAT128
+#define LDBL_MAX_EXP 16384
+#endif // __LDBL_MAX_EXP__
 #endif // LDBL_MAX_EXP
 
 #ifndef FLT_MAX_10_EXP
+#ifdef __FLT_MAX_10_EXP__
 #define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
+#else
+#define FLT_MAX_10_EXP 38
+#endif // __FLT_MAX_10_EXP__
 #endif // FLT_MAX_10_EXP
 
 #ifndef DBL_MAX_10_EXP
+#ifdef __DBL_MAX_10_EXP__
 #define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
+#else
+#define DBL_MAX_10_EXP 308
+#endif // __DBL_MAX_10_EXP__
 #endif // DBL_MAX_10_EXP
 
 #ifndef LDBL_MAX_10_EXP
+#ifdef __LDBL_MAX_10_EXP__
 #define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
+#elif defined(LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64)
+#define LDBL_MAX_10_EXP DBL_MAX_10_EXP
+#else // LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80 or FLOAT128
+#define LDBL_MAX_10_EXP 4932
+#endif // __LDBL_MAX_10_EXP__
 #endif // LDBL_MAX_10_EXP
 
 // TODO: Add FLT16 and FLT128 constants.
 
+// Cleanup
+#undef LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT64
+#undef LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT80
+#undef LLVM_LIBC_MACROS_LONG_DOUBLE_IS_FLOAT128
+
 #endif // LLVM_LIBC_MACROS_FLOAT_MACROS_H
diff --git a/libc/src/__support/macros/properties/CMakeLists.txt b/libc/src/__support/macros/properties/CMakeLists.txt
index bbc45650f3fca..7718aeaa3de5a 100644
--- a/libc/src/__support/macros/properties/CMakeLists.txt
+++ b/libc/src/__support/macros/properties/CMakeLists.txt
@@ -33,6 +33,6 @@ add_header_library(
     .compiler
     .cpu_features
     .os
-    libc.include.llvm-libc-macros.float_macros
+    libc.hdr.float_macros
     libc.include.llvm-libc-types.float128
 )
diff --git a/libc/src/__support/macros/properties/types.h b/libc/src/__support/macros/properties/types.h
index d43cf99e6859b..781cf1b7a2b62 100644
--- a/libc/src/__support/macros/properties/types.h
+++ b/libc/src/__support/macros/properties/types.h
@@ -10,7 +10,7 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MACROS_PROPERTIES_TYPES_H
 #define LLVM_LIBC_SRC___SUPPORT_MACROS_PROPERTIES_TYPES_H
 
-#include "include/llvm-libc-macros/float-macros.h" // LDBL_MANT_DIG
+#include "hdr/float_macros.h"                      // LDBL_MANT_DIG
 #include "include/llvm-libc-types/float128.h"      // float128
 #include "src/__support/macros/properties/architectures.h"
 #include "src/__support/macros/properties/compiler.h"
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index daaf505008ca1..d37ecb375bf4b 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2969,6 +2969,7 @@ add_entrypoint_object(
   HDRS
     ../scalbnf128.h
   DEPENDS
+    libc.hdr.float_macros
     libc.src.__support.macros.properties.types
     libc.src.__support.FPUtil.manipulation_functions
   COMPILE_OPTIONS
diff --git a/libc/src/math/generic/scalbnf128.cpp b/libc/src/math/generic/scalbnf128.cpp
index be3d29ed27e98..4b2b00b298c5e 100644
--- a/libc/src/math/generic/scalbnf128.cpp
+++ b/libc/src/math/generic/scalbnf128.cpp
@@ -7,18 +7,17 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/scalbnf128.h"
+#include "hdr/float_macros.h"
 #include "src/__support/FPUtil/ManipulationFunctions.h"
 #include "src/__support/common.h"
 
 namespace LIBC_NAMESPACE {
 
 LLVM_LIBC_FUNCTION(float128, scalbnf128, (float128 x, int n)) {
-// TODO: should be switched to use `FLT_RADIX` in hdr/float_macros.h" instead
-// see: https://github.com/llvm/llvm-project/issues/90496
-#if !defined(__FLT_RADIX__)
-#error __FLT_RADIX__ undefined.
-#elif __FLT_RADIX__ != 2
-#error __FLT_RADIX__!=2, unimplemented.
+#if !defined(FLT_RADIX)
+#error FLT_RADIX undefined.
+#elif FLT_RADIX != 2
+#error FLT_RADIX!=2, unimplemented.
 #else
   return fputil::ldexp(x, n);
 #endif
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index 446499cf15d7b..70ec3a48a5e2e 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -127,6 +127,11 @@ libc_support_library(
     hdrs = ["hdr/time_macros.h"],
 )
 
+libc_support_library(
+    name = "hdr_float_macros",
+    hdrs = ["hdr/float_macros.h"],
+)
+
 ############################ Type Proxy Header Files ###########################
 
 libc_support_library(
@@ -189,7 +194,7 @@ libc_support_library(
         ":__support_macros_properties_compiler",
         ":__support_macros_properties_cpu_features",
         ":__support_macros_properties_os",
-        ":llvm_libc_macros_float_macros",
+        ":hdr_float_macros",
         ":llvm_libc_types_float128",
     ],
 )

@lntue
Copy link
Contributor Author

lntue commented May 28, 2024

cc: @petrhosek

libc/include/llvm-libc-macros/float-macros.h Outdated Show resolved Hide resolved
libc/src/math/generic/scalbnf128.cpp Outdated Show resolved Hide resolved
libc/hdr/float_macros.h Outdated Show resolved Hide resolved
libc/src/math/generic/scalbnf128.cpp Outdated Show resolved Hide resolved
libc/hdr/float_macros.h Outdated Show resolved Hide resolved
libc/src/math/generic/scalbnf128.cpp Outdated Show resolved Hide resolved
Copy link
Member

@nickdesaulniers nickdesaulniers left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, sorry, meant to wait until https://github.com/llvm/llvm-project/pull/93504/files#r1617623958 was resolved. Removing +1.

#define DECIMAL_DIG __DECIMAL_DIG__
#endif // DECIMAL_DIG
#ifndef FLT_ROUNDS
#define FLT_ROUNDS 1
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we file bug reports against clang and GCC to provide __FLT_ROUNDS__?

Copy link
Member

@nickdesaulniers nickdesaulniers May 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or define as:

Suggested change
#define FLT_ROUNDS 1
#define FLT_ROUNDS FE_TONEAREST

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lntue also pointed me to https://github.com/emscripten-core/emscripten/blob/main/system/lib/libc/musl/src/fenv/__flt_rounds.c. That's more sophisticated than what GCC's float.h is doing. Consider doing something similar when the builtin is available, or at least leaving behind a comment that we may want or need to change that non-builtin version some day.

Copy link
Contributor

@michaelrj-google michaelrj-google left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@lntue lntue merged commit 4486fcb into llvm:main May 28, 2024
6 checks passed
@lntue lntue deleted the float branch May 28, 2024 23:14
vg0204 pushed a commit to vg0204/llvm-project that referenced this pull request May 29, 2024
This is the continuation of
llvm#88674.

Fixes llvm#88433, llvm#90496.

---------

Co-authored-by: aniplcc <aniplccode@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bazel "Peripheral" support tier build system: utils/bazel libc
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[libc] Add proxy header hdr/float-macros.h
4 participants