|
From: <sv...@va...> - 2012-10-27 14:25:41
|
florian 2012-10-27 15:25:28 +0100 (Sat, 27 Oct 2012)
New Revision: 13085
Log:
Fix fpconv.c to unbreak the build on z10ec.
Add rounding-6.c to test rounding modes for convert-to-fixed per m3
field. (The previous fpconv gave the impression of testing this but
in fact did not).
Add rounding.h to establish symbolic names for the various rounding
modes.
Added files:
trunk/none/tests/s390x/rounding-6.c
trunk/none/tests/s390x/rounding-6.stderr.exp
trunk/none/tests/s390x/rounding-6.stdout.exp
trunk/none/tests/s390x/rounding-6.vgtest
trunk/none/tests/s390x/rounding.h
Modified directories:
trunk/none/tests/s390x/
Modified files:
trunk/none/tests/s390x/Makefile.am
trunk/none/tests/s390x/fpconv.c
trunk/none/tests/s390x/fpconv.stdout.exp
trunk/none/tests/s390x/rounding-3.c
Modified: trunk/none/tests/s390x/
Added: trunk/none/tests/s390x/rounding-6.vgtest (+1 -0)
===================================================================
--- trunk/none/tests/s390x/rounding-6.vgtest 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/rounding-6.vgtest 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -0,0 +1 @@
+prog: rounding-6
Added: trunk/none/tests/s390x/rounding-6.stdout.exp (+144 -0)
===================================================================
--- trunk/none/tests/s390x/rounding-6.stdout.exp 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/rounding-6.stdout.exp 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -0,0 +1,144 @@
+cfebr 1.400000 -> 1 cc = 2 [-> nearest even]
+cfebr 1.400000 -> 1 cc = 2 [-> 0]
+cfebr 1.400000 -> 2 cc = 2 [-> +inf]
+cfebr 1.400000 -> 1 cc = 2 [-> -inf]
+cfebr 1.500000 -> 2 cc = 2 [-> nearest even]
+cfebr 1.500000 -> 1 cc = 2 [-> 0]
+cfebr 1.500000 -> 2 cc = 2 [-> +inf]
+cfebr 1.500000 -> 1 cc = 2 [-> -inf]
+cfebr 2.500000 -> 2 cc = 2 [-> nearest even]
+cfebr 2.500000 -> 2 cc = 2 [-> 0]
+cfebr 2.500000 -> 3 cc = 2 [-> +inf]
+cfebr 2.500000 -> 2 cc = 2 [-> -inf]
+cfebr 1.600000 -> 2 cc = 2 [-> nearest even]
+cfebr 1.600000 -> 1 cc = 2 [-> 0]
+cfebr 1.600000 -> 2 cc = 2 [-> +inf]
+cfebr 1.600000 -> 1 cc = 2 [-> -inf]
+cfebr -1.400000 -> -1 cc = 1 [-> nearest even]
+cfebr -1.400000 -> -1 cc = 1 [-> 0]
+cfebr -1.400000 -> -1 cc = 1 [-> +inf]
+cfebr -1.400000 -> -2 cc = 1 [-> -inf]
+cfebr -1.500000 -> -2 cc = 1 [-> nearest even]
+cfebr -1.500000 -> -1 cc = 1 [-> 0]
+cfebr -1.500000 -> -1 cc = 1 [-> +inf]
+cfebr -1.500000 -> -2 cc = 1 [-> -inf]
+cfebr -2.500000 -> -2 cc = 1 [-> nearest even]
+cfebr -2.500000 -> -2 cc = 1 [-> 0]
+cfebr -2.500000 -> -2 cc = 1 [-> +inf]
+cfebr -2.500000 -> -3 cc = 1 [-> -inf]
+cfebr -1.600000 -> -2 cc = 1 [-> nearest even]
+cfebr -1.600000 -> -1 cc = 1 [-> 0]
+cfebr -1.600000 -> -1 cc = 1 [-> +inf]
+cfebr -1.600000 -> -2 cc = 1 [-> -inf]
+cfebr 0.000000 -> 0 cc = 0 [-> nearest even]
+cfebr 0.000000 -> 0 cc = 0 [-> 0]
+cfebr 0.000000 -> 0 cc = 0 [-> +inf]
+cfebr 0.000000 -> 0 cc = 0 [-> -inf]
+cgebr 1.400000 -> 1 cc = 2 [-> nearest even]
+cgebr 1.400000 -> 1 cc = 2 [-> 0]
+cgebr 1.400000 -> 2 cc = 2 [-> +inf]
+cgebr 1.400000 -> 1 cc = 2 [-> -inf]
+cgebr 1.500000 -> 2 cc = 2 [-> nearest even]
+cgebr 1.500000 -> 1 cc = 2 [-> 0]
+cgebr 1.500000 -> 2 cc = 2 [-> +inf]
+cgebr 1.500000 -> 1 cc = 2 [-> -inf]
+cgebr 2.500000 -> 2 cc = 2 [-> nearest even]
+cgebr 2.500000 -> 2 cc = 2 [-> 0]
+cgebr 2.500000 -> 3 cc = 2 [-> +inf]
+cgebr 2.500000 -> 2 cc = 2 [-> -inf]
+cgebr 1.600000 -> 2 cc = 2 [-> nearest even]
+cgebr 1.600000 -> 1 cc = 2 [-> 0]
+cgebr 1.600000 -> 2 cc = 2 [-> +inf]
+cgebr 1.600000 -> 1 cc = 2 [-> -inf]
+cgebr -1.400000 -> -1 cc = 1 [-> nearest even]
+cgebr -1.400000 -> -1 cc = 1 [-> 0]
+cgebr -1.400000 -> -1 cc = 1 [-> +inf]
+cgebr -1.400000 -> -2 cc = 1 [-> -inf]
+cgebr -1.500000 -> -2 cc = 1 [-> nearest even]
+cgebr -1.500000 -> -1 cc = 1 [-> 0]
+cgebr -1.500000 -> -1 cc = 1 [-> +inf]
+cgebr -1.500000 -> -2 cc = 1 [-> -inf]
+cgebr -2.500000 -> -2 cc = 1 [-> nearest even]
+cgebr -2.500000 -> -2 cc = 1 [-> 0]
+cgebr -2.500000 -> -2 cc = 1 [-> +inf]
+cgebr -2.500000 -> -3 cc = 1 [-> -inf]
+cgebr -1.600000 -> -2 cc = 1 [-> nearest even]
+cgebr -1.600000 -> -1 cc = 1 [-> 0]
+cgebr -1.600000 -> -1 cc = 1 [-> +inf]
+cgebr -1.600000 -> -2 cc = 1 [-> -inf]
+cgebr 0.000000 -> 0 cc = 0 [-> nearest even]
+cgebr 0.000000 -> 0 cc = 0 [-> 0]
+cgebr 0.000000 -> 0 cc = 0 [-> +inf]
+cgebr 0.000000 -> 0 cc = 0 [-> -inf]
+cfdbr 1.400000 -> 1 cc = 2 [-> nearest even]
+cfdbr 1.400000 -> 1 cc = 2 [-> 0]
+cfdbr 1.400000 -> 2 cc = 2 [-> +inf]
+cfdbr 1.400000 -> 1 cc = 2 [-> -inf]
+cfdbr 1.500000 -> 2 cc = 2 [-> nearest even]
+cfdbr 1.500000 -> 1 cc = 2 [-> 0]
+cfdbr 1.500000 -> 2 cc = 2 [-> +inf]
+cfdbr 1.500000 -> 1 cc = 2 [-> -inf]
+cfdbr 2.500000 -> 2 cc = 2 [-> nearest even]
+cfdbr 2.500000 -> 2 cc = 2 [-> 0]
+cfdbr 2.500000 -> 3 cc = 2 [-> +inf]
+cfdbr 2.500000 -> 2 cc = 2 [-> -inf]
+cfdbr 1.600000 -> 2 cc = 2 [-> nearest even]
+cfdbr 1.600000 -> 1 cc = 2 [-> 0]
+cfdbr 1.600000 -> 2 cc = 2 [-> +inf]
+cfdbr 1.600000 -> 1 cc = 2 [-> -inf]
+cfdbr -1.400000 -> -1 cc = 1 [-> nearest even]
+cfdbr -1.400000 -> -1 cc = 1 [-> 0]
+cfdbr -1.400000 -> -1 cc = 1 [-> +inf]
+cfdbr -1.400000 -> -2 cc = 1 [-> -inf]
+cfdbr -1.500000 -> -2 cc = 1 [-> nearest even]
+cfdbr -1.500000 -> -1 cc = 1 [-> 0]
+cfdbr -1.500000 -> -1 cc = 1 [-> +inf]
+cfdbr -1.500000 -> -2 cc = 1 [-> -inf]
+cfdbr -2.500000 -> -2 cc = 1 [-> nearest even]
+cfdbr -2.500000 -> -2 cc = 1 [-> 0]
+cfdbr -2.500000 -> -2 cc = 1 [-> +inf]
+cfdbr -2.500000 -> -3 cc = 1 [-> -inf]
+cfdbr -1.600000 -> -2 cc = 1 [-> nearest even]
+cfdbr -1.600000 -> -1 cc = 1 [-> 0]
+cfdbr -1.600000 -> -1 cc = 1 [-> +inf]
+cfdbr -1.600000 -> -2 cc = 1 [-> -inf]
+cfdbr 0.000000 -> 0 cc = 0 [-> nearest even]
+cfdbr 0.000000 -> 0 cc = 0 [-> 0]
+cfdbr 0.000000 -> 0 cc = 0 [-> +inf]
+cfdbr 0.000000 -> 0 cc = 0 [-> -inf]
+cgdbr 1.400000 -> 1 cc = 2 [-> nearest even]
+cgdbr 1.400000 -> 1 cc = 2 [-> 0]
+cgdbr 1.400000 -> 2 cc = 2 [-> +inf]
+cgdbr 1.400000 -> 1 cc = 2 [-> -inf]
+cgdbr 1.500000 -> 2 cc = 2 [-> nearest even]
+cgdbr 1.500000 -> 1 cc = 2 [-> 0]
+cgdbr 1.500000 -> 2 cc = 2 [-> +inf]
+cgdbr 1.500000 -> 1 cc = 2 [-> -inf]
+cgdbr 2.500000 -> 2 cc = 2 [-> nearest even]
+cgdbr 2.500000 -> 2 cc = 2 [-> 0]
+cgdbr 2.500000 -> 3 cc = 2 [-> +inf]
+cgdbr 2.500000 -> 2 cc = 2 [-> -inf]
+cgdbr 1.600000 -> 2 cc = 2 [-> nearest even]
+cgdbr 1.600000 -> 1 cc = 2 [-> 0]
+cgdbr 1.600000 -> 2 cc = 2 [-> +inf]
+cgdbr 1.600000 -> 1 cc = 2 [-> -inf]
+cgdbr -1.400000 -> -1 cc = 1 [-> nearest even]
+cgdbr -1.400000 -> -1 cc = 1 [-> 0]
+cgdbr -1.400000 -> -1 cc = 1 [-> +inf]
+cgdbr -1.400000 -> -2 cc = 1 [-> -inf]
+cgdbr -1.500000 -> -2 cc = 1 [-> nearest even]
+cgdbr -1.500000 -> -1 cc = 1 [-> 0]
+cgdbr -1.500000 -> -1 cc = 1 [-> +inf]
+cgdbr -1.500000 -> -2 cc = 1 [-> -inf]
+cgdbr -2.500000 -> -2 cc = 1 [-> nearest even]
+cgdbr -2.500000 -> -2 cc = 1 [-> 0]
+cgdbr -2.500000 -> -2 cc = 1 [-> +inf]
+cgdbr -2.500000 -> -3 cc = 1 [-> -inf]
+cgdbr -1.600000 -> -2 cc = 1 [-> nearest even]
+cgdbr -1.600000 -> -1 cc = 1 [-> 0]
+cgdbr -1.600000 -> -1 cc = 1 [-> +inf]
+cgdbr -1.600000 -> -2 cc = 1 [-> -inf]
+cgdbr 0.000000 -> 0 cc = 0 [-> nearest even]
+cgdbr 0.000000 -> 0 cc = 0 [-> 0]
+cgdbr 0.000000 -> 0 cc = 0 [-> +inf]
+cgdbr 0.000000 -> 0 cc = 0 [-> -inf]
Added: trunk/none/tests/s390x/rounding.h (+44 -0)
===================================================================
--- trunk/none/tests/s390x/rounding.h 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/rounding.h 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -0,0 +1,44 @@
+#ifndef ROUNDING_H
+#define ROUNDING_h
+
+/* Macros, so the values can be used together with opcodes.h */
+
+/* ---------------------------------------------------------------- */
+/* BFP rounding mode as it is encoded in the m3 field of certain */
+/* instructions (e.g. CFEBR) */
+/* ---------------------------------------------------------------- */
+#define M3_BFP_ROUND_PER_FPC 0
+
+// Cannot be mapped to IRRoundingMode
+#define M3_BFP_ROUND_NEAREST_AWAY 1
+
+// 2 is not allowed
+
+// Needs floating point extension facility
+// Cannot be mapped to IRRoundingMode
+#define M3_BFP_ROUND_PREPARE_SHORT 3
+
+#define M3_BFP_ROUND_NEAREST_EVEN 4
+#define M3_BFP_ROUND_ZERO 5
+#define M3_BFP_ROUND_POSINF 6
+#define M3_BFP_ROUND_NEGINF 7
+
+
+/* ---------------------------------------------------------------- */
+/* BFP rounding mode as it is encoded in bits [29:31] of the FPC */
+/* register. Only rounding modes 0..3 are universally supported. */
+/* Others require additional hardware facilities. */
+/* ---------------------------------------------------------------- */
+#define FPC_BFP_ROUND_NEAREST_EVEN 0
+#define FPC_BFP_ROUND_ZERO 1
+#define FPC_BFP_ROUND_POSINF 2
+#define FPC_BFP_ROUND_NEGINF 3
+
+// 4,5,6 are not allowed
+
+// Needs floating point extension facility
+// Cannot be mapped to IRRoundingMode
+#define FPC_BFP_ROUND_PREPARE_SHORT 7
+
+
+#endif /* ROUNDING_H */
Property changed: trunk/none/tests/s390x (+0 -0)
___________________________________________________________________
Name: svn:ignore
- .deps
add
add_EI
add_GE
allexec
and
and_EI
clc
clcle
cvb
cvd
div
ex_clone
ex_sig
flogr
icm
insert
insert_EI
lam_stam
lpr
Makefile
Makefile.in
mul
mul_GE
mvst
or
or_EI
srst
sub
sub_EI
tcxb
xc
xor
xor_EI
stck
stcke
stckf
op_exception
fgx
condloadstore
fold_And16
stfle
op00
cksm
clcl
mvcl
troo
trot
trto
trtt
tr
tre
clrj
clgrj
crj
cgrj
clij
clgij
cij
cgij
cs
csg
cds
cdsg
cu21
cu21_1
cu24
cu24_1
cu42
cu12
cu12_1
cu14
cu14_1
cu41
ecag
fpext
fpext_warn
fpconv
rounding-1
rounding-2
rounding-3
rounding-4
rounding-5
bfp-1
bfp-2
bfp-3
bfp-4
srnm
srnmb
comp-1
comp-2
ex
exrl
tm
tmll
stmg
test_sig
test_clone
test_fork
clst
mvc
spechelper-algr
spechelper-tmll
spechelper-icm-1
spechelper-icm-2
spechelper-cr
spechelper-ltr
spechelper-alr
spechelper-clr
spechelper-slr
spechelper-slgr
spechelper-or
spechelper-tm
+ .deps
add
add_EI
add_GE
allexec
and
and_EI
clc
clcle
cvb
cvd
div
ex_clone
ex_sig
flogr
icm
insert
insert_EI
lam_stam
lpr
Makefile
Makefile.in
mul
mul_GE
mvst
or
or_EI
srst
sub
sub_EI
tcxb
xc
xor
xor_EI
stck
stcke
stckf
op_exception
fgx
condloadstore
fold_And16
stfle
op00
cksm
clcl
mvcl
troo
trot
trto
trtt
tr
tre
clrj
clgrj
crj
cgrj
clij
clgij
cij
cgij
cs
csg
cds
cdsg
cu21
cu21_1
cu24
cu24_1
cu42
cu12
cu12_1
cu14
cu14_1
cu41
ecag
fpext
fpext_warn
fpconv
rounding-1
rounding-2
rounding-3
rounding-4
rounding-5
bfp-1
bfp-2
bfp-3
bfp-4
srnm
srnmb
comp-1
comp-2
ex
exrl
tm
tmll
stmg
test_sig
test_clone
test_fork
clst
mvc
spechelper-algr
spechelper-tmll
spechelper-icm-1
spechelper-icm-2
spechelper-cr
spechelper-ltr
spechelper-alr
spechelper-clr
spechelper-slr
spechelper-slgr
spechelper-or
spechelper-tm
rounding-6
Added: trunk/none/tests/s390x/rounding-6.c (+121 -0)
===================================================================
--- trunk/none/tests/s390x/rounding-6.c 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/rounding-6.c 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -0,0 +1,121 @@
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include "opcodes.h"
+#include "rounding.h"
+
+/* Test "convert to fixed" with rounding mode given in insn (m3 field)
+ Covers all generally available rounding modes that can be mapped to
+ IRRoundingMode. As a consequence m3=1 which is "round to nearest with
+ ties away from 0" is not tested here.
+*/
+
+const char *
+rtext(unsigned m3_round)
+{
+ switch (m3_round) {
+ case 0: return "[-> per fpc]";
+ case 1: return "[-> nearest away]";
+ case 3: return "[-> prepare short]"; // floating point extension fac needed
+ case 4: return "[-> nearest even]";
+ case 5: return "[-> 0]";
+ case 6: return "[-> +inf]";
+ case 7: 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 %s\n", \
+ opcode, src, dst, cc, rtext(round)); \
+} while (0)
+
+
+#define cfebr(value, round) \
+ convert_to_int("cfebr",float,int32_t,PRId32,round,value)
+#define cfdbr(value, round) \
+ convert_to_int("cfdbr",double,int32_t,PRId32,round,value)
+#define cgebr(value, round) \
+ convert_to_int("cgebr",float,int64_t,PRId64,round,value)
+#define cgdbr(value, round) \
+ convert_to_int("cgdbr",double,int64_t,PRId64,round,value)
+
+void
+set_rounding_mode(unsigned mode)
+{
+ register unsigned r asm("1") = mode;
+ __asm__ volatile ( SFPC(1) : : "d"(r) );
+}
+
+
+int main(void)
+{
+ int j;
+ static const float fval[] = {
+ 1.4f, 1.5f, 2.5f, 1.6f, -1.4f, -1.5f, -2.5f, -1.6f, 0.0f,
+ };
+ static const double dval[] = {
+ 1.4, 1.5, 2.5, 1.6, -1.4, -1.5, -2.5, -1.6, 0.0,
+ };
+
+ /* Note when testing M3_NEAR need to set the FPC rounding mode
+ to something else. FPC rounding mode is NEAR by default.
+ Setting the FPC rounding mode to != NEAR is the only way to make
+ sure the M3 field is not ignored. */
+
+ /* f32 -> i32 */
+ for (j = 0; j < sizeof fval / sizeof fval[0]; ++j) {
+ set_rounding_mode(FPC_BFP_ROUND_ZERO);
+ cfebr(fval[j], M3_BFP_ROUND_NEAREST_EVEN);
+ set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
+ cfebr(fval[j], M3_BFP_ROUND_ZERO);
+ cfebr(fval[j], M3_BFP_ROUND_POSINF);
+ cfebr(fval[j], M3_BFP_ROUND_NEGINF);
+ }
+
+ /* f32 -> i64 */
+ for (j = 0; j < sizeof fval / sizeof fval[0]; ++j) {
+ set_rounding_mode(FPC_BFP_ROUND_ZERO);
+ cgebr(fval[j], M3_BFP_ROUND_NEAREST_EVEN);
+ set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
+ cgebr(fval[j], M3_BFP_ROUND_ZERO);
+ cgebr(fval[j], M3_BFP_ROUND_POSINF);
+ cgebr(fval[j], M3_BFP_ROUND_NEGINF);
+ }
+
+ /* f64 -> i32 */
+ for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
+ set_rounding_mode(FPC_BFP_ROUND_ZERO);
+ cfdbr(dval[j], M3_BFP_ROUND_NEAREST_EVEN);
+ set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
+ cfdbr(dval[j], M3_BFP_ROUND_ZERO);
+ cfdbr(dval[j], M3_BFP_ROUND_POSINF);
+ cfdbr(dval[j], M3_BFP_ROUND_NEGINF);
+ }
+
+ /* f64 -> i64 */
+ for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
+ set_rounding_mode(FPC_BFP_ROUND_ZERO);
+ cgdbr(dval[j], M3_BFP_ROUND_NEAREST_EVEN);
+ set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
+ cgdbr(dval[j], M3_BFP_ROUND_ZERO);
+ cgdbr(dval[j], M3_BFP_ROUND_POSINF);
+ cgdbr(dval[j], M3_BFP_ROUND_NEGINF);
+ }
+
+ return 0;
+}
Modified: trunk/none/tests/s390x/rounding-3.c (+0 -3)
===================================================================
--- trunk/none/tests/s390x/rounding-3.c 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/rounding-3.c 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -7,9 +7,6 @@
/* Test "convert to fixed" with "per fpc" rounding.
Covers all generally available rounding modes.
-
- Note, that "convert to fixed" with rounding mode specified as
- part of the insn is already tested in fpconv.c
*/
void
Modified: trunk/none/tests/s390x/fpconv.stdout.exp (+94 -672)
===================================================================
--- trunk/none/tests/s390x/fpconv.stdout.exp 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/fpconv.stdout.exp 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -1,672 +1,94 @@
-"cefbr" 0.000000
-"cefbr" 1.000000
-"cefbr" -1.000000
-"cefbr" -2147483648.000000
-"cefbr" 2147483648.000000
-"cefbr" 0.000000
-"cefbr" -1.000000
-"cefbr" 0.000000
-"cefbr" -1.000000
-"cegbr" 0.000000
-"cegbr" 1.000000
-"cegbr" 4294967296.000000
-"cegbr" 2147483648.000000
-"cegbr" 2147483648.000000
-"cegbr" 4294967296.000000
-"cegbr" -1.000000
-"cegbr" -9223372036854775808.000000
-"cegbr" 9223372036854775808.000000
-"cdfbr" 0.000000
-"cdfbr" 1.000000
-"cdfbr" -1.000000
-"cdfbr" -2147483648.000000
-"cdfbr" 2147483647.000000
-"cdfbr" 0.000000
-"cdfbr" -1.000000
-"cdfbr" 0.000000
-"cdfbr" -1.000000
-"cdgbr" 0.000000
-"cdgbr" 1.000000
-"cdgbr" 4294967295.000000
-"cdgbr" 2147483648.000000
-"cdgbr" 2147483647.000000
-"cdgbr" 4294967296.000000
-"cdgbr" -1.000000
-"cdgbr" -9223372036854775808.000000
-"cdgbr" 9223372036854775808.000000
-"cxfbr" 0.000000
-"cxfbr" 1.000000
-"cxfbr" -1.000000
-"cxfbr" -2147483648.000000
-"cxfbr" 2147483647.000000
-"cxfbr" 0.000000
-"cxfbr" -1.000000
-"cxfbr" 0.000000
-"cxfbr" -1.000000
-"cxgbr" 0.000000
-"cxgbr" 1.000000
-"cxgbr" 4294967295.000000
-"cxgbr" 2147483648.000000
-"cxgbr" 2147483647.000000
-"cxgbr" 4294967296.000000
-"cxgbr" -1.000000
-"cxgbr" -9223372036854775808.000000
-"cxgbr" 9223372036854775807.000000
-"cfebr" 4294967295 cc=1
-"cfebr" 0 cc=0
-"cfebr" 1 cc=2
-"cfebr" 1 cc=2
-"cfebr" 2 cc=2
-"cfebr" 2 cc=2
-"cfebr" 16000 cc=2
-"cfebr" 160000000 cc=2
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=2
-"cfebr" 0 cc=2
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=0
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=0
-"cfebr" 2147483647 cc=3
-"cgebr" -1 cc=1
-"cgebr" 0 cc=0
-"cgebr" 1 cc=2
-"cgebr" 1 cc=2
-"cgebr" 2 cc=2
-"cgebr" 2 cc=2
-"cgebr" 16000 cc=2
-"cgebr" 160000000 cc=2
-"cgebr" 1599999967232 cc=2
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=2
-"cgebr" 0 cc=2
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=0
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=0
-"cgebr" 9223372036854775807 cc=3
-"cfdbr" 4294967295 cc=1
-"cfdbr" 0 cc=0
-"cfdbr" 1 cc=2
-"cfdbr" 1 cc=2
-"cfdbr" 2 cc=2
-"cfdbr" 2 cc=2
-"cfdbr" 16000 cc=2
-"cfdbr" 160000000 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=2
-"cfdbr" 0 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=0
-"cfdbr" 2147483647 cc=3
-"cgdbr" -1 cc=1
-"cgdbr" 0 cc=0
-"cgdbr" 1 cc=2
-"cgdbr" 1 cc=2
-"cgdbr" 2 cc=2
-"cgdbr" 2 cc=2
-"cgdbr" 16000 cc=2
-"cgdbr" 160000000 cc=2
-"cgdbr" 1600000000000 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=2
-"cgdbr" 0 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=0
-"cgdbr" 9223372036854775807 cc=3
-"cfxbr" 4294967295 cc=1
-"cfxbr" 0 cc=0
-"cfxbr" 1 cc=2
-"cfxbr" 1 cc=2
-"cfxbr" 2 cc=2
-"cfxbr" 2 cc=2
-"cfxbr" 16000 cc=2
-"cfxbr" 160000000 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cgxbr" -1 cc=1
-"cgxbr" 0 cc=0
-"cgxbr" 1 cc=2
-"cgxbr" 1 cc=2
-"cgxbr" 2 cc=2
-"cgxbr" 2 cc=2
-"cgxbr" 16000 cc=2
-"cgxbr" 160000000 cc=2
-"cgxbr" 1600000000000 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cefbr" 0.000000
-"cefbr" 1.000000
-"cefbr" -1.000000
-"cefbr" -2147483648.000000
-"cefbr" 2147483648.000000
-"cefbr" 0.000000
-"cefbr" -1.000000
-"cefbr" 0.000000
-"cefbr" -1.000000
-"cegbr" 0.000000
-"cegbr" 1.000000
-"cegbr" 4294967296.000000
-"cegbr" 2147483648.000000
-"cegbr" 2147483648.000000
-"cegbr" 4294967296.000000
-"cegbr" -1.000000
-"cegbr" -9223372036854775808.000000
-"cegbr" 9223372036854775808.000000
-"cdfbr" 0.000000
-"cdfbr" 1.000000
-"cdfbr" -1.000000
-"cdfbr" -2147483648.000000
-"cdfbr" 2147483647.000000
-"cdfbr" 0.000000
-"cdfbr" -1.000000
-"cdfbr" 0.000000
-"cdfbr" -1.000000
-"cdgbr" 0.000000
-"cdgbr" 1.000000
-"cdgbr" 4294967295.000000
-"cdgbr" 2147483648.000000
-"cdgbr" 2147483647.000000
-"cdgbr" 4294967296.000000
-"cdgbr" -1.000000
-"cdgbr" -9223372036854775808.000000
-"cdgbr" 9223372036854775808.000000
-"cxfbr" 0.000000
-"cxfbr" 1.000000
-"cxfbr" -1.000000
-"cxfbr" -2147483648.000000
-"cxfbr" 2147483647.000000
-"cxfbr" 0.000000
-"cxfbr" -1.000000
-"cxfbr" 0.000000
-"cxfbr" -1.000000
-"cxgbr" 0.000000
-"cxgbr" 1.000000
-"cxgbr" 4294967295.000000
-"cxgbr" 2147483648.000000
-"cxgbr" 2147483647.000000
-"cxgbr" 4294967296.000000
-"cxgbr" -1.000000
-"cxgbr" -9223372036854775808.000000
-"cxgbr" 9223372036854775807.000000
-"cfebr" 4294967295 cc=1
-"cfebr" 0 cc=0
-"cfebr" 1 cc=2
-"cfebr" 1 cc=2
-"cfebr" 1 cc=2
-"cfebr" 1 cc=2
-"cfebr" 16000 cc=2
-"cfebr" 160000000 cc=2
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=2
-"cfebr" 0 cc=2
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=0
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=0
-"cfebr" 2147483647 cc=3
-"cgebr" -1 cc=1
-"cgebr" 0 cc=0
-"cgebr" 1 cc=2
-"cgebr" 1 cc=2
-"cgebr" 1 cc=2
-"cgebr" 1 cc=2
-"cgebr" 16000 cc=2
-"cgebr" 160000000 cc=2
-"cgebr" 1599999967232 cc=2
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=2
-"cgebr" 0 cc=2
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=0
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=0
-"cgebr" 9223372036854775807 cc=3
-"cfdbr" 4294967295 cc=1
-"cfdbr" 0 cc=0
-"cfdbr" 1 cc=2
-"cfdbr" 1 cc=2
-"cfdbr" 1 cc=2
-"cfdbr" 1 cc=2
-"cfdbr" 16000 cc=2
-"cfdbr" 160000000 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=2
-"cfdbr" 0 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=0
-"cfdbr" 2147483647 cc=3
-"cgdbr" -1 cc=1
-"cgdbr" 0 cc=0
-"cgdbr" 1 cc=2
-"cgdbr" 1 cc=2
-"cgdbr" 1 cc=2
-"cgdbr" 1 cc=2
-"cgdbr" 16000 cc=2
-"cgdbr" 160000000 cc=2
-"cgdbr" 1600000000000 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=2
-"cgdbr" 0 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=0
-"cgdbr" 9223372036854775807 cc=3
-"cfxbr" 4294967295 cc=1
-"cfxbr" 0 cc=0
-"cfxbr" 1 cc=2
-"cfxbr" 1 cc=2
-"cfxbr" 1 cc=2
-"cfxbr" 1 cc=2
-"cfxbr" 16000 cc=2
-"cfxbr" 160000000 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cgxbr" -1 cc=1
-"cgxbr" 0 cc=0
-"cgxbr" 1 cc=2
-"cgxbr" 1 cc=2
-"cgxbr" 1 cc=2
-"cgxbr" 1 cc=2
-"cgxbr" 16000 cc=2
-"cgxbr" 160000000 cc=2
-"cgxbr" 1600000000000 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cefbr" 0.000000
-"cefbr" 1.000000
-"cefbr" -1.000000
-"cefbr" -2147483648.000000
-"cefbr" 2147483648.000000
-"cefbr" 0.000000
-"cefbr" -1.000000
-"cefbr" 0.000000
-"cefbr" -1.000000
-"cegbr" 0.000000
-"cegbr" 1.000000
-"cegbr" 4294967296.000000
-"cegbr" 2147483648.000000
-"cegbr" 2147483648.000000
-"cegbr" 4294967296.000000
-"cegbr" -1.000000
-"cegbr" -9223372036854775808.000000
-"cegbr" 9223372036854775808.000000
-"cdfbr" 0.000000
-"cdfbr" 1.000000
-"cdfbr" -1.000000
-"cdfbr" -2147483648.000000
-"cdfbr" 2147483647.000000
-"cdfbr" 0.000000
-"cdfbr" -1.000000
-"cdfbr" 0.000000
-"cdfbr" -1.000000
-"cdgbr" 0.000000
-"cdgbr" 1.000000
-"cdgbr" 4294967295.000000
-"cdgbr" 2147483648.000000
-"cdgbr" 2147483647.000000
-"cdgbr" 4294967296.000000
-"cdgbr" -1.000000
-"cdgbr" -9223372036854775808.000000
-"cdgbr" 9223372036854775808.000000
-"cxfbr" 0.000000
-"cxfbr" 1.000000
-"cxfbr" -1.000000
-"cxfbr" -2147483648.000000
-"cxfbr" 2147483647.000000
-"cxfbr" 0.000000
-"cxfbr" -1.000000
-"cxfbr" 0.000000
-"cxfbr" -1.000000
-"cxgbr" 0.000000
-"cxgbr" 1.000000
-"cxgbr" 4294967295.000000
-"cxgbr" 2147483648.000000
-"cxgbr" 2147483647.000000
-"cxgbr" 4294967296.000000
-"cxgbr" -1.000000
-"cxgbr" -9223372036854775808.000000
-"cxgbr" 9223372036854775807.000000
-"cfebr" 4294967295 cc=1
-"cfebr" 0 cc=0
-"cfebr" 1 cc=2
-"cfebr" 2 cc=2
-"cfebr" 2 cc=2
-"cfebr" 2 cc=2
-"cfebr" 16000 cc=2
-"cfebr" 160000000 cc=2
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 1 cc=2
-"cfebr" 1 cc=2
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=0
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=0
-"cfebr" 2147483647 cc=3
-"cgebr" -1 cc=1
-"cgebr" 0 cc=0
-"cgebr" 1 cc=2
-"cgebr" 2 cc=2
-"cgebr" 2 cc=2
-"cgebr" 2 cc=2
-"cgebr" 16000 cc=2
-"cgebr" 160000000 cc=2
-"cgebr" 1599999967232 cc=2
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 1 cc=2
-"cgebr" 1 cc=2
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=0
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=0
-"cgebr" 9223372036854775807 cc=3
-"cfdbr" 4294967295 cc=1
-"cfdbr" 0 cc=0
-"cfdbr" 1 cc=2
-"cfdbr" 2 cc=2
-"cfdbr" 2 cc=2
-"cfdbr" 2 cc=2
-"cfdbr" 16000 cc=2
-"cfdbr" 160000000 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 1 cc=2
-"cfdbr" 1 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 1 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=0
-"cfdbr" 2147483647 cc=3
-"cgdbr" -1 cc=1
-"cgdbr" 0 cc=0
-"cgdbr" 1 cc=2
-"cgdbr" 2 cc=2
-"cgdbr" 2 cc=2
-"cgdbr" 2 cc=2
-"cgdbr" 16000 cc=2
-"cgdbr" 160000000 cc=2
-"cgdbr" 1600000000000 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 1 cc=2
-"cgdbr" 1 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 1 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=0
-"cgdbr" 9223372036854775807 cc=3
-"cfxbr" 4294967295 cc=1
-"cfxbr" 0 cc=0
-"cfxbr" 1 cc=2
-"cfxbr" 2 cc=2
-"cfxbr" 2 cc=2
-"cfxbr" 2 cc=2
-"cfxbr" 16000 cc=2
-"cfxbr" 160000000 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 1 cc=2
-"cfxbr" 1 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 1 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 1 cc=2
-"cfxbr" 2147483647 cc=3
-"cgxbr" -1 cc=1
-"cgxbr" 0 cc=0
-"cgxbr" 1 cc=2
-"cgxbr" 2 cc=2
-"cgxbr" 2 cc=2
-"cgxbr" 2 cc=2
-"cgxbr" 16000 cc=2
-"cgxbr" 160000000 cc=2
-"cgxbr" 1600000000000 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 1 cc=2
-"cgxbr" 1 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 1 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 1 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cefbr" 0.000000
-"cefbr" 1.000000
-"cefbr" -1.000000
-"cefbr" -2147483648.000000
-"cefbr" 2147483648.000000
-"cefbr" 0.000000
-"cefbr" -1.000000
-"cefbr" 0.000000
-"cefbr" -1.000000
-"cegbr" 0.000000
-"cegbr" 1.000000
-"cegbr" 4294967296.000000
-"cegbr" 2147483648.000000
-"cegbr" 2147483648.000000
-"cegbr" 4294967296.000000
-"cegbr" -1.000000
-"cegbr" -9223372036854775808.000000
-"cegbr" 9223372036854775808.000000
-"cdfbr" 0.000000
-"cdfbr" 1.000000
-"cdfbr" -1.000000
-"cdfbr" -2147483648.000000
-"cdfbr" 2147483647.000000
-"cdfbr" 0.000000
-"cdfbr" -1.000000
-"cdfbr" 0.000000
-"cdfbr" -1.000000
-"cdgbr" 0.000000
-"cdgbr" 1.000000
-"cdgbr" 4294967295.000000
-"cdgbr" 2147483648.000000
-"cdgbr" 2147483647.000000
-"cdgbr" 4294967296.000000
-"cdgbr" -1.000000
-"cdgbr" -9223372036854775808.000000
-"cdgbr" 9223372036854775808.000000
-"cxfbr" 0.000000
-"cxfbr" 1.000000
-"cxfbr" -1.000000
-"cxfbr" -2147483648.000000
-"cxfbr" 2147483647.000000
-"cxfbr" 0.000000
-"cxfbr" -1.000000
-"cxfbr" 0.000000
-"cxfbr" -1.000000
-"cxgbr" 0.000000
-"cxgbr" 1.000000
-"cxgbr" 4294967295.000000
-"cxgbr" 2147483648.000000
-"cxgbr" 2147483647.000000
-"cxgbr" 4294967296.000000
-"cxgbr" -1.000000
-"cxgbr" -9223372036854775808.000000
-"cxgbr" 9223372036854775807.000000
-"cfebr" 4294967294 cc=1
-"cfebr" 0 cc=0
-"cfebr" 1 cc=2
-"cfebr" 1 cc=2
-"cfebr" 1 cc=2
-"cfebr" 1 cc=2
-"cfebr" 16000 cc=2
-"cfebr" 160000000 cc=2
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=2
-"cfebr" 0 cc=2
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=0
-"cfebr" 2147483647 cc=3
-"cfebr" 0 cc=0
-"cfebr" 2147483647 cc=3
-"cgebr" -2 cc=1
-"cgebr" 0 cc=0
-"cgebr" 1 cc=2
-"cgebr" 1 cc=2
-"cgebr" 1 cc=2
-"cgebr" 1 cc=2
-"cgebr" 16000 cc=2
-"cgebr" 160000000 cc=2
-"cgebr" 1599999967232 cc=2
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=2
-"cgebr" 0 cc=2
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=0
-"cgebr" 9223372036854775807 cc=3
-"cgebr" 0 cc=0
-"cgebr" 9223372036854775807 cc=3
-"cfdbr" 4294967294 cc=1
-"cfdbr" 0 cc=0
-"cfdbr" 1 cc=2
-"cfdbr" 1 cc=2
-"cfdbr" 1 cc=2
-"cfdbr" 1 cc=2
-"cfdbr" 16000 cc=2
-"cfdbr" 160000000 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=2
-"cfdbr" 0 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=2
-"cfdbr" 2147483647 cc=3
-"cfdbr" 0 cc=0
-"cfdbr" 2147483647 cc=3
-"cgdbr" -2 cc=1
-"cgdbr" 0 cc=0
-"cgdbr" 1 cc=2
-"cgdbr" 1 cc=2
-"cgdbr" 1 cc=2
-"cgdbr" 1 cc=2
-"cgdbr" 16000 cc=2
-"cgdbr" 160000000 cc=2
-"cgdbr" 1600000000000 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=2
-"cgdbr" 0 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=2
-"cgdbr" 9223372036854775807 cc=3
-"cgdbr" 0 cc=0
-"cgdbr" 9223372036854775807 cc=3
-"cfxbr" 4294967294 cc=1
-"cfxbr" 0 cc=0
-"cfxbr" 1 cc=2
-"cfxbr" 1 cc=2
-"cfxbr" 1 cc=2
-"cfxbr" 1 cc=2
-"cfxbr" 16000 cc=2
-"cfxbr" 160000000 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cfxbr" 0 cc=2
-"cfxbr" 2147483647 cc=3
-"cgxbr" -2 cc=1
-"cgxbr" 0 cc=0
-"cgxbr" 1 cc=2
-"cgxbr" 1 cc=2
-"cgxbr" 1 cc=2
-"cgxbr" 1 cc=2
-"cgxbr" 16000 cc=2
-"cgxbr" 160000000 cc=2
-"cgxbr" 1600000000000 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
-"cgxbr" 0 cc=2
-"cgxbr" 9223372036854775807 cc=3
+
+----- 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
Added: trunk/none/tests/s390x/rounding-6.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/rounding-6.stderr.exp 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/rounding-6.stderr.exp 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -0,0 +1,2 @@
+
+
Modified: trunk/none/tests/s390x/fpconv.c (+100 -128)
===================================================================
--- trunk/none/tests/s390x/fpconv.c 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/fpconv.c 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -1,147 +1,119 @@
-/* basic float <-> signed int conversions available since z900 */
#include <float.h>
#include <stdio.h>
-#include "opcodes.h"
+#include <stdint.h>
+#include <inttypes.h>
+#include <limits.h>
-#define I2F(insn, initial, target,round) \
-({ \
- register unsigned long source asm("2") = initial; \
- register typeof(target) _t asm("f0"); \
- asm volatile(insn " 0,2\n\t" :"=f" (_t):"d"(source)); \
- _t; \
-})
+/* The following opcodes are tested:
-#define F2L(insn, initial, type, round, cc) \
-({ \
- register type source asm("f0") = initial; \
- register unsigned long target asm ("2") = 0; \
- asm volatile(insn " 2," #round ",0\n\t" \
- "ipm %1\n\t" \
- "srl %1,28\n\t" \
- :"=d" (target), "=d" (cc) :"f"(source):"cc"); \
- target; \
-})
+ 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 DO_INSN_I2F32(insn, round) \
-({ \
- float f32; \
- printf(#insn " %f\n", I2F(insn, 0, f32, round)); \
- printf(#insn " %f\n", I2F(insn, 1, f32, round)); \
- printf(#insn " %f\n", I2F(insn, 0xffffffffUL, f32, round)); \
- printf(#insn " %f\n", I2F(insn, 0x80000000UL, f32, round)); \
- printf(#insn " %f\n", I2F(insn, 0x7fffffffUL, f32, round)); \
- printf(#insn " %f\n", I2F(insn, 0x100000000UL, f32, round)); \
- printf(#insn " %f\n", I2F(insn, 0xffffffffffffffffUL, f32, round)); \
- printf(#insn " %f\n", I2F(insn, 0x8000000000000000UL, f32, round)); \
- printf(#insn " %f\n", I2F(insn, 0x7fffffffffffffffUL, f32, round)); \
-})
+#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_I2F64(insn, round) \
-({ \
- double f64; \
- printf(#insn " %f\n", I2F(insn, 0, f64, round)); \
- printf(#insn " %f\n", I2F(insn, 1, f64, round)); \
- printf(#insn " %f\n", I2F(insn, 0xffffffffUL, f64, round)); \
- printf(#insn " %f\n", I2F(insn, 0x80000000UL, f64, round)); \
- printf(#insn " %f\n", I2F(insn, 0x7fffffffUL, f64, round)); \
- printf(#insn " %f\n", I2F(insn, 0x100000000UL, f64, round)); \
- printf(#insn " %f\n", I2F(insn, 0xffffffffffffffffUL, f64, round)); \
- printf(#insn " %f\n", I2F(insn, 0x8000000000000000UL, f64, round)); \
- printf(#insn " %f\n", I2F(insn, 0x7fffffffffffffffUL, f64, round)); \
-})
+#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_I2F128(insn, round) \
-({ \
- long double f128; \
- printf(#insn " %Lf\n", I2F(insn, 0, f128, round)); \
- printf(#insn " %Lf\n", I2F(insn, 1, f128, round)); \
- printf(#insn " %Lf\n", I2F(insn, 0xffffffffUL, f128, round)); \
- printf(#insn " %Lf\n", I2F(insn, 0x80000000UL, f128, round)); \
- printf(#insn " %Lf\n", I2F(insn, 0x7fffffffUL, f128, round)); \
- printf(#insn " %Lf\n", I2F(insn, 0x100000000UL, f128, round)); \
- printf(#insn " %Lf\n", I2F(insn, 0xffffffffffffffffUL, f128, round)); \
- printf(#insn " %Lf\n", I2F(insn, 0x8000000000000000UL, f128, round)); \
- printf(#insn " %Lf\n", I2F(insn, 0x7fffffffffffffffUL, f128, round)); \
-})
+#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_INSN_F2L(insn, round, type) \
-({ \
- int cc; \
- printf(#insn " %ld ", F2L(insn, -1.1, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 0, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.4, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.5, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.6, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.6E+4, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.6E+8, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.6E+12, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.6E+20, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.6E+200, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.6E+2000L, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, 1.6E-4, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, FLT_MIN, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, FLT_MAX, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, DBL_MIN, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, DBL_MAX, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, LDBL_MIN, type, round, cc)); \
- printf("cc=%d\n", cc); \
- printf(#insn " %ld ", F2L(insn, LDBL_MAX, type, round, cc)); \
- printf("cc=%d\n", cc); \
-})
+#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 DO_I2F(round) \
-({ \
- DO_INSN_I2F32("cefbr", round); \
- DO_INSN_I2F32("cegbr", round); \
- DO_INSN_I2F64("cdfbr", round); \
- DO_INSN_I2F64("cdgbr", round); \
- DO_INSN_I2F128("cxfbr", round); \
- DO_INSN_I2F128("cxgbr", round); \
-})
-#define DO_F2L(round) \
-({ \
- DO_INSN_F2L("cfebr", round, float); \
- DO_INSN_F2L("cgebr", round, float); \
- DO_INSN_F2L("cfdbr", round, double); \
- DO_INSN_F2L("cgdbr", round, double); \
- DO_INSN_F2L("cfxbr", round, long double); \
- DO_INSN_F2L("cgxbr", round, long double); \
-})
+#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)
-int main()
-{
- DO_I2F(4);
- DO_F2L(4);
+#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)
- DO_I2F(5);
- DO_F2L(5);
+#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)
- DO_I2F(6);
- DO_F2L(6);
- DO_I2F(7);
- DO_F2L(7);
+int main()
+{
+ DO_I2F();
+ DO_F2I();
return 0;
}
Modified: trunk/none/tests/s390x/Makefile.am (+2 -2)
===================================================================
--- trunk/none/tests/s390x/Makefile.am 2012-10-26 17:16:43 +01:00 (rev 13084)
+++ trunk/none/tests/s390x/Makefile.am 2012-10-27 15:25:28 +01:00 (rev 13085)
@@ -11,7 +11,7 @@
ex_sig ex_clone cu14 cu14_1 cu41 fpconv ecag fpext fpext_warn \
rounding-1 rounding-2 rounding-3 rounding-4 rounding-5 bfp-1 \
bfp-2 bfp-3 bfp-4 srnm srnmb comp-1 comp-2 exrl tmll tm stmg \
- ex clst mvc test_clone test_fork test_sig \
+ ex clst mvc test_clone test_fork test_sig rounding-6 \
spechelper-alr spechelper-algr \
spechelper-slr spechelper-slgr \
spechelper-cr spechelper-clr \
@@ -31,7 +31,7 @@
op00.stderr.exp1 op00.stderr.exp2 op00.vgtest \
fpext_fail.vgtest fpext_fail.stderr.exp fpext_fail.stdout.exp \
test.h opcodes.h add.h and.h div.h insert.h \
- mul.h or.h sub.h xor.h table.h svc.h
+ mul.h or.h sub.h xor.h table.h svc.h rounding.h
AM_CFLAGS += @FLAG_M64@
AM_CXXFLAGS += @FLAG_M64@
|