Compare commits

...

23 Commits

Author SHA1 Message Date
Krishna Pandey
2bf7920d79
fix: add cpp::min in LdExpTest.h
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-21 05:23:25 +05:30
Krishna Pandey
49dc65d6fe
docs: add {frexp,ilogb,ldexp,llogb,logb}bf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-20 03:11:10 +05:30
Krishna Pandey
5f0ab92aca
fix: infinite recursion and tests
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-20 03:11:09 +05:30
Krishna Pandey
5fb2a5c945
chore: update entrypoints
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-20 03:11:09 +05:30
Krishna Pandey
a08faab58f
chore: add smoke tests for {frexp,ilogb,ldexp,llogb,logb}bf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-20 03:10:59 +05:30
Krishna Pandey
832bbc6f47
feat: implement {frexp,ilogb,ldexp,llogb,logb}bf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-20 03:10:43 +05:30
Krishna Pandey
250cfeaa32
docs: add nanbf16
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:43:03 +05:30
Krishna Pandey
27364c5fe2
chore: update entrypoints
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:42:52 +05:30
Krishna Pandey
ae0e6165f5
chore: add smoke tests for nanbf16 math function
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:42:41 +05:30
Krishna Pandey
ea9625e60e
feat: implement nanbf16 math function
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:42:17 +05:30
Krishna Pandey
70e4463400
docs: add {get,set}payloadbf16 and setpayloadsigbf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:12:59 +05:30
Krishna Pandey
fc2b6ebb84
chore: update entrypoints
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:12:28 +05:30
Krishna Pandey
8ea9354557
fix: add correct static_cast for fputil::getpload for bfloat16
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:11:23 +05:30
Krishna Pandey
c8f43800a5
chore: implement smoke tests for {get,set}payloadbf16 and setpayloadsigbf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:09:51 +05:30
Krishna Pandey
6f8d84d83b
feat: implement {get,set}payloadbf16 and setpayloadsigbf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 08:09:15 +05:30
Krishna Pandey
12f1923f5e
docs: add next{after,down,toward,up}bf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 06:00:38 +05:30
Krishna Pandey
a98b9281d8
chore: update entrypoints
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 06:00:15 +05:30
Krishna Pandey
446e63718e
chore: add smoke tests for next{after,down,toward,up}bf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 06:00:01 +05:30
Krishna Pandey
4a80312010
feat: implement next{after,down,toward,up}bf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 05:59:39 +05:30
Krishna Pandey
733f4f17cc
chore: update docs
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 05:07:21 +05:30
Krishna Pandey
baaf0e03e1
chore: update entrypoints
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 05:06:08 +05:30
Krishna Pandey
0a2b5278c8
chore: add tests for {,u}fromfp{,x}bf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 05:03:49 +05:30
Krishna Pandey
b58785d627
feat: implement {,u}fromfp{,x}bf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
2025-08-17 05:03:27 +05:30
79 changed files with 1926 additions and 155 deletions

View File

@ -785,9 +785,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
if(LIBC_TYPES_HAS_FLOAT128)

View File

@ -788,9 +788,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
if(LIBC_TYPES_HAS_FLOAT128)

View File

@ -788,9 +788,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
if(LIBC_TYPES_HAS_FLOAT128)

View File

@ -618,9 +618,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
if(LIBC_TYPES_HAS_FLOAT128)

View File

