xref: /openbmc/qemu/tests/tcg/openrisc/test_lx.c (revision 2e1cacfb)
1 #include <stdio.h>
2 
3 int main(void)
4 {
5     int a;
6     int p[50];
7     int result;
8 
9     result = 0x23;
10     __asm
11     ("l.ori r8, r0, 0x123\n\t"
12      "l.sb  0x4 + %1, r8\n\t"
13      "\n\t"
14      "l.lbz %0, 0x4 + %1\n\t"
15      : "=r"(a), "+m"(*p)
16     );
17     if (a != result) {
18         printf("lbz error, %x\n", a);
19         return -1;
20     }
21 
22     result = 0x23;
23     __asm
24     ("l.lbs %0, 0x4 + %1\n\t"
25      : "=r"(a)
26      : "m"(*p)
27     );
28     if (a != result) {
29         printf("lbs error\n");
30         return -1;
31     }
32 
33     result = 0x1111;
34     __asm
35     ("l.ori r8, r0, 0x1111\n\t"
36      "l.sh  0x20 + %1, r8\n\t"
37      "\n\t"
38      "l.lhs %0, 0x20 + %1\n\t"
39      : "=r"(a), "=m"(*p)
40     );
41     if (a != result) {
42         printf("lhs error, %x\n", a);
43         return -1;
44     }
45 
46     result = 0x1111;
47     __asm
48     ("l.lhz %0, 0x20 + %1\n\t"
49      : "=r"(a)
50      : "m"(*p)
51     );
52     if (a != result) {
53         printf("lhz error\n");
54         return -1;
55     }
56 
57     result = 0x1111233;
58     __asm
59     ("l.ori r8, r0, 0x1233\n\t"
60      "l.movhi r1, 0x111\n\t"
61      "l.or  r8, r8, r1\n\t"
62      "l.sw  0x123 + %1, r8\n\t"
63      "\n\t"
64      "l.lws %0, 0x123 + %1\n\t"
65      : "=r"(a), "+m"(*p)
66     );
67     if (a != result) {
68         printf("lws error, %x\n", a);
69         return -1;
70     }
71 
72     result = 0x1111233;
73     __asm
74     ("l.lwz %0, 0x123 + %1\n\t"
75      : "=r"(a)
76      : "m"(*p)
77     );
78     if (a != result) {
79         printf("lwz error\n");
80         return -1;
81     }
82 
83     return 0;
84 }
85