From: Florian Krohm Date: Sat, 15 Sep 2012 02:22:46 +0000 (+0000) Subject: s390: Add a testcase for 32/64-bit bfp comparison insns. X-Git-Tag: svn/VALGRIND_3_9_0~683 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf570874fc93ffa1d2764f6d3f3fcc2ca750c48a;p=thirdparty%2Fvalgrind.git s390: Add a testcase for 32/64-bit bfp comparison insns. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12975 --- diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am index d0c5f98e6e..3ffc730535 100644 --- a/none/tests/s390x/Makefile.am +++ b/none/tests/s390x/Makefile.am @@ -10,7 +10,7 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \ 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 fpext_warn \ rounding-1 rounding-2 rounding-3 rounding-4 rounding-5 bfp-1 \ - bfp-2 bfp-3 + bfp-2 bfp-3 bfp-4 check_PROGRAMS = $(INSN_TESTS) \ allexec \ diff --git a/none/tests/s390x/bfp-4.c b/none/tests/s390x/bfp-4.c new file mode 100644 index 0000000000..c2d88818c7 --- /dev/null +++ b/none/tests/s390x/bfp-4.c @@ -0,0 +1,61 @@ +#include + +/* Test BFP comparison for 32/64-bit. */ + +void cebr(float v1, float v2) +{ + int cc; + + __asm__ volatile("cebr %[r1],%[r2]\n\t" + "ipm %[psw]\n\t" + "srl %[psw],28\n\t" + : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); + if (cc == 0) + printf("cfebr: %f == %f\n", v1, v2); + if (cc == 1) + printf("cfebr: %f < %f\n", v1, v2); + if (cc == 2) + printf("cfebr: %f > %f\n", v1, v2); +} + +void cdbr(double v1, double v2) +{ + int cc; + + __asm__ volatile("cdbr %[r1],%[r2]\n\t" + "ipm %[psw]\n\t" + "srl %[psw],28\n\t" + : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); + if (cc == 0) + printf("cdebr: %f == %f\n", v1, v2); + if (cc == 1) + printf("cdebr: %f < %f\n", v1, v2); + if (cc == 2) + printf("cdebr: %f > %f\n", v1, v2); +} + +int main(void) +{ + float f1, f2; + float d1, d2; + + // compare 4 bytes + f1 = 3.14f; + f2 = f1; + cebr(f1, f2); + f2 = f1 + 10.; + cebr(f1, f2); + f2 = f1 - 100.; + cebr(f1, f2); + + // compare 8 bytes + d1 = 2.78; + d2 = d1; + cdbr(d1, d2); + d2 = d1 + 10.; + cdbr(d1, d2); + d2 = d1 - 100.; + cdbr(d1, d2); + + return 0; +} diff --git a/none/tests/s390x/bfp-4.stderr.exp b/none/tests/s390x/bfp-4.stderr.exp new file mode 100644 index 0000000000..139597f9cb --- /dev/null +++ b/none/tests/s390x/bfp-4.stderr.exp @@ -0,0 +1,2 @@ + + diff --git a/none/tests/s390x/bfp-4.stdout.exp b/none/tests/s390x/bfp-4.stdout.exp new file mode 100644 index 0000000000..eff1366548 --- /dev/null +++ b/none/tests/s390x/bfp-4.stdout.exp @@ -0,0 +1,6 @@ +cfebr: 3.140000 == 3.140000 +cfebr: 3.140000 < 13.140000 +cfebr: 3.140000 > -96.860001 +cdebr: 2.780000 == 2.780000 +cdebr: 2.780000 < 12.780000 +cdebr: 2.780000 > -97.220001 diff --git a/none/tests/s390x/bfp-4.vgtest b/none/tests/s390x/bfp-4.vgtest new file mode 100644 index 0000000000..b800aa313f --- /dev/null +++ b/none/tests/s390x/bfp-4.vgtest @@ -0,0 +1 @@ +prog: bfp-4