summaryrefslogtreecommitdiff
path: root/libk/src/internal/libm.h
blob: 6c475028af5cf77ff03333bb38662bb1e276a242 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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)