1 #include<stdio.h>
2 #include<assert.h>
3 
4 int main()
5 {
6     int rs, ach, acl, dsp;
7     int result, resulth, resultl;
8 
9     dsp = 0x07;
10     ach = 0x05;
11     acl = 0xB4CB;
12     rs  = 0x00FFBBAA;
13     resulth = 0xB4CB;
14     resultl = 0x00FFBBAA;
15     result  = 0x27;
16 
17     __asm
18         ("wrdsp %0, 0x01\n\t"
19          "mthi %1, $ac1\n\t"
20          "mtlo %2, $ac1\n\t"
21          "mthlip %3, $ac1\n\t"
22          "mfhi %1, $ac1\n\t"
23          "mflo %2, $ac1\n\t"
24          "rddsp %0\n\t"
25          : "+r"(dsp), "+r"(ach), "+r"(acl)
26          : "r"(rs)
27         );
28     dsp = dsp & 0x3F;
29     assert(dsp == result);
30     assert(ach == resulth);
31     assert(acl == resultl);
32 
33     dsp = 0x1f;
34     ach = 0x05;
35     acl = 0xB4CB;
36     rs  = 0x00FFBBAA;
37     resulth = 0xB4CB;
38     resultl = 0x00FFBBAA;
39     result  = 0x3f;
40 
41     __asm
42         ("wrdsp %0, 0x01\n\t"
43          "mthi %1, $ac1\n\t"
44          "mtlo %2, $ac1\n\t"
45          "mthlip %3, $ac1\n\t"
46          "mfhi %1, $ac1\n\t"
47          "mflo %2, $ac1\n\t"
48          "rddsp %0\n\t"
49          : "+r"(dsp), "+r"(ach), "+r"(acl)
50          : "r"(rs)
51         );
52     dsp = dsp & 0x3F;
53     assert(dsp == result);
54     assert(ach == resulth);
55     assert(acl == resultl);
56 
57     return 0;
58 }
59