@ -261,10 +261,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
set(TARGET_LLVMLIBC_ENTRYPOINTS

View File

@ -644,9 +644,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
set(TARGET_LLVMLIBC_ENTRYPOINTS

View File

@ -645,9 +645,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
set(TARGET_LLVMLIBC_ENTRYPOINTS

View File

@ -872,9 +872,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
if(LIBC_TYPES_HAS_FLOAT128)

View File

@ -488,9 +488,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
set(TARGET_LLVMLIBC_ENTRYPOINTS

View File

@ -891,9 +891,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
if(LIBC_TYPES_HAS_FLOAT128)

View File

@ -923,9 +923,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
if(LIBC_TYPES_HAS_FLOAT128)

View File

@ -334,9 +334,26 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
libc.src.math.fminimum_magbf16
libc.src.math.fminimum_mag_numbf16
libc.src.math.fminimum_numbf16
libc.src.math.frexpbf16
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.logbbf16
libc.src.math.nanbf16
libc.src.math.nextafterbf16
libc.src.math.nextdownbf16
libc.src.math.nexttowardbf16
libc.src.math.nextupbf16
libc.src.math.roundbf16
libc.src.math.roundevenbf16
libc.src.math.setpayloadbf16
libc.src.math.setpayloadsigbf16
libc.src.math.truncbf16
libc.src.math.ufromfpbf16
libc.src.math.ufromfpxbf16
)
set(TARGET_LLVMLIBC_ENTRYPOINTS

View File

@ -179,31 +179,31 @@ Basic Operations
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| fmul | N/A | |check| | |check| | N/A | |check|\* | N/A | 7.12.14.3 | F.10.11 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| frexp | |check| | |check| | |check| | |check| | |check| | | 7.12.6.7 | F.10.3.7 |
| frexp | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.7 | F.10.3.7 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| fromfp | |check| | |check| | |check| | |check| | |check| | | 7.12.9.10 | F.10.6.10 |
| fromfp | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.9.10 | F.10.6.10 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| fromfpx | |check| | |check| | |check| | |check| | |check| | | 7.12.9.11 | F.10.6.11 |
| fromfpx | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.9.11 | F.10.6.11 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| fsub | N/A | |check| | |check| | N/A | |check|\* | N/A | 7.12.14.2 | F.10.11 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| getpayload | |check| | |check| | |check| | |check| | |check| | | F.10.13.1 | N/A |
| getpayload | |check| | |check| | |check| | |check| | |check| | |check| | F.10.13.1 | N/A |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| ilogb | |check| | |check| | |check| | |check| | |check| | | 7.12.6.8 | F.10.3.8 |
| ilogb | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.8 | F.10.3.8 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| iscanonical | |check| | |check| | |check| | |check| | |check| | | 7.12.3.2 | N/A |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| issignaling | |check| | |check| | |check| | |check| | |check| | | 7.12.3.8 | N/A |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| ldexp | |check| | |check| | |check| | |check| | |check| | | 7.12.6.9 | F.10.3.9 |
| ldexp | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.9 | F.10.3.9 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| llogb | |check| | |check| | |check| | |check| | |check| | | 7.12.6.10 | F.10.3.10 |
| llogb | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.10 | F.10.3.10 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| llrint | |check| | |check| | |check| | |check| | |check| | | 7.12.9.5 | F.10.6.5 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| llround | |check| | |check| | |check| | |check| | |check| | | 7.12.9.7 | F.10.6.7 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| logb | |check| | |check| | |check| | |check| | |check| | | 7.12.6.17 | F.10.3.17 |
| logb | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.6.17 | F.10.3.17 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| lrint | |check| | |check| | |check| | |check| | |check| | | 7.12.9.5 | F.10.6.5 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
@ -211,17 +211,17 @@ Basic Operations
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| modf | |check| | |check| | |check| | |check| | |check| | | 7.12.6.18 | F.10.3.18 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| nan | |check| | |check| | |check| | |check| | |check| | | 7.12.11.2 | F.10.8.2 |
| nan | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.11.2 | F.10.8.2 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| nearbyint | |check| | |check| | |check| | |check| | |check| | | 7.12.9.3 | F.10.6.3 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| nextafter | |check| | |check| | |check| | |check| | |check| | | 7.12.11.3 | F.10.8.3 |
| nextafter | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.11.3 | F.10.8.3 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| nextdown | |check| | |check| | |check| | |check| | |check| | | 7.12.11.6 | F.10.8.6 |
| nextdown | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.11.6 | F.10.8.6 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| nexttoward | |check| | |check| | |check| | |check| | N/A | | 7.12.11.4 | F.10.8.4 |
| nexttoward | |check| | |check| | |check| | |check| | N/A | |check| | 7.12.11.4 | F.10.8.4 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| nextup | |check| | |check| | |check| | |check| | |check| | | 7.12.11.5 | F.10.8.5 |
| 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 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
@ -237,9 +237,9 @@ Basic Operations
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| scalbn | |check| | |check| | |check| | |check| | |check| | | 7.12.6.19 | F.10.3.19 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| setpayload | |check| | |check| | |check| | |check| | |check| | | F.10.13.2 | N/A |
| setpayload | |check| | |check| | |check| | |check| | |check| | |check| | F.10.13.2 | N/A |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| setpayloadsig | |check| | |check| | |check| | |check| | |check| | | F.10.13.3 | N/A |
| setpayloadsig | |check| | |check| | |check| | |check| | |check| | |check| | F.10.13.3 | N/A |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| totalorder | |check| | |check| | |check| | |check| | |check| | | F.10.12.1 | N/A |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
@ -247,9 +247,9 @@ Basic Operations
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| trunc | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.9.9 | F.10.6.9 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| ufromfp | |check| | |check| | |check| | |check| | |check| | | 7.12.9.10 | F.10.6.10 |
| ufromfp | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.9.10 | F.10.6.10 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
| ufromfpx | |check| | |check| | |check| | |check| | |check| | | 7.12.9.11 | F.10.6.11 |
| ufromfpx | |check| | |check| | |check| | |check| | |check| | |check| | 7.12.9.11 | F.10.6.11 |
+------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
Higher Math Functions

View File

@ -354,7 +354,10 @@ LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<T>, T> getpayload(T x) {
return static_cast<T>(payload_dfloat);
} else {
return static_cast<T>(payload);
if constexpr (cpp::is_same_v<T, bfloat16>)
return T(static_cast<int>(payload));
else
return static_cast<T>(payload);
}
}

View File

@ -48,6 +48,8 @@ struct BFloat16 {
xd(sign, 0, value);
bits = xd.template as<bfloat16, /*ShouldSignalExceptions=*/true>().bits;
} else if constexpr (cpp::is_convertible_v<T, BFloat16>) {
bits = value.operator BFloat16().bits;
} else {
bits = fputil::cast<bfloat16>(static_cast<float>(value)).bits;
}

View File

@ -306,18 +306,21 @@ add_math_entrypoint_object(frexpf)
add_math_entrypoint_object(frexpl)
add_math_entrypoint_object(frexpf16)
add_math_entrypoint_object(frexpf128)
add_math_entrypoint_object(frexpbf16)
add_math_entrypoint_object(fromfp)
add_math_entrypoint_object(fromfpf)
add_math_entrypoint_object(fromfpl)
add_math_entrypoint_object(fromfpf16)
add_math_entrypoint_object(fromfpf128)
add_math_entrypoint_object(fromfpbf16)
add_math_entrypoint_object(fromfpx)
add_math_entrypoint_object(fromfpxf)
add_math_entrypoint_object(fromfpxl)
add_math_entrypoint_object(fromfpxf16)
add_math_entrypoint_object(fromfpxf128)
add_math_entrypoint_object(fromfpxbf16)
add_math_entrypoint_object(fsub)
add_math_entrypoint_object(fsubl)
@ -328,6 +331,7 @@ add_math_entrypoint_object(getpayloadf)
add_math_entrypoint_object(getpayloadl)
add_math_entrypoint_object(getpayloadf16)
add_math_entrypoint_object(getpayloadf128)
add_math_entrypoint_object(getpayloadbf16)
add_math_entrypoint_object(hypot)
add_math_entrypoint_object(hypotf)
@ -338,6 +342,7 @@ add_math_entrypoint_object(ilogbf)
add_math_entrypoint_object(ilogbl)
add_math_entrypoint_object(ilogbf16)
add_math_entrypoint_object(ilogbf128)
add_math_entrypoint_object(ilogbbf16)
add_math_entrypoint_object(isnan)
add_math_entrypoint_object(isnanf)
@ -354,12 +359,14 @@ add_math_entrypoint_object(llogbf)
add_math_entrypoint_object(llogbl)
add_math_entrypoint_object(llogbf16)
add_math_entrypoint_object(llogbf128)
add_math_entrypoint_object(llogbbf16)
add_math_entrypoint_object(ldexp)
add_math_entrypoint_object(ldexpf)
add_math_entrypoint_object(ldexpl)
add_math_entrypoint_object(ldexpf16)
add_math_entrypoint_object(ldexpf128)
add_math_entrypoint_object(ldexpbf16)
add_math_entrypoint_object(log10)
add_math_entrypoint_object(log10f)
@ -381,6 +388,7 @@ add_math_entrypoint_object(logbf)
add_math_entrypoint_object(logbl)
add_math_entrypoint_object(logbf16)
add_math_entrypoint_object(logbf128)
add_math_entrypoint_object(logbbf16)
add_math_entrypoint_object(llrint)
add_math_entrypoint_object(llrintf)
@ -417,6 +425,7 @@ add_math_entrypoint_object(nanf)
add_math_entrypoint_object(nanl)
add_math_entrypoint_object(nanf16)
add_math_entrypoint_object(nanf128)
add_math_entrypoint_object(nanbf16)
add_math_entrypoint_object(nearbyint)
add_math_entrypoint_object(nearbyintf)
@ -429,23 +438,27 @@ add_math_entrypoint_object(nextafterf)
add_math_entrypoint_object(nextafterl)
add_math_entrypoint_object(nextafterf16)
add_math_entrypoint_object(nextafterf128)
add_math_entrypoint_object(nextafterbf16)
add_math_entrypoint_object(nexttoward)
add_math_entrypoint_object(nexttowardf)
add_math_entrypoint_object(nexttowardl)
add_math_entrypoint_object(nexttowardf16)
add_math_entrypoint_object(nexttowardbf16)
add_math_entrypoint_object(nextdown)
add_math_entrypoint_object(nextdownf)
add_math_entrypoint_object(nextdownl)
add_math_entrypoint_object(nextdownf16)
add_math_entrypoint_object(nextdownf128)
add_math_entrypoint_object(nextdownbf16)
add_math_entrypoint_object(nextup)
add_math_entrypoint_object(nextupf)
add_math_entrypoint_object(nextupl)
add_math_entrypoint_object(nextupf16)
add_math_entrypoint_object(nextupf128)
add_math_entrypoint_object(nextupbf16)
add_math_entrypoint_object(pow)
add_math_entrypoint_object(powf)
@ -501,12 +514,14 @@ add_math_entrypoint_object(setpayloadf)
add_math_entrypoint_object(setpayloadl)
add_math_entrypoint_object(setpayloadf16)
add_math_entrypoint_object(setpayloadf128)
add_math_entrypoint_object(setpayloadbf16)
add_math_entrypoint_object(setpayloadsig)
add_math_entrypoint_object(setpayloadsigf)
add_math_entrypoint_object(setpayloadsigl)
add_math_entrypoint_object(setpayloadsigf16)
add_math_entrypoint_object(setpayloadsigf128)
add_math_entrypoint_object(setpayloadsigbf16)
add_math_entrypoint_object(sincos)
add_math_entrypoint_object(sincosf)
@ -567,12 +582,14 @@ add_math_entrypoint_object(ufromfpf)
add_math_entrypoint_object(ufromfpl)
add_math_entrypoint_object(ufromfpf16)
add_math_entrypoint_object(ufromfpf128)
add_math_entrypoint_object(ufromfpbf16)
add_math_entrypoint_object(ufromfpx)
add_math_entrypoint_object(ufromfpxf)
add_math_entrypoint_object(ufromfpxl)
add_math_entrypoint_object(ufromfpxf16)
add_math_entrypoint_object(ufromfpxf128)
add_math_entrypoint_object(ufromfpxbf16)
add_math_entrypoint_object(bf16add)
add_math_entrypoint_object(bf16addf)

21
libc/src/math/frexpbf16.h Normal file
View File

@ -0,0 +1,21 @@
//===-- Implementation header for frexpbf16 ---------------------*- 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_FREXPFB16_H
#define LLVM_LIBC_SRC_MATH_FREXPFB16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 frexpbf16(bfloat16 x, int *exp);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_FREXPFB16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for fromfpbf16 --------------------*- 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_FROMFPBF16_H
#define LLVM_LIBC_SRC_MATH_FROMFPBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 fromfpbf16(bfloat16 x, int rnd, unsigned int width);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_FROMFPBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for fromfpxbf16 -------------------*- 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_FROMFPXBF16_H
#define LLVM_LIBC_SRC_MATH_FROMFPXBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 fromfpxbf16(bfloat16 x, int rnd, unsigned int width);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_FROMFPXBF16_H

View File

@ -1732,6 +1732,20 @@ add_entrypoint_object(
libc.src.__support.math.frexpf128
)
add_entrypoint_object(
frexpbf16
SRCS
frexpbf16.cpp
HDRS
../frexpbf16.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(
ilogb
SRCS
@ -1784,6 +1798,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.manipulation_functions
)
add_entrypoint_object(
ilogbbf16
SRCS
ilogbbf16.cpp
HDRS
../ilogbbf16.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(
llogb
SRCS
@ -1836,6 +1864,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.manipulation_functions
)
add_entrypoint_object(
llogbbf16
SRCS
llogbbf16.cpp
HDRS
../llogbbf16.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(
ldexp
SRCS
@ -1886,6 +1928,20 @@ add_entrypoint_object(
libc.src.__support.math.ldexpf128
)
add_entrypoint_object(
ldexpbf16
SRCS
ldexpbf16.cpp
HDRS
../ldexpbf16.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_object_library(
common_constants
HDRS
@ -2158,6 +2214,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.manipulation_functions
)
add_entrypoint_object(
logbbf16
SRCS
logbbf16.cpp
HDRS
../logbbf16.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(
modf
SRCS
@ -3444,6 +3514,22 @@ add_entrypoint_object(
libc.src.errno.errno
)
add_entrypoint_object(
nanbf16
SRCS
nanbf16.cpp
HDRS
../nanbf16.h
DEPENDS
libc.src.errno.errno
libc.src.__support.common
libc.src.__support.FPUtil.bfloat16
libc.src.__support.libc_errno
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
libc.src.__support.str_to_float
)
add_entrypoint_object(
nextafter
SRCS
@ -3496,6 +3582,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.manipulation_functions
)
add_entrypoint_object(
nextafterbf16
SRCS
nextafterbf16.cpp
HDRS
../nextafterbf16.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(
nexttoward
SRCS
@ -3537,6 +3637,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.manipulation_functions
)
add_entrypoint_object(
nexttowardbf16
SRCS
nexttowardbf16.cpp
HDRS
../nexttowardbf16.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(
nextdown
SRCS
@ -3589,6 +3703,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.manipulation_functions
)
add_entrypoint_object(
nextdownbf16
SRCS
nextdownbf16.cpp
HDRS
../nextdownbf16.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(
nextup
SRCS
@ -3641,6 +3769,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.manipulation_functions
)
add_entrypoint_object(
nextupbf16
SRCS
nextupbf16.cpp
HDRS
../nextupbf16.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(
fmod
SRCS
@ -3745,6 +3887,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.nearest_integer_operations
)
add_entrypoint_object(
fromfpbf16
SRCS
fromfpbf16.cpp
HDRS
../fromfpbf16.h
DEPENDS
libc.src.__support.common
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.nearest_integer_operations
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
)
add_entrypoint_object(
fromfpx
SRCS
@ -3797,6 +3953,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.nearest_integer_operations
)
add_entrypoint_object(
fromfpxbf16
SRCS
fromfpxbf16.cpp
HDRS
../fromfpxbf16.h
DEPENDS
libc.src.__support.common
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.nearest_integer_operations
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
)
add_entrypoint_object(
ufromfp
SRCS
@ -3849,6 +4019,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.nearest_integer_operations
)
add_entrypoint_object(
ufromfpbf16
SRCS
ufromfpbf16.cpp
HDRS
../ufromfpbf16.h
DEPENDS
libc.src.__support.common
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.nearest_integer_operations
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
)
add_entrypoint_object(
ufromfpx
SRCS
@ -3901,6 +4085,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.nearest_integer_operations
)
add_entrypoint_object(
ufromfpxbf16
SRCS
ufromfpxbf16.cpp
HDRS
../ufromfpxbf16.h
DEPENDS
libc.src.__support.common
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.nearest_integer_operations
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
)
add_entrypoint_object(
coshf
SRCS
@ -4497,6 +4695,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.basic_operations
)
add_entrypoint_object(
getpayloadbf16
SRCS
getpayloadbf16.cpp
HDRS
../getpayloadbf16.h
DEPENDS
libc.src.__support.common
libc.src.__support.FPUtil.basic_operations
libc.src.__support.FPUtil.bfloat16
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
)
add_entrypoint_object(
setpayload
SRCS
@ -4549,6 +4761,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.basic_operations
)
add_entrypoint_object(
setpayloadbf16
SRCS
setpayloadbf16.cpp
HDRS
../setpayloadbf16.h
DEPENDS
libc.src.__support.common
libc.src.__support.FPUtil.basic_operations
libc.src.__support.FPUtil.bfloat16
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
)
add_entrypoint_object(
setpayloadsig
SRCS
@ -4601,6 +4827,20 @@ add_entrypoint_object(
libc.src.__support.FPUtil.basic_operations
)
add_entrypoint_object(
setpayloadsigbf16
SRCS
setpayloadsigbf16.cpp
HDRS
../setpayloadsigbf16.h
DEPENDS
libc.src.__support.common
libc.src.__support.FPUtil.basic_operations
libc.src.__support.FPUtil.bfloat16
libc.src.__support.macros.config
libc.src.__support.macros.properties.types
)
add_entrypoint_object(
f16add
SRCS

View File

@ -0,0 +1,21 @@
//===-- Implementation of frexpbf16 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/frexpbf16.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, frexpbf16, (bfloat16 x, int *exp)) {
return fputil::frexp(x, *exp);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,22 @@
//===-- Implementation of fromfpbf16 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/fromfpbf16.h"
#include "src/__support/FPUtil/NearestIntegerOperations.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, fromfpbf16,
(bfloat16 x, int rnd, unsigned int width)) {
return fputil::fromfp</*IsSigned=*/true>(x, rnd, width);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,22 @@
//===-- Implementation of fromfpxbf16 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/fromfpxbf16.h"
#include "src/__support/FPUtil/NearestIntegerOperations.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, fromfpxbf16,
(bfloat16 x, int rnd, unsigned int width)) {
return fputil::fromfpx</*IsSigned=*/true>(x, rnd, width);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of getpayloadbf16 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/getpayloadbf16.h"
#include "src/__support/FPUtil/BasicOperations.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, getpayloadbf16, (const bfloat16 *x)) {
return fputil::getpayload(*x);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of ilogbbf16 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/ilogbbf16.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(int, ilogbbf16, (bfloat16 x)) {
return fputil::intlogb<int>(x);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of ldexpbf16 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/ldexpbf16.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, ldexpbf16, (bfloat16 x, int exp)) {
return fputil::ldexp(x, exp);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of llogbbf16 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/llogbbf16.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(long, llogbbf16, (bfloat16 x)) {
return fputil::intlogb<long>(x);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,19 @@
//===-- Implementation of logbbf16 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/logbbf16.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, logbbf16, (bfloat16 x)) { return fputil::logb(x); }
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,25 @@
//===-- Implementation of nanbf16 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/nanbf16.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/__support/common.h"
#include "src/__support/libc_errno.h"
#include "src/__support/macros/config.h"
#include "src/__support/str_to_float.h"
namespace LIBC_NAMESPACE_DECL {
LLVM_LIBC_FUNCTION(bfloat16, nanbf16, (const char *arg)) {
auto result = internal::strtonan<bfloat16>(arg);
if (result.has_error())
libc_errno = result.error;
return result.value;
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of nextafterbf16 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/nextafterbf16.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, nextafterbf16, (bfloat16 x, bfloat16 y)) {
return fputil::nextafter(x, y);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of nextdownbf16 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/nextdownbf16.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, nextdownbf16, (bfloat16 x)) {
return fputil::nextupdown</*IsDown=*/true>(x);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,22 @@
//===-- Implementation of nexttowardbf16 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/nexttowardbf16.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, nexttowardbf16, (bfloat16 x, long double y)) {
// nextafter<T, U> where T != U is nexttoward
return fputil::nextafter(x, y);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of nextupbf16 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/nextupbf16.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, nextupbf16, (bfloat16 x)) {
return fputil::nextupdown</*IsDown=*/false>(x);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of setpayloadbf16 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/setpayloadbf16.h"
#include "src/__support/FPUtil/BasicOperations.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(int, setpayloadbf16, (bfloat16 * res, bfloat16 pl)) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/false>(*res, pl));
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation of setpayloadsigbf16 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/setpayloadsigbf16.h"
#include "src/__support/FPUtil/BasicOperations.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(int, setpayloadsigbf16, (bfloat16 * res, bfloat16 pl)) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/true>(*res, pl));
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,22 @@
//===-- Implementation of ufromfpbf16 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/ufromfpbf16.h"
#include "src/__support/FPUtil/NearestIntegerOperations.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, ufromfpbf16,
(bfloat16 x, int rnd, unsigned int width)) {
return fputil::fromfp</*IsSigned=*/false>(x, rnd, width);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,22 @@
//===-- Implementation of ufromfpxbf16 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/ufromfpxbf16.h"
#include "src/__support/FPUtil/NearestIntegerOperations.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, ufromfpxbf16,
(bfloat16 x, int rnd, unsigned int width)) {
return fputil::fromfpx</*IsSigned=*/false>(x, rnd, width);
}
} // namespace LIBC_NAMESPACE_DECL

View File

@ -0,0 +1,21 @@
//===-- Implementation header for getpayloadbf16 ----------------*- 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_GETPAYLOADBF16_H
#define LLVM_LIBC_SRC_MATH_GETPAYLOADBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 getpayloadbf16(const bfloat16 *x);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_GETPAYLOADBF16_H

21
libc/src/math/ilogbbf16.h Normal file
View File

@ -0,0 +1,21 @@
//===-- Implementation header for ilogbbf16 ---------------------*- 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_ILOGBBF16_H
#define LLVM_LIBC_SRC_MATH_ILOGBBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
int ilogbbf16(bfloat16 x);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_ILOGBBF16_H

21
libc/src/math/ldexpbf16.h Normal file
View File

@ -0,0 +1,21 @@
//===-- Implementation header for ldexpbf16 ---------------------*- 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_LDEXPBF16_H
#define LLVM_LIBC_SRC_MATH_LDEXPBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 ldexpbf16(bfloat16 x, int exp);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_LDEXPBF16_H

21
libc/src/math/llogbbf16.h Normal file
View File

@ -0,0 +1,21 @@
//===-- Implementation header for llogbbf16 ---------------------*- 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_LLOGBBF16_H
#define LLVM_LIBC_SRC_MATH_LLOGBBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
long llogbbf16(bfloat16 x);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_LLOGBBF16_H

21
libc/src/math/logbbf16.h Normal file
View File

@ -0,0 +1,21 @@
//===-- Implementation header for logbbf16 ----------------------*- 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_LOGBBF16_H
#define LLVM_LIBC_SRC_MATH_LOGBBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 logbbf16(bfloat16 x);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_LOGBBF16_H

21
libc/src/math/nanbf16.h Normal file
View File

@ -0,0 +1,21 @@
//===-- Implementation header for nanbf16 -----------------------*- 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_NANBF16_H
#define LLVM_LIBC_SRC_MATH_NANBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 nanbf16(const char *arg);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_NANBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for nextafterbf16 -----------------*- 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_NEXTAFTERBF16_H
#define LLVM_LIBC_SRC_MATH_NEXTAFTERBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 nextafterbf16(bfloat16 x, bfloat16 y);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_NEXTAFTERBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for nextdownbf16 ------------------*- 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_NEXTDOWNBF16_H
#define LLVM_LIBC_SRC_MATH_NEXTDOWNBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 nextdownbf16(bfloat16 x);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_NEXTDOWNBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for nexttowardbf16 ----------------*- 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_NEXTTOWARDBF16_H
#define LLVM_LIBC_SRC_MATH_NEXTTOWARDBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 nexttowardbf16(bfloat16 x, long double y);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_NEXTTOWARDBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for nextupbf16 --------------------*- 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_NEXTUPBF16_H
#define LLVM_LIBC_SRC_MATH_NEXTUPBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 nextupbf16(bfloat16 x);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_NEXTUPBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for setpayloadbf16 ----------------*- 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_SETPAYLOADBF16_H
#define LLVM_LIBC_SRC_MATH_SETPAYLOADBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
int setpayloadbf16(bfloat16 *res, bfloat16 pl);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_SETPAYLOADBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for setpayloadsigbf16 -------------*- 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_SETPAYLOADSIGBF16_H
#define LLVM_LIBC_SRC_MATH_SETPAYLOADSIGBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
int setpayloadsigbf16(bfloat16 *res, bfloat16 pl);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_SETPAYLOADSIGBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for ufromfpbf16 -------------------*- 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_UFROMFPBF16_H
#define LLVM_LIBC_SRC_MATH_UFROMFPBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 ufromfpbf16(bfloat16 x, int rnd, unsigned int width);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_UFROMFPBF16_H

View File

@ -0,0 +1,21 @@
//===-- Implementation header for ufromfpxbf16 ------------------*- 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_UFROMFPXBF16_H
#define LLVM_LIBC_SRC_MATH_UFROMFPXBF16_H
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h"
namespace LIBC_NAMESPACE_DECL {
bfloat16 ufromfpxbf16(bfloat16 x, int rnd, unsigned int width);
} // namespace LIBC_NAMESPACE_DECL
#endif // LLVM_LIBC_SRC_MATH_UFROMFPXBF16_H

View File

@ -1536,6 +1536,19 @@ add_fp_unittest(
libc.src.math.frexpf128
)
add_fp_unittest(
frexpbf16_test
SUITE
libc-math-smoke-tests
SRCS
frexpbf16_test.cpp
HDRS
FrexpTest.h
DEPENDS
libc.src.math.frexpbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
fromfp_test
SUITE
@ -1596,6 +1609,19 @@ add_fp_unittest(
libc.src.math.fromfpf128
)
add_fp_unittest(
fromfpbf16_test
SUITE
libc-math-smoke-tests
SRCS
fromfpbf16_test.cpp
HDRS
FromfpTest.h
DEPENDS
libc.src.math.fromfpbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
fromfpx_test
SUITE
@ -1656,6 +1682,20 @@ add_fp_unittest(
libc.src.math.fromfpxf128
)
add_fp_unittest(
fromfpxbf16_test
SUITE
libc-math-smoke-tests
SRCS
fromfpxbf16_test.cpp
HDRS
FromfpxTest.h
DEPENDS
libc.src.math.fromfpxbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
ufromfp_test
SUITE
@ -1716,6 +1756,19 @@ add_fp_unittest(
libc.src.math.ufromfpf128
)
add_fp_unittest(
ufromfpbf16_test
SUITE
libc-math-smoke-tests
SRCS
ufromfpbf16_test.cpp
HDRS
UfromfpTest.h
DEPENDS
libc.src.math.ufromfpbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
ufromfpx_test
SUITE
@ -1776,6 +1829,19 @@ add_fp_unittest(
libc.src.math.ufromfpxf128
)
add_fp_unittest(
ufromfpxbf16_test
SUITE
libc-math-smoke-tests
SRCS
ufromfpxbf16_test.cpp
HDRS
UfromfpxTest.h
DEPENDS
libc.src.math.ufromfpxbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
ilogb_test
SUITE
@ -1851,6 +1917,22 @@ add_fp_unittest(
libc.src.__support.FPUtil.manipulation_functions
)
add_fp_unittest(
ilogbbf16_test
SUITE
libc-math-smoke-tests
SRCS
ilogbbf16_test.cpp
HDRS
ILogbTest.h
DEPENDS
libc.src.math.ilogbbf16
libc.src.__support.CPP.algorithm
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.manipulation_functions
)
add_fp_unittest(
issignaling_test
SUITE
@ -1986,6 +2068,22 @@ add_fp_unittest(
libc.src.__support.FPUtil.manipulation_functions
)
add_fp_unittest(
llogbbf16_test
SUITE
libc-math-smoke-tests
SRCS
llogbbf16_test.cpp
HDRS
ILogbTest.h
DEPENDS
libc.src.math.llogbbf16
libc.src.__support.CPP.algorithm
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.manipulation_functions
)
add_fp_unittest(
ldexp_test
SUITE
@ -1996,6 +2094,7 @@ add_fp_unittest(
LdExpTest.h
DEPENDS
libc.src.math.ldexp
libc.src.__support.CPP.algorithm
libc.src.__support.CPP.limits
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.normal_float
@ -2011,6 +2110,7 @@ add_fp_unittest(
LdExpTest.h
DEPENDS
libc.src.math.ldexpf
libc.src.__support.CPP.algorithm
libc.src.__support.CPP.limits
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.normal_float
@ -2026,6 +2126,7 @@ add_fp_unittest(
LdExpTest.h
DEPENDS
libc.src.math.ldexpl
libc.src.__support.CPP.algorithm
libc.src.__support.CPP.limits
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.normal_float
@ -2041,6 +2142,7 @@ add_fp_unittest(
LdExpTest.h
DEPENDS
libc.src.math.ldexpf16
libc.src.__support.CPP.algorithm
libc.src.__support.CPP.limits
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.normal_float
@ -2056,11 +2158,29 @@ add_fp_unittest(
LdExpTest.h
DEPENDS
libc.src.math.ldexpf128
libc.src.__support.CPP.algorithm
libc.src.__support.CPP.limits
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.normal_float
)
add_fp_unittest(
ldexpbf16_test
SUITE
libc-math-smoke-tests
SRCS
ldexpbf16_test.cpp
HDRS
LdExpTest.h
DEPENDS
libc.src.math.ldexpbf16
libc.src.__support.CPP.algorithm
libc.src.__support.CPP.limits
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.fp_bits
libc.src.__support.FPUtil.normal_float
)
add_fp_unittest(
logb_test
SUITE
@ -2131,6 +2251,21 @@ add_fp_unittest(
libc.src.__support.FPUtil.manipulation_functions
)
add_fp_unittest(
logbbf16_test
SUITE
libc-math-smoke-tests
SRCS
logbbf16_test.cpp
HDRS
LogbTest.h
DEPENDS
libc.src.math.logbbf16
libc.src.__support.CPP.algorithm
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.manipulation_functions
)
add_fp_unittest(
modf_test
SUITE
@ -3462,6 +3597,22 @@ add_fp_unittest(
UNIT_TEST_ONLY
)
add_fp_unittest(
nanbf16_test
SUITE
libc-math-smoke-tests
SRCS
nanbf16_test.cpp
DEPENDS
libc.hdr.signal_macros
libc.src.math.nanbf16
libc.src.__support.FPUtil.bfloat16
libc.src.__support.FPUtil.fp_bits
# FIXME: The nan tests currently have death tests, which aren't supported for
# hermetic tests.
UNIT_TEST_ONLY
)
add_fp_unittest(
nearbyint_test
SUITE
@ -3607,6 +3758,19 @@ add_fp_unittest(
libc.src.__support.FPUtil.fp_bits
)
add_fp_unittest(
nextafterbf16_test
SUITE
libc-math-smoke-tests
SRCS
nextafterbf16_test.cpp
HDRS
NextUpTest.h
DEPENDS
libc.src.math.nextafterbf16
libc.src.__support.FPUtil.bfloat16
)
# FIXME: These tests are currently spurious for the GPU.
if(NOT LIBC_TARGET_OS_IS_GPU)
add_fp_unittest(
@ -3674,6 +3838,19 @@ add_fp_unittest(
libc.src.__support.FPUtil.fp_bits
)
add_fp_unittest(
nexttowardbf16_test
SUITE
libc-math-smoke-tests
SRCS
nexttowardbf16_test.cpp
HDRS
NextUpTest.h
DEPENDS
libc.src.math.nexttowardbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
nextdown_test
SUITE
@ -3734,6 +3911,19 @@ add_fp_unittest(
libc.src.math.nextdownf128
)
add_fp_unittest(
nextdownbf16_test
SUITE
libc-math-smoke-tests
SRCS
nextdownbf16_test.cpp
HDRS
NextUpTest.h
DEPENDS
libc.src.math.nextdownbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
nextup_test
SUITE
@ -3794,6 +3984,19 @@ add_fp_unittest(
libc.src.math.nextupf128
)
add_fp_unittest(
nextupbf16_test
SUITE
libc-math-smoke-tests
SRCS
nextupbf16_test.cpp
HDRS
NextUpTest.h
DEPENDS
libc.src.math.nextupbf16
libc.src.__support.FPUtil.bfloat16
)
# TODO(lntue): The current implementation of fputil::general::fma<float> is only
# correctly rounded for the default rounding mode round-to-nearest tie-to-even.
add_fp_unittest(
@ -4748,6 +4951,19 @@ add_fp_unittest(
libc.src.math.getpayloadf128
)
add_fp_unittest(
getpayloadbf16_test
SUITE
libc-math-smoke-tests
SRCS
getpayloadbf16_test.cpp
HDRS
GetPayloadTest.h
DEPENDS
libc.src.math.getpayloadbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
setpayload_test
SUITE
@ -4808,6 +5024,19 @@ add_fp_unittest(
libc.src.math.setpayloadf128
)
add_fp_unittest(
setpayloadbf16_test
SUITE
libc-math-smoke-tests
SRCS
setpayloadbf16_test.cpp
HDRS
SetPayloadTest.h
DEPENDS
libc.src.math.setpayloadbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
setpayloadsig_test
SUITE
@ -4868,6 +5097,18 @@ add_fp_unittest(
libc.src.math.setpayloadsigf128
)
add_fp_unittest(
setpayloadsigbf16_test
SUITE
libc-math-smoke-tests
SRCS
setpayloadsigbf16_test.cpp
HDRS
SetPayloadTest.h
DEPENDS
libc.src.math.setpayloadsigbf16
libc.src.__support.FPUtil.bfloat16
)
add_fp_unittest(
f16add_test

View File

@ -85,10 +85,10 @@ public:
EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_UPWARD, 5U));
EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_UPWARD, 5U));
EXPECT_FP_EQ(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U));
EXPECT_FP_EQ(T(124.0), func(T(123.38), FP_INT_UPWARD, 8U));
EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_UPWARD, 8U));
EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_UPWARD, 8U));
EXPECT_FP_EQ(T(-123.0), func(T(-123.96), FP_INT_UPWARD, 8U));
EXPECT_FP_EQ(T(64.0), func(T(63.25), FP_INT_UPWARD, 8U));
EXPECT_FP_EQ(T(-63.0), func(T(-63.25), FP_INT_UPWARD, 8U));
EXPECT_FP_EQ(T(64.0), func(T(63.75), FP_INT_UPWARD, 8U));
EXPECT_FP_EQ(T(-63.0), func(T(-63.75), FP_INT_UPWARD, 8U));
}
void testFractionsUpwardOutsideRange(FromfpFunc func) {
@ -139,10 +139,10 @@ public:
EXPECT_FP_EQ(T(-11.0), func(T(-10.32), FP_INT_DOWNWARD, 5U));
EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 5U));
EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U));
EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 8U));
EXPECT_FP_EQ(T(-124.0), func(T(-123.38), FP_INT_DOWNWARD, 8U));
EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 8U));
EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_DOWNWARD, 8U));
EXPECT_FP_EQ(T(63.0), func(T(63.25), FP_INT_DOWNWARD, 8U));
EXPECT_FP_EQ(T(-64.0), func(T(-63.25), FP_INT_DOWNWARD, 8U));
EXPECT_FP_EQ(T(63.0), func(T(63.75), FP_INT_DOWNWARD, 8U));
EXPECT_FP_EQ(T(-64.0), func(T(-63.75), FP_INT_DOWNWARD, 8U));
}
void testFractionsDownwardOutsideRange(FromfpFunc func) {
@ -193,10 +193,10 @@ public:
EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TOWARDZERO, 5U));
EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 5U));
EXPECT_FP_EQ(T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U));
EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 8U));
EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TOWARDZERO, 8U));
EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 8U));
EXPECT_FP_EQ(T(-123.0), func(T(-123.96), FP_INT_TOWARDZERO, 8U));
EXPECT_FP_EQ(T(63.0), func(T(63.25), FP_INT_TOWARDZERO, 8U));
EXPECT_FP_EQ(T(-63.0), func(T(-63.25), FP_INT_TOWARDZERO, 8U));
EXPECT_FP_EQ(T(63.0), func(T(63.75), FP_INT_TOWARDZERO, 8U));
EXPECT_FP_EQ(T(-63.0), func(T(-63.75), FP_INT_TOWARDZERO, 8U));
}
void testFractionsTowardZeroOutsideRange(FromfpFunc func) {
@ -241,10 +241,10 @@ public:
EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TONEARESTFROMZERO, 5U));
EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 5U));
EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U));
EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 8U));
EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TONEARESTFROMZERO, 8U));
EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 8U));
EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_TONEARESTFROMZERO, 8U));
EXPECT_FP_EQ(T(63.0), func(T(63.25), FP_INT_TONEARESTFROMZERO, 8U));
EXPECT_FP_EQ(T(-63.0), func(T(-63.25), FP_INT_TONEARESTFROMZERO, 8U));
EXPECT_FP_EQ(T(64.0), func(T(63.75), FP_INT_TONEARESTFROMZERO, 8U));
EXPECT_FP_EQ(T(-64.0), func(T(-63.75), FP_INT_TONEARESTFROMZERO, 8U));
}
void testFractionsToNearestFromZeroOutsideRange(FromfpFunc func) {
@ -297,10 +297,10 @@ public:
EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TONEAREST, 5U));
EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEAREST, 5U));
EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U));
EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEAREST, 8U));
EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TONEAREST, 8U));
EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEAREST, 8U));
EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_TONEAREST, 8U));
EXPECT_FP_EQ(T(63.0), func(T(63.25), FP_INT_TONEAREST, 8U));
EXPECT_FP_EQ(T(-63.0), func(T(-63.25), FP_INT_TONEAREST, 8U));
EXPECT_FP_EQ(T(64.0), func(T(63.75), FP_INT_TONEAREST, 8U));
EXPECT_FP_EQ(T(-64.0), func(T(-63.75), FP_INT_TONEAREST, 8U));
EXPECT_FP_EQ(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U));
EXPECT_FP_EQ(T(-2.0), func(T(-2.3), FP_INT_TONEAREST, 2U));
@ -391,14 +391,14 @@ public:
EXPECT_FP_EQ(T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U));
EXPECT_FP_EQ(T(-11.0),
func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U));
EXPECT_FP_EQ(T(123.0),
func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
EXPECT_FP_EQ(T(-123.0),
func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
EXPECT_FP_EQ(T(124.0),
func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
EXPECT_FP_EQ(T(-124.0),
func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
EXPECT_FP_EQ(T(63.0),
func(T(63.25), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
EXPECT_FP_EQ(T(-63.0),
func(T(-63.25), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
EXPECT_FP_EQ(T(64.0),
func(T(63.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
EXPECT_FP_EQ(T(-64.0),
func(T(-63.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
EXPECT_FP_EQ(T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U));
EXPECT_FP_EQ(T(-2.0), func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));

View File

@ -101,13 +101,13 @@ public:
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 8U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.25), FP_INT_UPWARD, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.38), FP_INT_UPWARD, 8U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(-63.0), func(T(-63.25), FP_INT_UPWARD, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 8U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.75), FP_INT_UPWARD, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.96), FP_INT_UPWARD, 8U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(-63.0), func(T(-63.75), FP_INT_UPWARD, 8U),
FE_INEXACT);
}
@ -175,14 +175,14 @@ public:
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 8U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.25), FP_INT_DOWNWARD, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-124.0), func(T(-123.38), FP_INT_DOWNWARD, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 8U),
T(-64.0), func(T(-63.25), FP_INT_DOWNWARD, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.75), FP_INT_DOWNWARD, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-124.0), func(T(-123.96), FP_INT_DOWNWARD, 8U), FE_INEXACT);
T(-64.0), func(T(-63.75), FP_INT_DOWNWARD, 8U), FE_INEXACT);
}
void testFractionsDownwardOutsideRange(FromfpxFunc func) {
@ -250,13 +250,13 @@ public:
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
T(63.0), func(T(63.25), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-123.0), func(T(-123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
T(-63.0), func(T(-63.25), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
T(63.0), func(T(63.75), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-123.0), func(T(-123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
T(-63.0), func(T(-63.75), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
}
void testFractionsTowardZeroOutsideRange(FromfpxFunc func) {
@ -318,13 +318,13 @@ public:
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
T(63.0), func(T(63.25), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-123.0), func(T(-123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
T(-63.0), func(T(-63.25), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
T(64.0), func(T(63.75), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-124.0), func(T(-123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
T(-64.0), func(T(-63.75), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
}
void testFractionsToNearestFromZeroOutsideRange(FromfpxFunc func) {
@ -393,14 +393,14 @@ public:
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 8U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.25), FP_INT_TONEAREST, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-123.0), func(T(-123.38), FP_INT_TONEAREST, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 8U),
T(-63.0), func(T(-63.25), FP_INT_TONEAREST, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.75), FP_INT_TONEAREST, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-124.0), func(T(-123.96), FP_INT_TONEAREST, 8U), FE_INEXACT);
T(-64.0), func(T(-63.75), FP_INT_TONEAREST, 8U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U),
FE_INEXACT);
@ -530,16 +530,16 @@ public:
T(-11.0), func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
T(63.0), func(T(63.25), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-123.0), func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
T(-63.0), func(T(-63.25), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
T(64.0), func(T(63.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(-124.0), func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
T(-64.0), func(T(-63.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(

View File

@ -51,23 +51,50 @@ public:
EXPECT_FP_EQ(default_snan_payload, funcWrapper(func, sNaN));
EXPECT_FP_EQ(default_snan_payload, funcWrapper(func, neg_sNaN));
T qnan_42 = FPBits::quiet_nan(Sign::POS, 0x42).get_val();
T neg_qnan_42 = FPBits::quiet_nan(Sign::NEG, 0x42).get_val();
T snan_42 = FPBits::signaling_nan(Sign::POS, 0x42).get_val();
T neg_snan_42 = FPBits::signaling_nan(Sign::NEG, 0x42).get_val();
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, qnan_42));
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, neg_qnan_42));
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, snan_42));
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, neg_snan_42));
if constexpr (FPBits::FRACTION_LEN - 1 >= 6) {
// [S] [E..E] [QM..M] -> number of M bits should be at least 6
// 0x31 = 0b110001 = 6 bits
T qnan_31 = FPBits::quiet_nan(Sign::POS, 0x31).get_val();
T neg_qnan_31 = FPBits::quiet_nan(Sign::NEG, 0x31).get_val();
T snan_31 = FPBits::signaling_nan(Sign::POS, 0x31).get_val();
T neg_snan_31 = FPBits::signaling_nan(Sign::NEG, 0x31).get_val();
EXPECT_FP_EQ(T(0x31.0p+0), funcWrapper(func, qnan_31));
EXPECT_FP_EQ(T(0x31.0p+0), funcWrapper(func, neg_qnan_31));
EXPECT_FP_EQ(T(0x31.0p+0), funcWrapper(func, snan_31));
EXPECT_FP_EQ(T(0x31.0p+0), funcWrapper(func, neg_snan_31));
T qnan_123 = FPBits::quiet_nan(Sign::POS, 0x123).get_val();
T neg_qnan_123 = FPBits::quiet_nan(Sign::NEG, 0x123).get_val();
T snan_123 = FPBits::signaling_nan(Sign::POS, 0x123).get_val();
T neg_snan_123 = FPBits::signaling_nan(Sign::NEG, 0x123).get_val();
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, qnan_123));
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, neg_qnan_123));
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, snan_123));
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, neg_snan_123));
// 0x15 = 0b10101 = 5 bits
T qnan_15 = FPBits::quiet_nan(Sign::POS, 0x15).get_val();
T neg_qnan_15 = FPBits::quiet_nan(Sign::NEG, 0x15).get_val();
T snan_15 = FPBits::signaling_nan(Sign::POS, 0x15).get_val();
T neg_snan_15 = FPBits::signaling_nan(Sign::NEG, 0x15).get_val();
EXPECT_FP_EQ(T(0x15.0p+0), funcWrapper(func, qnan_15));
EXPECT_FP_EQ(T(0x15.0p+0), funcWrapper(func, neg_qnan_15));
EXPECT_FP_EQ(T(0x15.0p+0), funcWrapper(func, snan_15));
EXPECT_FP_EQ(T(0x15.0p+0), funcWrapper(func, neg_snan_15));
}
if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
T qnan_42 = FPBits::quiet_nan(Sign::POS, 0x42).get_val();
T neg_qnan_42 = FPBits::quiet_nan(Sign::NEG, 0x42).get_val();
T snan_42 = FPBits::signaling_nan(Sign::POS, 0x42).get_val();
T neg_snan_42 = FPBits::signaling_nan(Sign::NEG, 0x42).get_val();
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, qnan_42));
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, neg_qnan_42));
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, snan_42));
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, neg_snan_42));
}
if constexpr (FPBits::FRACTION_LEN - 1 >= 9) {
T qnan_123 = FPBits::quiet_nan(Sign::POS, 0x123).get_val();
T neg_qnan_123 = FPBits::quiet_nan(Sign::NEG, 0x123).get_val();
T snan_123 = FPBits::signaling_nan(Sign::POS, 0x123).get_val();
T neg_snan_123 = FPBits::signaling_nan(Sign::NEG, 0x123).get_val();
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, qnan_123));
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, neg_qnan_123));
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, snan_123));
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, neg_snan_123));
}
}
};

