Numworks Epsilon
1.4.1
Graphing Calculator Operating System
float.h
Go to the documentation of this file.
1
#ifndef LIBA_AEABI_FLOAT_H
2
#define LIBA_AEABI_FLOAT_H
3
4
#include <
assert.h
>
5
#include "../external/softfloat/port/softfloat.h"
6
7
/* To avoid any issue due to procedure call conventions, we convert softfloat
8
* double 'aeabi_double_t' (respectively 'aeabi_float_t') to float64_t (to
9
* respectively float32_t) before or/and after calling softfloat functions. */
10
11
typedef
unsigned
aeabi_float_t
;
12
typedef
unsigned
long
long
aeabi_double_t
;
13
14
static
inline
float32_t
f32(
aeabi_float_t
f) {
15
union
{
16
aeabi_float_t
in;
17
float32_t
out;
18
} res = {.in = f};
19
assert
(
sizeof
(
aeabi_float_t
) ==
sizeof
(
float32_t
));
20
assert
(
sizeof
(res) ==
sizeof
(
float32_t
));
21
return
res.out;
22
}
23
24
static
inline
aeabi_float_t
f(
float32_t
f) {
25
union
{
26
float32_t
in;
27
aeabi_float_t
out;
28
} res = {.in = f};
29
assert
(
sizeof
(
aeabi_float_t
) ==
sizeof
(
float32_t
));
30
assert
(
sizeof
(res) ==
sizeof
(
aeabi_float_t
));
31
return
res.out;
32
}
33
34
static
inline
float64_t
f64(
aeabi_double_t
d) {
35
union
{
36
aeabi_double_t
in;
37
float64_t
out;
38
} res = {.in = d};
39
assert
(
sizeof
(
aeabi_double_t
) ==
sizeof
(
float64_t
));
40
assert
(
sizeof
(res) ==
sizeof
(
float64_t
));
41
return
res.out;
42
}
43
44
45
static
inline
aeabi_double_t
d(
float64_t
d) {
46
union
{
47
float64_t
in;
48
aeabi_double_t
out;
49
} res = {.in = d};
50
assert
(
sizeof
(
aeabi_double_t
) ==
sizeof
(
float64_t
));
51
assert
(
sizeof
(res) ==
sizeof
(
aeabi_double_t
));
52
return
res.out;
53
}
54
55
#endif
assert
#define assert(e)
Definition:
assert.h:9
aeabi_float_t
unsigned aeabi_float_t
Definition:
float.h:11
float64_t
Definition:
softfloat_types.h:52
assert.h
float32_t
Definition:
softfloat_types.h:51
aeabi_double_t
unsigned long long aeabi_double_t
Definition:
float.h:12
epsilon
liba
src
aeabi-rt
float.h
Generated by
1.8.14