]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
s390x: Testcase workaround
authorFlorian Krohm <flo2030@eich-krohm.de>
Mon, 27 Oct 2025 13:09:04 +0000 (13:09 +0000)
committerFlorian Krohm <flo2030@eich-krohm.de>
Mon, 27 Oct 2025 13:11:58 +0000 (13:11 +0000)
GCC 14.2.0 does not recognize convert to fixed/logical opcodes:

bfp-convert.c: Assembler messages:
bfp-convert.c:205: Error: Unrecognized opcode: `cfebra'
bfp-convert.c:210: Error: Unrecognized opcode: `cgebra'
...
bfp-convert.c:314: Error: Unrecognized opcode: `clfebr'
bfp-convert.c:314: Error: Unrecognized opcode: `clgebr'
...

none/tests/s390x/bfp-convert.c
none/tests/s390x/bfp-convert.stdout.exp

index dbb5b53ad987e28a4c432ec0c47dc1fde00b2e52..4d8de26b6520940983ae648cc8590a0e13823602 100644 (file)
 #include <assert.h>
 #include "rounding.h"
 
-#define convert_to_int(opcode,src_type,dst_type,round,value,fmt)     \
+// Convert to fixed
+#define CFEBR "0xb398"
+#define CFDBR "0xb399"
+#define CFXBR "0xb39a"
+#define CGEBR "0xb3a8"
+#define CGDBR "0xb3a8"
+#define CGXBR "0xb3aa"
+
+// Convert to logical
+#define CLFEBR "0xb39c"
+#define CLFDBR "0xb39d"
+#define CLFXBR "0xb39e"
+#define CLGEBR "0xb3ac"
+#define CLGDBR "0xb3ad"
+#define CLGXBR "0xb3ae"
+
+#define convert_to_int(mnm,opcode,src_type,dst_type,round,value,fmt) \
    do {                                                              \
       src_type src = value;                                          \
       dst_type dst;                                                  \
       unsigned cc;                                                   \
                                                                      \
-      __asm__ volatile (opcode " %[dst]," #round ",%[src]\n\t"       \
+      __asm__ volatile(".insn rrf," opcode "0000," "%[r1],%[r2],%[m3],0\n\t" \
                         "ipm %[cc]\n\t"                              \
                         "srl %[cc],28\n\t"                           \
-                        : [dst]"=d"(dst), [cc]"=d"(cc)               \
-                        : [src]"f"(src)                              \
+                        : [r1] "=d"(dst), [cc] "=d"(cc)              \
+                        : [r2] "f"(src),  [m3] "i"(round)            \
                         : "cc");                                     \
                                                                      \
-      printf("%s "fmt"\tcc = %u\n", opcode, src, cc);                \
-                                                                     \
-      __asm__ volatile (opcode "a %[dst]," #round ",%[src],0\n\t"    \
-                        "ipm %[cc]\n\t"                              \
-                        "srl %[cc],28\n\t"                           \
-                        : [dst]"=d"(dst), [cc]"=d"(cc)               \
-                        : [src]"f"(src)                              \
-                        : "cc");                                     \
-                                                                     \
-      printf("%sa "fmt"\tcc = %u\n", opcode, src, cc);               \
+      printf("%s "fmt"\tcc = %u\n", mnm, src, cc);                   \
 } while (0)
 
-#define convert_to_logical(opcode,src_type,dst_type,round,value,fmt) \
+#define convert_to_logical(mnm,opcode,src_type,dst_type,round,value,fmt) \
    do {                                                              \
       src_type src = value;                                          \
       dst_type dst;                                                  \
       unsigned cc;                                                   \
                                                                      \
-      __asm__ volatile (opcode " %[dst]," #round ",%[src], 0\n\t"    \
-                        "ipm %[cc]\n\t"                              \
-                        "srl %[cc],28\n\t"                           \
-                        : [dst]"=d"(dst), [cc]"=d"(cc)               \
-                        : [src]"f"(src)                              \
-                        : "cc");                                     \
+      __asm__ volatile(".insn rrf," opcode "0000," "%[r1],%[r2],%[m3],0\n\t" \
+                       "ipm %[cc]\n\t"                               \
+                       "srl %[cc],28\n\t"                            \
+                       : [r1] "=d"(dst), [cc] "=d"(cc)               \
+                       : [r2] "f"(src),  [m3] "i"(round)             \
+                       : "cc");                                      \
                                                                      \
-      printf("%s "fmt"\tcc = %u\n", opcode, src, cc);                \
+      printf("%s "fmt"\tcc = %u\n", mnm, src, cc);                   \
 } while (0)
 
 /* Convenience macros */
 #define cfebr(value,round)                                           \
-        convert_to_int("cfebr",float,int32_t,round,value,"%f")
+        convert_to_int("cfebr",CFEBR,float,int32_t,round,value,"%f")
 #define cfdbr(value,round)                                           \
-        convert_to_int("cfdbr",double,int32_t,round,value,"%f")
+        convert_to_int("cfdbr",CFDBR,double,int32_t,round,value,"%f")
 #define cfxbr(value,round)                                           \
-        convert_to_int("cfxbr",long double,int32_t,round,value,"%Lf")
+        convert_to_int("cfxbr",CFXBR,long double,int32_t,round,value,"%Lf")
 #define cgebr(value,round)                                           \
-        convert_to_int("cgebr",float,int64_t,round,value,"%f")
+        convert_to_int("cgebr",CGEBR,float,int64_t,round,value,"%f")
 #define cgdbr(value,round)                                           \
-        convert_to_int("cgdbr",double,int64_t,round,value,"%f")
+        convert_to_int("cgdbr",CGDBR,double,int64_t,round,value,"%f")
 #define cgxbr(value,round)                                           \
-        convert_to_int("cgxbr",long double,int64_t,round,value,"%Lf")
+        convert_to_int("cgxbr",CGXBR,long double,int64_t,round,value,"%Lf")
 
 #define clfebr(value,round)                                           \
-        convert_to_logical("clfebr",float,uint32_t,round,value,"%f")
+        convert_to_logical("clfebr",CLFEBR,float,uint32_t,round,value,"%f")
 #define clfdbr(value,round)                                           \
-        convert_to_logical("clfdbr",double,uint32_t,round,value,"%f")
+        convert_to_logical("clfdbr",CLFDBR,double,uint32_t,round,value,"%f")
 #define clfxbr(value,round)                                           \
-        convert_to_logical("clfxbr",long double,uint32_t,round,value,"%Lf")
+        convert_to_logical("clfxbr",CLFXBR,long double,uint32_t,round,value,"%Lf")
 #define clgebr(value,round)                                           \
-        convert_to_logical("clgebr",float,uint64_t,round,value,"%f")
+        convert_to_logical("clgebr",CLGEBR,float,uint64_t,round,value,"%f")
 #define clgdbr(value,round)                                           \
-        convert_to_logical("clgdbr",double,uint64_t,round,value,"%f")
+        convert_to_logical("clgdbr",CLGDBR,double,uint64_t,round,value,"%f")
 #define clgxbr(value,round)                                           \
-        convert_to_logical("clgxbr",long double,uint64_t,round,value,"%Lf")
+        convert_to_logical("clgxbr",CLGXBR,long double,uint64_t,round,value,"%Lf")
 
 #define convert_to_int_m3_tests(mode)                                   \
         printf("...setting M3 rounding mode to %s\n", m3_rtext(mode));  \
@@ -230,8 +237,6 @@ convert_to_int_fpc_tests(unsigned mode)
       cgxbr(values[j], M3_BFP_ROUND_PER_FPC);
 }
 