View File

@ -10,7 +10,8 @@
#define LLVM_LIBC_TEST_SRC_MATH_LDEXPTEST_H
#include "hdr/stdint_proxy.h"
#include "src/__support/CPP/limits.h" // INT_MAX
#include "src/__support/CPP/algorithm.h" // cpp::min
#include "src/__support/CPP/limits.h" // INT_MAX
#include "src/__support/FPUtil/FPBits.h"
#include "src/__support/FPUtil/NormalFloat.h"
#include "test/UnitTest/FEnvSafeTest.h"
@ -135,8 +136,8 @@ public:
// Normal which trigger mantissa overflow.
T x = NormalFloat(Sign::POS, -FPBits::EXP_BIAS + 1,
StorageType(2) * NormalFloat::ONE - StorageType(1));
ASSERT_FP_EQ(func(x, -1), x / 2);
ASSERT_FP_EQ(func(-x, -1), -x / 2);
ASSERT_FP_EQ(func(x, -1), T(x / 2));
ASSERT_FP_EQ(func(-x, -1), -T(x / 2));
// Start with a normal number high exponent but pass a very low number for
// exp. The result should be a subnormal number.
@ -154,7 +155,9 @@ public:
// Start with a subnormal number but pass a very high number for exponent.
// The result should not be infinity.
x = NormalFloat(Sign::POS, -FPBits::EXP_BIAS + 1, NormalFloat::ONE >> 10);
x = NormalFloat(Sign::POS, -FPBits::EXP_BIAS + 1,
NormalFloat::ONE >>
LIBC_NAMESPACE::cpp::min(FPBits::FRACTION_LEN, 10));
exp = FPBits::MAX_BIASED_EXPONENT + 5;
ASSERT_FALSE(FPBits(func(x, exp)).is_inf());
// But if the exp is large enough to oversome than the normalization shift,

