1*1603ef65Srillig /* $NetBSD: platform_ldbl128.c,v 1.6 2023/07/05 11:42:14 rillig Exp $ */ 2b6d6b0c5Srillig # 3 "platform_ldbl128.c" 3b6d6b0c5Srillig 4b6d6b0c5Srillig /* 5b6d6b0c5Srillig * Test features that only apply to platforms that have 128-bit long double. 6b6d6b0c5Srillig */ 7b6d6b0c5Srillig 8cc35e666Srillig /* lint1-extra-flags: -c -h -a -p -b -r -z -X 351 */ 9*1603ef65Srillig /* lint1-only-if: ldbl128 */ 10b6d6b0c5Srillig 11f29e29e2Srillig /* CONSTCOND */ 12f29e29e2Srillig typedef int bits_per_byte[((unsigned char)-1) == 255 ? 1 : -1]; 13f29e29e2Srillig typedef int bytes_per_long_double[sizeof(long double) == 16 ? 1 : -1]; 14cc35e666Srillig 15cc35e666Srillig /* 16cc35e666Srillig * Platforms with 128-bit 'long double' typically use IEEE 754-2008, which has 17cc35e666Srillig * 1 bit sign + 15 bit exponent + 112 bit normalized mantissa. This means the 18cc35e666Srillig * maximum representable value is 1.1111111(bin) * 2^16383, which is about 19cc35e666Srillig * 1.189e4932. This is in the same range as for 96-bit 'long double', as the 20cc35e666Srillig * exponent range is the same. 21cc35e666Srillig */ 22cc35e666Srillig /* expect+1: warning: floating-point constant out of range [248] */ 23cc35e666Srillig double larger_than_ldbl = 1e4933; 24cc35e666Srillig /* expect+1: warning: floating-point constant out of range [248] */ 25cc35e666Srillig long double larger_than_ldbl_l = 1e4933L; 26cc35e666Srillig /* expect+1: warning: floating-point constant out of range [248] */ 27cc35e666Srillig double larger_than_dbl = 1e4932; 28cc35e666Srillig /* Fits in 'long double' but not in 'double'. */ 29cc35e666Srillig long double larger_than_dbl_l = 1e4932L; 30