mirror of
git://git.musl-libc.org/musl
synced 2024-12-14 02:35:17 +00:00
s390x: derive float_t from compiler or default to float
float_t should represent the type that is used to evaluate float expressions internally. On s390x, float_t is currently set to double. In contrast, the isa supports single-precision float operations and compilers by default evaluate float in single precision, which violates the C standard (sections 5.2.4.2.2 and 7.12 in C11/C17, to be precise). With -fexcess-precision=standard, gcc evaluates float in double precision, which aligns with the standard yet at the cost of added conversion instructions. gcc-11 will drop the special case to retrofit double precision behavior for -fexcess-precision=standard so that __FLT_EVAL_METHOD__ will be 0 on s390x in any scenario. To improve standards compliance and compatibility with future compiler direction, this patch changes the definition of float_t to be derived from the compiler's __FLT_EVAL_METHOD__.
This commit is contained in:
parent
821083ac7b
commit
738c4e945c
@ -9,7 +9,11 @@
|
||||
TYPEDEF int wchar_t;
|
||||
#endif
|
||||
|
||||
#if defined(__FLT_EVAL_METHOD__) && __FLT_EVAL_METHOD__ == 1
|
||||
TYPEDEF double float_t;
|
||||
#else
|
||||
TYPEDEF float float_t;
|
||||
#endif
|
||||
TYPEDEF double double_t;
|
||||
|
||||
TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
|
||||
|
@ -1,4 +1,8 @@
|
||||
#define FLT_EVAL_METHOD 1
|
||||
#ifdef __FLT_EVAL_METHOD__
|
||||
#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
|
||||
#else
|
||||
#define FLT_EVAL_METHOD 0
|
||||
#endif
|
||||
|
||||
#define LDBL_TRUE_MIN 6.47517511943802511092443895822764655e-4966L
|
||||
#define LDBL_MIN 3.36210314311209350626267781732175260e-4932L
|
||||
|
Loading…
Reference in New Issue
Block a user