View File

@ -12,6 +12,7 @@
#include "src/__support/CPP/bit.h"
#include "src/__support/FPUtil/FEnvImpl.h"
#include "src/__support/FPUtil/FPBits.h"
#include "src/__support/sign.h"
#include "test/UnitTest/FEnvSafeTest.h"
#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"
@ -42,6 +43,8 @@ class NextAfterTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
const T neg_inf = FPBits::inf(Sign::NEG).get_val();
const T zero = FPBits::zero(Sign::POS).get_val();
const T neg_zero = FPBits::zero(Sign::NEG).get_val();
const T one = FPBits::one(Sign::POS).get_val();
const T neg_one = FPBits::one(Sign::NEG).get_val();
const T nan = FPBits::quiet_nan().get_val();
static constexpr StorageType min_subnormal =
@ -55,8 +58,8 @@ public:
typedef T (*NextAfterFunc)(T, T);
void testNaN(NextAfterFunc func) {
ASSERT_FP_EQ(func(nan, 0), nan);
ASSERT_FP_EQ(func(0, nan), nan);
ASSERT_FP_EQ(func(nan, zero), nan);
ASSERT_FP_EQ(func(zero, nan), nan);
}
void testBoundaries(NextAfterFunc func) {
@ -65,68 +68,68 @@ public:
// 'from' is zero|neg_zero.
T x = zero;
T result = func(x, T(1));
T result = func(x, one);
StorageType expected_bits = 1;
T expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
result = func(x, T(-1));
result = func(x, neg_one);
expected_bits = FPBits::SIGN_MASK + 1;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
x = neg_zero;
result = func(x, 1);
result = func(x, one);
expected_bits = 1;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
result = func(x, -1);
result = func(x, neg_one);
expected_bits = FPBits::SIGN_MASK + 1;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
// 'from' is max subnormal value.
x = LIBC_NAMESPACE::cpp::bit_cast<T>(max_subnormal);
result = func(x, 1);
result = func(x, one);
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(min_normal);
ASSERT_FP_EQ(result, expected);
result = func(x, 0);
result = func(x, zero);
expected_bits = max_subnormal - 1;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
x = -x;
result = func(x, -1);
result = func(x, neg_one);
expected_bits = FPBits::SIGN_MASK + min_normal;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ(result, expected);
result = func(x, 0);
result = func(x, zero);
expected_bits = FPBits::SIGN_MASK + max_subnormal - 1;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
// 'from' is min subnormal value.
x = LIBC_NAMESPACE::cpp::bit_cast<T>(min_subnormal);
result = func(x, 1);
result = func(x, one);
expected_bits = min_subnormal + 1;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
ASSERT_FP_EQ_WITH_UNDERFLOW(func(x, 0), zero);
ASSERT_FP_EQ_WITH_UNDERFLOW(func(x, zero), zero);
x = -x;
result = func(x, -1);
result = func(x, neg_one);
expected_bits = FPBits::SIGN_MASK + min_subnormal + 1;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
ASSERT_FP_EQ_WITH_UNDERFLOW(func(x, 0), T(-0.0));
ASSERT_FP_EQ_WITH_UNDERFLOW(func(x, zero), neg_zero);
// 'from' is min normal.
x = LIBC_NAMESPACE::cpp::bit_cast<T>(min_normal);
result = func(x, 0);
result = func(x, zero);
expected_bits = max_subnormal;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
@ -137,7 +140,7 @@ public:
ASSERT_FP_EQ(result, expected);
x = -x;
result = func(x, 0);
result = func(x, zero);
expected_bits = FPBits::SIGN_MASK + max_subnormal;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ_WITH_UNDERFLOW(result, expected);
@ -157,14 +160,14 @@ public:
// 'from' is infinity.
x = inf;
result = func(x, 0);
result = func(x, zero);
expected_bits = max_normal;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ(result, expected);
ASSERT_FP_EQ(func(x, inf), inf);
x = neg_inf;
result = func(x, 0);
result = func(x, zero);
expected_bits = FPBits::SIGN_MASK + max_normal;
expected = LIBC_NAMESPACE::cpp::bit_cast<T>(expected_bits);
ASSERT_FP_EQ(result, expected);
@ -172,7 +175,7 @@ public:
// 'from' is a power of 2.
x = T(32.0);
result = func(x, 0);
result = func(x, zero);
FPBits x_bits = FPBits(x);
FPBits result_bits = FPBits(result);
ASSERT_EQ(result_bits.get_biased_exponent(),
@ -187,7 +190,7 @@ public:
x = -x;
result = func(x, 0);
result = func(x, zero);
result_bits = FPBits(result);
ASSERT_EQ(result_bits.get_biased_exponent(),
uint16_t(x_bits.get_biased_exponent() - 1));

View File

@ -62,8 +62,8 @@ public:
typedef T (*NextTowardFunc)(T, long double);
void testNaN(NextTowardFunc func) {
ASSERT_FP_EQ(func(nan, 0), nan);
ASSERT_FP_EQ(func(0, to_nan), nan);
ASSERT_FP_EQ(func(nan, to_zero), nan);
ASSERT_FP_EQ(func(zero, to_nan), nan);
}
void testBoundaries(NextTowardFunc func) {

View File

@ -54,15 +54,31 @@ public:
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 1).uintval(),
FPBits(res).uintval());
EXPECT_EQ(0, func(&res, T(0x42.0p+0)));
EXPECT_TRUE(FPBits(res).is_signaling_nan());
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x42).uintval(),
FPBits(res).uintval());
if constexpr (FPBits::FRACTION_LEN - 1 >= 6) {
EXPECT_EQ(0, func(&res, T(0x31.0p+0)));
EXPECT_TRUE(FPBits(res).is_signaling_nan());
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x31).uintval(),
FPBits(res).uintval());
EXPECT_EQ(0, func(&res, T(0x123.0p+0)));
EXPECT_TRUE(FPBits(res).is_signaling_nan());
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x123).uintval(),
FPBits(res).uintval());
EXPECT_EQ(0, func(&res, T(0x15.0p+0)));
EXPECT_TRUE(FPBits(res).is_signaling_nan());
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x15).uintval(),
FPBits(res).uintval());
}
if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
EXPECT_EQ(0, func(&res, T(0x42.0p+0)));
EXPECT_TRUE(FPBits(res).is_signaling_nan());
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x42).uintval(),
FPBits(res).uintval());
}
if constexpr (FPBits::FRACTION_LEN - 1 >= 9) {
EXPECT_EQ(0, func(&res, T(0x123.0p+0)));
EXPECT_TRUE(FPBits(res).is_signaling_nan());
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x123).uintval(),
FPBits(res).uintval());
}
FPBits nan_payload_bits = FPBits::one();
nan_payload_bits.set_biased_exponent(FPBits::FRACTION_LEN - 2 +

View File

@ -54,15 +54,31 @@ public:
EXPECT_TRUE(FPBits(res).is_quiet_nan());
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 1).uintval(), FPBits(res).uintval());
EXPECT_EQ(0, func(&res, T(0x42.0p+0)));
EXPECT_TRUE(FPBits(res).is_quiet_nan());
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x42).uintval(),
FPBits(res).uintval());
if constexpr (FPBits::FRACTION_LEN - 1 >= 6) {
EXPECT_EQ(0, func(&res, T(0x31.0p+0)));
EXPECT_TRUE(FPBits(res).is_quiet_nan());
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x31).uintval(),
FPBits(res).uintval());
EXPECT_EQ(0, func(&res, T(0x123.0p+0)));
EXPECT_TRUE(FPBits(res).is_quiet_nan());
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x123).uintval(),
FPBits(res).uintval());
EXPECT_EQ(0, func(&res, T(0x15.0p+0)));
EXPECT_TRUE(FPBits(res).is_quiet_nan());
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x15).uintval(),
FPBits(res).uintval());
}
if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
EXPECT_EQ(0, func(&res, T(0x42.0p+0)));
EXPECT_TRUE(FPBits(res).is_quiet_nan());
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x42).uintval(),
FPBits(res).uintval());
}
if constexpr (FPBits::FRACTION_LEN - 1 >= 9) {
EXPECT_EQ(0, func(&res, T(0x123.0p+0)));
EXPECT_TRUE(FPBits(res).is_quiet_nan());
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x123).uintval(),
FPBits(res).uintval());
}
// The following code is creating a NaN payload manually to prevent a
// conversion from BigInt to float128.

