Skip to content

Commit 263be9f

Browse files
author
Job Henandez Lara
authored
[libc][math][c23] fmul correcly rounded to all rounding modes (#91537)
This is an implementation of floating point multiplication: It will consist of - `double x double -> float`
1 parent 1e92ad4 commit 263be9f

File tree

14 files changed

+303
-1
lines changed

14 files changed

+303
-1
lines changed

libc/config/linux/aarch64/entrypoints.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ set(TARGET_LIBM_ENTRYPOINTS
394394
libc.src.math.fminimum_mag_num
395395
libc.src.math.fminimum_mag_numf
396396
libc.src.math.fminimum_mag_numl
397+
libc.src.math.fmul
397398
libc.src.math.fmod
398399
libc.src.math.fmodf
399400
libc.src.math.fmodl

libc/config/linux/arm/entrypoints.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ set(TARGET_LIBM_ENTRYPOINTS
261261
libc.src.math.fminimum_mag_num
262262
libc.src.math.fminimum_mag_numf
263263
libc.src.math.fminimum_mag_numl
264+
libc.src.math.fmul
264265
libc.src.math.fmod
265266
libc.src.math.fmodf
266267
libc.src.math.frexp

libc/config/linux/riscv/entrypoints.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ set(TARGET_LIBM_ENTRYPOINTS
402402
libc.src.math.fminimum_mag_num
403403
libc.src.math.fminimum_mag_numf
404404
libc.src.math.fminimum_mag_numl
405+
libc.src.math.fmul
405406
libc.src.math.fmod
406407
libc.src.math.fmodf
407408
libc.src.math.fmodl

libc/config/linux/x86_64/entrypoints.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ set(TARGET_LIBM_ENTRYPOINTS
421421
libc.src.math.fminimum_mag_num
422422
libc.src.math.fminimum_mag_numf
423423
libc.src.math.fminimum_mag_numl
424+
libc.src.math.fmul
424425
libc.src.math.fmod
425426
libc.src.math.fmodf
426427
libc.src.math.fmodl

libc/config/windows/entrypoints.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ set(TARGET_LIBM_ENTRYPOINTS
180180
libc.src.math.fminimum_mag_num
181181
libc.src.math.fminimum_mag_numf
182182
libc.src.math.fminimum_mag_numl
183+
libc.src.math.fmul
183184
libc.src.math.fmod
184185
libc.src.math.fmodf
185186
libc.src.math.fmodl

libc/docs/math/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ Basic Operations
158158
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
159159
| fmod | |check| | |check| | |check| | |check| | |check| | 7.12.10.1 | F.10.7.1 |
160160
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
161-
| fmul | N/A | | | N/A | | 7.12.14.3 | F.10.11 |
161+
| fmul | N/A | |check| | | N/A | | 7.12.14.3 | F.10.11 |
162162
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
163163
| frexp | |check| | |check| | |check| | | |check| | 7.12.6.7 | F.10.3.7 |
164164
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+

libc/spec/stdc.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,9 @@ def StdC : StandardSpec<"stdc"> {
472472
GuardedFunctionSpec<"fminimum_mag_numf16", RetValSpec<Float16Type>, [ArgSpec<Float16Type>, ArgSpec<Float16Type>], "LIBC_TYPES_HAS_FLOAT16">,
473473
GuardedFunctionSpec<"fminimum_mag_numf128", RetValSpec<Float128Type>, [ArgSpec<Float128Type>, ArgSpec<Float128Type>], "LIBC_TYPES_HAS_FLOAT128">,
474474

475+
FunctionSpec<"fmul", RetValSpec<FloatType>, [ArgSpec<DoubleType>, ArgSpec<DoubleType>]>,
476+
477+
475478
FunctionSpec<"fma", RetValSpec<DoubleType>, [ArgSpec<DoubleType>, ArgSpec<DoubleType>, ArgSpec<DoubleType>]>,
476479
FunctionSpec<"fmaf", RetValSpec<FloatType>, [ArgSpec<FloatType>, ArgSpec<FloatType>, ArgSpec<FloatType>]>,
477480

libc/src/math/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ add_math_entrypoint_object(fminimum_mag_numl)
180180
add_math_entrypoint_object(fminimum_mag_numf16)
181181
add_math_entrypoint_object(fminimum_mag_numf128)
182182

183+
add_math_entrypoint_object(fmul)
184+
183185
add_math_entrypoint_object(fmod)
184186
add_math_entrypoint_object(fmodf)
185187
add_math_entrypoint_object(fmodl)

libc/src/math/fmul.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//===-- Implementation header for fmul --------------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIBC_SRC_MATH_FMUL_H
10+
#define LLVM_LIBC_SRC_MATH_FMUL_H
11+
12+
namespace LIBC_NAMESPACE {
13+
14+
float fmul(double x, double y);
15+
16+
} // namespace LIBC_NAMESPACE
17+
18+
#endif // LLVM_LIBC_SRC_MATH_FMUL_H

libc/src/math/generic/CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2354,6 +2354,22 @@ add_entrypoint_object(
23542354
-O3
23552355
)
23562356

2357+
add_entrypoint_object(
2358+
fmul
2359+
SRCS
2360+
fmul.cpp
2361+
HDRS
2362+
../fmul.h
2363+
DEPENDS
2364+
libc.src.__support.FPUtil.basic_operations
2365+
libc.src.__support.uint128
2366+
libc.src.__support.CPP.bit
2367+
libc.src.__support.FPUtil.fp_bits
2368+
libc.src.__support.FPUtil.rounding_mode
2369+
COMPILE_OPTIONS
2370+
-O3
2371+
)
2372+
23572373
add_entrypoint_object(
23582374
sqrt
23592375
SRCS

0 commit comments

Comments
 (0)