[libc-commits] [libc] f005e2c - [libc][math][c++23] Add {modf, remainder, remquo}bf16 math functions (#154652)

via libc-commits libc-commits at lists.llvm.org
Tue Aug 26 23:12:13 PDT 2025


Author: Krishna Pandey
Date: 2025-08-27T11:42:09+05:30
New Revision: f005e2cb7aea4ed74a62bfbb1dce51e063cd52a0

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

LOG: [libc][math][c++23] Add {modf,remainder,remquo}bf16 math functions (#154652)

This PR adds the following basic math functions for BFloat16 type along
with the tests:
- modfbf16
- remainderbf16
- remquobf16

---------

Signed-off-by: Krishna Pandey <kpandey81930 at gmail.com>
Co-authored-by: OverMighty <its.overmighty at gmail.com>

Added: 
    libc/src/math/generic/modfbf16.cpp
    libc/src/math/generic/remainderbf16.cpp
    libc/src/math/generic/remquobf16.cpp
    libc/src/math/modfbf16.h
    libc/src/math/remainderbf16.h
    libc/src/math/remquobf16.h
    libc/test/src/math/smoke/modfbf16_test.cpp
    libc/test/src/math/smoke/remquobf16_test.cpp

Modified: 
    libc/config/baremetal/aarch64/entrypoints.txt
    libc/config/baremetal/arm/entrypoints.txt
    libc/config/baremetal/riscv/entrypoints.txt
    libc/config/darwin/aarch64/entrypoints.txt
    libc/config/darwin/x86_64/entrypoints.txt
    libc/config/gpu/amdgpu/entrypoints.txt
    libc/config/gpu/nvptx/entrypoints.txt
    libc/config/linux/aarch64/entrypoints.txt
    libc/config/linux/arm/entrypoints.txt
    libc/config/linux/riscv/entrypoints.txt
    libc/config/linux/x86_64/entrypoints.txt
    libc/config/windows/entrypoints.txt
    libc/docs/headers/math/index.rst
    libc/src/math/CMakeLists.txt
    libc/src/math/generic/CMakeLists.txt
    libc/test/src/math/smoke/CMakeLists.txt
    libc/test/src/math/smoke/ModfTest.h

Removed: 
    


################################################################################
diff  --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 5649c2b31f101..c2e4c337f199a 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -786,26 +786,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index ad3ceab3c6b01..c4f3a87659b23 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -789,26 +789,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 8c50fd1e41df5..380ca57ea8aa9 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -789,26 +789,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 08bc10b403e56..1f4318fc88389 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -619,26 +619,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index 49f440404b9dd..0cba22016c960 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -262,26 +262,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index b557046598392..e08b028865bfc 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -645,26 +645,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index f1eac1f3fe6d9..88c8fc91ebb77 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -647,26 +647,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 63471f9905988..20924e9047c69 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -874,26 +874,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index 5f95c80166941..f2e8ddfe8e91a 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -489,26 +489,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 7c4a287c4a330..0ad36a667232a 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -892,26 +892,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 5e8bfc6341b47..c060e900472eb 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -925,26 +925,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 8a61845b750ce..9e45b800b10a3 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -335,26 +335,29 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
   libc.src.math.fminimum_mag_numbf16
   libc.src.math.fminimum_numbf16
   libc.src.math.frexpbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
   libc.src.math.fromfpbf16
   libc.src.math.fromfpxbf16
   libc.src.math.getpayloadbf16
   libc.src.math.ilogbbf16
   libc.src.math.ldexpbf16
   libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
   libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
   libc.src.math.nanbf16
   libc.src.math.nearbyintbf16
   libc.src.math.nextafterbf16
   libc.src.math.nextdownbf16
   libc.src.math.nexttowardbf16
   libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
   libc.src.math.roundbf16
   libc.src.math.roundevenbf16
-  libc.src.math.rintbf16
   libc.src.math.setpayloadbf16
   libc.src.math.setpayloadsigbf16
   libc.src.math.truncbf16

diff  --git a/libc/docs/headers/math/index.rst b/libc/docs/headers/math/index.rst
index 6a2699e88aa9f..b329bf031312d 100644
--- a/libc/docs/headers/math/index.rst
+++ b/libc/docs/headers/math/index.rst
@@ -209,7 +209,7 @@ Basic Operations
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | lround           | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.9.7               | F.10.6.7                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| modf             | |check|          | |check|         | |check|                | |check|              | |check|                |                        | 7.12.6.18              | F.10.3.18                  |
+| modf             | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.6.18              | F.10.3.18                  |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | nan              | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.11.2              | F.10.8.2                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
@@ -223,9 +223,9 @@ Basic Operations
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | nextup           | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.11.5              | F.10.8.5                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| remainder        | |check|          | |check|         | |check|                | |check|              | |check|                |                        | 7.12.10.2              | F.10.7.2                   |
+| remainder        | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.10.2              | F.10.7.2                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| remquo           | |check|          | |check|         | |check|                | |check|              | |check|                |                        | 7.12.10.3              | F.10.7.3                   |
+| remquo           | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.10.3              | F.10.7.3                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | rint             | |check|          | |check|         | |check|                | |check|              | |check|                | |check|                | 7.12.9.4               | F.10.6.4                   |
 +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+

diff  --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt
index cbafa63b9c0d6..95e5ae781490f 100644
--- a/libc/src/math/CMakeLists.txt
+++ b/libc/src/math/CMakeLists.txt
@@ -425,6 +425,7 @@ add_math_entrypoint_object(modff)
 add_math_entrypoint_object(modfl)
 add_math_entrypoint_object(modff16)
 add_math_entrypoint_object(modff128)
+add_math_entrypoint_object(modfbf16)
 
 add_math_entrypoint_object(nan)
 add_math_entrypoint_object(nanf)
@@ -477,12 +478,14 @@ add_math_entrypoint_object(remainderf)
 add_math_entrypoint_object(remainderl)
 add_math_entrypoint_object(remainderf16)
 add_math_entrypoint_object(remainderf128)
+add_math_entrypoint_object(remainderbf16)
 
 add_math_entrypoint_object(remquo)
 add_math_entrypoint_object(remquof)
-add_math_entrypoint_object(remquof128)
 add_math_entrypoint_object(remquol)
 add_math_entrypoint_object(remquof16)
+add_math_entrypoint_object(remquof128)
+add_math_entrypoint_object(remquobf16)
 
 add_math_entrypoint_object(rint)
 add_math_entrypoint_object(rintf)

diff  --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 7f4f250025dc3..ba71e5f9e1260 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -2346,6 +2346,20 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.manipulation_functions
 )
 
+add_entrypoint_object(
+  modfbf16
+  SRCS
+    modfbf16.cpp
+  HDRS
+    ../modfbf16.h
+  DEPENDS
+    libc.src.__support.common
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.manipulation_functions
+    libc.src.__support.macros.config
+    libc.src.__support.macros.properties.types
+)
+
 add_entrypoint_object(
   fmin
   SRCS
@@ -3250,6 +3264,20 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.division_and_remainder_operations
 )
 
+add_entrypoint_object(
+  remquobf16
+  SRCS
+    remquobf16.cpp
+  HDRS
+    ../remquobf16.h
+  DEPENDS
+    libc.src.__support.common
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.division_and_remainder_operations
+    libc.src.__support.macros.properties.types
+    libc.src.__support.macros.config
+)
+
 add_entrypoint_object(
   remainderf
   SRCS
@@ -3302,6 +3330,20 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.division_and_remainder_operations
 )
 
+add_entrypoint_object(
+  remainderbf16
+  SRCS
+    remainderbf16.cpp
+  HDRS
+    ../remainderbf16.h
+  DEPENDS
+    libc.src.__support.common
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.division_and_remainder_operations
+    libc.src.__support.macros.properties.types
+    libc.src.__support.macros.config
+)
+
 add_entrypoint_object(
   hypotf
   SRCS

diff  --git a/libc/src/math/generic/modfbf16.cpp b/libc/src/math/generic/modfbf16.cpp
new file mode 100644
index 0000000000000..09458f6a2db40
--- /dev/null
+++ b/libc/src/math/generic/modfbf16.cpp
@@ -0,0 +1,21 @@
+//===-- Implementation of modfbf16 function -------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/math/modfbf16.h"
+#include "src/__support/FPUtil/ManipulationFunctions.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(bfloat16, modfbf16, (bfloat16 x, bfloat16 *iptr)) {
+  return fputil::modf(x, *iptr);
+}
+
+} // namespace LIBC_NAMESPACE_DECL

