{
switch (m3_round) {
case M3_BFP_ROUND_PER_FPC: return "[per fpc]";
- case M3_BFP_ROUND_NEAREST_AWAY: return "[-> near away]";
+ case M3_BFP_ROUND_NEAREST_AWAY: return "[-> nearest with ties away from 0]";
case M3_BFP_ROUND_PREPARE_SHORT: return "[-> prepare-short]";
- case M3_BFP_ROUND_NEAREST_EVEN: return "[-> near away]";
+ case M3_BFP_ROUND_NEAREST_EVEN: return "[-> nearest with ties to even]";
case M3_BFP_ROUND_ZERO: return "[-> zero]";
case M3_BFP_ROUND_POSINF: return "[-> +inf]";
case M3_BFP_ROUND_NEGINF: return "[-> -inf]";
/* Can be converted to 64-bit and 128-bit values without issues. */
static const float values[] = {
- 0.0f, -1.0f, 2.0f, NAN, INFINITY
+ 0.0f, -0.25f, 2.0f, NAN, INFINITY
};
static void
cgxbr(values[j], M3_BFP_ROUND_PER_FPC);
}
-#if 0
+/* Note: In order to get cc = 1 it is not sufficient for the operand value
+ to be < 0. Additionally, the operand value after rounding must be 0. */
static void
convert_to_logical_fpc_tests(unsigned mode)
{
for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
clgxbr(values[j], M3_BFP_ROUND_PER_FPC);
}
-#endif
int
main(void)
}
printf("Rounding as 'per M3'\n");
- convert_to_int_m3_tests(1); // M3_BFP_ROUND_NEAREST_AWAY
- convert_to_int_m3_tests(3); // M3_BFP_ROUND_PREPARE_SHORT
- convert_to_int_m3_tests(4); // M3_BFP_ROUND_NEAREST_EVEN
- convert_to_int_m3_tests(5); // M3_BFP_ROUND_ZERO
- convert_to_int_m3_tests(6); // M3_BFP_ROUND_POSINF
- convert_to_int_m3_tests(7); // M3_BFP_ROUND_NEGINF
+ convert_to_int_m3_tests(M3_BFP_ROUND_NEAREST_AWAY);
+ convert_to_int_m3_tests(M3_BFP_ROUND_PREPARE_SHORT);
+ convert_to_int_m3_tests(M3_BFP_ROUND_NEAREST_EVEN);
+ convert_to_int_m3_tests(M3_BFP_ROUND_ZERO);
+ convert_to_int_m3_tests(M3_BFP_ROUND_POSINF);
+ convert_to_int_m3_tests(M3_BFP_ROUND_NEGINF);
//----------------------------------------------------------
// Convert to logical
//----------------------------------------------------------
-#if 0
- /* Disabled until condition code weirdness has been cleared up.
- Negative floating point number --> cc = 3. Seems wrong to me. */
putchar('\n');
printf("============ Convert to logical =============\n");
printf("Rounding as 'per FPC'\n");
}
printf("Rounding as 'per M3'\n");
- convert_to_logical_m3_tests(1); // M3_BFP_ROUND_NEAREST_AWAY
- convert_to_logical_m3_tests(3); // M3_BFP_ROUND_PREPARE_SHORT
- convert_to_logical_m3_tests(4); // M3_BFP_ROUND_NEAREST_EVEN
- convert_to_logical_m3_tests(5); // M3_BFP_ROUND_ZERO
- convert_to_logical_m3_tests(6); // M3_BFP_ROUND_POSINF
- convert_to_logical_m3_tests(7); // M3_BFP_ROUND_NEGINF
-#endif
+ convert_to_logical_m3_tests(M3_BFP_ROUND_NEAREST_AWAY);
+ convert_to_logical_m3_tests(M3_BFP_ROUND_PREPARE_SHORT);
+ convert_to_logical_m3_tests(M3_BFP_ROUND_NEAREST_EVEN);
+ convert_to_logical_m3_tests(M3_BFP_ROUND_ZERO);
+ convert_to_logical_m3_tests(M3_BFP_ROUND_POSINF);
+ convert_to_logical_m3_tests(M3_BFP_ROUND_NEGINF);
+
return 0;
}
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
cgxbr inf cc = 3
cgxbra inf cc = 3
Rounding as 'per M3'
-...setting M3 rounding mode to [-> near away]
+...setting M3 rounding mode to [-> nearest with ties away from 0]
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
cgxbra nan cc = 3
cgxbr inf cc = 3
cgxbra inf cc = 3
-...setting M3 rounding mode to [-> near away]
+...setting M3 rounding mode to [-> nearest with ties to even]
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
......f32 -> i32
cfebr 0.000000 cc = 0
cfebra 0.000000 cc = 0
-cfebr -1.000000 cc = 1
-cfebra -1.000000 cc = 1
+cfebr -0.250000 cc = 1
+cfebra -0.250000 cc = 1
cfebr 2.000000 cc = 2
cfebra 2.000000 cc = 2
cfebr nan cc = 3
......f32 -> i64
cgebr 0.000000 cc = 0
cgebra 0.000000 cc = 0
-cgebr -1.000000 cc = 1
-cgebra -1.000000 cc = 1
+cgebr -0.250000 cc = 1
+cgebra -0.250000 cc = 1
cgebr 2.000000 cc = 2
cgebra 2.000000 cc = 2
cgebr nan cc = 3
......f64 -> i32
cfdbr 0.000000 cc = 0
cfdbra 0.000000 cc = 0
-cfdbr -1.000000 cc = 1
-cfdbra -1.000000 cc = 1
+cfdbr -0.250000 cc = 1
+cfdbra -0.250000 cc = 1
cfdbr 2.000000 cc = 2
cfdbra 2.000000 cc = 2
cfdbr nan cc = 3
......f64 -> i64
cgdbr 0.000000 cc = 0
cgdbra 0.000000 cc = 0
-cgdbr -1.000000 cc = 1
-cgdbra -1.000000 cc = 1
+cgdbr -0.250000 cc = 1
+cgdbra -0.250000 cc = 1
cgdbr 2.000000 cc = 2
cgdbra 2.000000 cc = 2
cgdbr nan cc = 3
......f128 -> i32
cfxbr 0.000000 cc = 0
cfxbra 0.000000 cc = 0
-cfxbr -1.000000 cc = 1
-cfxbra -1.000000 cc = 1
+cfxbr -0.250000 cc = 1
+cfxbra -0.250000 cc = 1
cfxbr 2.000000 cc = 2
cfxbra 2.000000 cc = 2
cfxbr nan cc = 3
......f128 -> i64
cgxbr 0.000000 cc = 0
cgxbra 0.000000 cc = 0
-cgxbr -1.000000 cc = 1
-cgxbra -1.000000 cc = 1
+cgxbr -0.250000 cc = 1
+cgxbra -0.250000 cc = 1
cgxbr 2.000000 cc = 2
cgxbra 2.000000 cc = 2
cgxbr nan cc = 3
cgxbra nan cc = 3
cgxbr inf cc = 3
cgxbra inf cc = 3
+
+============ Convert to logical =============
+Rounding as 'per FPC'
+...setting FPC rounding mode to [-> near]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 1
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 1
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 1
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 1
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 1
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 1
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting FPC rounding mode to [-> zero]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 1
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 1
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 1
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 1
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 1
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 1
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting FPC rounding mode to [-> +inf]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 1
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 1
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 1
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 1
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 1
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 1
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting FPC rounding mode to [-> -inf]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 3
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 3
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 3
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 3
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 3
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 3
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting FPC rounding mode to [-> prepare-short]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 1
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 1
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 1
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 1
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 1
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 1
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+Rounding as 'per M3'
+...setting M3 rounding mode to [-> nearest with ties away from 0]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 1
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 1
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 1
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 1
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 1
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 1
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting M3 rounding mode to [-> prepare-short]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 3
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 3
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 3
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 3
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 3
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 3
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting M3 rounding mode to [-> nearest with ties to even]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 1
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 1
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 1
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 1
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 1
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 1
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting M3 rounding mode to [-> zero]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 1
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 1
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 1
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 1
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 1
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 1
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting M3 rounding mode to [-> +inf]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 1
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 1
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 1
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 1
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 1
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 1
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3
+...setting M3 rounding mode to [-> -inf]
+......f32 -> u32
+clfebr 0.000000 cc = 0
+clfebr -0.250000 cc = 3
+clfebr 2.000000 cc = 2
+clfebr nan cc = 3
+clfebr inf cc = 3
+......f32 -> u64
+clgebr 0.000000 cc = 0
+clgebr -0.250000 cc = 3
+clgebr 2.000000 cc = 2
+clgebr nan cc = 3
+clgebr inf cc = 3
+......f64 -> u32
+clfdbr 0.000000 cc = 0
+clfdbr -0.250000 cc = 3
+clfdbr 2.000000 cc = 2
+clfdbr nan cc = 3
+clfdbr inf cc = 3
+......f64 -> u64
+clgdbr 0.000000 cc = 0
+clgdbr -0.250000 cc = 3
+clgdbr 2.000000 cc = 2
+clgdbr nan cc = 3
+clgdbr inf cc = 3
+......f128 -> u32
+clfxbr 0.000000 cc = 0
+clfxbr -0.250000 cc = 3
+clfxbr 2.000000 cc = 2
+clfxbr nan cc = 3
+clfxbr inf cc = 3
+......f128 -> u64
+clgxbr 0.000000 cc = 0
+clgxbr -0.250000 cc = 3
+clgxbr 2.000000 cc = 2
+clgxbr nan cc = 3
+clgxbr inf cc = 3