From: Florian Krohm Date: Sun, 11 Nov 2012 13:59:54 +0000 (+0000) Subject: Add missing files. They should have been added in r13120. X-Git-Tag: svn/VALGRIND_3_9_0~547 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12fec34e2f7db75960f5e03204d1c8e150f0807b;p=thirdparty%2Fvalgrind.git Add missing files. They should have been added in r13120. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13121 --- diff --git a/none/tests/s390x/dfp-1.c b/none/tests/s390x/dfp-1.c new file mode 100644 index 0000000000..38517ed7a7 --- /dev/null +++ b/none/tests/s390x/dfp-1.c @@ -0,0 +1,74 @@ +#include +#include "opcodes.h" + +volatile _Decimal64 d64_1, d64_2; + +#define DFP64_BINOP(insn, op1, op2, type, round, cc) \ +({ \ + register type f1 asm("f1") = op1; \ + register type f2 asm("f2") = op2; \ + /* f1 = f1 (op) f2 */ \ + asm volatile(insn(2,round,1,1) \ + "ipm %1\n\t" \ + "srl %1,28\n\t" \ + :"+f" (f1), "=d" (cc) \ + :"f"(f2) \ + ); \ + f1; \ +}) + +int main() { + _Decimal64 result; + int cc; + + printf("Decimal floating point 64-bit arithmetic\n"); + // fixs390: print result in DFP format once required insns are supported. + + /* 64-bit ADD */ + /* case 1: result has maximum significand digits */ + d64_1 = 999999999.0DD; + d64_2 = 0.999999DD; + result = DFP64_BINOP(ADTRA, d64_1, d64_2, _Decimal64, 1, cc); + printf("dfp64_add: %lx\n", *((unsigned long *) &result)); + /* case 2: result is rounded */ + d64_1 = 99999999999.0DD; + d64_2 = 0.999999DD; + result = DFP64_BINOP(ADTRA, d64_1, d64_2, _Decimal64, 3, cc); + printf("dfp64_add: %lx\n", *((unsigned long *) &result)); + + /* 64-bit SUBTRACT */ + /* case 1: result has maximum significand digits */ + d64_1 = 0.000001DD; + d64_2 = 10000000000.0DD; + result = DFP64_BINOP(SDTRA, d64_1, d64_2, _Decimal64, 4, cc); + printf("dfp64_sub: %lx\n", *((unsigned long *) &result)); + /* case 2: result is rounded */ + d64_1 = 0.000001DD; + d64_2 = 100000000000.0DD; + result = DFP64_BINOP(SDTRA, d64_1, d64_2, _Decimal64, 5, cc); + printf("dfp64_sub: %lx\n", *((unsigned long *) &result)); + + /* 64-bit MULTIPLY */ + /* case 1: result has maximum significand digits */ + d64_1 = 9999999999.999999DD; + d64_2 = .99DD; + result = DFP64_BINOP(MDTRA, d64_1, d64_2, _Decimal64, 6, cc); + printf("dfp64_mul: %lx\n", *((unsigned long *) &result)); + /* case 2: result is rounded */ + d64_1 = 99999999999.999999DD; + d64_2 = .99DD; + result = DFP64_BINOP(MDTRA, d64_1, d64_2, _Decimal64, 7, cc); + printf("dfp64_mul: %lx\n", *((unsigned long *) &result)); + + /* 64-bit DIVIDE */ + /* case 1: result has maximum significand digits */ + d64_1 = 8888888888.888877DD; + d64_2 = 0.999999DD; + result = DFP64_BINOP(DDTRA, d64_1, d64_2, _Decimal64, d, cc); + printf("dfp64_div: %lx\n", *((unsigned long *) &result)); + /* case 2: result is rounded */ + d64_1 = 88888888888.888877DD; + d64_2 = 0.000003DD; + result = DFP64_BINOP(DDTRA, d64_1, d64_2, _Decimal64, e, cc); + printf("dfp64_div: %lx\n", *((unsigned long *) &result)); +} diff --git a/none/tests/s390x/dfp-1.stderr.exp b/none/tests/s390x/dfp-1.stderr.exp new file mode 100644 index 0000000000..139597f9cb --- /dev/null +++ b/none/tests/s390x/dfp-1.stderr.exp @@ -0,0 +1,2 @@ + + diff --git a/none/tests/s390x/dfp-1.stdout.exp b/none/tests/s390x/dfp-1.stdout.exp new file mode 100644 index 0000000000..9ee6c137a4 --- /dev/null +++ b/none/tests/s390x/dfp-1.stdout.exp @@ -0,0 +1,9 @@ +Decimal floating point 64-bit arithmetic +dfp64_add: 2220ff3fcff3fcff +dfp64_add: 6e24ff3fcff3fcff +dfp64_sub: ee20ff3fcff3fcff +dfp64_sub: ee24ff3fcff3fcff +dfp64_mul: 6e208c0000000000 +dfp64_mul: 6e248c0000000000 +dfp64_div: 6a206ec7ff7fab55 +dfp64_div: 2a3dec7b1ec7b1ed diff --git a/none/tests/s390x/dfp-1.vgtest b/none/tests/s390x/dfp-1.vgtest new file mode 100644 index 0000000000..0423b34adf --- /dev/null +++ b/none/tests/s390x/dfp-1.vgtest @@ -0,0 +1,2 @@ +prog: dfp-1 +prereq: test -e dfp-1 && ../../../tests/s390x_features s390x-dfp