[libc-commits] [libc] [libc][math] implemented dadd and ddiv (PR #100456)

via libc-commits libc-commits at lists.llvm.org
Wed Jul 24 14:12:19 PDT 2024


================
@@ -397,6 +397,11 @@ def StdC : StandardSpec<"stdc"> {
           GuardedFunctionSpec<"ceilf16", RetValSpec<Float16Type>, [ArgSpec<Float16Type>], "LIBC_TYPES_HAS_FLOAT16">,
           GuardedFunctionSpec<"ceilf128", RetValSpec<Float128Type>, [ArgSpec<Float128Type>], "LIBC_TYPES_HAS_FLOAT128">,
 
+          FunctionSpec<"daddf128", RetValSpec<DoubleType>, [ArgSpec<Float128Type>, ArgSpec<Float128Type>]>,
+          FunctionSpec<"daddl", RetValSpec<DoubleType>, [ArgSpec<LongDoubleType>, ArgSpec<LongDoubleType>]>,
+          FunctionSpec<"ddivl", RetValSpec<DoubleType>, [ArgSpec<LongDoubleType>, ArgSpec<LongDoubleType>]>,
+          FunctionSpec<"ddivf128", RetValSpec<DoubleType>, [ArgSpec<Float128Type>, ArgSpec<Float128Type>]>,
----------------
overmighty wrote:

`daddf128` and `ddivf128` should be LLVM libc extensions, so they should be moved to libc/spec/llvm_libc_ext.td. C23 only defines these:

```c
double daddl(long double x, long double y);
_FloatM fMaddfN(_FloatN x, _FloatN y); // M < N

double ddivl(long double x, long double y);
_FloatM fMdivfN(_FloatN x, _FloatN y); // M < N
```

Also, `daddf128` and `ddivf128` should be guarded by `LIBC_TYPES_HAS_FLOAT128`.

```suggestion
          FunctionSpec<"daddl", RetValSpec<DoubleType>, [ArgSpec<LongDoubleType>, ArgSpec<LongDoubleType>]>,

          FunctionSpec<"ddivl", RetValSpec<DoubleType>, [ArgSpec<LongDoubleType>, ArgSpec<LongDoubleType>]>,
```

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


More information about the libc-commits mailing list