diff options
author | John McCall <rjmccall@apple.com> | 2019-05-31 01:21:36 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2019-05-31 01:21:36 +0000 |
commit | 059b823e709a90d3b5d2d24663830e59b3bdded9 (patch) | |
tree | 39392b05b6b230e4acec135a3ed95dbf1e6cb95c /clang/test/Preprocessor/init.c | |
parent | b5a45bb77e05647f04bbd9780d70aabe9f251155 (diff) | |
download | bcm5719-llvm-059b823e709a90d3b5d2d24663830e59b3bdded9.tar.gz bcm5719-llvm-059b823e709a90d3b5d2d24663830e59b3bdded9.zip |
Fix the predefined exponent limit macros for the 16-bit IEEE format.
The magnitude range of normalized _Float16 is 2^-14 (~6e-5) to
(2-2^-10)*2^15 (65504). You might think, then, that the code is
correct to defne FLT16_MIN_EXP and FLT16_MAX_EXP to be -14 and 15
respectively. However, for some reason the C specification actually
specifies a bias for these macros:
C11 5.2.4.2.2:
- minimum negative integer such that FLT_RADIX raised to one less than
that power is a normalized floating-point number, e_min:
FLT_MIN_EXP
DBL_MIN_EXP
LDBL_MIN_EXP
- maximum integer such that FLT_RADIX raised to one less than that
power is a representable finite floating-point number, e_max:
FLT_MAX_EXP
DBL_MAX_EXP
LDBL_MAX_EXP
FLT16_MIN_EXP and FLT16_MAX_EXP should clearly be biased the same way,
and other compilers do in fact do so, as do our OpenCL headers for `half`.
Additionally, FLT16_MIN_10_EXP is just wrong.
llvm-svn: 362183
Diffstat (limited to 'clang/test/Preprocessor/init.c')
-rw-r--r-- | clang/test/Preprocessor/init.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index 8eb101c6a41..8df3b4bd2cc 100644 --- a/clang/test/Preprocessor/init.c +++ b/clang/test/Preprocessor/init.c @@ -310,10 +310,10 @@ // AARCH64:#define __FLT16_HAS_QUIET_NAN__ 1 // AARCH64:#define __FLT16_MANT_DIG__ 11 // AARCH64:#define __FLT16_MAX_10_EXP__ 4 -// AARCH64:#define __FLT16_MAX_EXP__ 15 +// AARCH64:#define __FLT16_MAX_EXP__ 16 // AARCH64:#define __FLT16_MAX__ 6.5504e+4F16 -// AARCH64:#define __FLT16_MIN_10_EXP__ (-13) -// AARCH64:#define __FLT16_MIN_EXP__ (-14) +// AARCH64:#define __FLT16_MIN_10_EXP__ (-4) +// AARCH64:#define __FLT16_MIN_EXP__ (-13) // AARCH64:#define __FLT16_MIN__ 6.103515625e-5F16 // AARCH64:#define __FLT_DENORM_MIN__ 1.40129846e-45F // AARCH64:#define __FLT_DIG__ 6 |