Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update conversion ranks for minimum precision types #206

Merged
merged 4 commits into from
Apr 26, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 29 additions & 27 deletions specs/language/basic.tex
Original file line number Diff line number Diff line change
Expand Up @@ -56,30 +56,33 @@
\texttt{int32\_t}, and \texttt{int64\_t}. Each of the signed integer types is
explicitly named for the size in bits of the type's object representation. There
is also the type alias \texttt{int} which is an alias of \texttt{int32\_t}.
There are three \textit{minimum precision signed integer types}:
\texttt{min10int}, \texttt{min12int}, and \texttt{min16int}. Each of the minimum
precision signed integer types are named for the required minimum value
representation size in bits. The object representation of all minimum precision
types is \texttt{int}. The standard signed integer types and minimum precision
signed integer types are collectively called \textit{signed integer types}.
There is one \textit{minimum precision signed integer type}: \texttt{min16int}.
The minimum precision signed integer type is named for the required minimum
value representation size in bits. The object representation of
\texttt{min16int} is \texttt{int}. The standard signed integer types and minimum
precision signed integer type are collectively called \textit{signed integer
types}.

\p There are three \textit{standard unsigned integer types}: \texttt{uint16\_t},
\texttt{uint32\_t}, and \texttt{uint64\_t}. Each of the unsigned integer types
is explicitly named for the size in bits of the type's object representation.
There is also the type alias \texttt{uint} which is an alias of
\texttt{uint32\_t}. There are three \textit{minimum precision unsigned integer
types}: \texttt{min10uint}, \texttt{min12uint}, and \texttt{min16uint}. Each of
the minimum precision unsigned integer types are named for the required minimum
value representation size in bits. The object representation of all minimum
precision types is \texttt{uint}. The standard unsigned integer types and
minimum precision unsigned integer types are collectively called
\textit{unsigned integer types}.

\p The signed integer types and unsigned integer types are collectively called
\textit{integer types}. Integer types inherit the object representation of
integers defined in \glsdesc{isoC23}\footnote{C23 adopts two's compliment as the
object representation for integer types.}. Integer types shall satisfy the
constraints defined in \glsdesc{isoCPP}, section \textbf{basic.fundamental}.
\texttt{uint32\_t}. There is one \textit{minimum precision unsigned integer
type}: \texttt{min16uint}. The minimum precision unsigned integer type is named
for the required minimum value representation size in bits. The object
representation of \texttt{min16uint} is \texttt{uint}. The standard unsigned
integer types and minimum precision unsigned integer type are collectively
called \textit{unsigned integer types}.

\p The minimum precision signed integer types and minimum precision unsigned
integer types are collectively called \textit{minimum precision integer types}.
The standard signed integer types and standard unsigned integer types are
collectively called \textit{standard integer types}. The signed integer types
and unsigned integer types are collectively called \textit{integer types}.
Integer types inherit the object representation of integers defined in
\glsdesc{isoC23}\footnote{C23 adopts two's compliment as the object
representation for integer types.}. Integer types shall satisfy the constraints
defined in \glsdesc{isoCPP}, section \textbf{basic.fundamental}.

\p There are three \textit{standard floating point types}: \texttt{half},
\texttt{float}, and \texttt{double}. The \texttt{float} type is a 32-bit
Expand All @@ -91,14 +94,13 @@
otherwise it will have an object representation matching the \textbf{binary16}
format defined in \gls{IEEE754}\footnote{IEEE-754 only defines a binary encoding
for 16-bit floating point values, it does not fully specify the behavior of such
types.}. There are three \textit{minimum precision floating point types}:
\texttt{min10float}, \texttt{min12float}, and \texttt{min16float}. Each of the
minimum precision floating point types are named for the required minimum value
representation size in bits. The object representation of all minimum precision
types is \texttt{float}\footnote{This means when stored to memory minimum
precision types are stored as \textbf{binary32} as defined in \gls{IEEE754}.}.
The standard floating point types and minimum precision floating point types are
collectively called \textit{floating point types}.
types.}. There is one \textit{minimum precision floating point type}:
\texttt{min16float}. The minimum precision floating point type is named for the
required minimum value representation size in bits. The object representation of
\texttt{min16float} is \texttt{float}\footnote{This means when stored to memory
objects of type \texttt{min16float} are stored as \textbf{binary32} as defined
in \gls{IEEE754}.}. The standard floating point types and minimum precision
floating point type are collectively called \textit{floating point types}.

\p Integer and floating point types are collectively called \textit{arithmetic
types}.
Expand Down
11 changes: 7 additions & 4 deletions specs/language/conversions.tex
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@
corresponding signed integer type.
\item The rank of \texttt{bool} shall be less than the rank of all other
standard integer types.
\item The rank of a minimum precision integer type shall be less than the rank
of any other minimum precision integer type with a larger minimum value
representation size.
\item The rank of a minimum precision integer type shall be less than the rank
of all standard integer types.
\item For all integer types \texttt{T1}, \texttt{T2}, and \texttt{T3}: if
\texttt{T1} has greater rank than \texttt{T2} and \texttt{T2} has greater rank
than \texttt{T3}, then \texttt{T1} shall have greater rank than \texttt{T3}.
Expand All @@ -167,11 +172,9 @@
\Sub{Floating Point Conversion Rank}{Conv.rank.float}

\begin{itemize}
\item No two floating point types shall have the same conversion rank even if
they have the same representation.
\item The rank of a floating point type shall be greater than the rank of any
floating point type with a smaller size.
\item The rank \texttt{half} shall be greater than the rank of \texttt{min16float}.
\item The rank \texttt{float} shall be greater than the rank of \texttt{half}.
\item The rank \texttt{double} shall be greater than the rank of \texttt{float}.
\item For all floating point types \texttt{T1}, \texttt{T2}, and \texttt{T3}:
if \texttt{T1} has greater rank than \texttt{T2} and \texttt{T2} has greater
rank than \texttt{T3}, then \texttt{T1} shall have greater rank than
Expand Down