View File

@ -76,8 +76,8 @@ public:
EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_UPWARD, 2U));
EXPECT_FP_EQ(T(11.0), func(T(10.32), FP_INT_UPWARD, 4U));
EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_UPWARD, 4U));
EXPECT_FP_EQ(T(124.0), func(T(123.38), FP_INT_UPWARD, 7U));
EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_UPWARD, 7U));
EXPECT_FP_EQ(T(64.0), func(T(63.25), FP_INT_UPWARD, 7U));
EXPECT_FP_EQ(T(64.0), func(T(63.75), FP_INT_UPWARD, 7U));
}
void testFractionsUpwardOutsideRange(UfromfpFunc func) {
@ -120,8 +120,8 @@ public:
EXPECT_FP_EQ(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 1U));
EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 4U));
EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 4U));
EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 7U));
EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 7U));
EXPECT_FP_EQ(T(63.0), func(T(63.25), FP_INT_DOWNWARD, 7U));
EXPECT_FP_EQ(T(63.0), func(T(63.75), FP_INT_DOWNWARD, 7U));
}
void testFractionsDownwardOutsideRange(UfromfpFunc func) {
@ -167,8 +167,8 @@ public:
EXPECT_FP_EQ(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 1U));
EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 4U));
EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 4U));
EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 7U));
EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 7U));
EXPECT_FP_EQ(T(63.0), func(T(63.25), FP_INT_TOWARDZERO, 7U));
EXPECT_FP_EQ(T(63.0), func(T(63.75), FP_INT_TOWARDZERO, 7U));
}
void testFractionsTowardZeroOutsideRange(UfromfpFunc func) {
@ -206,8 +206,8 @@ public:
EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U));
EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U));
EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U));
EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U));
EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U));
EXPECT_FP_EQ(T(63.0), func(T(63.25), FP_INT_TONEARESTFROMZERO, 7U));
EXPECT_FP_EQ(T(64.0), func(T(63.75), FP_INT_TONEARESTFROMZERO, 7U));
}
void testFractionsToNearestFromZeroOutsideRange(UfromfpFunc func) {
@ -254,8 +254,8 @@ public:
EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_TONEAREST, 2U));
EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TONEAREST, 4U));
EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEAREST, 4U));
EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEAREST, 7U));
EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEAREST, 7U));
EXPECT_FP_EQ(T(63.0), func(T(63.25), FP_INT_TONEAREST, 7U));
EXPECT_FP_EQ(T(64.0), func(T(63.75), FP_INT_TONEAREST, 7U));
EXPECT_FP_EQ(T(2.0), func(T(2.3), FP_INT_TONEAREST, 2U));
EXPECT_FP_EQ(T(2.0), func(T(2.5), FP_INT_TONEAREST, 2U));
@ -332,10 +332,10 @@ public:
EXPECT_FP_EQ(T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));
EXPECT_FP_EQ(T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U));
EXPECT_FP_EQ(T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U));
EXPECT_FP_EQ(T(123.0),
func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U));
EXPECT_FP_EQ(T(124.0),
func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U));
EXPECT_FP_EQ(T(63.0),
func(T(63.25), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U));
EXPECT_FP_EQ(T(64.0),
func(T(63.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U));
EXPECT_FP_EQ(T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));
EXPECT_FP_EQ(T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));

