-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
Conversation
Fixes llvm#88433, llvm#90496. Co-authored-by: aniplcc <aniplccode@gmail.com> Co-authored-by: Tue Ly <lntue@google.com>
cc: @aniplcc |
@llvm/pr-subscribers-libc Author: None (lntue) ChangesThis is the continuation of #88674. Fixes #88433, #90496. Full diff: https://github.com/llvm/llvm-project/pull/93504.diff 8 Files Affected:
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",
],
)
|
cc: @petrhosek |
There was a problem hiding this 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 |
There was a problem hiding this comment.
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__
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or define as:
#define FLT_ROUNDS 1 | |
#define FLT_ROUNDS FE_TONEAREST |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
This is the continuation of llvm#88674. Fixes llvm#88433, llvm#90496. --------- Co-authored-by: aniplcc <aniplccode@gmail.com>
This is the continuation of #88674.
Fixes #88433, #90496.