1a4f3ed62SAlex Bennée /*
2a4f3ed62SAlex Bennée  * Common Float Helpers
3a4f3ed62SAlex Bennée  *
4a4f3ed62SAlex Bennée  * Copyright (c) 2019 Linaro
5a4f3ed62SAlex Bennée  *
6a4f3ed62SAlex Bennée  * SPDX-License-Identifier: GPL-3.0-or-later
7a4f3ed62SAlex Bennée  */
8a4f3ed62SAlex Bennée 
9a4f3ed62SAlex Bennée #include <inttypes.h>
10a4f3ed62SAlex Bennée 
11*853c93edSRichard Henderson /* Some hosts do not have support for all of these; not required by ISO C. */
12*853c93edSRichard Henderson #ifndef FE_OVERFLOW
13*853c93edSRichard Henderson #define FE_OVERFLOW 0
14*853c93edSRichard Henderson #endif
15*853c93edSRichard Henderson #ifndef FE_UNDERFLOW
16*853c93edSRichard Henderson #define FE_UNDERFLOW 0
17*853c93edSRichard Henderson #endif
18*853c93edSRichard Henderson #ifndef FE_DIVBYZERO
19*853c93edSRichard Henderson #define FE_DIVBYZERO 0
20*853c93edSRichard Henderson #endif
21*853c93edSRichard Henderson #ifndef FE_INEXACT
22*853c93edSRichard Henderson #define FE_INEXACT 0
23*853c93edSRichard Henderson #endif
24*853c93edSRichard Henderson #ifndef FE_INVALID
25*853c93edSRichard Henderson #define FE_INVALID 0
26*853c93edSRichard Henderson #endif
27*853c93edSRichard Henderson 
28a4f3ed62SAlex Bennée /* Number of constants in each table */
29a4f3ed62SAlex Bennée int get_num_f16(void);
30a4f3ed62SAlex Bennée int get_num_f32(void);
31a4f3ed62SAlex Bennée int get_num_f64(void);
32a4f3ed62SAlex Bennée 
33a4f3ed62SAlex Bennée /* Accessor helpers, overflows will automatically wrap */
34a4f3ed62SAlex Bennée uint16_t get_f16(int i); /* use _Float16 when we can */
35a4f3ed62SAlex Bennée float    get_f32(int i);
36a4f3ed62SAlex Bennée double   get_f64(int i);
37a4f3ed62SAlex Bennée 
38a4f3ed62SAlex Bennée /* Return format strings, free after use */
39a4f3ed62SAlex Bennée char * fmt_f16(uint16_t);
40a4f3ed62SAlex Bennée char * fmt_f32(float);
41a4f3ed62SAlex Bennée char * fmt_f64(double);
42a4f3ed62SAlex Bennée /* exception flags */
43a4f3ed62SAlex Bennée char * fmt_flags(void);
44