View File

@ -87,9 +87,9 @@ public:
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_UPWARD, 4U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 7U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.25), FP_INT_UPWARD, 7U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 7U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.75), FP_INT_UPWARD, 7U),
FE_INEXACT);
}
@ -141,9 +141,9 @@ public:
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 4U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 7U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.25), FP_INT_DOWNWARD, 7U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 7U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.75), FP_INT_DOWNWARD, 7U),
FE_INEXACT);
}
@ -202,9 +202,9 @@ public:
EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 4U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 7U), FE_INEXACT);
T(63.0), func(T(63.25), FP_INT_TOWARDZERO, 7U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 7U), FE_INEXACT);
T(63.0), func(T(63.75), FP_INT_TOWARDZERO, 7U), FE_INEXACT);
}
void testFractionsTowardZeroOutsideRange(UfromfpxFunc func) {
@ -252,9 +252,9 @@ public:
EXPECT_FP_EQ_WITH_EXCEPTION(
T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT);
T(63.0), func(T(63.25), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT);
T(64.0), func(T(63.75), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT);
}
void testFractionsToNearestFromZeroOutsideRange(UfromfpxFunc func) {
@ -311,9 +311,9 @@ public:
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_TONEAREST, 4U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 7U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.25), FP_INT_TONEAREST, 7U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 7U),
EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.75), FP_INT_TONEAREST, 7U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 2U),
@ -414,10 +414,10 @@ public:
T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
T(63.0), func(T(63.25), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(
T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
T(64.0), func(T(63.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
FE_INEXACT);
EXPECT_FP_EQ_WITH_EXCEPTION(

View File

@ -0,0 +1,14 @@
//===-- Unittests for frexpbf16 -------------------------------------------===//
//
// 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 "FrexpTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/frexpbf16.h"
LIST_FREXP_TESTS(bfloat16, LIBC_NAMESPACE::frexpbf16);

View File

@ -0,0 +1,14 @@
//===-- Unittests for fromfpbf16 ------------------------------------------===//
//
// 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 "FromfpTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/fromfpbf16.h"
LIST_FROMFP_TESTS(bfloat16, LIBC_NAMESPACE::fromfpbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for fromfpxbf16 -----------------------------------------===//
//
// 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 "FromfpxTest.h"
#include "src/math/fromfpxbf16.h"
#include "src/__support/FPUtil/bfloat16.h"
LIST_FROMFPX_TESTS(bfloat16, LIBC_NAMESPACE::fromfpxbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for getpayloadbf16 --------------------------------------===//
//
// 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 "GetPayloadTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/getpayloadbf16.h"
LIST_GETPAYLOAD_TESTS(bfloat16, LIBC_NAMESPACE::getpayloadbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for ilogbbf16 -------------------------------------------===//
//
// 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 "ILogbTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/ilogbbf16.h"
LIST_INTLOGB_TESTS(int, bfloat16, LIBC_NAMESPACE::ilogbbf16);

View File

@ -0,0 +1,14 @@
//===-- Unittests for ldexpbf16 -------------------------------------------===//
//
// 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 "LdExpTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/ldexpbf16.h"
LIST_LDEXP_TESTS(bfloat16, LIBC_NAMESPACE::ldexpbf16);

View File

@ -0,0 +1,14 @@
//===-- Unittests for llogbbf16 -------------------------------------------===//
//
// 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 "ILogbTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/llogbbf16.h"
LIST_INTLOGB_TESTS(long, bfloat16, LIBC_NAMESPACE::llogbbf16);

View File

@ -0,0 +1,14 @@
//===-- Unittests for logbbf16 --------------------------------------------===//
//
// 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 "LogbTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/logbbf16.h"
LIST_LOGB_TESTS(bfloat16, LIBC_NAMESPACE::logbbf16)

View File

@ -0,0 +1,55 @@
//===-- Unittests for nanbf16 ---------------------------------------------===//
//
// 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 "hdr/signal_macros.h"
#include "src/__support/FPUtil/FPBits.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/nanbf16.h"
#include "test/UnitTest/FEnvSafeTest.h"
#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"
class LlvmLibcNanf16Test : public LIBC_NAMESPACE::testing::FEnvSafeTest {
public:
using StorageType = LIBC_NAMESPACE::fputil::FPBits<bfloat16>::StorageType;
void run_test(const char *input_str, StorageType bits) {
bfloat16 result = LIBC_NAMESPACE::nanbf16(input_str);
auto actual_fp = LIBC_NAMESPACE::fputil::FPBits<bfloat16>(result);
auto expected_fp = LIBC_NAMESPACE::fputil::FPBits<bfloat16>(bits);
EXPECT_EQ(actual_fp.uintval(), expected_fp.uintval());
}
};
TEST_F(LlvmLibcNanf16Test, NCharSeq) {
run_test("", 0x7fc0);
// 0x7fc0 + 0x1f (31) = 0x7cdf
run_test("31", 0x7fdf);
// 0x7fc0 + 0x15 = 0x7fd5
run_test("0x15", 0x7fd5);
run_test("1a", 0x7fc0);
run_test("1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_",
0x7fc0);
run_test("10000000000000000000000000000", 0x7fc0);
}
TEST_F(LlvmLibcNanf16Test, RandomString) {
run_test(" 1234", 0x7fc0);
run_test("-1234", 0x7fc0);
run_test("asd&f", 0x7fc0);
run_test("123 ", 0x7fc0);
}
#if defined(LIBC_ADD_NULL_CHECKS)
TEST_F(LlvmLibcNanf16Test, InvalidInput) {
EXPECT_DEATH([] { LIBC_NAMESPACE::nanbf16(nullptr); }, WITH_SIGNAL(-1));
}
#endif // LIBC_ADD_NULL_CHECKS

View File

@ -0,0 +1,14 @@
//===-- Unittests for nextafterbf16 ---------------------------------------===//
//
// 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 "NextAfterTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/nextafterbf16.h"
LIST_NEXTAFTER_TESTS(bfloat16, LIBC_NAMESPACE::nextafterbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for nextdownbf16 ----------------------------------------===//
//
// 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 "NextDownTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/nextdownbf16.h"
LIST_NEXTDOWN_TESTS(bfloat16, LIBC_NAMESPACE::nextdownbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for nexttowardbf16 --------------------------------------===//
//
// 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 "NextTowardTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/nexttowardbf16.h"
LIST_NEXTTOWARD_TESTS(bfloat16, LIBC_NAMESPACE::nexttowardbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for nextupbf16 ------------------------------------------===//
//
// 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 "NextUpTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/nextupbf16.h"
LIST_NEXTUP_TESTS(bfloat16, LIBC_NAMESPACE::nextupbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for setpayloadbf16 --------------------------------------===//
//
// 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 "SetPayloadTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/setpayloadbf16.h"
LIST_SETPAYLOAD_TESTS(bfloat16, LIBC_NAMESPACE::setpayloadbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for setpayloadsigbf16 -----------------------------------===//
//
// 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 "SetPayloadSigTest.h"
#include "src/__support/FPUtil/bfloat16.h"
#include "src/math/setpayloadsigbf16.h"
LIST_SETPAYLOADSIG_TESTS(bfloat16, LIBC_NAMESPACE::setpayloadsigbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for ufromfpbf16 -----------------------------------------===//
//
// 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 "UfromfpTest.h"
#include "src/math/ufromfpbf16.h"
#include "src/__support/FPUtil/bfloat16.h"
LIST_UFROMFP_TESTS(bfloat16, LIBC_NAMESPACE::ufromfpbf16)

View File

@ -0,0 +1,14 @@
//===-- Unittests for ufromfpxbf16 ----------------------------------------===//
//
// 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 "UfromfpxTest.h"
#include "src/math/ufromfpxbf16.h"
#include "src/__support/FPUtil/bfloat16.h"
LIST_UFROMFPX_TESTS(bfloat16, LIBC_NAMESPACE::ufromfpxbf16)