diff  --git a/libc/src/math/generic/remainderbf16.cpp b/libc/src/math/generic/remainderbf16.cpp
new file mode 100644
index 0000000000000..e70726a6cbc55
--- /dev/null
+++ b/libc/src/math/generic/remainderbf16.cpp
@@ -0,0 +1,22 @@
+//===-- Implementation of remainderbf16 function --------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/math/remainderbf16.h"
+#include "src/__support/FPUtil/DivisionAndRemainderOperations.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(bfloat16, remainderbf16, (bfloat16 x, bfloat16 y)) {
+  int quotient;
+  return fputil::remquo(x, y, quotient);
+}
+
+} // namespace LIBC_NAMESPACE_DECL

diff  --git a/libc/src/math/generic/remquobf16.cpp b/libc/src/math/generic/remquobf16.cpp
new file mode 100644
index 0000000000000..e1b13f8deb19a
--- /dev/null
+++ b/libc/src/math/generic/remquobf16.cpp
@@ -0,0 +1,21 @@
+//===-- Implementation of remquobf16 function -----------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/math/remquobf16.h"
+#include "src/__support/FPUtil/DivisionAndRemainderOperations.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(bfloat16, remquobf16, (bfloat16 x, bfloat16 y, int *exp)) {
+  return fputil::remquo(x, y, *exp);
+}
+
+} // namespace LIBC_NAMESPACE_DECL

