summaryrefslogtreecommitdiff
path: root/AK/FloatingPoint.h
diff options
context:
space:
mode:
authorSteffen Rusitschka <rusi@gmx.de>2022-11-25 18:15:55 +0100
committerLinus Groh <mail@linusgroh.de>2022-12-02 16:22:51 +0100
commit1aa07d7328a4f1eaee0ac773429090e1963d22fd (patch)
treeae8342f7434c48cc0ee58dc43ddf9eeeb1cde478 /AK/FloatingPoint.h
parent2e806dab0713d229e0f580b6e5e5960f113e7c2e (diff)
downloadserenity-1aa07d7328a4f1eaee0ac773429090e1963d22fd.zip
AK: Implement FloatExtractor<f128>
This patch adds support for 128-bit floating points in FloatExtractor. This is required to build SerenityOS on MacOS/aarch64. It might break building for Raspberry Pi.
Diffstat (limited to 'AK/FloatingPoint.h')
-rw-r--r--AK/FloatingPoint.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/AK/FloatingPoint.h b/AK/FloatingPoint.h
index eeca5ea6b6..fea42d575c 100644
--- a/AK/FloatingPoint.h
+++ b/AK/FloatingPoint.h
@@ -15,6 +15,26 @@ namespace AK {
template<typename T>
union FloatExtractor;
+#ifdef AK_HAS_FLOAT_128
+template<>
+union FloatExtractor<f128> {
+ static constexpr int mantissa_bits = 112;
+ static constexpr unsigned __int128 mantissa_max = (((unsigned __int128)1) << 112) - 1;
+ static constexpr int exponent_bias = 16383;
+ static constexpr int exponent_bits = 15;
+ static constexpr unsigned exponent_max = 32767;
+ struct {
+ unsigned __int128 mantissa : 112;
+ unsigned exponent : 15;
+ unsigned sign : 1;
+ };
+ f128 d;
+};
+// Validate that f128 and the FloatExtractor union are 128 bits.
+static_assert(sizeof(f128) == 16);
+static_assert(sizeof(FloatExtractor<f128>) == 16);
+#endif
+
#ifdef AK_HAS_FLOAT_80
template<>
union FloatExtractor<f80> {