mirror of https://git.musl-libc.org/git/musl
remove compound literals from math.h to please c++
__FLOAT_BITS and __DOUBLE_BITS macros used union compound literals, now they are changed into static inline functions. A good C compiler generates the same code for both and the later is C++ conformant.
This commit is contained in:
parent
da49b872f5
commit
2897bfdd60
|
@ -43,11 +43,16 @@ int __fpclassify(double);
|
||||||
int __fpclassifyf(float);
|
int __fpclassifyf(float);
|
||||||
int __fpclassifyl(long double);
|
int __fpclassifyl(long double);
|
||||||
|
|
||||||
union __float_repr { float __f; __uint32_t __i; };
|
static __inline __uint32_t __FLOAT_BITS(float __f)
|
||||||
union __double_repr { double __f; __uint64_t __i; };
|
{
|
||||||
|
union {float __f; __uint32_t __i;} __u = {__f};
|
||||||
#define __FLOAT_BITS(f) (((union __float_repr){ (float)(f) }).__i)
|
return __u.__i;
|
||||||
#define __DOUBLE_BITS(f) (((union __double_repr){ (double)(f) }).__i)
|
}
|
||||||
|
static __inline __uint64_t __DOUBLE_BITS(double __f)
|
||||||
|
{
|
||||||
|
union {double __f; __uint64_t __i;} __u = {__f};
|
||||||
|
return __u.__i;
|
||||||
|
}
|
||||||
|
|
||||||
#define fpclassify(x) ( \
|
#define fpclassify(x) ( \
|
||||||
sizeof(x) == sizeof(float) ? __fpclassifyf(x) : \
|
sizeof(x) == sizeof(float) ? __fpclassifyf(x) : \
|
||||||
|
|
Loading…
Reference in New Issue