summaryrefslogtreecommitdiff
path: root/hints
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2014-09-08 17:14:01 -0400
committerJarkko Hietaniemi <jhi@iki.fi>2014-09-08 17:16:09 -0400
commit78c93c95da82e34162caa33df525a9f0c1d651a5 (patch)
tree1d4490cbbb707b6ce290681c54d83629c8d2fdcd /hints
parent8f1f21f636a6ab9be5eacad384d974cf6309c7cd (diff)
downloadperl-78c93c95da82e34162caa33df525a9f0c1d651a5.tar.gz
Document the IBM admission of weirdness of AIX long doubles.
Also skip the infnan test in AIX + long doubles because given the IBM documentation it ain't gonna happen.
Diffstat (limited to 'hints')
-rw-r--r--hints/aix.sh39
1 files changed, 37 insertions, 2 deletions
diff --git a/hints/aix.sh b/hints/aix.sh
index a09c85c2e8..956e80666b 100644
--- a/hints/aix.sh
+++ b/hints/aix.sh
@@ -546,6 +546,43 @@ fi
# Some releases (and patch levels) of AIX cannot have both
# long doubles and infinity (infinity plus one equals ... NaNQ!)
+#
+# This deficiency, and others, is apparently a well-documented feature
+# of AIX 128-bit long doubles:
+#
+# http://www-01.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.genprogc/128bit_long_double_floating-point_datatype.htm
+#
+# The URL seems to be fragile, it has moved around over the years,
+# but searching AIX docs at ibm.com for "128-bit long double
+# floating-point data type" should surface the latest info.
+#
+# Some salient points:
+#
+# <quote>
+# * The 128-bit implementation differs from the IEEE standard for long double
+# in the following ways:
+# * Supports only round-to-nearest mode. If the application changes
+# the rounding mode, results are undefined.
+# * Does not fully support the IEEE special numbers NaN and INF.
+# * Does not support IEEE status flags for overflow, underflow,
+# and other conditions. These flags have no meaning for the 128-bit
+# long double inplementation.
+# * The 128-bit long double data type does not support the following math
+# APIs: atanhl, cbrtl, copysignl, exp2l, expm1l, fdiml, fmal, fmaxl,
+# fminl, hypotl, ilogbl, llrintl, llroundl, log1pl, log2l, logbl,
+# lrintl, lroundl, nanl, nearbyintl, nextafterl, nexttoward,
+# nexttowardf, nexttowardl, remainderl, remquol, rintl, roundl,
+# scalblnl, scalbnl, tgammal, and truncl.
+# * The representation of 128-bit long double numbers means that the
+# following macros required by standard C in the values.h file do not
+# have clear meaning:
+# * Number of bits in the mantissa (LDBL_MANT_DIG)
+# * Epsilon (LBDL_EPSILON)
+# * Maximum representable finite value (LDBL_MAX)
+# </quote>
+#
+# The missing math functions affect the POSIX extension math interfaces.
+
case "$uselongdouble" in
define)
echo "Checking if your infinity is working with long doubles..." >&4
@@ -564,7 +601,6 @@ EOF
*) # NaNQ
echo " "
echo "Your infinity is broken, I suggest disabling long doubles." >&4
- echo "The t/op/infnan.t will fail if broken long doubles are enabled. ">&4
rp="Disable long doubles?"
dflt="y"
. UU/myread
@@ -578,7 +614,6 @@ EOF
;;
*)
echo "Okay, keeping long doubles enabled." >&4
- echo "But please note that t/op/infnan.t will fail a lot." >&4
;;
esac
;;