-/* 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)
 {
index 7c9d5a1e40e13113a6d37ebf6e4b70088fece3d6..91f46e900ef37c494c83083219b9f19900325c57 100644 (file)
@@ -3,741 +3,411 @@ Rounding as 'per FPC'
 ...setting FPC rounding mode to [-> near]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 FPC rounding mode to [-> zero]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 FPC rounding mode to [-> +inf]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 FPC rounding mode to [-> -inf]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 FPC rounding mode to [-> prepare-short]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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
 Rounding as 'per M3'
 ...setting M3 rounding mode to [-> nearest with ties away from 0]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 [-> prepare-short]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 [-> nearest with ties to even]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 [-> zero]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 [-> +inf]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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 [-> -inf]
 ......f32 -> i32
 cfebr 0.000000 cc = 0
-cfebra 0.000000        cc = 0
 cfebr -0.250000        cc = 1
-cfebra -0.250000       cc = 1
 cfebr 2.000000 cc = 2
-cfebra 2.000000        cc = 2
 cfebr nan      cc = 3
-cfebra nan     cc = 3
 cfebr inf      cc = 3
-cfebra inf     cc = 3
 ......f32 -> i64
 cgebr 0.000000 cc = 0
-cgebra 0.000000        cc = 0
 cgebr -0.250000        cc = 1
-cgebra -0.250000       cc = 1
 cgebr 2.000000 cc = 2
-cgebra 2.000000        cc = 2
 cgebr nan      cc = 3
-cgebra nan     cc = 3
 cgebr inf      cc = 3
-cgebra inf     cc = 3
 ......f64 -> i32
 cfdbr 0.000000 cc = 0
-cfdbra 0.000000        cc = 0
 cfdbr -0.250000        cc = 1
-cfdbra -0.250000       cc = 1
 cfdbr 2.000000 cc = 2
-cfdbra 2.000000        cc = 2
 cfdbr nan      cc = 3
-cfdbra nan     cc = 3
 cfdbr inf      cc = 3
-cfdbra inf     cc = 3
 ......f64 -> i64
 cgdbr 0.000000 cc = 0
-cgdbra 0.000000        cc = 0
 cgdbr -0.250000        cc = 1
-cgdbra -0.250000       cc = 1
 cgdbr 2.000000 cc = 2
-cgdbra 2.000000        cc = 2
 cgdbr nan      cc = 3
-cgdbra nan     cc = 3
 cgdbr inf      cc = 3
-cgdbra inf     cc = 3
 ......f128 -> i32
 cfxbr 0.000000 cc = 0
-cfxbra 0.000000        cc = 0
 cfxbr -0.250000        cc = 1
-cfxbra -0.250000       cc = 1
 cfxbr 2.000000 cc = 2
-cfxbra 2.000000        cc = 2
 cfxbr nan      cc = 3
-cfxbra nan     cc = 3
 cfxbr inf      cc = 3
-cfxbra inf     cc = 3
 ......f128 -> i64
 cgxbr 0.000000 cc = 0
-cgxbra 0.000000        cc = 0
 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'