diff options
Diffstat (limited to 'libk/src/internal')
-rw-r--r-- | libk/src/internal/libm.h | 32 |
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) |