float.h revision 1.25
11.25Snat/* $NetBSD: float.h,v 1.25 2025/10/04 21:12:36 nat Exp $ */ 21.10Sjtc 31.5Schopps#ifndef _M68K_FLOAT_H_ 41.6Smycroft#define _M68K_FLOAT_H_ 51.1Scgd 61.24Sriastrad#include <sys/featuretest.h> 71.24Sriastrad 81.22Sdholland/* 91.22Sdholland * LDBL_MIN is half the x86 LDBL_MIN, even though both are 12-byte 101.22Sdholland * floats with the same base properties and both allegedly 111.22Sdholland * IEEE-compliant, because both these representations materialize the 121.22Sdholland * top (integer-part) bit of the mantissa. But on m68k if the exponent 131.22Sdholland * is 0 and the integer bit is set, it's a regular number, whereas on 141.22Sdholland * x86 it's called a pseudo-denormal and apparently treated as a 151.22Sdholland * denormal, so it doesn't count as a valid value for LDBL_MIN. 161.22Sdholland * 171.22Sdholland * x86 citation: Intel 64 and IA-32 Architectures Software Developer's 181.22Sdholland * Manual, vol. 1 (Order Number: 253665-077US, April 2022), Sec. 8.2.2 191.22Sdholland * `Unsupported Double Extended-Precision Floating-Point Encodings 201.22Sdholland * and Pseudo-Denormals', p. 8-14. 211.22Sdholland * 221.22Sdholland * m86k citation: MC68881/MC68882 Floating-Point Coprocessor User's 231.22Sdholland * Manual, Second Edition (Prentice-Hall, 1989, apparently issued by 241.22Sdholland * Freescale), Section 3.2 `Binary Real Data formats', pg. 3-3 bottom 251.22Sdholland * in particular and pp. 3-2 to 3-5 in general. 261.22Sdholland * 271.22Sdholland * If anyone needs to update this comment please make sure the copy in 281.23Srillig * x86/include/float.h also gets updated. 291.22Sdholland */ 301.22Sdholland 311.25Snat#if defined(__LDBL_MANT_DIG__) && \ 321.25Snat !(defined(__m68k__) && !defined(__HAVE_68881__)) 331.20Smatt#define LDBL_MANT_DIG __LDBL_MANT_DIG__ 341.20Smatt#define LDBL_EPSILON __LDBL_EPSILON__ 351.20Smatt#define LDBL_DIG __LDBL_DIG__ 361.20Smatt#define LDBL_MIN_EXP __LDBL_MIN_EXP__ 371.20Smatt#define LDBL_MIN __LDBL_MIN__ 381.20Smatt#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ 391.20Smatt#define LDBL_MAX_EXP __LDBL_MAX_EXP__ 401.20Smatt#define LDBL_MAX __LDBL_MAX__ 411.20Smatt#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ 421.20Smatt#elif !defined(__mc68010__) && !defined(__mcoldfire__) 431.12Smycroft#define LDBL_MANT_DIG 64 441.17Skleink#define LDBL_EPSILON 1.0842021724855044340E-19L 451.17Skleink#define LDBL_DIG 18 461.17Skleink#define LDBL_MIN_EXP (-16381) 471.17Skleink#define LDBL_MIN 1.6810515715560467531E-4932L 481.17Skleink#define LDBL_MIN_10_EXP (-4931) 491.17Skleink#define LDBL_MAX_EXP 16384 501.17Skleink#define LDBL_MAX 1.1897314953572317650E+4932L 511.17Skleink#define LDBL_MAX_10_EXP 4932 521.18Skleink#endif 531.17Skleink 541.16Skleink#include <sys/float_ieee754.h> 551.17Skleink 561.20Smatt#if !defined(__mc68010__) && !defined(__mcoldfire__) 571.17Skleink#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \ 581.17Skleink !defined(_XOPEN_SOURCE) || \ 591.17Skleink ((__STDC_VERSION__ - 0) >= 199901L) || \ 601.17Skleink ((_POSIX_C_SOURCE - 0) >= 200112L) || \ 611.17Skleink ((_XOPEN_SOURCE - 0) >= 600) || \ 621.17Skleink defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE) 631.17Skleink#define DECIMAL_DIG 21 641.17Skleink#endif /* !defined(_ANSI_SOURCE) && ... */ 651.20Smatt#endif /* !__mc68010__ && !__mcoldfire__ */ 661.5Schopps 671.12Smycroft#endif /* !_M68K_FLOAT_H_ */ 68