mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-11 04:06:20 +00:00
![John McCall](/assets/img/avatar_default.png)
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
70 lines
1.9 KiB
C
70 lines
1.9 KiB
C
// RUN: %clang_cc1 -triple=aarch64-none-none -fsyntax-only -verify -std=c89 \
|
|
// RUN: -ffreestanding %s
|
|
// RUN: %clang_cc1 -triple=aarch64-none-none -fsyntax-only -verify \
|
|
// RUN: -std=c99 -ffreestanding %s
|
|
// RUN: %clang_cc1 -triple=aarch64-none-none -fsyntax-only -verify -std=c11 \
|
|
// RUN: -ffreestanding %s
|
|
// RUN: %clang_cc1 -triple=aarch64-none-none -fsyntax-only -verify \
|
|
// RUN: -std=c++11 -x c++ -ffreestanding %s
|
|
// expected-no-diagnostics
|
|
|
|
#define __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
#include <float.h>
|
|
|
|
#ifndef FLT16_MIN_10_EXP
|
|
#error "Macro FLT16_MIN_10_EXP is missing."
|
|
#elif FLT16_MIN_10_EXP > -4
|
|
#error "Macro FLT16_MIN_10_EXP is invalid."
|
|
#endif
|
|
|
|
_Static_assert(FLT16_MIN_10_EXP == __FLT16_MIN_10_EXP__, "");
|
|
|
|
#ifndef FLT16_MIN_EXP
|
|
#error "Macro FLT16_MIN_EXP is missing."
|
|
#elif FLT16_MIN_EXP > -13
|
|
#error "Macro FLT16_MIN_EXP is invalid."
|
|
#endif
|
|
|
|
_Static_assert(FLT16_MIN_EXP == __FLT16_MIN_EXP__, "");
|
|
|
|
#ifndef FLT16_MAX_10_EXP
|
|
#error "Macro FLT16_MAX_10_EXP is missing."
|
|
#elif FLT16_MAX_10_EXP < 4
|
|
#error "Macro FLT16_MAX_10_EXP is invalid."
|
|
#endif
|
|
|
|
_Static_assert(FLT16_MAX_10_EXP == __FLT16_MAX_10_EXP__, "");
|
|
|
|
#ifndef FLT16_MAX_EXP
|
|
#error "Macro FLT16_MAX_EXP is missing."
|
|
#elif FLT16_MAX_EXP < 16
|
|
#error "Macro FLT16_MAX_EXP is invalid."
|
|
#endif
|
|
|
|
_Static_assert(FLT16_MAX_EXP == __FLT16_MAX_EXP__, "");
|
|
|
|
#ifndef FLT16_DECIMAL_DIG
|
|
#error "Macro FLT16_DECIMAL_DIG is missing."
|
|
#elif FLT16_DECIMAL_DIG < 5
|
|
#error "Macro FLT16_DECIMAL_DIG is invalid."
|
|
#endif
|
|
|
|
_Static_assert(FLT16_DECIMAL_DIG == __FLT16_DECIMAL_DIG__, "");
|
|
|
|
#ifndef FLT16_DIG
|
|
#error "Macro FLT16_DIG is missing."
|
|
#elif FLT16_DIG < 3
|
|
#error "Macro FLT16_DIG is invalid."
|
|
#endif
|
|
|
|
_Static_assert(FLT16_DIG == __FLT16_DIG__, "");
|
|
|
|
#ifndef FLT16_MANT_DIG
|
|
#error "Macro FLT16_MANT_DIG is missing."
|
|
#elif FLT16_MANT_DIG < 11
|
|
#error "Macro FLT16_MANT_DIG is invalid."
|
|
#endif
|
|
|
|
_Static_assert(FLT16_MANT_DIG == __FLT16_MANT_DIG__, "");
|
|
|