diff  --git a/libc/src/math/modfbf16.h b/libc/src/math/modfbf16.h
new file mode 100644
index 0000000000000..df05b6c5b0aad
--- /dev/null
+++ b/libc/src/math/modfbf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for modfbf16 ----------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_MODFBF16_H
+#define LLVM_LIBC_SRC_MATH_MODFBF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+bfloat16 modfbf16(bfloat16 x, bfloat16 *iptr);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_MODFBF16_H

diff  --git a/libc/src/math/remainderbf16.h b/libc/src/math/remainderbf16.h
new file mode 100644
index 0000000000000..a1a2eaa3a0efb
--- /dev/null
+++ b/libc/src/math/remainderbf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for remainderbf16 -----------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_REMAINDERBF16_H
+#define LLVM_LIBC_SRC_MATH_REMAINDERBF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+bfloat16 remainderbf16(bfloat16 x, bfloat16 y);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_REMAINDERBF16_H

diff  --git a/libc/src/math/remquobf16.h b/libc/src/math/remquobf16.h
new file mode 100644
index 0000000000000..909db17dec58a
--- /dev/null
+++ b/libc/src/math/remquobf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for remquobf16 --------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_REMQUOBF16_H
+#define LLVM_LIBC_SRC_MATH_REMQUOBF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+bfloat16 remquobf16(bfloat16 x, bfloat16 y, int *exp);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_REMQUOBF16_H

diff  --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index f9da396202337..a5f856f05bb8c 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -2424,6 +2424,22 @@ add_fp_unittest(
     libc.src.__support.FPUtil.nearest_integer_operations
 )
 
+add_fp_unittest(
+  modfbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    modfbf16_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modfbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.nearest_integer_operations
+)
+
 add_fp_unittest(
   fdimf_test
   SUITE
@@ -3564,6 +3580,20 @@ add_fp_unittest(
     libc.src.__support.FPUtil.fp_bits
 )
 
+add_fp_unittest(
+  remquobf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    remquobf16_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquobf16
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
 add_fp_unittest(
   hypotf_test
   SUITE

diff  --git a/libc/test/src/math/smoke/ModfTest.h b/libc/test/src/math/smoke/ModfTest.h
index 24cfb1152c2e5..71f1c6bf4be28 100644
--- a/libc/test/src/math/smoke/ModfTest.h
+++ b/libc/test/src/math/smoke/ModfTest.h
@@ -76,10 +76,16 @@ class ModfTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
     EXPECT_FP_EQ(T(-0.75), func(T(-10.75), &integral));
     EXPECT_FP_EQ(integral, T(-10.0));
 
-    EXPECT_FP_EQ(T(0.125), func(T(100.125), &integral));
+    EXPECT_FP_EQ(T(0.125), func(T(31.125), &integral));
+    EXPECT_FP_EQ(integral, T(31.0));
+
+    EXPECT_FP_EQ(T(-0.125), func(T(-31.125), &integral));
+    EXPECT_FP_EQ(integral, T(-31.0));
+
+    EXPECT_FP_EQ(T(0.5), func(T(100.5), &integral));
     EXPECT_FP_EQ(integral, T(100.0));
 
-    EXPECT_FP_EQ(T(-0.125), func(T(-100.125), &integral));
+    EXPECT_FP_EQ(T(-0.5), func(T(-100.5), &integral));
     EXPECT_FP_EQ(integral, T(-100.0));
   }
 

diff  --git a/libc/test/src/math/smoke/modfbf16_test.cpp b/libc/test/src/math/smoke/modfbf16_test.cpp
new file mode 100644
index 0000000000000..88ebed55222ca
--- /dev/null
+++ b/libc/test/src/math/smoke/modfbf16_test.cpp
@@ -0,0 +1,14 @@
+//===-- Unittests for modfbf16 --------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "ModfTest.h"
+
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/math/modfbf16.h"
+
+LIST_MODF_TESTS(bfloat16, LIBC_NAMESPACE::modfbf16)

diff  --git a/libc/test/src/math/smoke/remquobf16_test.cpp b/libc/test/src/math/smoke/remquobf16_test.cpp
new file mode 100644
index 0000000000000..3f754bbd28a41
--- /dev/null
+++ b/libc/test/src/math/smoke/remquobf16_test.cpp
@@ -0,0 +1,14 @@
+//===-- Unittests for remquobf16 ------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "RemQuoTest.h"
+
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/math/remquobf16.h"
+
+LIST_REMQUO_TESTS(bfloat16, LIBC_NAMESPACE::remquobf16)


        


More information about the libc-commits mailing list