1 #include <assert.h>
2 #include <stdint.h>
3
test_dr(void)4 static void test_dr(void)
5 {
6 register int32_t r0 asm("r0") = -1;
7 register int32_t r1 asm("r1") = -4241;
8 int32_t b = 101, q, r;
9
10 asm("dr %[r0],%[b]"
11 : [r0] "+r" (r0), [r1] "+r" (r1)
12 : [b] "r" (b)
13 : "cc");
14 q = r1;
15 r = r0;
16 assert(q == -41);
17 assert(r == -100);
18 }
19
test_dlr(void)20 static void test_dlr(void)
21 {
22 register uint32_t r0 asm("r0") = 0;
23 register uint32_t r1 asm("r1") = 4243;
24 uint32_t b = 101, q, r;
25
26 asm("dlr %[r0],%[b]"
27 : [r0] "+r" (r0), [r1] "+r" (r1)
28 : [b] "r" (b)
29 : "cc");
30 q = r1;
31 r = r0;
32 assert(q == 42);
33 assert(r == 1);
34 }
35
test_dsgr(void)36 static void test_dsgr(void)
37 {
38 register int64_t r0 asm("r0") = -1;
39 register int64_t r1 asm("r1") = -4241;
40 int64_t b = 101, q, r;
41
42 asm("dsgr %[r0],%[b]"
43 : [r0] "+r" (r0), [r1] "+r" (r1)
44 : [b] "r" (b)
45 : "cc");
46 q = r1;
47 r = r0;
48 assert(q == -41);
49 assert(r == -100);
50 }
51
test_dlgr(void)52 static void test_dlgr(void)
53 {
54 register uint64_t r0 asm("r0") = 0;
55 register uint64_t r1 asm("r1") = 4243;
56 uint64_t b = 101, q, r;
57
58 asm("dlgr %[r0],%[b]"
59 : [r0] "+r" (r0), [r1] "+r" (r1)
60 : [b] "r" (b)
61 : "cc");
62 q = r1;
63 r = r0;
64 assert(q == 42);
65 assert(r == 1);
66 }
67
main(void)68 int main(void)
69 {
70 test_dr();
71 test_dlr();
72 test_dsgr();
73 test_dlgr();
74 return 0;
75 }
76