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
#define assert(e)
Definition: assert.h:9
unsigned aeabi_float_t
Definition: float.h:11
unsigned long long aeabi_double_t
Definition: float.h:12