[libc] Add implementations of fdim[f|l].
Implementing fdim, fdimf, and fdiml for llvm-libc.
Differential Revision: https://reviews.llvm.org/D90906
diff --git a/libc/utils/FPUtil/BasicOperations.h b/libc/utils/FPUtil/BasicOperations.h
index 7885692..5bf3eff 100644
--- a/libc/utils/FPUtil/BasicOperations.h
+++ b/libc/utils/FPUtil/BasicOperations.h
@@ -62,6 +62,22 @@
}
}
+template <typename T,
+ cpp::EnableIfType<cpp::IsFloatingPointType<T>::Value, int> = 0>
+static inline T fdim(T x, T y) {
+ FPBits<T> bitx(x), bity(y);
+
+ if (bitx.isNaN()) {
+ return x;
+ }
+
+ if (bity.isNaN()) {
+ return y;
+ }
+
+ return (x > y ? x - y : 0);
+}
+
} // namespace fputil
} // namespace __llvm_libc