master
c 63 lines 1.32 KB
Raw
1 /*
2 * Test the CONVERT TO DECIMAL instruction.
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 #include <assert.h>
7 #include <stdint.h>
8 #include <stdlib.h>
9
10 static uint64_t cvd(int32_t x)
11 {
12 uint64_t ret;
13
14 asm("cvd %[x],%[ret]" : [ret] "=R" (ret) : [x] "r" (x));
15
16 return ret;
17 }
18
19 static uint64_t cvdy(int32_t x)
20 {
21 uint64_t ret;
22
23 asm("cvdy %[x],%[ret]" : [ret] "=T" (ret) : [x] "r" (x));
24
25 return ret;
26 }
27
28 static __uint128_t cvdg(int64_t x)
29 {
30 __uint128_t ret;
31
32 asm("cvdg %[x],%[ret]" : [ret] "=T" (ret) : [x] "r" (x));
33
34 return ret;
35 }
36
37 int main(void)
38 {
39 __uint128_t m = (((__uint128_t)0x9223372036854775) << 16) | 0x8070;
40
41 assert(cvd(0) == 0xc);
42 assert(cvd(1) == 0x1c);
43 assert(cvd(25594) == 0x25594c);
44 assert(cvd(-1) == 0x1d);
45 assert(cvd(0x7fffffff) == 0x2147483647c);
46 assert(cvd(-0x80000000) == 0x2147483648d);
47
48 assert(cvdy(0) == 0xc);
49 assert(cvdy(1) == 0x1c);
50 assert(cvdy(25594) == 0x25594c);
51 assert(cvdy(-1) == 0x1d);
52 assert(cvdy(0x7fffffff) == 0x2147483647c);
53 assert(cvdy(-0x80000000) == 0x2147483648d);
54
55 assert(cvdg(0) == 0xc);
56 assert(cvdg(1) == 0x1c);
57 assert(cvdg(25594) == 0x25594c);
58 assert(cvdg(-1) == 0x1d);
59 assert(cvdg(0x7fffffffffffffff) == (m + 0xc));
60 assert(cvdg(-0x8000000000000000) == (m + 0x1d));
61
62 return EXIT_SUCCESS;
63 }