[libc-commits] [libc] e737cf0 - [libc] add shared multf3 builtin (#205670)

via libc-commits libc-commits at lists.llvm.org
Fri Jun 26 13:07:17 PDT 2026


Author: hulxv
Date: 2026-06-26T20:07:12Z
New Revision: e737cf0d95b1d749da6226a7b5350f56a55de33e

URL: https://github.com/llvm/llvm-project/commit/e737cf0d95b1d749da6226a7b5350f56a55de33e
DIFF: https://github.com/llvm/llvm-project/commit/e737cf0d95b1d749da6226a7b5350f56a55de33e.diff

LOG: [libc] add shared multf3 builtin (#205670)

Re-exposes LLVM-libc's `__multf3` as `shared::multf3` for reuse by
compiler-rt's builtins.

Stacked change - merge these first:
- #200094
- #205669

Part of #197824

---------

Co-authored-by: Muhammad Bassiouni <60100307+bassiounix at users.noreply.github.com>

Added: 
    libc/shared/builtins/multf3.h
    libc/src/__support/builtins/multf3.h

Modified: 
    libc/shared/builtins.h
    libc/src/__support/builtins/CMakeLists.txt
    libc/test/shared/CMakeLists.txt
    libc/test/shared/shared_builtins_test.cpp

Removed: 
    


################################################################################
diff  --git a/libc/shared/builtins.h b/libc/shared/builtins.h
index 0bb156131423d..26fed715ba2ad 100644
--- a/libc/shared/builtins.h
+++ b/libc/shared/builtins.h
@@ -18,6 +18,7 @@
 #include "libc_common.h"
 
 #include "builtins/addtf3.h"
+#include "builtins/multf3.h"
 #include "builtins/subtf3.h"
 
 #endif // LLVM_LIBC_SHARED_BUILTINS_H

diff  --git a/libc/shared/builtins/multf3.h b/libc/shared/builtins/multf3.h
new file mode 100644
index 0000000000000..cfc2964fd6a79
--- /dev/null
+++ b/libc/shared/builtins/multf3.h
@@ -0,0 +1,35 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// This header exposes LLVM-libc's __multf3 implementation as shared::multf3 so
+/// that it can be reused by compiler-rt's builtins.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SHARED_BUILTINS_MULTF3_H
+#define LLVM_LIBC_SHARED_BUILTINS_MULTF3_H
+
+#include "include/llvm-libc-types/float128.h"
+
+#ifdef LIBC_TYPES_HAS_FLOAT128
+
+#include "shared/libc_common.h"
+#include "src/__support/builtins/multf3.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace shared {
+
+using builtins::multf3;
+
+} // namespace shared
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LIBC_TYPES_HAS_FLOAT128
+
+#endif // LLVM_LIBC_SHARED_BUILTINS_MULTF3_H

diff  --git a/libc/src/__support/builtins/CMakeLists.txt b/libc/src/__support/builtins/CMakeLists.txt
index d3d1d65babce8..98274c9a90416 100644
--- a/libc/src/__support/builtins/CMakeLists.txt
+++ b/libc/src/__support/builtins/CMakeLists.txt
@@ -17,3 +17,13 @@ add_header_library(
     libc.src.__support.FPUtil.generic.add_sub
     libc.src.__support.macros.config
 )
+
+add_header_library(
+  multf3
+  HDRS
+    multf3.h
+  DEPENDS
+    libc.include.llvm-libc-types.float128
+    libc.src.__support.FPUtil.generic.mul
+    libc.src.__support.macros.config
+)

diff  --git a/libc/src/__support/builtins/multf3.h b/libc/src/__support/builtins/multf3.h
new file mode 100644
index 0000000000000..b6798325ff17d
--- /dev/null
+++ b/libc/src/__support/builtins/multf3.h
@@ -0,0 +1,38 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// This header exposes LLVM-libc's __multf3 implementation as builtins::multf3
+/// so that it can be reused by compiler-rt's builtins.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_BUILTINS_MULTF3_H
+#define LLVM_LIBC_SRC___SUPPORT_BUILTINS_MULTF3_H
+
+#include "include/llvm-libc-types/float128.h"
+
+#ifdef LIBC_TYPES_HAS_FLOAT128
+
+#include "src/__support/FPUtil/generic/mul.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace builtins {
+
+// Multiplication at float128 precision; mirrors compiler-rt's __multf3.
+LIBC_INLINE float128 multf3(float128 x, float128 y) {
+  return fputil::generic::mul<float128>(x, y);
+}
+
+} // namespace builtins
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LIBC_TYPES_HAS_FLOAT128
+
+#endif // LLVM_LIBC_SRC___SUPPORT_BUILTINS_MULTF3_H

diff  --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt
index 98f787c7453f6..614b2a87809e5 100644
--- a/libc/test/shared/CMakeLists.txt
+++ b/libc/test/shared/CMakeLists.txt
@@ -827,6 +827,7 @@ add_fp_unittest(
     shared_builtins_test.cpp
   DEPENDS
     libc.src.__support.builtins.addtf3
+    libc.src.__support.builtins.multf3
     libc.src.__support.builtins.subtf3
 )
 

diff  --git a/libc/test/shared/shared_builtins_test.cpp b/libc/test/shared/shared_builtins_test.cpp
index bf84d2c0866a4..52130e75c4c31 100644
--- a/libc/test/shared/shared_builtins_test.cpp
+++ b/libc/test/shared/shared_builtins_test.cpp
@@ -23,6 +23,8 @@ TEST(LlvmLibcSharedBuiltinsTest, AllDouble) {
 TEST(LlvmLibcSharedBuiltinsTest, AllFloat128) {
   EXPECT_FP_EQ(float128(3.0),
                LIBC_NAMESPACE::shared::addtf3(float128(1.0), float128(2.0)));
+  EXPECT_FP_EQ(float128(6.0),
+               LIBC_NAMESPACE::shared::multf3(float128(2.0), float128(3.0)));
   EXPECT_FP_EQ(float128(2.0),
                LIBC_NAMESPACE::shared::subtf3(float128(5.0), float128(3.0)));
 }


        


More information about the libc-commits mailing list