xref: /openbmc/qemu/tests/tcg/openrisc/test_logic.c (revision dc5bd18f)
1 #include <stdio.h>
2 
3 int main(void)
4 {
5     int a, b, c;
6     int result;
7 
8     b = 0x9743;
9     c = 0x2;
10     result = 0x25d0c;
11     __asm
12     ("l.sll    %0, %1, %2\n\t"
13      : "=r"(a)
14      : "r"(b), "r"(c)
15     );
16     if (a != result) {
17         printf("sll error\n");
18         return -1;
19     }
20 
21     b = 0x9743;
22     result = 0x25d0c;
23     __asm
24     ("l.slli   %0, %1, 0x2\n\t"
25      : "=r"(a)
26      : "r"(b)
27     );
28     if (a != result) {
29         printf("slli error\n");
30         return -1;
31     }
32 
33     b = 0x7654;
34     c = 0x03;
35     result = 0xeca;
36     __asm
37     ("l.srl    %0, %1, %2\n\t"
38      : "=r"(a)
39      : "r"(b), "r"(c)
40     );
41 
42     b = 0x7654;
43     result = 0xeca;
44     __asm
45     ("l.srli   %0, %1, 0x3\n\t"
46      : "=r"(a)
47      : "r"(b)
48     );
49     if (a != result) {
50         printf("srli error\n");
51         return -1;
52     }
53 
54     b = 0x80000001;
55     c = 0x4;
56     result = 0x18000000;
57     __asm
58     ("l.ror    %0, %1, %2\n\t"
59      : "=r"(a)
60      : "r"(b), "r"(c)
61     );
62     if (a != result) {
63         printf("ror error\n");
64         return -1;
65     }
66 
67     b = 0x80000001;
68     result = 0x18000000;
69     __asm
70     ("l.rori   %0, %1, 0x4\n\t"
71      : "=r"(a)
72      : "r"(b)
73     );
74     if (a != result) {
75         printf("rori error\n");
76         return -1;
77     }
78 
79     b = 0x80000001;
80     c = 0x03;
81     result = 0xf0000000;
82     __asm
83     ("l.sra    %0, %1, %2\n\t"
84      : "=r"(a)
85      : "r"(b), "r"(c)
86     );
87     if (a != result) {
88         printf("sra error\n");
89         return -1;
90     }
91 
92     b = 0x80000001;
93     result = 0xf0000000;
94     __asm
95     ("l.srai   %0, %1, 0x3\n\t"
96      : "=r"(a)
97      : "r"(b)
98     );
99     if (a != result) {
100         printf("srai error\n");
101         return -1;
102     }
103 
104     return 0;
105 }
106