summaryrefslogtreecommitdiff
path: root/libk/src/internal/libm.h
diff options
context:
space:
mode:
authorTyler Murphy <=>2023-07-16 02:54:32 -0400
committerTyler Murphy <=>2023-07-16 02:54:32 -0400
commitfbf131b5c043b27e0b1543374bb144e3e426f723 (patch)
tree07f0ab2fc107b36621d5ae95480e6a91e332548b /libk/src/internal/libm.h
downloadfinix-fbf131b5c043b27e0b1543374bb144e3e426f723.tar.gz
finix-fbf131b5c043b27e0b1543374bb144e3e426f723.tar.bz2
finix-fbf131b5c043b27e0b1543374bb144e3e426f723.zip
initial
Diffstat (limited to 'libk/src/internal/libm.h')
-rw-r--r--libk/src/internal/libm.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/libk/src/internal/libm.h b/libk/src/internal/libm.h
new file mode 100644
index 0000000..6c47502
--- /dev/null
+++ b/libk/src/internal/libm.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#define fp_force_evalf fp_force_evalf
+static inline void fp_force_evalf(float x) {
+ volatile float y;
+ y = x;
+ (void)y;
+}
+
+#define fp_force_eval fp_force_eval
+static inline void fp_force_eval(double x) {
+ volatile double y;
+ y = x;
+ (void)y;
+}
+
+#define fp_force_evall fp_force_evall
+static inline void fp_force_evall(long double x) {
+ volatile long double y;
+ y = x;
+ (void)y;
+}
+
+#define FORCE_EVAL(x) do { \
+ if (sizeof(x) == sizeof(float)) { \
+ fp_force_evalf(x); \
+ } else if (sizeof(x) == sizeof(double)) { \
+ fp_force_eval(x); \
+ } else { \
+ fp_force_evall(x); \
+ } \
+} while(0)