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;
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;
}
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