1 #include<stdio.h>
2 #include<assert.h>
3
main()4 int main()
5 {
6 int rs, rt, dsp;
7 int ach, acl;
8 int resulth, resultl, resultdsp;
9
10 ach = 0x00000005;
11 acl = 0x00000005;
12 rs = 0x00FF00FF;
13 rt = 0x00010002;
14 resulth = 0x00;
15 resultl = 0x7FFFFFFF;
16 resultdsp = 0x01;
17 dsp = 0;
18 __asm
19 ("wrdsp %2\n\t"
20 "mthi %0, $ac1\n\t"
21 "mtlo %1, $ac1\n\t"
22 "dpaqx_sa.w.ph $ac1, %3, %4\n\t"
23 "mfhi %0, $ac1\n\t"
24 "mflo %1, $ac1\n\t"
25 "rddsp %2\n\t"
26 : "+r"(ach), "+r"(acl), "+r"(dsp)
27 : "r"(rs), "r"(rt)
28 );
29 assert(dsp >> (16 + 1) == resultdsp);
30 assert(ach == resulth);
31 assert(acl == resultl);
32
33 ach = 0x00000009;
34 acl = 0x0000000B;
35 rs = 0x800000FF;
36 rt = 0x00018000;
37 resulth = 0x00;
38 resultl = 0x7FFFFFFF;
39 resultdsp = 0x01;
40 dsp = 0;
41 __asm
42 ("wrdsp %2\n\t"
43 "mthi %0, $ac1\n\t"
44 "mtlo %1, $ac1\n\t"
45 "dpaqx_sa.w.ph $ac1, %3, %4\n\t"
46 "mfhi %0, $ac1\n\t"
47 "mflo %1, $ac1\n\t"
48 "rddsp %2\n\t"
49 : "+r"(ach), "+r"(acl), "+r"(dsp)
50 : "r"(rs), "r"(rt)
51 );
52 assert(dsp >> (16 + 1) == resultdsp);
53 assert(ach == resulth);
54 assert(acl == resultl);
55
56 return 0;
57 }
58