diff mbox

[Doc] Update documentation for __fp16 type

Message ID 1480590547-1844-1-git-send-email-james.greenhalgh@arm.com
State New
Headers show

Commit Message

James Greenhalgh Dec. 1, 2016, 11:09 a.m. UTC
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.

> 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.greenhalgh@arm.com>

	* doc/extend.texi (Half-Precision): Update to document current
	compiler behaviour.

Comments

James Greenhalgh Dec. 12, 2016, 11:16 a.m. UTC | #1
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.greenhalgh@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
Sandra Loosemore Dec. 12, 2016, 9:19 p.m. UTC | #2
On 12/12/2016 04:16 AM, James Greenhalgh wrote:
> 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*

One small grammar nit at the end:

>> +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}).

Either s/which/that/ or rewrite the beginning of the sentence as "It is 
recommended that portable code use..."

The patch is OK to commit with that fixed.

-Sandra
diff mbox

Patch

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