1*d70080c4SJia Liu #include<stdio.h>
2*d70080c4SJia Liu #include<assert.h>
3*d70080c4SJia Liu
main()4*d70080c4SJia Liu int main()
5*d70080c4SJia Liu {
6*d70080c4SJia Liu int rt, rs, ach, acl, dsp, pos, efi;
7*d70080c4SJia Liu int result;
8*d70080c4SJia Liu
9*d70080c4SJia Liu ach = 0x05;
10*d70080c4SJia Liu acl = 0xB4CB;
11*d70080c4SJia Liu dsp = 0x07;
12*d70080c4SJia Liu rs = 0x03;
13*d70080c4SJia Liu result = 0x000C;
14*d70080c4SJia Liu
15*d70080c4SJia Liu __asm
16*d70080c4SJia Liu ("wrdsp %1, 0x01\n\t"
17*d70080c4SJia Liu "mthi %2, $ac1\n\t"
18*d70080c4SJia Liu "mtlo %3, $ac1\n\t"
19*d70080c4SJia Liu "extpdpv %0, $ac1, %4\n\t"
20*d70080c4SJia Liu "rddsp %1\n\t"
21*d70080c4SJia Liu : "=r"(rt), "+r"(dsp)
22*d70080c4SJia Liu : "r"(ach), "r"(acl), "r"(rs)
23*d70080c4SJia Liu );
24*d70080c4SJia Liu pos = dsp & 0x3F;
25*d70080c4SJia Liu efi = (dsp >> 14) & 0x01;
26*d70080c4SJia Liu assert(pos == 3);
27*d70080c4SJia Liu assert(efi == 0);
28*d70080c4SJia Liu assert(result == rt);
29*d70080c4SJia Liu
30*d70080c4SJia Liu ach = 0x05;
31*d70080c4SJia Liu acl = 0xB4CB;
32*d70080c4SJia Liu dsp = 0x01;
33*d70080c4SJia Liu
34*d70080c4SJia Liu __asm
35*d70080c4SJia Liu ("wrdsp %1, 0x01\n\t"
36*d70080c4SJia Liu "mthi %2, $ac1\n\t"
37*d70080c4SJia Liu "mtlo %3, $ac1\n\t"
38*d70080c4SJia Liu "extpdpv %0, $ac1, %4\n\t"
39*d70080c4SJia Liu "rddsp %1\n\t"
40*d70080c4SJia Liu : "=r"(rt), "+r"(dsp)
41*d70080c4SJia Liu : "r"(ach), "r"(acl), "r"(rs)
42*d70080c4SJia Liu );
43*d70080c4SJia Liu efi = (dsp >> 14) & 0x01;
44*d70080c4SJia Liu assert(efi == 1);
45*d70080c4SJia Liu
46*d70080c4SJia Liu return 0;
47*d70080c4SJia Liu }
48