[libc-commits] [PATCH] D127046: [libc][math] fmod/fmodf implementation.

Kirill Okhotnikov via Phabricator via libc-commits libc-commits at lists.llvm.org
Fri Jun 10 02:01:04 PDT 2022

orex marked 2 inline comments as done.
orex added inline comments.

Comment at: libc/src/__support/FPUtil/generic/FMod.h:16
+#include <algorithm>
+#include <cerrno>
orex wrote:
> lntue wrote:
> > I'm not sure that we can include that many C++ standard headers in here,  as it might introduce circular dependency among the libraries.  @sivachandra should have known more about these than me.
> All std includes were removed except cerrno. 
cerrno excluded.

Comment at: libc/src/__support/FPUtil/generic/FMod.h:82
+  static std::optional<T> PreCheck(T x, T y) {
+    if (unlikely(y == 0 || std::isnan(y) || !std::isfinite(x))) {
+      force_eval<T>((x * y) / (y * x));
lntue wrote:
> I don't think you would want to use `std::isnan` or `std::isfinite` in here.  As you can imagine, `FPUtil` functions would be the ones to provide the *backbone* of `libc`, and hence `std::` functions, so if FPUtil functions depending on `std::` math functions, it would likely create circular dependency when building or linking.  So it's best to reuse or reimplement those simple math functions in the `FPUtil / FPBits` themselves.
Implemented using builtin functions.

  rG LLVM Github Monorepo



More information about the libc-commits mailing list