roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
ieee754.h
Go to the documentation of this file.
1#pragma once
2
3// IEEE754 availability detection.
4//
5// ROO_IO_IEEE754 is enabled if:
6// 1) IEEE754 conformance macros indicate support, and
7// 2) float/double endianness appears compatible with integer endianness.
8//
9// Overrides:
10// - ROO_IO_FORCE_IEEE754: force enable regardless of auto-detection.
11// - ROO_IO_DISABLE_IEEE754: force disable regardless of auto-detection.
12
13#if defined(ROO_IO_FORCE_IEEE754)
14#define ROO_IO_IEEE754 1
15#elif defined(ROO_IO_DISABLE_IEEE754)
16#define ROO_IO_IEEE754 0
17#else
18
19#if defined(__STDC_IEC_559__) || defined(__STDCPP_IEC_559__) || \
20 defined(__GCC_IEC_559)
21#define ROO_IO_IEEE754_FORMAT 1
22#else
23#define ROO_IO_IEEE754_FORMAT 0
24#endif
25
26// Gate for float/integer endianness compatibility.
27// If compiler exposes floating-point byte order, require it to match
28// integer byte order. Otherwise, assume compatible by default.
29#if defined(__FLOAT_WORD_ORDER__) && defined(__BYTE_ORDER__)
30#define ROO_IO_IEEE754_ENDIAN_MATCH \
31 (__FLOAT_WORD_ORDER__ == __BYTE_ORDER__)
32#elif defined(__FLOAT_WORD_ORDER) && defined(__BYTE_ORDER)
33#define ROO_IO_IEEE754_ENDIAN_MATCH (__FLOAT_WORD_ORDER == __BYTE_ORDER)
34#else
35#define ROO_IO_IEEE754_ENDIAN_MATCH 1
36#endif
37
38#if ROO_IO_IEEE754_FORMAT && ROO_IO_IEEE754_ENDIAN_MATCH
39#define ROO_IO_IEEE754 1
40#else
41#define ROO_IO_IEEE754 0
42#endif
43
44#endif