[libc-commits] [libc] [libc][stdfix] Implement fxdivi functions (rdivi) (PR #154914)

via libc-commits libc-commits at lists.llvm.org
Tue Aug 26 09:00:28 PDT 2025


================
@@ -224,6 +224,47 @@ idiv(T x, T y) {
   return static_cast<XType>(result);
 }
 
+LIBC_INLINE long accum nrstep(long accum d, long accum x0) {
+  auto v = x0 * (2.lk - (d * x0));
+  return v;
+}
+
+/* Divide the two integers and return a fixed_point value
+ *
+ * For reference, see:
+ * https://en.wikipedia.org/wiki/Division_algorithm#Newton%E2%80%93Raphson_division
+ * https://stackoverflow.com/a/9231996
+ */
+template <typename XType> LIBC_INLINE constexpr XType divi(int n, int d) {
+  // If the value of the second operand of the / operator is zero, the
+  // behavior is undefined. Ref: ISO/IEC TR 18037:2008(E) p.g. 16
+  LIBC_CRASH_ON_VALUE(d, 0);
+
----------------
PiJoules wrote:

Could probably add

```
  if (LIBC_UNLIKELY(n == 0))
    return FXRep<T>::ZERO();
```

to shortcut all this.

https://github.com/llvm/llvm-project/pull/154914


More information about the libc-commits mailing list