1 #include<stdio.h>
2 #include<assert.h>
3
main()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