1 /*        $NetBSD: float.h,v 1.24 2024/10/30 15:56:11 riastradh Exp $ */
2 
3 #ifndef _M68K_FLOAT_H_
4 #define _M68K_FLOAT_H_
5 
6 #include <sys/featuretest.h>
7 
8 /*
9  * LDBL_MIN is half the x86 LDBL_MIN, even though both are 12-byte
10  * floats with the same base properties and both allegedly
11  * IEEE-compliant, because both these representations materialize the
12  * top (integer-part) bit of the mantissa. But on m68k if the exponent
13  * is 0 and the integer bit is set, it's a regular number, whereas on
14  * x86 it's called a pseudo-denormal and apparently treated as a
15  * denormal, so it doesn't count as a valid value for LDBL_MIN.
16  *
17  * x86 citation: Intel 64 and IA-32 Architectures Software Developer's
18  * Manual, vol. 1 (Order Number: 253665-077US, April 2022), Sec. 8.2.2
19  * `Unsupported Double Extended-Precision Floating-Point Encodings
20  * and Pseudo-Denormals', p. 8-14.
21  *
22  * m86k citation: MC68881/MC68882 Floating-Point Coprocessor User's
23  * Manual, Second Edition (Prentice-Hall, 1989, apparently issued by
24  * Freescale), Section 3.2 `Binary Real Data formats', pg. 3-3 bottom
25  * in particular and pp. 3-2 to 3-5 in general.
26  *
27  * If anyone needs to update this comment please make sure the copy in
28  * x86/include/float.h also gets updated.
29  */
30 
31 #if defined(__LDBL_MANT_DIG__)
32 #define LDBL_MANT_DIG         __LDBL_MANT_DIG__
33 #define LDBL_EPSILON          __LDBL_EPSILON__
34 #define LDBL_DIG    __LDBL_DIG__
35 #define LDBL_MIN_EXP          __LDBL_MIN_EXP__
36 #define LDBL_MIN    __LDBL_MIN__
37 #define LDBL_MIN_10_EXP       __LDBL_MIN_10_EXP__
38 #define LDBL_MAX_EXP          __LDBL_MAX_EXP__
39 #define LDBL_MAX    __LDBL_MAX__
40 #define LDBL_MAX_10_EXP       __LDBL_MAX_10_EXP__
41 #elif !defined(__mc68010__) && !defined(__mcoldfire__)
42 #define LDBL_MANT_DIG         64
43 #define LDBL_EPSILON          1.0842021724855044340E-19L
44 #define LDBL_DIG    18
45 #define LDBL_MIN_EXP          (-16381)
46 #define LDBL_MIN    1.6810515715560467531E-4932L
47 #define LDBL_MIN_10_EXP       (-4931)
48 #define LDBL_MAX_EXP          16384
49 #define LDBL_MAX    1.1897314953572317650E+4932L
50 #define LDBL_MAX_10_EXP       4932
51 #endif
52 
53 #include <sys/float_ieee754.h>
54 
55 #if !defined(__mc68010__) && !defined(__mcoldfire__)
56 #if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
57     !defined(_XOPEN_SOURCE) || \
58     ((__STDC_VERSION__ - 0) >= 199901L) || \
59     ((_POSIX_C_SOURCE - 0) >= 200112L) || \
60     ((_XOPEN_SOURCE  - 0) >= 600) || \
61     defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
62 #define   DECIMAL_DIG         21
63 #endif /* !defined(_ANSI_SOURCE) && ... */
64 #endif /* !__mc68010__ && !__mcoldfire__ */
65 
66 #endif    /* !_M68K_FLOAT_H_ */
67