[libc-commits] [PATCH] D119002: [libc] Fix compilation with gcc
Siva Chandra via Phabricator via libc-commits
libc-commits at lists.llvm.org
Fri Feb 4 09:45:53 PST 2022
sivachandra added a comment.
Thanks for doing this. As you have mentioned in the description, please split this into independent patches.
================
Comment at: libc/src/__support/FPUtil/FPBits.h:107
- explicit operator T() { return val; }
+ T val() const { return llvmlibc_builtin_bit_cast<T>(bits); }
+
----------------
To be consistent with other getters, we might want to call this `get_val`.
================
Comment at: libc/src/__support/FPUtil/x86_64/LongDoubleBits.h:99
cpp::EnableIfType<cpp::IsSame<long double, XType>::Value, int> = 0>
- explicit FPBits(XType x) : val(x) {
+ explicit FPBits(XType x) : bits(llvmlibc_builtin_bit_cast<UIntType>(x)) {
// bits starts uninitialized, and setting it to a long double only
----------------
While here, can we make these constructors `constexpr`?
================
Comment at: libc/src/__support/builtin_bit_cast.h:22
+template <class To, class From>
+static To llvmlibc_builtin_bit_cast(const From &from) {
+ static_assert(sizeof(To) == sizeof(From), "To and From must be of same size");
----------------
Few comments, some of them might just be bikeshed kind:
1. Why should the name have `builtin` in it? For that matter, remove the `llvmlibc_` prefix and put it in a namespace.
2. `constexpr` instead of `static`?
3. This should ideally be in `__support/CPP/bit.h`?
================
Comment at: libc/src/__support/builtin_memcpy.h:21
+template <unsigned SIZE>
+static void llvmlibc_builtin_memcpy(char *__restrict dst,
+ const char *__restrict src) {
----------------
Seems like we can just inline this into `llvmlibc_bit_cast`?
================
Comment at: libc/src/fenv/fesetexceptflag.cpp:30
+ const int excepts_as_int = llvmlibc_builtin_bit_cast<IntType>(*flagp);
+ const int excepts_to_set = excepts_as_int & excepts;
fputil::clear_except(FE_ALL_EXCEPT);
----------------
Why is this required?
================
Comment at: libc/utils/MPFRWrapper/MPFRUtils.cpp:486
+}
+
namespace internal {
----------------
Why was this block moved?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119002/new/
https://reviews.llvm.org/D119002
More information about the libc-commits
mailing list