/none/tests/s390x/cu14_1
/none/tests/s390x/cu41
/none/tests/s390x/ecag
-/none/tests/s390x/fpext
/none/tests/s390x/fpext_warn
-/none/tests/s390x/fpconv
+/none/tests/s390x/fpext_fail
/none/tests/s390x/rounding-1
-/none/tests/s390x/rounding-2
-/none/tests/s390x/rounding-3
+/none/tests/s390x/rounding-6
/none/tests/s390x/bfp-arith
/none/tests/s390x/bfp-load
/none/tests/s390x/bfp-fpc
/none/tests/s390x/bfp-tdc
/none/tests/s390x/bfp-3
/none/tests/s390x/bfp-compare
+/none/tests/s390x/bfp-convert
/none/tests/s390x/comp-1
/none/tests/s390x/comp-2
/none/tests/s390x/ex
/none/tests/s390x/spechelper-slgr
/none/tests/s390x/spechelper-or
/none/tests/s390x/spechelper-tm
-/none/tests/s390x/rounding-6
/none/tests/s390x/laa
/none/tests/s390x/dfp-1
/none/tests/s390x/dfp-2
op_exception stck stckf stcke stfle cksm mvcl clcl troo \
trto trot trtt tr tre cij cgij clij clgij crj cgrj clrj clgrj \
cs csg cds cdsg cu21 cu21_1 cu24 cu24_1 cu42 cu12 cu12_1 \
- ex_sig ex_clone cu14 cu14_1 cu41 fpconv ecag fpext_warn \
- bfp-tdc bfp-load bfp-fpc rounding-1 rounding-3 bfp-arith \
+ ex_sig ex_clone cu14 cu14_1 cu41 ecag fpext_warn fpext_fail \
+ bfp-tdc bfp-load bfp-fpc bfp-convert rounding-1 bfp-arith \
bfp-3 bfp-compare comp-1 comp-2 exrl tmll tm stmg \
ex clst mvc test_fork test_sig rounding-6 rxsbg popcnt \
high-word traps \
vector_float add-z14 sub-z14 mul-z14 bic \
misc3 vec2 vec2_float \
dfp-1 dfp-2 dfp-3 dfp-4 dfpconv dfpext dfptest pfpo srnmt \
- fpext hfp
+ hfp
check_PROGRAMS = $(INSN_TESTS) \
allexec \
ecag.stdout.exp-z13 ecag.stdout.exp-z14 ecag.stdout.exp-z15 \
ecag.stdout.exp-z16 \
op00.stderr.exp op00.vgtest \
- fpext.vgtest fpext.stderr.exp fpext.stdout.exp \
- fpext_fail.vgtest fpext_fail.stderr.exp fpext_fail.stdout.exp \
test.h opcodes.h add.h and.h div.h insert.h dfp_utils.h \
mul.h or.h sub.h xor.h table.h svc.h rounding.h \
dfp-1.stderr.exp dfp-1.stdout.exp dfp-1.vgtest \
--- /dev/null
+/* Test "convert to fixed" and "convert to logical" insns.
+
+ We already know via bfp-emit.pl:
+
+ Testing: cfebr %r0,0,%f1
+ Frontend: cfebr %r0,0,%f1
+ Assembly: cfebr %r5,0,%f7
+
+ Testing: celfbr %f0,0,%r1,0
+ Frontend: celfbr %f0,0,%r1,0
+ Assembly: celfbr %f7,0,%r4,0
+
+ So the only thing to test for here is the condition code.
+
+ Note, no testing for "convert from ..." insns here, as they are
+ covered in bfd-emit.pl and do not set the condition code.
+*/
+#include <stdio.h>
+#include <stdint.h>
+#include <math.h>
+#include <assert.h>
+#include "rounding.h"
+
+#define convert_to_int(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" \
+ "ipm %[cc]\n\t" \
+ "srl %[cc],28\n\t" \
+ : [dst]"=d"(dst), [cc]"=d"(cc) \
+ : [src]"f"(src) \
+ : "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); \
+} while (0)
+
+#define convert_to_logical(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"); \
+ \
+ printf("%s "fmt"\tcc = %u\n", opcode, src, cc); \
+} while (0)
+
+/* Convenience macros */
+#define cfebr(value,round) \
+ convert_to_int("cfebr",float,int32_t,round,value,"%f")
+#define cfdbr(value,round) \
+ convert_to_int("cfdbr",double,int32_t,round,value,"%f")
+#define cfxbr(value,round) \
+ convert_to_int("cfxbr",long double,int32_t,round,value,"%Lf")
+#define cgebr(value,round) \
+ convert_to_int("cgebr",float,int64_t,round,value,"%f")
+#define cgdbr(value,round) \
+ convert_to_int("cgdbr",double,int64_t,round,value,"%f")
+#define cgxbr(value,round) \
+ convert_to_int("cgxbr",long double,int64_t,round,value,"%Lf")
+
+#define clfebr(value,round) \
+ convert_to_logical("clfebr",float,uint32_t,round,value,"%f")
+#define clfdbr(value,round) \
+ convert_to_logical("clfdbr",double,uint32_t,round,value,"%f")
+#define clfxbr(value,round) \
+ convert_to_logical("clfxbr",long double,uint32_t,round,value,"%Lf")
+#define clgebr(value,round) \
+ convert_to_logical("clgebr",float,uint64_t,round,value,"%f")
+#define clgdbr(value,round) \
+ convert_to_logical("clgdbr",double,uint64_t,round,value,"%f")
+#define clgxbr(value,round) \
+ convert_to_logical("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)); \
+ \
+ /* f32 -> i32 */ \
+ printf("......f32 -> i32\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ cfebr(values[j], mode); \
+ \
+ /* f32 -> i64 */ \
+ printf("......f32 -> i64\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ cgebr(values[j], mode); \
+ \
+ /* f64 -> i32 */ \
+ printf("......f64 -> i32\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ cfdbr(values[j], mode); \
+ \
+ /* f64 -> i64 */ \
+ printf("......f64 -> i64\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ cgdbr(values[j], mode); \
+ \
+ /* f128 -> i32 */ \
+ printf("......f128 -> i32\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ cfxbr(values[j], mode); \
+ \
+ /* f128 -> i64 */ \
+ printf("......f128 -> i64\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ cgxbr(values[j], mode);
+
+#define convert_to_logical_m3_tests(mode) \
+ printf("...setting M3 rounding mode to %s\n", m3_rtext(mode)); \
+ \
+ /* f32 -> u32 */ \
+ printf("......f32 -> u32\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ clfebr(values[j], mode); \
+ \
+ /* f32 -> u64 */ \
+ printf("......f32 -> u64\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ clgebr(values[j], mode); \
+ \
+ /* f64 -> u32 */ \
+ printf("......f64 -> u32\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ clfdbr(values[j], mode); \
+ \
+ /* f64 -> u64 */ \
+ printf("......f64 -> u64\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ clgdbr(values[j], mode); \
+ \
+ /* f128 -> u32 */ \
+ printf("......f128 -> u32\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ clfxbr(values[j], mode); \
+ \
+ /* f128 -> u64 */ \
+ printf("......f128 -> u64\n"); \
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j) \
+ clgxbr(values[j], mode);
+
+static void
+set_rounding_mode(unsigned mode)
+{
+ __asm__ volatile ("sfpc %[r1]" : : [r1]"d"(mode));
+}
+
+static const char *
+fpc_rtext(unsigned fpc_round)
+{
+ switch (fpc_round) {
+ case FPC_BFP_ROUND_NEAREST_EVEN: return "[-> near]";
+ case FPC_BFP_ROUND_ZERO: return "[-> zero]";
+ case FPC_BFP_ROUND_POSINF: return "[-> +inf]";
+ case FPC_BFP_ROUND_NEGINF: return "[-> -inf]";
+ case FPC_BFP_ROUND_PREPARE_SHORT: return "[-> prepare-short]";
+ }
+ assert(0);
+}
+
+static const char *
+m3_rtext(unsigned m3_round)
+{
+ 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_PREPARE_SHORT: return "[-> prepare-short]";
+ case M3_BFP_ROUND_NEAREST_EVEN: return "[-> near away]";
+ case M3_BFP_ROUND_ZERO: return "[-> zero]";
+ case M3_BFP_ROUND_POSINF: return "[-> +inf]";
+ case M3_BFP_ROUND_NEGINF: return "[-> -inf]";
+ }
+ assert(0);
+}
+
+/* Can be converted to 64-bit and 128-bit values without issues. */
+static const float values[] = {
+ 0.0f, -1.0f, 2.0f, NAN, INFINITY
+};
+
+static void
+convert_to_int_fpc_tests(unsigned mode)
+{
+ set_rounding_mode(mode);
+
+ /* f32 -> i32 */
+ printf("......f32 -> i32\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ cfebr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f32 -> i64 */
+ printf("......f32 -> i64\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ cgebr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f64 -> i32 */
+ printf("......f64 -> i32\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ cfdbr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f64 -> i64 */
+ printf("......f64 -> i64\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ cgdbr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f128 -> i32 */
+ printf("......f128 -> i32\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ cfxbr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f128 -> i64 */
+ printf("......f128 -> i64\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ cgxbr(values[j], M3_BFP_ROUND_PER_FPC);
+}
+
+#if 0
+static void
+convert_to_logical_fpc_tests(unsigned mode)
+{
+ set_rounding_mode(mode);
+
+ /* f32 -> u32 */
+ printf("......f32 -> u32\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ clfebr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f32 -> u64 */
+ printf("......f32 -> u64\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ clgebr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f64 -> u32 */
+ printf("......f64 -> u32\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ clfdbr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f64 -> u64 */
+ printf("......f64 -> u64\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ clgdbr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f128 -> u32 */
+ printf("......f128 -> u32\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ clfxbr(values[j], M3_BFP_ROUND_PER_FPC);
+
+ /* f128 -> u64 */
+ printf("......f128 -> u64\n");
+ for (int j = 0; j < sizeof values / sizeof values[0]; ++j)
+ clgxbr(values[j], M3_BFP_ROUND_PER_FPC);
+}
+#endif
+
+int
+main(void)
+{
+ assert(sizeof(long double) == 16);
+
+ static const unsigned fpc_rmodes[] = {
+ FPC_BFP_ROUND_NEAREST_EVEN,
+ FPC_BFP_ROUND_ZERO,
+ FPC_BFP_ROUND_POSINF,
+ FPC_BFP_ROUND_NEGINF,
+ FPC_BFP_ROUND_PREPARE_SHORT
+ };
+
+ //----------------------------------------------------------
+ // Convert to int
+ //----------------------------------------------------------
+ printf("============ Convert to int =============\n");
+ printf("Rounding as 'per FPC'\n");
+ for (int i = 0; i < sizeof fpc_rmodes / sizeof fpc_rmodes[0]; ++i) {
+ printf("...setting FPC rounding mode to %s\n", fpc_rtext(fpc_rmodes[i]));
+ convert_to_int_fpc_tests(fpc_rmodes[i]);
+ }
+
+ 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 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");
+ for (int i = 0; i < sizeof fpc_rmodes / sizeof fpc_rmodes[0]; ++i) {
+ printf("...setting FPC rounding mode to %s\n", fpc_rtext(fpc_rmodes[i]));
+ convert_to_logical_fpc_tests(fpc_rmodes[i]);
+ }
+
+ 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
+ return 0;
+}
--- /dev/null
+============ Convert to int =============
+Rounding as 'per FPC'
+...setting FPC rounding mode to [-> near]
+......f32 -> i32
+cfebr 0.000000 cc = 0
+cfebra 0.000000 cc = 0
+cfebr -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 [-> near away]
+......f32 -> i32
+cfebr 0.000000 cc = 0
+cfebra 0.000000 cc = 0
+cfebr -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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]
+......f32 -> i32
+cfebr 0.000000 cc = 0
+cfebra 0.000000 cc = 0
+cfebr -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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 -1.000000 cc = 1
+cfebra -1.000000 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 -1.000000 cc = 1
+cgebra -1.000000 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 -1.000000 cc = 1
+cfdbra -1.000000 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 -1.000000 cc = 1
+cgdbra -1.000000 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 -1.000000 cc = 1
+cfxbra -1.000000 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 -1.000000 cc = 1
+cgxbra -1.000000 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
--- /dev/null
+prog: bfp-convert
+prereq: ../../../tests/s390x_features s390x-fpext
+++ /dev/null
-#include <float.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <limits.h>
-
-/* The following opcodes are tested:
-
- Convert to fixed: cfebr, cgebr, cfdbr, cgdbr
- Convert from fixed: cefbr, cdfbr, cegbr, cdgbr
-
- We do not test rounding here. Just making sure the insn selector
- picks the correct insn.
-*/
-
-#define I2F(insn, initial, target_type) \
-do { \
- int64_t source = initial; \
- target_type target; \
- asm volatile(insn " %0,%1\n\t" :"=f" (target) :"d"(source)); \
- printf(insn " %"PRId64" -> %f\n", source, target); \
-} while (0)
-
-#define DO_INSN_I32_TO_F(insn, target_type) \
-do { \
- printf("\n----- int32_t -> " #target_type "\n");\
- I2F(insn, 0, target_type); \
- I2F(insn, 1, target_type); \
- I2F(insn, -1, target_type); \
- I2F(insn, 42, target_type); \
- I2F(insn, SHRT_MAX, target_type); \
- I2F(insn, SHRT_MIN, target_type); \
- I2F(insn, INT_MAX, target_type); \
- I2F(insn, INT_MIN, target_type); \
-} while (0)
-
-#define DO_INSN_I64_TO_F(insn, target_type) \
-do { \
- printf("\n----- int64_t -> " #target_type "\n");\
- I2F(insn, 0, target_type); \
- I2F(insn, 1, target_type); \
- I2F(insn, -1, target_type); \
- I2F(insn, 42, target_type); \
- I2F(insn, SHRT_MAX, target_type); \
- I2F(insn, SHRT_MIN, target_type); \
- I2F(insn, INT_MAX, target_type); \
- I2F(insn, INT_MIN, target_type); \
- I2F(insn, LONG_MAX, target_type); \
- I2F(insn, LONG_MIN, target_type); \
-} while (0)
-
-#define DO_I2F() \
-do { \
- DO_INSN_I32_TO_F("cefbr", float); \
- DO_INSN_I32_TO_F("cdfbr", double); \
- DO_INSN_I64_TO_F("cegbr", float); \
- DO_INSN_I64_TO_F("cdgbr", double); \
-} while (0)
-
-
-#define F2I(insn, initial, source_type, target_type) \
-do { \
- int cc; \
- source_type source = initial; \
- target_type target = 0; \
- asm volatile(insn " %0,0,%2\n\t" \
- "ipm %1\n\t" \
- "srl %1,28\n\t" \
- : "=d" (target), "=d" (cc) : "f"(source) : "cc"); \
- printf(insn " %f -> %ld cc = %d\n", source, (long)target, cc); \
-} while (0)
-
-#define DO_INSN_F32_TO_I(insn, type) \
-do { \
- printf("\n----- float -> " #type "\n"); \
- F2I(insn, -1.0f, float, type); \
- F2I(insn, 0.0f, float, type); \
- F2I(insn, 1.0f, float, type); \
- F2I(insn, 1.4f, float, type); \
- F2I(insn, 1.5f, float, type); \
- F2I(insn, 1.6f, float, type); \
- F2I(insn, 1.6E+4f, float, type); \
- F2I(insn, 1.6E+8f, float, type); \
- F2I(insn, 1.6E-4f, float, type); \
- F2I(insn, FLT_MAX, float, type); \
-} while (0)
-
-#define DO_INSN_F64_TO_I(insn, type) \
-do { \
- printf("\n----- double -> " #type "\n"); \
- F2I(insn, -1.0, double, type); \
- F2I(insn, 0.0, double, type); \
- F2I(insn, 1.0, double, type); \
- F2I(insn, 1.4, double, type); \
- F2I(insn, 1.5, double, type); \
- F2I(insn, 1.6, double, type); \
- F2I(insn, 1.6E+4, double, type); \
- F2I(insn, 1.6E+8, double, type); \
- F2I(insn, 1.6E-4, double, type); \
- F2I(insn, FLT_MAX, double, type); \
- F2I(insn, DBL_MAX, double, type); \
-} while (0)
-
-#define DO_F2I() \
-do { \
- DO_INSN_F32_TO_I("cfebr", int32_t); \
- DO_INSN_F32_TO_I("cgebr", int64_t); \
- DO_INSN_F64_TO_I("cfdbr", int32_t); \
- DO_INSN_F64_TO_I("cgdbr", int64_t); \
-} while (0)
-
-
-int main()
-{
- DO_I2F();
- DO_F2I();
-
- return 0;
-}
+++ /dev/null
-
------ int32_t -> float
-cefbr 0 -> 0.000000
-cefbr 1 -> 1.000000
-cefbr -1 -> -1.000000
-cefbr 42 -> 42.000000
-cefbr 32767 -> 32767.000000
-cefbr -32768 -> -32768.000000
-cefbr 2147483647 -> 2147483648.000000
-cefbr -2147483648 -> -2147483648.000000
-
------ int32_t -> double
-cdfbr 0 -> 0.000000
-cdfbr 1 -> 1.000000
-cdfbr -1 -> -1.000000
-cdfbr 42 -> 42.000000
-cdfbr 32767 -> 32767.000000
-cdfbr -32768 -> -32768.000000
-cdfbr 2147483647 -> 2147483647.000000
-cdfbr -2147483648 -> -2147483648.000000
-
------ int64_t -> float
-cegbr 0 -> 0.000000
-cegbr 1 -> 1.000000
-cegbr -1 -> -1.000000
-cegbr 42 -> 42.000000
-cegbr 32767 -> 32767.000000
-cegbr -32768 -> -32768.000000
-cegbr 2147483647 -> 2147483648.000000
-cegbr -2147483648 -> -2147483648.000000
-cegbr 9223372036854775807 -> 9223372036854775808.000000
-cegbr -9223372036854775808 -> -9223372036854775808.000000
-
------ int64_t -> double
-cdgbr 0 -> 0.000000
-cdgbr 1 -> 1.000000
-cdgbr -1 -> -1.000000
-cdgbr 42 -> 42.000000
-cdgbr 32767 -> 32767.000000
-cdgbr -32768 -> -32768.000000
-cdgbr 2147483647 -> 2147483647.000000
-cdgbr -2147483648 -> -2147483648.000000
-cdgbr 9223372036854775807 -> 9223372036854775808.000000
-cdgbr -9223372036854775808 -> -9223372036854775808.000000
-
------ float -> int32_t
-cfebr -1.000000 -> -1 cc = 1
-cfebr 0.000000 -> 0 cc = 0
-cfebr 1.000000 -> 1 cc = 2
-cfebr 1.400000 -> 1 cc = 2
-cfebr 1.500000 -> 2 cc = 2
-cfebr 1.600000 -> 2 cc = 2
-cfebr 16000.000000 -> 16000 cc = 2
-cfebr 160000000.000000 -> 160000000 cc = 2
-cfebr 0.000160 -> 0 cc = 2
-cfebr 340282346638528859811704183484516925440.000000 -> 2147483647 cc = 3
-
------ float -> int64_t
-cgebr -1.000000 -> -1 cc = 1
-cgebr 0.000000 -> 0 cc = 0
-cgebr 1.000000 -> 1 cc = 2
-cgebr 1.400000 -> 1 cc = 2
-cgebr 1.500000 -> 2 cc = 2
-cgebr 1.600000 -> 2 cc = 2
-cgebr 16000.000000 -> 16000 cc = 2
-cgebr 160000000.000000 -> 160000000 cc = 2
-cgebr 0.000160 -> 0 cc = 2
-cgebr 340282346638528859811704183484516925440.000000 -> 9223372036854775807 cc = 3
-
------ double -> int32_t
-cfdbr -1.000000 -> -1 cc = 1
-cfdbr 0.000000 -> 0 cc = 0
-cfdbr 1.000000 -> 1 cc = 2
-cfdbr 1.400000 -> 1 cc = 2
-cfdbr 1.500000 -> 2 cc = 2
-cfdbr 1.600000 -> 2 cc = 2
-cfdbr 16000.000000 -> 16000 cc = 2
-cfdbr 160000000.000000 -> 160000000 cc = 2
-cfdbr 0.000160 -> 0 cc = 2
-cfdbr 340282346638528859811704183484516925440.000000 -> 2147483647 cc = 3
-cfdbr 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 2147483647 cc = 3
-
------ double -> int64_t
-cgdbr -1.000000 -> -1 cc = 1
-cgdbr 0.000000 -> 0 cc = 0
-cgdbr 1.000000 -> 1 cc = 2
-cgdbr 1.400000 -> 1 cc = 2
-cgdbr 1.500000 -> 2 cc = 2
-cgdbr 1.600000 -> 2 cc = 2
-cgdbr 16000.000000 -> 16000 cc = 2
-cgdbr 160000000.000000 -> 160000000 cc = 2
-cgdbr 0.000160 -> 0 cc = 2
-cgdbr 340282346638528859811704183484516925440.000000 -> 9223372036854775807 cc = 3
-cgdbr 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 9223372036854775807 cc = 3
+++ /dev/null
-prog: fpconv
+++ /dev/null
-#include <float.h>
-#include <stdio.h>
-#include <assert.h>
-#include "opcodes.h"
-
-
-#define L2F(insn, initial, target,round) \
-({ \
- register unsigned long source asm("2") = initial; \
- register typeof(target) _t asm("f0"); \
- asm volatile(insn(round,0,0,2) :"=f" (_t):"d"(source)); \
- _t; \
-})
-
-#define F2L(insn, initial, type, round, cc) \
-({ \
- register type source asm("f0") = initial; \
- register unsigned long target asm ("2") = 0; \
- asm volatile(insn(round,0,2,0) \
- "ipm %1\n\t" \
- "srl %1,28\n\t" \
- :"=d" (target), "=d" (cc) :"f"(source):"cc"); \
- target; \
-})
-
-
-#define DO_INSN_L2F32(insn, round) \
-({ \
- float f32; \
- printf(#insn " %f\n", L2F(insn, 0, f32, round)); \
- printf(#insn " %f\n", L2F(insn, 1, f32, round)); \
- printf(#insn " %f\n", L2F(insn, 0xffffffffUL, f32, round)); \
- printf(#insn " %f\n", L2F(insn, 0x80000000UL, f32, round)); \
- printf(#insn " %f\n", L2F(insn, 0x7fffffffUL, f32, round)); \
- printf(#insn " %f\n", L2F(insn, 0x100000000UL, f32, round)); \
- printf(#insn " %f\n", L2F(insn, 0xffffffffffffffffUL, f32, round)); \
- printf(#insn " %f\n", L2F(insn, 0x8000000000000000UL, f32, round)); \
- printf(#insn " %f\n", L2F(insn, 0x7fffffffffffffffUL, f32, round)); \
-})
-
-#define DO_INSN_L2F64(insn, round) \
-({ \
- double f64; \
- printf(#insn " %f\n", L2F(insn, 0, f64, round)); \
- printf(#insn " %f\n", L2F(insn, 1, f64, round)); \
- printf(#insn " %f\n", L2F(insn, 0xffffffffUL, f64, round)); \
- printf(#insn " %f\n", L2F(insn, 0x80000000UL, f64, round)); \
- printf(#insn " %f\n", L2F(insn, 0x7fffffffUL, f64, round)); \
- printf(#insn " %f\n", L2F(insn, 0x100000000UL, f64, round)); \
- printf(#insn " %f\n", L2F(insn, 0xffffffffffffffffUL, f64, round)); \
- printf(#insn " %f\n", L2F(insn, 0x8000000000000000UL, f64, round)); \
- printf(#insn " %f\n", L2F(insn, 0x7fffffffffffffffUL, f64, round)); \
-})
-
-#define DO_INSN_L2F128(insn, round) \
-({ \
- long double f128; \
- printf(#insn " %Lf\n", L2F(insn, 0, f128, round)); \
- printf(#insn " %Lf\n", L2F(insn, 1, f128, round)); \
- printf(#insn " %Lf\n", L2F(insn, 0xffffffffUL, f128, round)); \
- printf(#insn " %Lf\n", L2F(insn, 0x80000000UL, f128, round)); \
- printf(#insn " %Lf\n", L2F(insn, 0x7fffffffUL, f128, round)); \
- printf(#insn " %Lf\n", L2F(insn, 0x100000000UL, f128, round)); \
- printf(#insn " %Lf\n", L2F(insn, 0xffffffffffffffffUL, f128, round)); \
- printf(#insn " %Lf\n", L2F(insn, 0x8000000000000000UL, f128, round)); \
- printf(#insn " %Lf\n", L2F(insn, 0x7fffffffffffffffUL, f128, round)); \
-})
-
-#define DO_INSN_F2L(insn, round, type) \
-({ \
- int cc; \
- printf(#insn " %lu ", F2L(insn, -1.1, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 0, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.4, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.5, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.6, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.6E+4, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.6E+8, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.6E+12, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.6E+20, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.6E+200, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.6E+2000L, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, 1.6E-4, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, FLT_MIN, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, FLT_MAX, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, DBL_MIN, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, DBL_MAX, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, LDBL_MIN, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %lu ", F2L(insn, LDBL_MAX, type, round, cc)); \
- printf("cc=%d\n", cc); \
-})
-
-#define DO_L2F(round) \
-({ \
- DO_INSN_L2F32(CELFBR, round); \
- DO_INSN_L2F32(CELGBR, round); \
- DO_INSN_L2F64(CDLFBR, round); \
- DO_INSN_L2F64(CDLGBR, round); \
- DO_INSN_L2F128(CXLFBR, round); \
- DO_INSN_L2F128(CXLGBR, round); \
-})
-
-#define DO_F2L(round) \
-({ \
- DO_INSN_F2L(CLFEBR, round, float); \
- DO_INSN_F2L(CLGEBR, round, float); \
- DO_INSN_F2L(CLFDBR, round, double); \
- DO_INSN_F2L(CLGDBR, round, double); \
- DO_INSN_F2L(CLFXBR, round, long double); \
- DO_INSN_F2L(CLGXBR, round, long double); \
-})
-
-
-int main()
-{
- assert(sizeof(long double) == 16);
- DO_L2F(4);
- DO_F2L(4);
-
- DO_L2F(5);
- DO_F2L(5);
-
- DO_L2F(6);
- DO_F2L(6);
-
- DO_L2F(7);
- DO_F2L(7);
-
- return 0;
-}
+++ /dev/null
-CELFBR 0.000000
-CELFBR 1.000000
-CELFBR 4294967296.000000
-CELFBR 2147483648.000000
-CELFBR 2147483648.000000
-CELFBR 0.000000
-CELFBR 4294967296.000000
-CELFBR 0.000000
-CELFBR 4294967296.000000
-CELGBR 0.000000
-CELGBR 1.000000
-CELGBR 4294967296.000000
-CELGBR 2147483648.000000
-CELGBR 2147483648.000000
-CELGBR 4294967296.000000
-CELGBR 18446744073709551616.000000
-CELGBR 9223372036854775808.000000
-CELGBR 9223372036854775808.000000
-CDLFBR 0.000000
-CDLFBR 1.000000
-CDLFBR 4294967295.000000
-CDLFBR 2147483648.000000
-CDLFBR 2147483647.000000
-CDLFBR 0.000000
-CDLFBR 4294967295.000000
-CDLFBR 0.000000
-CDLFBR 4294967295.000000
-CDLGBR 0.000000
-CDLGBR 1.000000
-CDLGBR 4294967295.000000
-CDLGBR 2147483648.000000
-CDLGBR 2147483647.000000
-CDLGBR 4294967296.000000
-CDLGBR 18446744073709551616.000000
-CDLGBR 9223372036854775808.000000
-CDLGBR 9223372036854775808.000000
-CXLFBR 0.000000
-CXLFBR 1.000000
-CXLFBR 4294967295.000000
-CXLFBR 2147483648.000000
-CXLFBR 2147483647.000000
-CXLFBR 0.000000
-CXLFBR 4294967295.000000
-CXLFBR 0.000000
-CXLFBR 4294967295.000000
-CXLGBR 0.000000
-CXLGBR 1.000000
-CXLGBR 4294967295.000000
-CXLGBR 2147483648.000000
-CXLGBR 2147483647.000000
-CXLGBR 4294967296.000000
-CXLGBR 18446744073709551615.000000
-CXLGBR 9223372036854775808.000000
-CXLGBR 9223372036854775807.000000
-CLFEBR 0 cc=3
-CLFEBR 0 cc=0
-CLFEBR 1 cc=2
-CLFEBR 1 cc=2
-CLFEBR 2 cc=2
-CLFEBR 2 cc=2
-CLFEBR 16000 cc=2
-CLFEBR 160000000 cc=2
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=2
-CLFEBR 0 cc=2
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=0
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=0
-CLFEBR 4294967295 cc=3
-CLGEBR 0 cc=3
-CLGEBR 0 cc=0
-CLGEBR 1 cc=2
-CLGEBR 1 cc=2
-CLGEBR 2 cc=2
-CLGEBR 2 cc=2
-CLGEBR 16000 cc=2
-CLGEBR 160000000 cc=2
-CLGEBR 1599999967232 cc=2
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=2
-CLGEBR 0 cc=2
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=0
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=0
-CLGEBR 18446744073709551615 cc=3
-CLFDBR 0 cc=3
-CLFDBR 0 cc=0
-CLFDBR 1 cc=2
-CLFDBR 1 cc=2
-CLFDBR 2 cc=2
-CLFDBR 2 cc=2
-CLFDBR 16000 cc=2
-CLFDBR 160000000 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=2
-CLFDBR 0 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=0
-CLFDBR 4294967295 cc=3
-CLGDBR 0 cc=3
-CLGDBR 0 cc=0
-CLGDBR 1 cc=2
-CLGDBR 1 cc=2
-CLGDBR 2 cc=2
-CLGDBR 2 cc=2
-CLGDBR 16000 cc=2
-CLGDBR 160000000 cc=2
-CLGDBR 1600000000000 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=2
-CLGDBR 0 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=0
-CLGDBR 18446744073709551615 cc=3
-CLFXBR 0 cc=3
-CLFXBR 0 cc=0
-CLFXBR 1 cc=2
-CLFXBR 1 cc=2
-CLFXBR 2 cc=2
-CLFXBR 2 cc=2
-CLFXBR 16000 cc=2
-CLFXBR 160000000 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLGXBR 0 cc=3
-CLGXBR 0 cc=0
-CLGXBR 1 cc=2
-CLGXBR 1 cc=2
-CLGXBR 2 cc=2
-CLGXBR 2 cc=2
-CLGXBR 16000 cc=2
-CLGXBR 160000000 cc=2
-CLGXBR 1600000000000 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
-CELFBR 0.000000
-CELFBR 1.000000
-CELFBR 4294967040.000000
-CELFBR 2147483648.000000
-CELFBR 2147483520.000000
-CELFBR 0.000000
-CELFBR 4294967040.000000
-CELFBR 0.000000
-CELFBR 4294967040.000000
-CELGBR 0.000000
-CELGBR 1.000000
-CELGBR 4294967040.000000
-CELGBR 2147483648.000000
-CELGBR 2147483520.000000
-CELGBR 4294967296.000000
-CELGBR 18446742974197923840.000000
-CELGBR 9223372036854775808.000000
-CELGBR 9223371487098961920.000000
-CDLFBR 0.000000
-CDLFBR 1.000000
-CDLFBR 4294967295.000000
-CDLFBR 2147483648.000000
-CDLFBR 2147483647.000000
-CDLFBR 0.000000
-CDLFBR 4294967295.000000
-CDLFBR 0.000000
-CDLFBR 4294967295.000000
-CDLGBR 0.000000
-CDLGBR 1.000000
-CDLGBR 4294967295.000000
-CDLGBR 2147483648.000000
-CDLGBR 2147483647.000000
-CDLGBR 4294967296.000000
-CDLGBR 18446744073709549568.000000
-CDLGBR 9223372036854775808.000000
-CDLGBR 9223372036854774784.000000
-CXLFBR 0.000000
-CXLFBR 1.000000
-CXLFBR 4294967295.000000
-CXLFBR 2147483648.000000
-CXLFBR 2147483647.000000
-CXLFBR 0.000000
-CXLFBR 4294967295.000000
-CXLFBR 0.000000
-CXLFBR 4294967295.000000
-CXLGBR 0.000000
-CXLGBR 1.000000
-CXLGBR 4294967295.000000
-CXLGBR 2147483648.000000
-CXLGBR 2147483647.000000
-CXLGBR 4294967296.000000
-CXLGBR 18446744073709551615.000000
-CXLGBR 9223372036854775808.000000
-CXLGBR 9223372036854775807.000000
-CLFEBR 0 cc=3
-CLFEBR 0 cc=0
-CLFEBR 1 cc=2
-CLFEBR 1 cc=2
-CLFEBR 1 cc=2
-CLFEBR 1 cc=2
-CLFEBR 16000 cc=2
-CLFEBR 160000000 cc=2
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=2
-CLFEBR 0 cc=2
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=0
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=0
-CLFEBR 4294967295 cc=3
-CLGEBR 0 cc=3
-CLGEBR 0 cc=0
-CLGEBR 1 cc=2
-CLGEBR 1 cc=2
-CLGEBR 1 cc=2
-CLGEBR 1 cc=2
-CLGEBR 16000 cc=2
-CLGEBR 160000000 cc=2
-CLGEBR 1599999967232 cc=2
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=2
-CLGEBR 0 cc=2
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=0
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=0
-CLGEBR 18446744073709551615 cc=3
-CLFDBR 0 cc=3
-CLFDBR 0 cc=0
-CLFDBR 1 cc=2
-CLFDBR 1 cc=2
-CLFDBR 1 cc=2
-CLFDBR 1 cc=2
-CLFDBR 16000 cc=2
-CLFDBR 160000000 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=2
-CLFDBR 0 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=0
-CLFDBR 4294967295 cc=3
-CLGDBR 0 cc=3
-CLGDBR 0 cc=0
-CLGDBR 1 cc=2
-CLGDBR 1 cc=2
-CLGDBR 1 cc=2
-CLGDBR 1 cc=2
-CLGDBR 16000 cc=2
-CLGDBR 160000000 cc=2
-CLGDBR 1600000000000 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=2
-CLGDBR 0 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=0
-CLGDBR 18446744073709551615 cc=3
-CLFXBR 0 cc=3
-CLFXBR 0 cc=0
-CLFXBR 1 cc=2
-CLFXBR 1 cc=2
-CLFXBR 1 cc=2
-CLFXBR 1 cc=2
-CLFXBR 16000 cc=2
-CLFXBR 160000000 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLGXBR 0 cc=3
-CLGXBR 0 cc=0
-CLGXBR 1 cc=2
-CLGXBR 1 cc=2
-CLGXBR 1 cc=2
-CLGXBR 1 cc=2
-CLGXBR 16000 cc=2
-CLGXBR 160000000 cc=2
-CLGXBR 1600000000000 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
-CELFBR 0.000000
-CELFBR 1.000000
-CELFBR 4294967296.000000
-CELFBR 2147483648.000000
-CELFBR 2147483648.000000
-CELFBR 0.000000
-CELFBR 4294967296.000000
-CELFBR 0.000000
-CELFBR 4294967296.000000
-CELGBR 0.000000
-CELGBR 1.000000
-CELGBR 4294967296.000000
-CELGBR 2147483648.000000
-CELGBR 2147483648.000000
-CELGBR 4294967296.000000
-CELGBR 18446744073709551616.000000
-CELGBR 9223372036854775808.000000
-CELGBR 9223372036854775808.000000
-CDLFBR 0.000000
-CDLFBR 1.000000
-CDLFBR 4294967295.000000
-CDLFBR 2147483648.000000
-CDLFBR 2147483647.000000
-CDLFBR 0.000000
-CDLFBR 4294967295.000000
-CDLFBR 0.000000
-CDLFBR 4294967295.000000
-CDLGBR 0.000000
-CDLGBR 1.000000
-CDLGBR 4294967295.000000
-CDLGBR 2147483648.000000
-CDLGBR 2147483647.000000
-CDLGBR 4294967296.000000
-CDLGBR 18446744073709551616.000000
-CDLGBR 9223372036854775808.000000
-CDLGBR 9223372036854775808.000000
-CXLFBR 0.000000
-CXLFBR 1.000000
-CXLFBR 4294967295.000000
-CXLFBR 2147483648.000000
-CXLFBR 2147483647.000000
-CXLFBR 0.000000
-CXLFBR 4294967295.000000
-CXLFBR 0.000000
-CXLFBR 4294967295.000000
-CXLGBR 0.000000
-CXLGBR 1.000000
-CXLGBR 4294967295.000000
-CXLGBR 2147483648.000000
-CXLGBR 2147483647.000000
-CXLGBR 4294967296.000000
-CXLGBR 18446744073709551615.000000
-CXLGBR 9223372036854775808.000000
-CXLGBR 9223372036854775807.000000
-CLFEBR 0 cc=3
-CLFEBR 0 cc=0
-CLFEBR 1 cc=2
-CLFEBR 2 cc=2
-CLFEBR 2 cc=2
-CLFEBR 2 cc=2
-CLFEBR 16000 cc=2
-CLFEBR 160000000 cc=2
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 1 cc=2
-CLFEBR 1 cc=2
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=0
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=0
-CLFEBR 4294967295 cc=3
-CLGEBR 0 cc=3
-CLGEBR 0 cc=0
-CLGEBR 1 cc=2
-CLGEBR 2 cc=2
-CLGEBR 2 cc=2
-CLGEBR 2 cc=2
-CLGEBR 16000 cc=2
-CLGEBR 160000000 cc=2
-CLGEBR 1599999967232 cc=2
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 1 cc=2
-CLGEBR 1 cc=2
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=0
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=0
-CLGEBR 18446744073709551615 cc=3
-CLFDBR 0 cc=3
-CLFDBR 0 cc=0
-CLFDBR 1 cc=2
-CLFDBR 2 cc=2
-CLFDBR 2 cc=2
-CLFDBR 2 cc=2
-CLFDBR 16000 cc=2
-CLFDBR 160000000 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 1 cc=2
-CLFDBR 1 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 1 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=0
-CLFDBR 4294967295 cc=3
-CLGDBR 0 cc=3
-CLGDBR 0 cc=0
-CLGDBR 1 cc=2
-CLGDBR 2 cc=2
-CLGDBR 2 cc=2
-CLGDBR 2 cc=2
-CLGDBR 16000 cc=2
-CLGDBR 160000000 cc=2
-CLGDBR 1600000000000 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 1 cc=2
-CLGDBR 1 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 1 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=0
-CLGDBR 18446744073709551615 cc=3
-CLFXBR 0 cc=3
-CLFXBR 0 cc=0
-CLFXBR 1 cc=2
-CLFXBR 2 cc=2
-CLFXBR 2 cc=2
-CLFXBR 2 cc=2
-CLFXBR 16000 cc=2
-CLFXBR 160000000 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 1 cc=2
-CLFXBR 1 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 1 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 1 cc=2
-CLFXBR 4294967295 cc=3
-CLGXBR 0 cc=3
-CLGXBR 0 cc=0
-CLGXBR 1 cc=2
-CLGXBR 2 cc=2
-CLGXBR 2 cc=2
-CLGXBR 2 cc=2
-CLGXBR 16000 cc=2
-CLGXBR 160000000 cc=2
-CLGXBR 1600000000000 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 1 cc=2
-CLGXBR 1 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 1 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 1 cc=2
-CLGXBR 18446744073709551615 cc=3
-CELFBR 0.000000
-CELFBR 1.000000
-CELFBR 4294967040.000000
-CELFBR 2147483648.000000
-CELFBR 2147483520.000000
-CELFBR 0.000000
-CELFBR 4294967040.000000
-CELFBR 0.000000
-CELFBR 4294967040.000000
-CELGBR 0.000000
-CELGBR 1.000000
-CELGBR 4294967040.000000
-CELGBR 2147483648.000000
-CELGBR 2147483520.000000
-CELGBR 4294967296.000000
-CELGBR 18446742974197923840.000000
-CELGBR 9223372036854775808.000000
-CELGBR 9223371487098961920.000000
-CDLFBR 0.000000
-CDLFBR 1.000000
-CDLFBR 4294967295.000000
-CDLFBR 2147483648.000000
-CDLFBR 2147483647.000000
-CDLFBR 0.000000
-CDLFBR 4294967295.000000
-CDLFBR 0.000000
-CDLFBR 4294967295.000000
-CDLGBR 0.000000
-CDLGBR 1.000000
-CDLGBR 4294967295.000000
-CDLGBR 2147483648.000000
-CDLGBR 2147483647.000000
-CDLGBR 4294967296.000000
-CDLGBR 18446744073709549568.000000
-CDLGBR 9223372036854775808.000000
-CDLGBR 9223372036854774784.000000
-CXLFBR 0.000000
-CXLFBR 1.000000
-CXLFBR 4294967295.000000
-CXLFBR 2147483648.000000
-CXLFBR 2147483647.000000
-CXLFBR 0.000000
-CXLFBR 4294967295.000000
-CXLFBR 0.000000
-CXLFBR 4294967295.000000
-CXLGBR 0.000000
-CXLGBR 1.000000
-CXLGBR 4294967295.000000
-CXLGBR 2147483648.000000
-CXLGBR 2147483647.000000
-CXLGBR 4294967296.000000
-CXLGBR 18446744073709551615.000000
-CXLGBR 9223372036854775808.000000
-CXLGBR 9223372036854775807.000000
-CLFEBR 0 cc=3
-CLFEBR 0 cc=0
-CLFEBR 1 cc=2
-CLFEBR 1 cc=2
-CLFEBR 1 cc=2
-CLFEBR 1 cc=2
-CLFEBR 16000 cc=2
-CLFEBR 160000000 cc=2
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=2
-CLFEBR 0 cc=2
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=0
-CLFEBR 4294967295 cc=3
-CLFEBR 0 cc=0
-CLFEBR 4294967295 cc=3
-CLGEBR 0 cc=3
-CLGEBR 0 cc=0
-CLGEBR 1 cc=2
-CLGEBR 1 cc=2
-CLGEBR 1 cc=2
-CLGEBR 1 cc=2
-CLGEBR 16000 cc=2
-CLGEBR 160000000 cc=2
-CLGEBR 1599999967232 cc=2
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=2
-CLGEBR 0 cc=2
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=0
-CLGEBR 18446744073709551615 cc=3
-CLGEBR 0 cc=0
-CLGEBR 18446744073709551615 cc=3
-CLFDBR 0 cc=3
-CLFDBR 0 cc=0
-CLFDBR 1 cc=2
-CLFDBR 1 cc=2
-CLFDBR 1 cc=2
-CLFDBR 1 cc=2
-CLFDBR 16000 cc=2
-CLFDBR 160000000 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=2
-CLFDBR 0 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=2
-CLFDBR 4294967295 cc=3
-CLFDBR 0 cc=0
-CLFDBR 4294967295 cc=3
-CLGDBR 0 cc=3
-CLGDBR 0 cc=0
-CLGDBR 1 cc=2
-CLGDBR 1 cc=2
-CLGDBR 1 cc=2
-CLGDBR 1 cc=2
-CLGDBR 16000 cc=2
-CLGDBR 160000000 cc=2
-CLGDBR 1600000000000 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=2
-CLGDBR 0 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=2
-CLGDBR 18446744073709551615 cc=3
-CLGDBR 0 cc=0
-CLGDBR 18446744073709551615 cc=3
-CLFXBR 0 cc=3
-CLFXBR 0 cc=0
-CLFXBR 1 cc=2
-CLFXBR 1 cc=2
-CLFXBR 1 cc=2
-CLFXBR 1 cc=2
-CLFXBR 16000 cc=2
-CLFXBR 160000000 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLFXBR 0 cc=2
-CLFXBR 4294967295 cc=3
-CLGXBR 0 cc=3
-CLGXBR 0 cc=0
-CLGXBR 1 cc=2
-CLGXBR 1 cc=2
-CLGXBR 1 cc=2
-CLGXBR 1 cc=2
-CLGXBR 16000 cc=2
-CLGXBR 160000000 cc=2
-CLGXBR 1600000000000 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
-CLGXBR 0 cc=2
-CLGXBR 18446744073709551615 cc=3
+++ /dev/null
-prog: fpext
-prereq: test -e fpext && ../../../tests/s390x_features s390x-fpext
--- /dev/null
+int main(void)
+{
+ float val = 0.0f;
+ __asm__ volatile ("celfbr 1,5,%[f0],0" : : [f0]"f"(val) : "cc", "r1");
+ return 0;
+}
-prog: fpext
-prereq: test -e fpext && ../../../tests/s390x_features '!s390x-fpext'
+prog: fpext_fail
+prereq: test -e fpext_fail && ../../../tests/s390x_features '!s390x-fpext'
+++ /dev/null
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include "opcodes.h"
-
-/* Test "convert to fixed" with "per fpc" rounding.
- Covers all generally available rounding modes.
-*/
-
-void
-set_rounding_mode(unsigned mode)
-{
- register unsigned r asm("1") = mode;
- __asm__ volatile ( SFPC(1) : : "d"(r) );
-}
-
-unsigned
-get_rounding_mode(void)
-{
- unsigned fpc;
-
- __asm__ volatile ("stfpc %0" : "=Q"(fpc));
-
- return fpc & 0x7;
-}
-
-
-const char *
-rtext(unsigned fpc_round)
-{
- switch (fpc_round) {
- case 0: return "[-> near]";
- case 1: return "[-> zero]";
- case 2: return "[-> +inf]";
- case 3: return "[-> -inf]";
- }
- assert(0);
-}
-
-#define convert_to_int(opcode,src_type,dst_type,dst_fmt,round,value) \
-do { \
- src_type src = value; \
- dst_type dst; \
- unsigned cc; \
- \
- __asm__ volatile (opcode " %[dst]," #round ",%[src]\n\t" \
- "ipm %[cc]\n\t" \
- "srl %[cc],28\n\t" \
- : [dst] "=d"(dst), [cc] "=d"(cc) \
- : [src] "f"(src) \
- : "cc"); \
- \
- printf("%s %f\t-> %"dst_fmt"\tcc = %u\n", \
- opcode, src, dst, cc); \
-} while (0)
-
-
-#define cfebr(value) \
- convert_to_int("cfebr",float,int32_t,PRId32,0,value)
-#define cfdbr(value) \
- convert_to_int("cfdbr",double,int32_t,PRId32,0,value)
-#define cgebr(value) \
- convert_to_int("cgebr",float,int64_t,PRId64,0,value)
-#define cgdbr(value) \
- convert_to_int("cgdbr",double,int64_t,PRId64,0,value)
-
-int main(void)
-{
- int i, j;
- static const unsigned rmodes[] = { 0, 1, 2, 3 };
- static const float fval[] = {
- 1.25f, 1.5f, 2.5f, 1.75f, -1.25f, -1.5f, -2.5f, -1.75f, 0.0f,
- };
- static const double dval[] = {
- 1.25, 1.5, 2.5, 1.75, -1.25, -1.5, -2.5, -1.75, 0.0,
- };
-
-
- for (i = 0; i < sizeof rmodes / sizeof rmodes[0]; ++i) {
- printf("setting rounding mode to %s\n", rtext(rmodes[i]));
- set_rounding_mode(rmodes[i]);
- assert(get_rounding_mode() == rmodes[i]);
-
- /* f32 -> i32 */
- for (j = 0; j < sizeof fval / sizeof fval[0]; ++j) {
- cfebr(fval[j]);
- assert(get_rounding_mode() == rmodes[i]);
- }
-
- /* f32 -> i64 */
- for (j = 0; j < sizeof fval / sizeof fval[0]; ++j) {
- cgebr(fval[j]);
- assert(get_rounding_mode() == rmodes[i]);
- }
-
- /* f64 -> i32 */
- for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
- cfdbr(dval[j]);
- assert(get_rounding_mode() == rmodes[i]);
- }
-
- /* f64 -> i64 */
- for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
- cgdbr(dval[j]);
- assert(get_rounding_mode() == rmodes[i]);
- }
-
- }
-
- return 0;
-}
+++ /dev/null
-setting rounding mode to [-> near]
-cfebr 1.250000 -> 1 cc = 2
-cfebr 1.500000 -> 2 cc = 2
-cfebr 2.500000 -> 2 cc = 2
-cfebr 1.750000 -> 2 cc = 2
-cfebr -1.250000 -> -1 cc = 1
-cfebr -1.500000 -> -2 cc = 1
-cfebr -2.500000 -> -2 cc = 1
-cfebr -1.750000 -> -2 cc = 1
-cfebr 0.000000 -> 0 cc = 0
-cgebr 1.250000 -> 1 cc = 2
-cgebr 1.500000 -> 2 cc = 2
-cgebr 2.500000 -> 2 cc = 2
-cgebr 1.750000 -> 2 cc = 2
-cgebr -1.250000 -> -1 cc = 1
-cgebr -1.500000 -> -2 cc = 1
-cgebr -2.500000 -> -2 cc = 1
-cgebr -1.750000 -> -2 cc = 1
-cgebr 0.000000 -> 0 cc = 0
-cfdbr 1.250000 -> 1 cc = 2
-cfdbr 1.500000 -> 2 cc = 2
-cfdbr 2.500000 -> 2 cc = 2
-cfdbr 1.750000 -> 2 cc = 2
-cfdbr -1.250000 -> -1 cc = 1
-cfdbr -1.500000 -> -2 cc = 1
-cfdbr -2.500000 -> -2 cc = 1
-cfdbr -1.750000 -> -2 cc = 1
-cfdbr 0.000000 -> 0 cc = 0
-cgdbr 1.250000 -> 1 cc = 2
-cgdbr 1.500000 -> 2 cc = 2
-cgdbr 2.500000 -> 2 cc = 2
-cgdbr 1.750000 -> 2 cc = 2
-cgdbr -1.250000 -> -1 cc = 1
-cgdbr -1.500000 -> -2 cc = 1
-cgdbr -2.500000 -> -2 cc = 1
-cgdbr -1.750000 -> -2 cc = 1
-cgdbr 0.000000 -> 0 cc = 0
-setting rounding mode to [-> zero]
-cfebr 1.250000 -> 1 cc = 2
-cfebr 1.500000 -> 1 cc = 2
-cfebr 2.500000 -> 2 cc = 2
-cfebr 1.750000 -> 1 cc = 2
-cfebr -1.250000 -> -1 cc = 1
-cfebr -1.500000 -> -1 cc = 1
-cfebr -2.500000 -> -2 cc = 1
-cfebr -1.750000 -> -1 cc = 1
-cfebr 0.000000 -> 0 cc = 0
-cgebr 1.250000 -> 1 cc = 2
-cgebr 1.500000 -> 1 cc = 2
-cgebr 2.500000 -> 2 cc = 2
-cgebr 1.750000 -> 1 cc = 2
-cgebr -1.250000 -> -1 cc = 1
-cgebr -1.500000 -> -1 cc = 1
-cgebr -2.500000 -> -2 cc = 1
-cgebr -1.750000 -> -1 cc = 1
-cgebr 0.000000 -> 0 cc = 0
-cfdbr 1.250000 -> 1 cc = 2
-cfdbr 1.500000 -> 1 cc = 2
-cfdbr 2.500000 -> 2 cc = 2
-cfdbr 1.750000 -> 1 cc = 2
-cfdbr -1.250000 -> -1 cc = 1
-cfdbr -1.500000 -> -1 cc = 1
-cfdbr -2.500000 -> -2 cc = 1
-cfdbr -1.750000 -> -1 cc = 1
-cfdbr 0.000000 -> 0 cc = 0
-cgdbr 1.250000 -> 1 cc = 2
-cgdbr 1.500000 -> 1 cc = 2
-cgdbr 2.500000 -> 2 cc = 2
-cgdbr 1.750000 -> 1 cc = 2
-cgdbr -1.250000 -> -1 cc = 1
-cgdbr -1.500000 -> -1 cc = 1
-cgdbr -2.500000 -> -2 cc = 1
-cgdbr -1.750000 -> -1 cc = 1
-cgdbr 0.000000 -> 0 cc = 0
-setting rounding mode to [-> +inf]
-cfebr 1.250000 -> 2 cc = 2
-cfebr 1.500000 -> 2 cc = 2
-cfebr 2.500000 -> 3 cc = 2
-cfebr 1.750000 -> 2 cc = 2
-cfebr -1.250000 -> -1 cc = 1
-cfebr -1.500000 -> -1 cc = 1
-cfebr -2.500000 -> -2 cc = 1
-cfebr -1.750000 -> -1 cc = 1
-cfebr 0.000000 -> 0 cc = 0
-cgebr 1.250000 -> 2 cc = 2
-cgebr 1.500000 -> 2 cc = 2
-cgebr 2.500000 -> 3 cc = 2
-cgebr 1.750000 -> 2 cc = 2
-cgebr -1.250000 -> -1 cc = 1
-cgebr -1.500000 -> -1 cc = 1
-cgebr -2.500000 -> -2 cc = 1
-cgebr -1.750000 -> -1 cc = 1
-cgebr 0.000000 -> 0 cc = 0
-cfdbr 1.250000 -> 2 cc = 2
-cfdbr 1.500000 -> 2 cc = 2
-cfdbr 2.500000 -> 3 cc = 2
-cfdbr 1.750000 -> 2 cc = 2
-cfdbr -1.250000 -> -1 cc = 1
-cfdbr -1.500000 -> -1 cc = 1
-cfdbr -2.500000 -> -2 cc = 1
-cfdbr -1.750000 -> -1 cc = 1
-cfdbr 0.000000 -> 0 cc = 0
-cgdbr 1.250000 -> 2 cc = 2
-cgdbr 1.500000 -> 2 cc = 2
-cgdbr 2.500000 -> 3 cc = 2
-cgdbr 1.750000 -> 2 cc = 2
-cgdbr -1.250000 -> -1 cc = 1
-cgdbr -1.500000 -> -1 cc = 1
-cgdbr -2.500000 -> -2 cc = 1
-cgdbr -1.750000 -> -1 cc = 1
-cgdbr 0.000000 -> 0 cc = 0
-setting rounding mode to [-> -inf]
-cfebr 1.250000 -> 1 cc = 2
-cfebr 1.500000 -> 1 cc = 2
-cfebr 2.500000 -> 2 cc = 2
-cfebr 1.750000 -> 1 cc = 2
-cfebr -1.250000 -> -2 cc = 1
-cfebr -1.500000 -> -2 cc = 1
-cfebr -2.500000 -> -3 cc = 1
-cfebr -1.750000 -> -2 cc = 1
-cfebr 0.000000 -> 0 cc = 0
-cgebr 1.250000 -> 1 cc = 2
-cgebr 1.500000 -> 1 cc = 2
-cgebr 2.500000 -> 2 cc = 2
-cgebr 1.750000 -> 1 cc = 2
-cgebr -1.250000 -> -2 cc = 1
-cgebr -1.500000 -> -2 cc = 1
-cgebr -2.500000 -> -3 cc = 1
-cgebr -1.750000 -> -2 cc = 1
-cgebr 0.000000 -> 0 cc = 0
-cfdbr 1.250000 -> 1 cc = 2
-cfdbr 1.500000 -> 1 cc = 2
-cfdbr 2.500000 -> 2 cc = 2
-cfdbr 1.750000 -> 1 cc = 2
-cfdbr -1.250000 -> -2 cc = 1
-cfdbr -1.500000 -> -2 cc = 1
-cfdbr -2.500000 -> -3 cc = 1
-cfdbr -1.750000 -> -2 cc = 1
-cfdbr 0.000000 -> 0 cc = 0
-cgdbr 1.250000 -> 1 cc = 2
-cgdbr 1.500000 -> 1 cc = 2
-cgdbr 2.500000 -> 2 cc = 2
-cgdbr 1.750000 -> 1 cc = 2
-cgdbr -1.250000 -> -2 cc = 1
-cgdbr -1.500000 -> -2 cc = 1
-cgdbr -2.500000 -> -3 cc = 1
-cgdbr -1.750000 -> -2 cc = 1
-cgdbr 0.000000 -> 0 cc = 0
+++ /dev/null
-prog: rounding-3