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)