On Fri, Sep 3, 2021 at 8:42 PM Jakub Jelinek via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > On Mon, Aug 02, 2021 at 02:31:12PM +0800, liuhongt via Gcc-patches wrote: > > * doc/extend.texi (Half-Precision Floating Point): Documemt > > _Float16 for x86. > > > --- a/gcc/doc/extend.texi > > +++ b/gcc/doc/extend.texi > > @@ -1102,6 +1102,7 @@ typedef _Complex float __attribute__((mode(IC))) > > _Complex_ibm128; > > @section Half-Precision Floating Point > > @cindex half-precision floating point > > @cindex @code{__fp16} data type > > +@cindex @code{__Float16} data type > > > > 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. > > @@ -1150,6 +1151,18 @@ calls. > > It is recommended that portable code use the @code{_Float16} type defined > > by ISO/IEC TS 18661-3:2015. @xref{Floating Types}. > > > > +On x86 targets with @code{target("sse2")} and above, GCC supports > > half-precision > > +(16-bit) floating point via the @code{_Float16} type which is defined by > > +18661-3:2015. For C++, x86 provide a builtin type named @code{_Float16} > > +which contains same data format as C. > > + > > +Without @option{-mavx512fp16}, @code{_Float16} type is storage only, all > > +operations will be emulated by software emulation and the @code{float} > > +instructions. The default behavior for @code{FLT_EVAL_METHOD} is to keep > > +the intermediate result of the operation as 32-bit precision. This may lead > > +to inconsistent behavior between software emulation and AVX512-FP16 > > +instructions. > > + > > @node Decimal Float > > @section Decimal Floating Types > > @cindex decimal floating types > > Shouldn't there be more changes for this in doc/extend.texi? > > I'd say that x86 with -msse2 should be mentioned in > The @code{_Float16} type is supported on AArch64 > systems by default, and on ARM systems when the IEEE format for 16-bit > floating-point types is selected with @option{-mfp16-format=ieee}. > > and in > @node Half-Precision > I'd say that one sentence about the x86 support should go already in the > first paragraph, perhaps after: > 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. > because users just won't scroll down to immediately find out that in the > 10th/11th paragraph it talks about x86. > Just mention there that on all 3 arches it is available using the _Float16 > type > in C, on x86 in C++ too and then on ARM/AArch64 using __fp16. > > Jakub >
How about this? Adjust the wording for x86 _Float16 type. gcc/ChangeLog: * doc/extend.texi: (@node Floating Types): Adjust the wording. (@node Half-Precision): Ditto. 1 file changed, 14 insertions(+), 13 deletions(-) gcc/doc/extend.texi | 27 ++++++++++++++------------- modified gcc/doc/extend.texi @@ -1076,9 +1076,11 @@ systems where @code{__float128} is supported. The @code{_Float32} type is supported on all systems supporting IEEE binary32; the @code{_Float64} and @code{_Float32x} types are supported on all systems supporting IEEE binary64. The @code{_Float16} type is supported on AArch64 -systems by default, and on ARM systems when the IEEE format for 16-bit -floating-point types is selected with @option{-mfp16-format=ieee}. -GCC does not currently support @code{_Float128x} on any systems. +systems by default, and also on x86 systems with @code{target("sse2")} +for both C and C++. +On ARM systems when the IEEE format for 16-bit floating-point types is +selected with @option{-mfp16-format=ieee}. GCC does not currently support +@code{_Float128x} on any systems. On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex types using the corresponding internal complex type, @code{XCmode} for @@ -1108,6 +1110,10 @@ 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. +On x86 targets with @code{target("sse2")} and above, GCC supports +half-precision (16-bit) floating point via the @code{_Float16} type. +For C++, x86 provides a builtin type named @code{_Float16} which contains +same data format as C. ARM targets support two incompatible representations for half-precision floating-point values. You must choose one of the representations and @@ -1151,16 +1157,11 @@ calls. It is recommended that portable code use the @code{_Float16} type defined by ISO/IEC TS 18661-3:2015. @xref{Floating Types}. -On x86 targets with @code{target("sse2")} and above, GCC supports half-precision -(16-bit) floating point via the @code{_Float16} type which is defined by -18661-3:2015. For C++, x86 provide a builtin type named @code{_Float16} -which contains same data format as C. - -Without @option{-mavx512fp16}, @code{_Float16} type is storage only, all -operations will be emulated by software emulation and the @code{float} -instructions. The default behavior for @code{FLT_EVAL_METHOD} is to keep -the intermediate result of the operation as 32-bit precision. This may lead -to inconsistent behavior between software emulation and AVX512-FP16 +On x86 targets, without @option{-mavx512fp16}, @code{_Float16} type is +storage only, all operations will be emulated by software emulation and the +@code{float} instructions. The default behavior for @code{FLT_EVAL_METHOD} is +to keep the intermediate result of the operation as 32-bit precision. This may +lead to inconsistent behavior between software emulation and AVX512-FP16 instructions. @node Decimal Float -- BR, Hongtao