]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
s390: Add a testcase for 32/64-bit bfp comparison insns.
authorFlorian Krohm <florian@eich-krohm.de>
Sat, 15 Sep 2012 02:22:46 +0000 (02:22 +0000)
committerFlorian Krohm <florian@eich-krohm.de>
Sat, 15 Sep 2012 02:22:46 +0000 (02:22 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12975

none/tests/s390x/Makefile.am
none/tests/s390x/bfp-4.c [new file with mode: 0644]
none/tests/s390x/bfp-4.stderr.exp [new file with mode: 0644]
none/tests/s390x/bfp-4.stdout.exp [new file with mode: 0644]
none/tests/s390x/bfp-4.vgtest [new file with mode: 0644]

index d0c5f98e6e4bc580a89f3035dd2af5d9fcf155c5..3ffc730535e6dfaf97f958c78c5ea3cd95907a6a 100644 (file)
@@ -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 (file)
index 0000000..c2d8881
--- /dev/null
@@ -0,0 +1,61 @@
+#include <stdio.h>
+
+/* 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 (file)
index 0000000..139597f
--- /dev/null
@@ -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 (file)
index 0000000..eff1366
--- /dev/null
@@ -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 (file)
index 0000000..b800aa3
--- /dev/null
@@ -0,0 +1 @@
+prog: bfp-4