|
From: <sv...@va...> - 2013-01-01 22:20:19
|
florian 2013-01-01 22:20:12 +0000 (Tue, 01 Jan 2013)
New Revision: 13215
Log:
s390: Add testcases for DFP "shift significant" insns.
Patch by Maran Pakkirisamy (ma...@li...).
Part of fixing BZ 307113.
Modified files:
trunk/none/tests/s390x/dfp-2.c
trunk/none/tests/s390x/dfp-2.stdout.exp
Modified: trunk/none/tests/s390x/dfp-2.stdout.exp (+16 -0)
===================================================================
--- trunk/none/tests/s390x/dfp-2.stdout.exp 2012-12-28 15:54:23 +00:00 (rev 13214)
+++ trunk/none/tests/s390x/dfp-2.stdout.exp 2013-01-01 22:20:12 +00:00 (rev 13215)
@@ -10,3 +10,19 @@
LTXTR 2207000000000000000a0005 -> 2
LTXTR a207000000000000000a0005 -> 1
LTXTR 2207c0000000000000000000 -> 0
+SLDT 2224014d2e7971a1 -> 6a26c34400000000
+SLDT a224014d2e7971a1 -> a224a395bcb8c880
+SLDT 2238000000000000 -> 2238000000000000
+SLDT a238000000000000 -> a238000000000000
+SRDT 2224014d2e7971a1 -> 2224000001271778
+SRDT a224014d2e7971a1 -> a22400049c5de2c3
+SRDT 2238000000000000 -> 2238000000000000
+SRDT a238000000000000 -> a238000000000000
+SLXT 2206c0000000000014d2e7971a1 -> 2206c0000000049c5de2c34400000000
+SLXT a206c0000000000014d2e7971a1 -> a206c00000000000a395bcb8c880
+SLXT 220800000000000000000000 -> 220800000000000000000000
+SLXT a20800000000000000000000 -> a20800000000000000000000
+SRXT 2206c0000000000014d2e7971a1 -> 2206c00000000000000000a3
+SRXT a206c0000000000014d2e7971a1 -> a206c0000000000049c5de2c3
+SRXT 220800000000000000000000 -> 220800000000000000000000
+SRXT a20800000000000000000000 -> a20800000000000000000000
Modified: trunk/none/tests/s390x/dfp-2.c (+86 -0)
===================================================================
--- trunk/none/tests/s390x/dfp-2.c 2012-12-28 15:54:23 +00:00 (rev 13214)
+++ trunk/none/tests/s390x/dfp-2.c 2013-01-01 22:20:12 +00:00 (rev 13215)
@@ -54,6 +54,70 @@
printf(" -> %d\n", cc);
}
+void sldt(_Decimal64 in, unsigned long amount)
+{
+ _Decimal64 out;
+ int *shift = (int *) amount;
+
+ asm volatile (".insn rxf, 0xed0000000040, %[out], %[in], 0(%[amount])\n\t"
+ :[out]"=f"(out)
+ :[in]"f"(in),[amount]"a"(shift));
+
+ printf("SLDT ");
+ DFP_VAL_PRINT(in, _Decimal64);
+ printf(" -> ");
+ DFP_VAL_PRINT(out, _Decimal64);
+ printf("\n");
+}
+
+void slxt(_Decimal128 in, unsigned long amount)
+{
+ _Decimal128 out;
+ int *shift = (int *) amount;
+
+ asm volatile (".insn rxf, 0xed0000000048, %[out], %[in], 0(%[amount])\n\t"
+ :[out]"=f"(out)
+ :[in]"f"(in),[amount]"a"(shift));
+
+ printf("SLXT ");
+ DFP_VAL_PRINT(in, _Decimal128);
+ printf(" -> ");
+ DFP_VAL_PRINT(out, _Decimal128);
+ printf("\n");
+}
+
+void srdt(_Decimal64 in, unsigned long amount)
+{
+ _Decimal64 out;
+ int *shift = (int *) amount;
+
+ asm volatile (".insn rxf, 0xed0000000041, %[out], %[in], 0(%[amount])\n\t"
+ :[out]"=f"(out)
+ :[in]"f"(in),[amount]"a"(shift));
+
+ printf("SRDT ");
+ DFP_VAL_PRINT(in, _Decimal64);
+ printf(" -> ");
+ DFP_VAL_PRINT(out, _Decimal64);
+ printf("\n");
+}
+
+void srxt(_Decimal128 in, unsigned long amount)
+{
+ _Decimal128 out;
+ int *shift = (int *) amount;
+
+ asm volatile (".insn rxf, 0xed0000000049, %[out], %[in], 0(%[amount])\n\t"
+ :[out]"=f"(out)
+ :[in]"f"(in),[amount]"a"(shift));
+
+ printf("SRXT ");
+ DFP_VAL_PRINT(in, _Decimal128);
+ printf(" -> ");
+ DFP_VAL_PRINT(out, _Decimal128);
+ printf("\n");
+}
+
int main() {
_Decimal64 d64 = 50.0005DD;
_Decimal128 d128 = 50.0005DL;
@@ -72,5 +136,27 @@
ltxtr(-d128);
ltxtr(0.0DL);
+ d64 = 12345678.54321DD;
+ sldt(d64, 10);
+ sldt(-d64, 2);
+ sldt(0.DD, 2);
+ sldt(-0.DD, 2);
+
+ srdt(d64, 5);
+ srdt(-d64, 2);
+ srdt(0.DD, 2);
+ srdt(-0.DD, 2);
+
+ d128 = 12345678.54321DL;
+ slxt(d128, 10);
+ slxt(-d128, 2);
+ slxt(0.DL, 2);
+ slxt(-0.DL, 2);
+
+ srxt(d128, 10);
+ srxt(-d128, 2);
+ srxt(0.DL, 2);
+ srxt(-0.DL, 2);
+
return 0;
}
|