mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-12-25 17:21:06 +00:00
syntax.md: Describe hex floats and their use.
This commit is contained in:
parent
2ae4a68fe8
commit
7c3ca6d05a
35
syntax.md
35
syntax.md
@ -36,7 +36,8 @@ the SPIR-V specification. An operand is one of:
|
||||
integer supplied for a signed integer value will be sign-extended.
|
||||
For example, `0xffff` supplied as the literal for an `OpConstant`
|
||||
on a signed 16-bit integer type will be interpreted as the value `-1`.
|
||||
* a literal floating point number.
|
||||
* a literal floating point number, in decimal or hexadecimal form.
|
||||
See [below](#floats).
|
||||
* a literal string.
|
||||
* A literal string is everything following a double-quote `"` until the
|
||||
following un-escaped double-quote. This includes special characters such
|
||||
@ -86,6 +87,38 @@ So the example can be rewritten using more user-friendly names, as follows:
|
||||
OpFunctionEnd
|
||||
```
|
||||
|
||||
## Floating point literals
|
||||
<a name="floats"></a>
|
||||
|
||||
The assembler and disassembler support floating point literals in both
|
||||
decimal and hexadecimal form.
|
||||
|
||||
The syntax for a floating point literal is the same as floating point
|
||||
constants in the C programming language, except:
|
||||
* An optional leading minus (`-`) is part of the literal.
|
||||
* An optional type specifier suffix is not allowed.
|
||||
Infinity and NaN values are expressed in hexadecimal float literals
|
||||
by using the maximum representable exponent for the bit width.
|
||||
|
||||
For example, in 32-bit floating point, 8 bits are used for the exponent, and the
|
||||
exponent bias is 127. So the maximum representable unbiased exponent is 128.
|
||||
Therefore, we represent the infinities and a some NaNs as follows:
|
||||
|
||||
```
|
||||
%float32 = OpTypeFloat 32
|
||||
%inf = OpConstant %float32 0x1p+128
|
||||
%neginf = OpConstant %float32 -0x1p+128
|
||||
%aNaN = OpConstant %float32 0x1.8p+128
|
||||
%moreNaN = OpConstant %float32 -0x1.0002p+128
|
||||
```
|
||||
The assembler preserves all the bits of a NaN value. For example, the encoding
|
||||
of `%aNaN` in the previous example is the same as `!0x7fc00000`, and `%moreNaN`
|
||||
is encoded as `!0xff800100`.
|
||||
|
||||
The disassembler prints infinite, NaN, and subnormal values in hexadecimal form.
|
||||
Zero and normal values are printed in decimal form with enough digits
|
||||
to preserve all significand bits.
|
||||
|
||||
## Arbitrary Integers
|
||||
<a name="immediate"></a>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user