<div id="fpr-to-gpr-conversion-mode"></div>
-IEEE 754 doesn't specify what results are obtained when converting a NaN
+IEEE 754 does not specify what results are obtained when converting a NaN
or out-of-range floating-point value to integer, so different programming
languages and ISAs have made different choices. The different conversion
modes supported by the `cffpr` instruction are as follows:
as well as commonly used floating-point to integer conversions on x86.
* S-Type: <div id="fpr-to-gpr-conversion-s-type"></div>
- Used for WebAssembly's `trunc_sat_u`[^trunc_sat_u] and
- `trunc_sat_s`[^trunc_sat_s] instructions, as well as several notable
- programming languages:
+ Used for several notable programming languages:
* Java's conversion from `float`/`double` to `long`/`int`[^java_fp_to_int]
* Rust's `as` operator[^rust_as_operator]
* SPIR-V's OpenCL dialect's `OpConvertFToU`[^SPIRV_OpConvertFToU] and
`OpConvertFToS`[^SPIRV_OpConvertFToS] instructions when decorated with
the `SaturatedConversion`[^SPIRV_SaturatedConversion] decorator.
+ * Also WebAssembly's `trunc_sat_u`[^trunc_sat_u] and
+ `trunc_sat_s`[^trunc_sat_s] instructions,
+
* E-Type: <div id="fpr-to-gpr-conversion-e-type"></div>
Used for ECMAScript's `ToInt32` abstract operation[^ECMAScript_ToInt32].
### Floating-point to Integer Conversion Semantics Summary
-Let `rounded` be the result of `bfp_ROUND_TO_INTEGER(rmode, input)`.
+Let `round` be the result of `bfp_ROUND_TO_INTEGER(rmode, input)`.
Let `w` be the number of bits in the result's type.
The result of Floating-point to Integer conversion is as follows:
```
-+--------+------------+-----------------------------------------------------------------------+
-| Type | Result's | Category of rounded |
-| | Signedness +-----------+-----------+-----------+-----------+-----------+-----------+
-| | | NaN | +Infinity | -Infinity | > Maximum | < Minimum | Otherwise |
-| | | | | | Possible | Possible | |
-| | | | | | Result | Result | |
-+--------+------------+-----------+-----------+-----------+-----------+-----------+-----------+
-| P-Type | Unsigned | 0 | 2^w - 1 | 0 | 2^w - 1 | 0 | rounded |
-| +------------+-----------+-----------+-----------+-----------+-----------+-----------+
-| | Signed | -2^(w-1) | 2^(w-1)-1 | -2^(w-1) | 2^(w-1)-1 | -2^(w-1) | rounded |
-+--------+------------+-----------+-----------+-----------+-----------+-----------+-----------+
-| S-Type | Unsigned | 0 | 2^w - 1 | 0 | 2^w - 1 | 0 | rounded |
-| +------------+-----------+-----------+-----------+-----------+-----------+-----------+
-| | Signed | 0 | 2^(w-1)-1 | -2^(w-1) | 2^(w-1)-1 | -2^(w-1) | rounded |
-+--------+------------+-----------+-----------+-----------+-----------+-----------+-----------+
-| E-Type | Either | 0 | rounded & (2^w - 1) |
-+--------+------------+-----------------------------------+-----------------------------------+
++------+------+---------------------------------------------------------------+
+|Type| Result | Category of rounding |
+| | Sign +----------+-----------+----------+-----------+---------+-------+
+| | | NaN | +Inf | -Inf | > Max | < Min | Else |
+| | | | | | Possible | Possible| |
+| | | | | | Result | Result | |
++----+--------+----------+-----------+----------+-----------+---------+-------+
+| P |Unsigned| 0 | 2^w - 1 | 0 | 2^w - 1 | 0 | round |
+| +--------+----------+-----------+----------+-----------+---------+-------+
+| | Signed | -2^(w-1) | 2^(w-1)-1 | -2^(w-1) | 2^(w-1)-1 | -2^(w-1)| round |
++----+--------+----------+-----------+----------+-----------+---------+-------+
+| S |Unsigned| 0 | 2^w - 1 | 0 | 2^w - 1 | 0 | round |
+| +--------+----------+-----------+----------+-----------+---------+-------+
+| | Signed | 0 | 2^(w-1)-1 | -2^(w-1) | 2^(w-1)-1 | -2^(w-1)| round |
++----+--------+----------+-----------+----------+-----------+---------+-------+
+| E | Either | 0 | round & (2^w - 1) |
++----+--------+---------------------------------+-----------------------------+
```