diff options
| author | antlilja <liljaanton2001@gmail.com> | 2020-06-17 17:35:45 +0200 |
|---|---|---|
| committer | antlilja <liljaanton2001@gmail.com> | 2020-06-17 17:35:45 +0200 |
| commit | 1157ee130732449811294d70021aaafa588d3048 (patch) | |
| tree | 442f27ca03ff3e1240b1cf9a572343d8c0a6f11e /src/softfloat_ext.cpp | |
| parent | f595545c10a35b85879edfa3c002ce308ffeb6c2 (diff) | |
| download | zig-1157ee130732449811294d70021aaafa588d3048.tar.gz zig-1157ee130732449811294d70021aaafa588d3048.zip | |
Improve builtin op support for f128/comptime_float
* Add support for fabs, floor, ceil, trunc and round
* Add behavior tests
Diffstat (limited to 'src/softfloat_ext.cpp')
| -rw-r--r-- | src/softfloat_ext.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/softfloat_ext.cpp b/src/softfloat_ext.cpp new file mode 100644 index 0000000000..8408a15116 --- /dev/null +++ b/src/softfloat_ext.cpp @@ -0,0 +1,25 @@ +#include "softfloat_ext.hpp" + +extern "C" { + #include "softfloat.h" +} + +void f128M_abs(const float128_t *aPtr, float128_t *zPtr) { + float128_t zero_float; + ui32_to_f128M(0, &zero_float); + if (f128M_lt(aPtr, &zero_float)) { + f128M_sub(&zero_float, aPtr, zPtr); + } else { + *zPtr = *aPtr; + } +} + +void f128M_trunc(const float128_t *aPtr, float128_t *zPtr) { + float128_t zero_float; + ui32_to_f128M(0, &zero_float); + if (f128M_lt(aPtr, &zero_float)) { + f128M_roundToInt(aPtr, softfloat_round_max, false, zPtr); + } else { + f128M_roundToInt(aPtr, softfloat_round_min, false, zPtr); + } +}
\ No newline at end of file |
