On Fri, Jun 10, 2022 at 3:47 PM liuhongt via Libc-alpha <libc-al...@sourceware.org> wrote: > > Pass and return __Bfloat16 values in XMM registers. > > Background: > __Bfloat16 (BF16) is a new floating-point format that can accelerate machine > learning (deep learning training, in particular) algorithms. > It's first introduced by Intel AVX-512 extension called AVX-512_BF16. > __Bfloat16 has 8 bits of exponent and 7 bits of mantissa and it's different > from _Float16. > > Movivation: > Currently __bfloat16 is a typedef of short, which creates a problem where the > compiler does not raise any alarms if it is used to add, subtract, multiply > or divide, but the result of the calculation is actually meaningless. > To solve this problem, a real scalar type __Bfloat16 needs to be introduced. > It is mainly used for intrinsics, not available for C standard operators. > __Bfloat16 will also be used for movement like passing parameter, load and > store, vector initialization, vector shuffle, and .etc. It creates a need for > a corresponding psABI. > > --- > x86-64-ABI/low-level-sys-info.tex | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/x86-64-ABI/low-level-sys-info.tex > b/x86-64-ABI/low-level-sys-info.tex > index a8b69db..ba8db0d 100644 > --- a/x86-64-ABI/low-level-sys-info.tex > +++ b/x86-64-ABI/low-level-sys-info.tex > @@ -302,6 +302,12 @@ be used to represent the type, is a family of integer > types. > This permits the use of these types in allocated arrays using the common > sizeof(Array)/sizeof(ElementType) pattern. > > +\subsubsection{Special Types} > + > +The \code{__Bfloat16} type uses a 8-bit exponent and 7-bit mantissa. > +It is used for \code{BF16} related intrinsics, it cannot be > +used with standard C operators. > + > \subsubsection{Aggregates and Unions} > > Structures and unions assume the alignment of their most strictly > @@ -563,8 +569,8 @@ The basic types are assigned their natural classes: > \item Arguments of types (signed and unsigned) \code{_Bool}, \code{char}, > \code{short}, \code{int}, \code{long}, \code{long long}, and > pointers are in the INTEGER class. > -\item Arguments of types \code{_Float16}, \code{float}, \code{double}, > - \code{_Decimal32}, > +\item Arguments of types \code{_Float16}, \code{__Bfloat16}, \code{float}, > + \code{double}, \code{_Decimal32}, > \code{_Decimal64} and \code{__m64} are in class SSE. > \item Arguments of types \code{__float128}, \code{_Decimal128} > and \code{__m128} are split into two halves. The least significant > -- > 2.18.1 >
-- BR, Hongtao