aboutsummaryrefslogtreecommitdiff
path: root/src/softfloat_ext.cpp
diff options
context:
space:
mode:
authorantlilja <liljaanton2001@gmail.com>2020-06-17 17:35:45 +0200
committerantlilja <liljaanton2001@gmail.com>2020-06-17 17:35:45 +0200
commit1157ee130732449811294d70021aaafa588d3048 (patch)
tree442f27ca03ff3e1240b1cf9a572343d8c0a6f11e /src/softfloat_ext.cpp
parentf595545c10a35b85879edfa3c002ce308ffeb6c2 (diff)
downloadzig-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.cpp25
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