On Thu, Dec 01, 2016 at 11:09:07AM +0000, James Greenhalgh wrote: > > On Wed, Nov 30, 2016 at 05:58:13PM +0000, Joseph Myers wrote: > > On Wed, 30 Nov 2016, James Greenhalgh wrote: > > > > > +@code{_Float16} type defined by ISO/IEC TS18661:3-2005 > > > > Add a space after "TS", and it's -3:2015 not :3-2005. > > You would think that after 2 months of having the specification sitting > on my desk I'd have got that right... Fixed in this revision.
*ping* Thanks, James > > > I think the -mfp16-format documentation in invoke.texi should also be > > updated to reflect that it affects availability of _Float16. > > I'm working on something larger for -mfp16-format, I'll update invoke.texi > at that point (or otherwise before GCC 7 releases). > > Thanks, > James > > --- > > 2016-12-01 James Greenhalgh <james.greenha...@arm.com> > > * doc/extend.texi (Half-Precision): Update to document current > compiler behaviour. > > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi > index 7d3d17a..23d03bd 100644 > --- a/gcc/doc/extend.texi > +++ b/gcc/doc/extend.texi > @@ -1012,11 +1012,12 @@ that handle conversions if/when long double is > changed to be IEEE > @cindex half-precision floating point > @cindex @code{__fp16} data type > > -On ARM targets, GCC supports half-precision (16-bit) floating point via > -the @code{__fp16} type. You must enable this type explicitly > -with the @option{-mfp16-format} command-line option in order to use it. > +On ARM and AArch64 targets, GCC supports half-precision (16-bit) floating > +point via the @code{__fp16} type defined in the ARM C Language Extensions. > +On ARM systems, you must enable this type explicitly with the > +@option{-mfp16-format} command-line option in order to use it. > > -ARM supports two incompatible representations for half-precision > +ARM targets support two incompatible representations for half-precision > floating-point values. You must choose one of the representations and > use it consistently in your program. > > @@ -1031,22 +1032,20 @@ format, but does not support infinities or NaNs. > Instead, the range > of exponents is extended, so that this format can represent normalized > values in the range of @math{2^{-14}} to 131008. > > -The @code{__fp16} type is a storage format only. For purposes > -of arithmetic and other operations, @code{__fp16} values in C or C++ > -expressions are automatically promoted to @code{float}. In addition, > -you cannot declare a function with a return value or parameters > -of type @code{__fp16}. > +The GCC port for AArch64 only supports the IEEE 754-2008 format, and does > +not require use of the @option{-mfp16-format} command-line option. > > -Note that conversions from @code{double} to @code{__fp16} > -involve an intermediate conversion to @code{float}. Because > -of rounding, this can sometimes produce a different result than a > -direct conversion. > +The @code{__fp16} type may only be used as an argument to intrinsics defined > +in @code{<arm_fp16.h>}, or as a storage format. For purposes of > +arithmetic and other operations, @code{__fp16} values in C or C++ > +expressions are automatically promoted to @code{float}. > > -ARM provides hardware support for conversions between > +The ARM target provides hardware support for conversions between > @code{__fp16} and @code{float} values > -as an extension to VFP and NEON (Advanced SIMD). GCC generates > -code using these hardware instructions if you compile with > -options to select an FPU that provides them; > +as an extension to VFP and NEON (Advanced SIMD), and from ARMv8 provides > +hardware support for conversions between @code{__fp16} and @code{double} > +values. GCC generates code using these hardware instructions if you > +compile with options to select an FPU that provides them; > for example, @option{-mfpu=neon-fp16 -mfloat-abi=softfp}, > in addition to the @option{-mfp16-format} option to select > a half-precision format. > @@ -1054,8 +1053,12 @@ a half-precision format. > Language-level support for the @code{__fp16} data type is > independent of whether GCC generates code using hardware floating-point > instructions. In cases where hardware support is not specified, GCC > -implements conversions between @code{__fp16} and @code{float} values > -as library calls. > +implements conversions between @code{__fp16} and other types as library > +calls. > + > +It is recommended that code which is intended to be portable use the > +@code{_Float16} type defined by ISO/IEC TS 18661-3:2015 > +(@xref{Floating Types}). > > @node Decimal Float > @section Decimal Floating Types